diff --git a/client/package.json b/client/package.json index 1339f6dbb..5bf5cc969 100644 --- a/client/package.json +++ b/client/package.json @@ -15,6 +15,7 @@ "start:ee": "REACT_APP_EDITION=enterprise yarn workspace lowcoder start", "translate": "node --loader ts-node/esm ./scripts/translate.js", "build": "yarn node ./scripts/build.js", + "build:view": "REACT_APP_VIEW_MODE=view yarn workspace lowcoder build", "test": "jest && yarn workspace lowcoder-comps test", "prepare": "yarn workspace lowcoder prepare", "build:core": "yarn workspace lowcoder-core build", diff --git a/client/packages/lowcoder-core/lib/index.cjs b/client/packages/lowcoder-core/lib/index.cjs deleted file mode 100644 index 95905706e..000000000 --- a/client/packages/lowcoder-core/lib/index.cjs +++ /dev/null @@ -1,12244 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var _ = require('lodash'); -var stylis = require('stylis'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var ___default = /*#__PURE__*/_interopDefaultLegacy(_); - -/****************************************************************************** -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; -}; - -function isEqualArgs(args, cacheArgs, equals) { - if (!cacheArgs) { - return false; - } - if (args.length === 0 && cacheArgs.length === 0) { - 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]; })); -} -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]; - if (cache && isEqualArgs(args, cache.args, equals)) { - return cache.result; - } -} -function cache(fn, args, thisObj, fnName, equals) { - var result = getCacheResult(thisObj, fnName, args, equals); - if (result) { - return result.value; - } - var cache = { - id: Symbol("id"), - args: args, - time: Date.now(), - }; - if (!thisObj.__cache) { - thisObj.__cache = {}; - } - thisObj.__cache[fnName] = cache; - var value = fn.apply(thisObj, args); - cache.result = { value: 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]; - } - 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(___default["default"].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, ""); - } - }); - }; - this.record = this.initRecord(); - } - RecursivePerfUtil.prototype.log = function (info, key, log) { - info[key] = log; - }; - RecursivePerfUtil.prototype.perf = function (obj, name, fn) { - { - return fn(___default["default"].noop); - } - }; - return RecursivePerfUtil; -}()); -var 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); - // use cache when equals to the last dependingNodeMap - if (dependingNodeMapEquals(_this.evalCache.dependingNodeMap, dependingNodeMap)) { - return _this.evalCache.value; - } - // initialize cyclic field - _this.evalCache.cyclic = false; - var result = _this.justEval(exposingNodes, methods); - // write cache - _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(); }); - } - return result; - }); - }; - AbstractNode.prototype.hasCycle = function () { - var _a; - return (_a = this.evalCache.cyclic) !== null && _a !== void 0 ? _a : false; - }; - AbstractNode.prototype.dependNames = function () { - return Object.keys(this.dependValues()); - }; - AbstractNode.prototype.isHitEvalCache = function (exposingNodes) { - exposingNodes = exposingNodes !== null && exposingNodes !== void 0 ? exposingNodes : {}; - var 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) { - if (n.type === "wrap") { - nextMap.set(n.delegate, p); - } - else { - nextMap.set(n, p); - } - }); - return nextMap; -} -function setEquals(s1, s2) { - return s2 !== undefined && s1.size === s2.size && Array.from(s2).every(function (v) { return s1.has(v); }); -} -/** - * check whether 2 dependingNodeMaps are equal - * - Node use "===" to check - * - string[] use deep compare to check - * - * @param dependingNodeMap1 first dependingNodeMap - * @param dependingNodeMap2 second dependingNodeMap - * @returns whether equals - */ -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) { - result = result && setEquals(paths, map1.get(node)); - }); - return result; -} - -/** - * 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); - }); - }; - FunctionNode.prototype.justEval = function (exposingNodes, methods) { - return this.func(this.child.evaluate(exposingNodes, methods)); - }; - FunctionNode.prototype.getChildren = function () { - return [this.child]; - }; - FunctionNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - FunctionNode.prototype.fetchInfo = function (exposingNodes, options) { - return this.child.fetchInfo(exposingNodes, options); - }; - __decorate([ - memoized() - ], FunctionNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], FunctionNode.prototype, "fetchInfo", null); - return FunctionNode; -}(AbstractNode)); -function withFunction(child, func) { - return new FunctionNode(child, func); -} - -function addDepend(target, node, paths) { - if (!node) { - return; - } - var 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); }); -} -function addDepends(target, source) { - source === null || source === void 0 ? void 0 : source.forEach(function (paths, node) { return 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) { - addDepends(result, node.filterNodes(exposingNodes)); - }); - return result; - }); - }; - RecordNode.prototype.justEval = function (exposingNodes, methods) { - var _this = this; - return ___default["default"].mapValues(this.children, function (v, key) { - return evalPerfUtil.perf(_this, "eval-".concat(key), function () { return v.evaluate(exposingNodes, methods); }); - }); - }; - RecordNode.prototype.getChildren = function () { - return Object.values(this.children); - }; - RecordNode.prototype.dependValues = function () { - var 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]; - 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); - 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)); -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; - } - CachedNode.prototype.filterNodes = function (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 () { - return [this.child]; - }; - CachedNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - CachedNode.prototype.fetchInfo = function (exposingNodes) { - return this.child.fetchInfo(exposingNodes); - }; - __decorate([ - memoized() - ], CachedNode.prototype, "filterNodes", null); - return CachedNode; -}(AbstractNode)); -function withEvalCache(node) { - var newNode = withFunction(node, function (x) { return x; }); - newNode.evalCache = __assign({}, node.evalCache); - return newNode; -} -/** - * return a new node with two input nodes. - * - if mainNode is never evaled, then (new node).evaluate equals to mainNode.evaluate - * - if mainNode is evaled, then (new node).evaluate equals to minorNode.evaluate - * - * @remarks - * encapsulation logic: 2 nodes -> CachedNode(mainNode)+minorNode -> RecordNode({main, minor}) -> FunctionNode - * - * @warn improper use may cause unexpected behaviour, be careful. - * @param mainNode mainNode - * @param minorNode minorNode - * @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; - if (!mainCachedValue.isCached) { - return mainCachedValue.value; - } - return record.minor; - }); -} - -function toReadableString(value) { - if (value instanceof RegExp) { - return value.toString(); - } - // fix undefined NaN Infinity -Infinity - if (value === undefined || typeof value === "number") { - return value + ""; - } - if (typeof value === "string") { - // without escaping char - return '"' + value + '"'; - } - // FIXME: correctly show `undefined NaN Infinity -Infinity` inside Object, they are within quotes currently - return JSON.stringify(value, function (key, val) { - switch (typeof val) { - case "function": - case "bigint": - case "symbol": - case "undefined": - return val + ""; - case "number": - if (!isFinite(val)) { - return val + ""; - } - } - return val; - }); -} - -var ValueAndMsg = /** @class */ (function () { - function ValueAndMsg(value, msg, extra, midValue) { - this.value = value; - this.msg = msg; - this.extra = extra; - this.midValue = midValue; - } - ValueAndMsg.prototype.hasError = function () { - 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; -}()); - -function dependsErrorMessage(node) { - return "DependencyError: \"".concat(node.unevaledValue, "\" caused a cyclic dependency."); -} -function getErrorMessage(err) { - // todo try to use 'err instanceof EvalTypeError' instead - if (err instanceof TypeError && err.hint) { - return err.hint + "\n" + err.name + ": " + err.message; - } - return err instanceof Error - ? err.name + ": " + err.message - : "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); - 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))); -} -// node2 mostly has one path -function mergeNode(node1, node2) { - if (!node1 || node1 === node2) { - return 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; - record[name] = subNode; - }); - return fromRecord(record); -} -function nodeIsRecord(node) { - return node.type === "record"; -} - -var 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("{{"); - while (start >= 0) { - var i = start + 2; - while (i < input.length && input[i] === "{") - i++; - var 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; - for (; i < maxIndex; i++) { - switch (input[i]) { - case "{": - sum++; - break; - case "}": - sum--; - if (input[i - 1] === "}") { - var offset = Math.min(Math.max(sum, 0), maxStartOffset); - var value = Math.abs(sum - offset); - if (value < minValue || (value === minValue && offset < minOffset)) { - minValue = value; - minOffset = offset; - end = i + 1; - } - } - break; - } - } - segments.push(input.slice(position, start + minOffset), input.slice(start + minOffset, end)); - position = end; - start = nextStart; - } - segments.push(input.slice(position)); - return segments.filter(function (t) { return 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]; - if (isDynamicSegment(segment)) { - addDepends(ret, parseDepends(segment.slice(2, -2), exposingNodes, maxDepth)); - } - } - return ret; -} -function hasCycle(segment, exposingNodes) { - if (!isDynamicSegment(segment)) { - return false; - } - var ret = false; - parseDepends(segment.slice(2, -2), exposingNodes).forEach(function (paths, node) { - ret = ret || node.hasCycle(); - }); - return ret; -} -function changeDependName(unevaledValue, oldName, name, isFunction) { - if (!unevaledValue || !oldName || !name) { - return unevaledValue; - } - if (isFunction) { - return rename(unevaledValue, oldName, name); - } - return getDynamicStringSegments(unevaledValue) - .map(function (segment) { - if (!isDynamicSegment(segment)) { - return segment; - } - return rename(segment, oldName, name); - }) - .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) { - 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); - matched = true; - } - for (var _i = 0, accessors_1 = accessors; _i < accessors_1.length; _i++) { - var accessor = accessors_1[_i]; - if (s.startsWith(origin + accessor)) { - matched = true; - target = target + accessor + s.substring(origin.length + accessor.length); - break; - } - } - if (matched) { - return target; - } - return s; - }); - } - return ret; -} -function getIdentifiers(jsSnippet) { - var ret = []; - var commonReg = /[a-zA-Z_$][a-zA-Z_$0-9.[\]]*/g; - var commonIds = jsSnippet.match(commonReg); - if (commonIds) { - ret.push.apply(ret, 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))); - }); - ret.push.apply(ret, 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 = ___default["default"].toPath(identifier); - var depend = getDependNode(maxDepth ? subpaths.slice(0, maxDepth) : subpaths, exposingNodes); - if (depend) { - addDepend(depends, depend[0], [depend[1]]); - } - }); - return depends; -} -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]; - if (!nodes.hasOwnProperty(subPath) || !subNode) { - break; - } - node = subNode; - path.push(subPath); - if (!nodeIsRecord(node)) { - break; - } - nodes = node.children; - } - return node ? [node, path.join(".")] : undefined; -} - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -var loglevelExports = {}; -var loglevel = { - get exports(){ return loglevelExports; }, - set exports(v){ loglevelExports = v; }, -}; - -/* -* loglevel - https://github.com/pimterry/loglevel -* -* Copyright (c) 2013 Tim Perry -* Licensed under the MIT license. -*/ - -(function (module) { - (function (root, definition) { - if (module.exports) { - module.exports = definition(); - } else { - root.log = definition(); - } - }(commonjsGlobal, function () { - - // Slightly dubious tricks to cut down minimized file size - var noop = function() {}; - var undefinedType = "undefined"; - var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && ( - /Trident\/|MSIE /.test(window.navigator.userAgent) - ); - - var logMethods = [ - "trace", - "debug", - "info", - "warn", - "error" - ]; - - var _loggersByName = {}; - var defaultLogger = null; - - // Cross-browser bind equivalent that works at least back to IE6 - function bindMethod(obj, methodName) { - var method = obj[methodName]; - if (typeof method.bind === 'function') { - return method.bind(obj); - } else { - try { - return Function.prototype.bind.call(method, obj); - } catch (e) { - // Missing bind shim or IE8 + Modernizr, fallback to wrapping - return function() { - return Function.prototype.apply.apply(method, [obj, arguments]); - }; - } - } - } - - // Trace() doesn't print the message in IE, so for that case we need to wrap it - function traceForIE() { - if (console.log) { - if (console.log.apply) { - console.log.apply(console, arguments); - } else { - // In old IE, native console methods themselves don't have apply(). - Function.prototype.apply.apply(console.log, [console, arguments]); - } - } - if (console.trace) console.trace(); - } - - // Build the best logging method possible for this env - // Wherever possible we want to bind, not wrap, to preserve stack traces - function realMethod(methodName) { - if (methodName === 'debug') { - methodName = 'log'; - } - - if (typeof console === undefinedType) { - return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives - } else if (methodName === 'trace' && isIE) { - return traceForIE; - } else if (console[methodName] !== undefined) { - return bindMethod(console, methodName); - } else if (console.log !== undefined) { - return bindMethod(console, 'log'); - } else { - return noop; - } - } - - // These private functions always need `this` to be set properly - - function replaceLoggingMethods() { - /*jshint validthis:true */ - var level = this.getLevel(); - - // Replace the actual methods. - for (var i = 0; i < logMethods.length; i++) { - var methodName = logMethods[i]; - this[methodName] = (i < level) ? - noop : - this.methodFactory(methodName, level, this.name); - } - - // Define log.log as an alias for log.debug - this.log = this.debug; - - // Return any important warnings. - if (typeof console === undefinedType && level < this.levels.SILENT) { - return "No console available for logging"; - } - } - - // In old IE versions, the console isn't present until you first open it. - // We build realMethod() replacements here that regenerate logging methods - function enableLoggingWhenConsoleArrives(methodName) { - return function () { - if (typeof console !== undefinedType) { - replaceLoggingMethods.call(this); - this[methodName].apply(this, arguments); - } - }; - } - - // By default, we use closely bound real methods wherever possible, and - // otherwise we wait for a console to appear, and then try again. - function defaultMethodFactory(methodName, _level, _loggerName) { - /*jshint validthis:true */ - return realMethod(methodName) || - enableLoggingWhenConsoleArrives.apply(this, arguments); - } - - function Logger(name, factory) { - // Private instance variables. - var self = this; - /** - * The level inherited from a parent logger (or a global default). We - * cache this here rather than delegating to the parent so that it stays - * in sync with the actual logging methods that we have installed (the - * parent could change levels but we might not have rebuilt the loggers - * in this child yet). - * @type {number} - */ - var inheritedLevel; - /** - * The default level for this logger, if any. If set, this overrides - * `inheritedLevel`. - * @type {number|null} - */ - var defaultLevel; - /** - * A user-specific level for this logger. If set, this overrides - * `defaultLevel`. - * @type {number|null} - */ - var userLevel; - - var storageKey = "loglevel"; - if (typeof name === "string") { - storageKey += ":" + name; - } else if (typeof name === "symbol") { - storageKey = undefined; - } - - function persistLevelIfPossible(levelNum) { - var levelName = (logMethods[levelNum] || 'silent').toUpperCase(); - - if (typeof window === undefinedType || !storageKey) return; - - // Use localStorage if available - try { - window.localStorage[storageKey] = levelName; - return; - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=" + levelName + ";"; - } catch (ignore) {} - } - - function getPersistedLevel() { - var storedLevel; - - if (typeof window === undefinedType || !storageKey) return; - - try { - storedLevel = window.localStorage[storageKey]; - } catch (ignore) {} - - // Fallback to cookies if local storage gives us nothing - if (typeof storedLevel === undefinedType) { - try { - var cookie = window.document.cookie; - var cookieName = encodeURIComponent(storageKey); - var location = cookie.indexOf(cookieName + "="); - if (location !== -1) { - storedLevel = /^([^;]+)/.exec( - cookie.slice(location + cookieName.length + 1) - )[1]; - } - } catch (ignore) {} - } - - // If the stored level is not valid, treat it as if nothing was stored. - if (self.levels[storedLevel] === undefined) { - storedLevel = undefined; - } - - return storedLevel; - } - - function clearPersistedLevel() { - if (typeof window === undefinedType || !storageKey) return; - - // Use localStorage if available - try { - window.localStorage.removeItem(storageKey); - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC"; - } catch (ignore) {} - } - - function normalizeLevel(input) { - var level = input; - if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) { - level = self.levels[level.toUpperCase()]; - } - if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { - return level; - } else { - throw new TypeError("log.setLevel() called with invalid level: " + input); - } - } - - /* - * - * Public logger API - see https://github.com/pimterry/loglevel for details - * - */ - - self.name = name; - - self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, - "ERROR": 4, "SILENT": 5}; - - self.methodFactory = factory || defaultMethodFactory; - - self.getLevel = function () { - if (userLevel != null) { - return userLevel; - } else if (defaultLevel != null) { - return defaultLevel; - } else { - return inheritedLevel; - } - }; - - self.setLevel = function (level, persist) { - userLevel = normalizeLevel(level); - if (persist !== false) { // defaults to true - persistLevelIfPossible(userLevel); - } - - // NOTE: in v2, this should call rebuild(), which updates children. - return replaceLoggingMethods.call(self); - }; - - self.setDefaultLevel = function (level) { - defaultLevel = normalizeLevel(level); - if (!getPersistedLevel()) { - self.setLevel(level, false); - } - }; - - self.resetLevel = function () { - userLevel = null; - clearPersistedLevel(); - replaceLoggingMethods.call(self); - }; - - self.enableAll = function(persist) { - self.setLevel(self.levels.TRACE, persist); - }; - - self.disableAll = function(persist) { - self.setLevel(self.levels.SILENT, persist); - }; - - self.rebuild = function () { - if (defaultLogger !== self) { - inheritedLevel = normalizeLevel(defaultLogger.getLevel()); - } - replaceLoggingMethods.call(self); - - if (defaultLogger === self) { - for (var childName in _loggersByName) { - _loggersByName[childName].rebuild(); - } - } - }; - - // Initialize all the internal levels. - inheritedLevel = normalizeLevel( - defaultLogger ? defaultLogger.getLevel() : "WARN" - ); - var initialLevel = getPersistedLevel(); - if (initialLevel != null) { - userLevel = normalizeLevel(initialLevel); - } - replaceLoggingMethods.call(self); - } - - /* - * - * Top-level API - * - */ - - defaultLogger = new Logger(); - - defaultLogger.getLogger = function getLogger(name) { - if ((typeof name !== "symbol" && typeof name !== "string") || name === "") { - throw new TypeError("You must supply a name when creating a logger."); - } - - var logger = _loggersByName[name]; - if (!logger) { - logger = _loggersByName[name] = new Logger( - name, - defaultLogger.methodFactory - ); - } - return logger; - }; - - // Grab the current global log variable in case of overwrite - var _log = (typeof window !== undefinedType) ? window.log : undefined; - defaultLogger.noConflict = function() { - if (typeof window !== undefinedType && - window.log === defaultLogger) { - window.log = _log; - } - - return defaultLogger; - }; - - defaultLogger.getLoggers = function getLoggers() { - return _loggersByName; - }; - - // ES6 default export, for compatibility - defaultLogger['default'] = defaultLogger; - - return defaultLogger; - })); -} (loglevel)); - -var log = loglevelExports; - -// global variables black list, forbidden to use in for jsQuery/jsAction -var functionBlacklist = new Set([ - "top", - "parent", - "document", - "location", - "chrome", - "fetch", - "XMLHttpRequest", - "importScripts", - "Navigator", - "MutationObserver", -]); -var expressionBlacklist = new Set(__spreadArray(__spreadArray([], Array.from(functionBlacklist.values()), true), [ - "setTimeout", - "setInterval", - "setImmediate", -], false)); -var globalVarNames = new Set(["window", "globalThis", "self", "global"]); -function createBlackHole() { - return new Proxy(function () { - return createBlackHole(); - }, { - get: function (t, p, r) { - if (p === "toString") { - return function () { - return ""; - }; - } - if (p === Symbol.toPrimitive) { - return function () { - return ""; - }; - } - log.log("[Sandbox] access ".concat(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 () { - return true; - }, - set: function (target, p, newValue) { - if (typeof p === "string") { - onSet === null || onSet === void 0 ? void 0 : onSet(p); - } - return Reflect.set(target, p, newValue); - }, - get: function (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")); - return createBlackHole(); - } - return getPropertyFromNativeWindow(p); - }, - }); - return win; -} -var mockWindow; -var currentDisableLimit = false; -function clearMockWindow() { - mockWindow = createMockWindow(); -} -function isDomElement(obj) { - return obj instanceof Element || obj instanceof HTMLCollection; -} -function getPropertyFromNativeWindow(prop) { - var ret = Reflect.get(window, prop); - if (typeof ret === "function" && !ret.prototype) { - return ret.bind(window); - } - // get DOM element by id, serializing may cause error - if (isDomElement(ret)) { - return undefined; - } - 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) { - return key in context || key in (methods || {}) || globalVarNames.has(key); - }; - var cache = {}; - var 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) { - // proxy all variables - return true; - }, - get: function (target, p, receiver) { - if (p === Symbol.unscopables) { - return undefined; - } - if (p === "toJSON") { - return target; - } - if (globalVarNames.has(p)) { - return target; - } - if (p in context) { - if (p in cache) { - return Reflect.get(cache, p); - } - var 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)); - } - Object.freeze(value); - Object.values(value).forEach(Object.freeze); - } - Reflect.set(cache, p, value); - return value; - } - if (disableLimit) { - return getPropertyFromNativeWindow(p); - } - return Reflect.get(target, p, receiver); - }, - set: function (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) { - if (isProtectedVar(p)) { - throw new Error("can't define property:" + p.toString()); - } - return Reflect.defineProperty(target, p, attributes); - }, - deleteProperty: function (target, p) { - if (isProtectedVar(p)) { - throw new Error("can't delete property:" + p.toString()); - } - return Reflect.deleteProperty(target, p); - }, - setPrototypeOf: function (target, v) { - throw new Error("can't invoke setPrototypeOf"); - }, - }); -} -function evalScript(script, context, methods) { - return evalFunc("return (".concat(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 }"); - // eslint-disable-next-line no-new-func - var vm = new Function(code); - var sandbox = proxySandbox(context, methods, options); - var result = vm.call(sandbox); - return result; -} - -var srcExports = {}; -var src = { - get exports(){ return srcExports; }, - set exports(v){ srcExports = v; }, -}; - -var umd_bundleExports = {}; -var umd_bundle = { - get exports(){ return umd_bundleExports; }, - set exports(v){ umd_bundleExports = v; }, -}; - -/* - * The MIT License (MIT) - * - * Copyright (c) 2018-2022 TwelveTone LLC - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -(function (module, exports) { - !function(t,e){module.exports=e();}(commonjsGlobal,(()=>{return t={421:function(t,e){var n,r;n=function(t){var e=t;t.isBooleanArray=function(t){return (Array.isArray(t)||t instanceof Int8Array)&&"BooleanArray"===t.$type$},t.isByteArray=function(t){return t instanceof Int8Array&&"BooleanArray"!==t.$type$},t.isShortArray=function(t){return t instanceof Int16Array},t.isCharArray=function(t){return t instanceof Uint16Array&&"CharArray"===t.$type$},t.isIntArray=function(t){return t instanceof Int32Array},t.isFloatArray=function(t){return t instanceof Float32Array},t.isDoubleArray=function(t){return t instanceof Float64Array},t.isLongArray=function(t){return Array.isArray(t)&&"LongArray"===t.$type$},t.isArray=function(t){return Array.isArray(t)&&!t.$type$},t.isArrayish=function(t){return Array.isArray(t)||ArrayBuffer.isView(t)},t.arrayToString=function(e){if(null===e)return "null";var n=t.isCharArray(e)?String.fromCharCode:t.toString;return "["+Array.prototype.map.call(e,(function(t){return n(t)})).join(", ")+"]"},t.toByte=function(t){return (255&t)<<24>>24},t.toChar=function(t){return 65535&t},t.toBoxedChar=function(e){return null==e||e instanceof t.BoxedChar?e:new t.BoxedChar(e)},t.unboxChar=function(e){return null==e?e:t.toChar(e)},t.equals=function(t,e){return null==t?null==e:null!=e&&(t!=t?e!=e:"object"==typeof t&&"function"==typeof t.equals?t.equals(e):"number"==typeof t&&"number"==typeof e?t===e&&(0!==t||1/t==1/e):t===e)},t.hashCode=function(e){if(null==e)return 0;var n=typeof e;return "object"===n?"function"==typeof e.hashCode?e.hashCode():c(e):"function"===n?c(e):"number"===n?t.numberHashCode(e):"boolean"===n?Number(e):function(t){for(var e=0,n=0;n=t.Long.TWO_PWR_63_DBL_?t.Long.MAX_VALUE:e<0?t.Long.fromNumber(-e).negate():new t.Long(e%t.Long.TWO_PWR_32_DBL_|0,e/t.Long.TWO_PWR_32_DBL_|0)},t.Long.fromBits=function(e,n){return new t.Long(e,n)},t.Long.fromString=function(e,n){if(0==e.length)throw Error("number format error: empty string");var r=n||10;if(r<2||36=0)throw Error('number format error: interior "-" character: '+e);for(var i=t.Long.fromNumber(Math.pow(r,8)),o=t.Long.ZERO,a=0;a=0?this.low_:t.Long.TWO_PWR_32_DBL_+this.low_},t.Long.prototype.getNumBitsAbs=function(){if(this.isNegative())return this.equalsLong(t.Long.MIN_VALUE)?64:this.negate().getNumBitsAbs();for(var e=0!=this.high_?this.high_:this.low_,n=31;n>0&&0==(e&1<0},t.Long.prototype.greaterThanOrEqual=function(t){return this.compare(t)>=0},t.Long.prototype.compare=function(t){if(this.equalsLong(t))return 0;var e=this.isNegative(),n=t.isNegative();return e&&!n?-1:!e&&n?1:this.subtract(t).isNegative()?-1:1},t.Long.prototype.negate=function(){return this.equalsLong(t.Long.MIN_VALUE)?t.Long.MIN_VALUE:this.not().add(t.Long.ONE)},t.Long.prototype.add=function(e){var n=this.high_>>>16,r=65535&this.high_,i=this.low_>>>16,o=65535&this.low_,a=e.high_>>>16,s=65535&e.high_,u=e.low_>>>16,p=0,c=0,l=0,h=0;return l+=(h+=o+(65535&e.low_))>>>16,h&=65535,c+=(l+=i+u)>>>16,l&=65535,p+=(c+=r+s)>>>16,c&=65535,p+=n+a,p&=65535,t.Long.fromBits(l<<16|h,p<<16|c)},t.Long.prototype.subtract=function(t){return this.add(t.negate())},t.Long.prototype.multiply=function(e){if(this.isZero())return t.Long.ZERO;if(e.isZero())return t.Long.ZERO;if(this.equalsLong(t.Long.MIN_VALUE))return e.isOdd()?t.Long.MIN_VALUE:t.Long.ZERO;if(e.equalsLong(t.Long.MIN_VALUE))return this.isOdd()?t.Long.MIN_VALUE:t.Long.ZERO;if(this.isNegative())return e.isNegative()?this.negate().multiply(e.negate()):this.negate().multiply(e).negate();if(e.isNegative())return this.multiply(e.negate()).negate();if(this.lessThan(t.Long.TWO_PWR_24_)&&e.lessThan(t.Long.TWO_PWR_24_))return t.Long.fromNumber(this.toNumber()*e.toNumber());var n=this.high_>>>16,r=65535&this.high_,i=this.low_>>>16,o=65535&this.low_,a=e.high_>>>16,s=65535&e.high_,u=e.low_>>>16,p=65535&e.low_,c=0,l=0,h=0,f=0;return h+=(f+=o*p)>>>16,f&=65535,l+=(h+=i*p)>>>16,h&=65535,l+=(h+=o*u)>>>16,h&=65535,c+=(l+=r*p)>>>16,l&=65535,c+=(l+=i*u)>>>16,l&=65535,c+=(l+=o*s)>>>16,l&=65535,c+=n*p+r*u+i*s+o*a,c&=65535,t.Long.fromBits(h<<16|f,c<<16|l)},t.Long.prototype.div=function(e){if(e.isZero())throw Error("division by zero");if(this.isZero())return t.Long.ZERO;if(this.equalsLong(t.Long.MIN_VALUE)){if(e.equalsLong(t.Long.ONE)||e.equalsLong(t.Long.NEG_ONE))return t.Long.MIN_VALUE;if(e.equalsLong(t.Long.MIN_VALUE))return t.Long.ONE;if((i=this.shiftRight(1).div(e).shiftLeft(1)).equalsLong(t.Long.ZERO))return e.isNegative()?t.Long.ONE:t.Long.NEG_ONE;var n=this.subtract(e.multiply(i));return i.add(n.div(e))}if(e.equalsLong(t.Long.MIN_VALUE))return t.Long.ZERO;if(this.isNegative())return e.isNegative()?this.negate().div(e.negate()):this.negate().div(e).negate();if(e.isNegative())return this.div(e.negate()).negate();var r=t.Long.ZERO;for(n=this;n.greaterThanOrEqual(e);){for(var i=Math.max(1,Math.floor(n.toNumber()/e.toNumber())),o=Math.ceil(Math.log(i)/Math.LN2),a=o<=48?1:Math.pow(2,o-48),s=t.Long.fromNumber(i),u=s.multiply(e);u.isNegative()||u.greaterThan(n);)i-=a,u=(s=t.Long.fromNumber(i)).multiply(e);s.isZero()&&(s=t.Long.ONE),r=r.add(s),n=n.subtract(u);}return r},t.Long.prototype.modulo=function(t){return this.subtract(this.div(t).multiply(t))},t.Long.prototype.not=function(){return t.Long.fromBits(~this.low_,~this.high_)},t.Long.prototype.and=function(e){return t.Long.fromBits(this.low_&e.low_,this.high_&e.high_)},t.Long.prototype.or=function(e){return t.Long.fromBits(this.low_|e.low_,this.high_|e.high_)},t.Long.prototype.xor=function(e){return t.Long.fromBits(this.low_^e.low_,this.high_^e.high_)},t.Long.prototype.shiftLeft=function(e){if(0==(e&=63))return this;var n=this.low_;if(e<32){var r=this.high_;return t.Long.fromBits(n<>>32-e)}return t.Long.fromBits(0,n<>>e|n<<32-e,n>>e)}return t.Long.fromBits(n>>e-32,n>=0?0:-1)},t.Long.prototype.shiftRightUnsigned=function(e){if(0==(e&=63))return this;var n=this.high_;if(e<32){var r=this.low_;return t.Long.fromBits(r>>>e|n<<32-e,n>>>e)}return 32==e?t.Long.fromBits(n,0):t.Long.fromBits(n>>>e-32,0)},t.Long.prototype.equals=function(e){return e instanceof t.Long&&this.equalsLong(e)},t.Long.prototype.compareTo_11rb$=t.Long.prototype.compare,t.Long.prototype.inc=function(){return this.add(t.Long.ONE)},t.Long.prototype.dec=function(){return this.add(t.Long.NEG_ONE)},t.Long.prototype.valueOf=function(){return this.toNumber()},t.Long.prototype.unaryPlus=function(){return this},t.Long.prototype.unaryMinus=t.Long.prototype.negate,t.Long.prototype.inv=t.Long.prototype.not,t.Long.prototype.rangeTo=function(e){return new t.kotlin.ranges.LongRange(this,e)},t.defineInlineFunction=function(t,e){return e},t.wrapFunction=function(t){var e=function(){return (e=t()).apply(this,arguments)};return function(){return e.apply(this,arguments)}},t.suspendCall=function(t){return t},t.coroutineResult=function(t){l();},t.coroutineReceiver=function(t){l();},t.compareTo=function(e,n){var r=typeof e;return "number"===r?"number"==typeof n?t.doubleCompareTo(e,n):t.primitiveCompareTo(e,n):"string"===r||"boolean"===r?t.primitiveCompareTo(e,n):e.compareTo_11rb$(n)},t.primitiveCompareTo=function(t,e){return te?1:0},t.doubleCompareTo=function(t,e){if(te)return 1;if(t===e){if(0!==t)return 0;var n=1/t;return n===1/e?0:n<0?-1:1}return t!=t?e!=e?0:1:-1},t.imul=Math.imul||h,t.imulEmulated=h,n=new ArrayBuffer(8),r=new Float64Array(n),i=new Int32Array(n),o=0,a=1,r[0]=-1,0!==i[o]&&(o=1,a=0),t.numberHashCode=function(t){return (0|t)===t?0|t:(r[0]=t,(31*i[a]|0)+i[o]|0)},t.ensureNotNull=function(e){return null!=e?e:t.throwNPE()},void 0===String.prototype.startsWith&&Object.defineProperty(String.prototype,"startsWith",{value:function(t,e){return e=e||0,this.lastIndexOf(t,e)===e}}),void 0===String.prototype.endsWith&&Object.defineProperty(String.prototype,"endsWith",{value:function(t,e){var n=this.toString();(void 0===e||e>n.length)&&(e=n.length),e-=t.length;var r=n.indexOf(t,e);return -1!==r&&r===e}}),void 0===Math.sign&&(Math.sign=function(t){return 0==(t=+t)||isNaN(t)?Number(t):t>0?1:-1}),void 0===Math.trunc&&(Math.trunc=function(t){return isNaN(t)?NaN:t>0?Math.floor(t):Math.ceil(t)}),function(){var t=Math.sqrt(2220446049250313e-31),e=Math.sqrt(t),n=1/t,r=1/e;if(void 0===Math.sinh&&(Math.sinh=function(n){if(Math.abs(n)t&&(r+=n*n*n/6),r}var i=Math.exp(n),o=1/i;return isFinite(i)?isFinite(o)?(i-o)/2:-Math.exp(-n-Math.LN2):Math.exp(n-Math.LN2)}),void 0===Math.cosh&&(Math.cosh=function(t){var e=Math.exp(t),n=1/e;return isFinite(e)&&isFinite(n)?(e+n)/2:Math.exp(Math.abs(t)-Math.LN2)}),void 0===Math.tanh&&(Math.tanh=function(n){if(Math.abs(n)t&&(r-=n*n*n/3),r}var i=Math.exp(+n),o=Math.exp(-n);return i===1/0?1:o===1/0?-1:(i-o)/(i+o)}),void 0===Math.asinh){var i=function(o){if(o>=+e)return o>r?o>n?Math.log(o)+Math.LN2:Math.log(2*o+1/(2*o)):Math.log(o+Math.sqrt(o*o+1));if(o<=-e)return -i(-o);var a=o;return Math.abs(o)>=t&&(a-=o*o*o/6),a};Math.asinh=i;}void 0===Math.acosh&&(Math.acosh=function(r){if(r<1)return NaN;if(r-1>=e)return r>n?Math.log(r)+Math.LN2:Math.log(r+Math.sqrt(r*r-1));var i=Math.sqrt(r-1),o=i;return i>=t&&(o-=i*i*i/12),Math.sqrt(2)*o}),void 0===Math.atanh&&(Math.atanh=function(n){if(Math.abs(n)t&&(r+=n*n*n/3),r}return Math.log((1+n)/(1-n))/2}),void 0===Math.log1p&&(Math.log1p=function(t){if(Math.abs(t)>>0;return 0===e?32:31-(s(e)/u|0)|0})),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===Array.prototype.fill&&Object.defineProperty(Array.prototype,"fill",{value:function(t){if(null==this)throw new TypeError("this is null or not defined");for(var e=Object(this),n=e.length>>>0,r=arguments[1]>>0,i=r<0?Math.max(n+r,0):Math.min(r,n),o=arguments[2],a=void 0===o?n:o>>0,s=a<0?Math.max(n+a,0):Math.min(a,n);ie)return 1;if(t===e){if(0!==t)return 0;var n=1/t;return n===1/e?0:n<0?-1:1}return t!=t?e!=e?0:1:-1};for(r=0;r=0}function E(t,e){if(null==e){for(var n=0;n!==t.length;++n)if(null==t[n])return n}else for(var r=0;r!==t.length;++r)if(o(e,t[r]))return r;return -1}function A(t,e){for(var n=0;n!==t.length;++n)if(e===t[n])return n;return -1}function z(t,e){var n,r;if(null==e)for(n=Z(L(t)).iterator();n.hasNext();){var i=n.next();if(null==t[i])return i}else for(r=Z(L(t)).iterator();r.hasNext();){var a=r.next();if(o(e,t[a]))return a}return -1}function j(t){var e;switch(t.length){case 0:throw new Ft("Array is empty.");case 1:e=t[0];break;default:throw zt("Array has more than one element.")}return e}function L(t){return new mo(0,T(t))}function T(t){return t.length-1|0}function M(t,e){var n;for(n=0;n!==t.length;++n){var r=t[n];e.add_11rb$(r);}return e}function R(t){var e;switch(t.length){case 0:e=Ei();break;case 1:e=ee(t[0]);break;default:e=M(t,Ke(t.length));}return e}function P(t){this.closure$iterator=t;}function q(e,n){return t.isType(e,nt)?e.contains_11rb$(n):B(e,n)>=0}function B(e,n){var r;if(t.isType(e,it))return e.indexOf_11rb$(n);var i=0;for(r=e.iterator();r.hasNext();){var a=r.next();if(re(i),o(n,a))return i;i=i+1|0;}return -1}function U(t,e){var n;for(n=t.iterator();n.hasNext();){var r=n.next();e.add_11rb$(r);}return e}function F(e){var n;if(t.isType(e,nt)){switch(e.size){case 0:n=Ei();break;case 1:n=ee(t.isType(e,it)?e.get_za3lpa$(0):e.iterator().next());break;default:n=U(e,Ke(e.size));}return n}return zi(U(e,Ve()))}function D(t,e,n,r,i,o,a,s){var u;void 0===n&&(n=", "),void 0===r&&(r=""),void 0===i&&(i=""),void 0===o&&(o=-1),void 0===a&&(a="..."),void 0===s&&(s=null),e.append_gw00v9$(r);var p=0;for(u=t.iterator();u.hasNext();){var c=u.next();if((p=p+1|0)>1&&e.append_gw00v9$(n),!(o<0||p<=o))break;Wo(e,c,s);}return o>=0&&p>o&&e.append_gw00v9$(a),e.append_gw00v9$(i),e}function V(t,e,n,r,i,o,a){return void 0===e&&(e=", "),void 0===n&&(n=""),void 0===r&&(r=""),void 0===i&&(i=-1),void 0===o&&(o="..."),void 0===a&&(a=null),D(t,Jn(),e,n,r,i,o,a).toString()}function W(t){return new P((e=t,function(){return e.iterator()}));var e;}function K(t,e){return To().fromClosedRange_qt1dr2$(t,e,-1)}function Z(t){return To().fromClosedRange_qt1dr2$(t.last,t.first,0|-t.step)}function H(t,e){return te?e:t}function G(e,n){if(!(n>=0))throw zt(("Requested element count "+n+" is less than zero.").toString());return 0===n?li():t.isType(e,gi)?e.take_za3lpa$(n):new xi(e,n)}function Q(t,e){return new yi(t,e)}function Y(){}function X(){}function tt(){}function et(){}function nt(){}function rt(){}function it(){}function ot(){}function at(){}function st(){}function ut(){}function pt(){}function ct(){}function lt(){}function ht(){}function ft(){}function _t(){}function yt(){}function dt(){mt=this;}new t.Long(1,-2147483648),new t.Long(1908874354,-59652324),new t.Long(1,-1073741824),new t.Long(1108857478,-1074),t.Long.fromInt(-2147483647),new t.Long(2077252342,2147),new t.Long(-2077252342,-2148),new t.Long(1316134911,2328),new t.Long(387905,-1073741824),new t.Long(-387905,1073741823),new t.Long(-1,1073741823),new t.Long(-1108857478,1073),t.Long.fromInt(2047),St.prototype=Object.create(x.prototype),St.prototype.constructor=St,It.prototype=Object.create(St.prototype),It.prototype.constructor=It,Ot.prototype=Object.create(x.prototype),Ot.prototype.constructor=Ot,At.prototype=Object.create(It.prototype),At.prototype.constructor=At,jt.prototype=Object.create(It.prototype),jt.prototype.constructor=jt,Tt.prototype=Object.create(It.prototype),Tt.prototype.constructor=Tt,Mt.prototype=Object.create(It.prototype),Mt.prototype.constructor=Mt,qt.prototype=Object.create(At.prototype),qt.prototype.constructor=qt,Bt.prototype=Object.create(It.prototype),Bt.prototype.constructor=Bt,Ut.prototype=Object.create(It.prototype),Ut.prototype.constructor=Ut,Ft.prototype=Object.create(It.prototype),Ft.prototype.constructor=Ft,Vt.prototype=Object.create(It.prototype),Vt.prototype.constructor=Vt,Cr.prototype=Object.create(kr.prototype),Cr.prototype.constructor=Cr,oe.prototype=Object.create(kr.prototype),oe.prototype.constructor=oe,ue.prototype=Object.create(se.prototype),ue.prototype.constructor=ue,ae.prototype=Object.create(oe.prototype),ae.prototype.constructor=ae,pe.prototype=Object.create(ae.prototype),pe.prototype.constructor=pe,me.prototype=Object.create(oe.prototype),me.prototype.constructor=me,he.prototype=Object.create(me.prototype),he.prototype.constructor=he,fe.prototype=Object.create(me.prototype),fe.prototype.constructor=fe,ye.prototype=Object.create(oe.prototype),ye.prototype.constructor=ye,ce.prototype=Object.create(zr.prototype),ce.prototype.constructor=ce,$e.prototype=Object.create(ae.prototype),$e.prototype.constructor=$e,Ce.prototype=Object.create(he.prototype),Ce.prototype.constructor=Ce,ke.prototype=Object.create(ce.prototype),ke.prototype.constructor=ke,Ie.prototype=Object.create(me.prototype),Ie.prototype.constructor=Ie,Pe.prototype=Object.create(le.prototype),Pe.prototype.constructor=Pe,qe.prototype=Object.create(he.prototype),qe.prototype.constructor=qe,Re.prototype=Object.create(ke.prototype),Re.prototype.constructor=Re,De.prototype=Object.create(Ie.prototype),De.prototype.constructor=De,Je.prototype=Object.create(He.prototype),Je.prototype.constructor=Je,Ge.prototype=Object.create(He.prototype),Ge.prototype.constructor=Ge,Qe.prototype=Object.create(Ge.prototype),Qe.prototype.constructor=Qe,sn.prototype=Object.create(an.prototype),sn.prototype.constructor=sn,un.prototype=Object.create(an.prototype),un.prototype.constructor=un,pn.prototype=Object.create(an.prototype),pn.prototype.constructor=pn,_r.prototype=Object.create(Cr.prototype),_r.prototype.constructor=_r,yr.prototype=Object.create(kr.prototype),yr.prototype.constructor=yr,Or.prototype=Object.create(Cr.prototype),Or.prototype.constructor=Or,Sr.prototype=Object.create(Nr.prototype),Sr.prototype.constructor=Sr,Br.prototype=Object.create(kr.prototype),Br.prototype.constructor=Br,jr.prototype=Object.create(Br.prototype),jr.prototype.constructor=jr,Tr.prototype=Object.create(kr.prototype),Tr.prototype.constructor=Tr,ci.prototype=Object.create(pi.prototype),ci.prototype.constructor=ci,eo.prototype=Object.create($.prototype),eo.prototype.constructor=eo,ho.prototype=Object.create(So.prototype),ho.prototype.constructor=ho,mo.prototype=Object.create(zo.prototype),mo.prototype.constructor=mo,bo.prototype=Object.create(Mo.prototype),bo.prototype.constructor=bo,Co.prototype=Object.create(ni.prototype),Co.prototype.constructor=Co,Oo.prototype=Object.create(ri.prototype),Oo.prototype.constructor=Oo,No.prototype=Object.create(ii.prototype),No.prototype.constructor=No,Yo.prototype=Object.create(ni.prototype),Yo.prototype.constructor=Yo,Ca.prototype=Object.create(Ot.prototype),Ca.prototype.constructor=Ca,P.prototype.iterator=function(){return this.closure$iterator()},P.$metadata$={kind:n,interfaces:[oi]},Y.$metadata$={kind:d,simpleName:"Annotation",interfaces:[]},X.$metadata$={kind:d,simpleName:"CharSequence",interfaces:[]},tt.$metadata$={kind:d,simpleName:"Iterable",interfaces:[]},et.$metadata$={kind:d,simpleName:"MutableIterable",interfaces:[tt]},nt.$metadata$={kind:d,simpleName:"Collection",interfaces:[tt]},rt.$metadata$={kind:d,simpleName:"MutableCollection",interfaces:[et,nt]},it.$metadata$={kind:d,simpleName:"List",interfaces:[nt]},ot.$metadata$={kind:d,simpleName:"MutableList",interfaces:[rt,it]},at.$metadata$={kind:d,simpleName:"Set",interfaces:[nt]},st.$metadata$={kind:d,simpleName:"MutableSet",interfaces:[rt,at]},ut.prototype.getOrDefault_xwzc9p$=function(t,e){throw new Ca},pt.$metadata$={kind:d,simpleName:"Entry",interfaces:[]},ut.$metadata$={kind:d,simpleName:"Map",interfaces:[]},ct.prototype.remove_xwzc9p$=function(t,e){return !0},lt.$metadata$={kind:d,simpleName:"MutableEntry",interfaces:[pt]},ct.$metadata$={kind:d,simpleName:"MutableMap",interfaces:[ut]},ht.$metadata$={kind:d,simpleName:"Iterator",interfaces:[]},ft.$metadata$={kind:d,simpleName:"MutableIterator",interfaces:[ht]},_t.$metadata$={kind:d,simpleName:"ListIterator",interfaces:[ht]},yt.$metadata$={kind:d,simpleName:"MutableListIterator",interfaces:[ft,_t]},dt.prototype.toString=function(){return "kotlin.Unit"},dt.$metadata$={kind:m,simpleName:"Unit",interfaces:[]};var mt=null;function $t(){return null===mt&&new dt,mt}function gt(t){this.c=t;}function vt(t){this.resultContinuation_0=t,this.state_0=0,this.exceptionState_0=0,this.result_0=null,this.exception_0=null,this.finallyPath_0=null,this.context_hxcuhl$_0=this.resultContinuation_0.context,this.intercepted__0=null;}function bt(){xt=this;}gt.prototype.equals=function(e){return t.isType(e,gt)&&this.c===e.c},gt.prototype.hashCode=function(){return this.c},gt.prototype.toString=function(){return String.fromCharCode(s(this.c))},gt.prototype.compareTo_11rb$=function(t){return this.c-t},gt.prototype.valueOf=function(){return this.c},gt.$metadata$={kind:n,simpleName:"BoxedChar",interfaces:[g]},Object.defineProperty(vt.prototype,"context",{configurable:!0,get:function(){return this.context_hxcuhl$_0}}),vt.prototype.intercepted=function(){var t,e,n,r;if(null!=(n=this.intercepted__0))r=n;else {var i=null!=(e=null!=(t=this.context.get_j3r2sn$(Ri()))?t.interceptContinuation_wj8d80$(this):null)?e:this;this.intercepted__0=i,r=i;}return r},vt.prototype.resumeWith_tl1gpc$=function(e){for(var n,r={v:this},i={v:e.isFailure?null:null==(n=e.value)||t.isType(n,b)?n:y()},o={v:e.exceptionOrNull()};;){var a,s,u=r.v,p=u.resultContinuation_0;null==o.v?u.result_0=i.v:(u.state_0=u.exceptionState_0,u.exception_0=o.v);try{var c=u.doResume();if(c===to())return;i.v=c,o.v=null;}catch(t){i.v=null,o.v=t;}if(u.releaseIntercepted_0(),!t.isType(p,vt))return null!=(a=o.v)?(p.resumeWith_tl1gpc$(new $a(wa(a))),s=dt):s=null,void(null==s&&p.resumeWith_tl1gpc$(new $a(i.v)));r.v=p;}},vt.prototype.releaseIntercepted_0=function(){var t=this.intercepted__0;null!=t&&t!==this&&v(this.context.get_j3r2sn$(Ri())).releaseInterceptedContinuation_k98bjh$(t),this.intercepted__0=wt();},vt.$metadata$={kind:n,simpleName:"CoroutineImpl",interfaces:[ji]},Object.defineProperty(bt.prototype,"context",{configurable:!0,get:function(){throw Lt("This continuation is already complete".toString())}}),bt.prototype.resumeWith_tl1gpc$=function(t){throw Lt("This continuation is already complete".toString())},bt.prototype.toString=function(){return "This continuation is already complete"},bt.$metadata$={kind:m,simpleName:"CompletedContinuation",interfaces:[ji]};var xt=null;function wt(){return null===xt&&new bt,xt}function kt(t,e){this.closure$block=t,vt.call(this,e);}function Ct(e,n,r){return 3==e.length?e(n,r,!0):new kt((i=e,o=n,a=r,function(){return i(o,a)}),t.isType(s=r,ji)?s:tn());var i,o,a,s;}function Ot(e,n){var r;x.call(this),r=null!=n?n:null,this.message_q7r8iu$_0=void 0===e&&null!=r?t.toString(r):e,this.cause_us9j0c$_0=r,t.captureStack(x,this),this.name="Error";}function Nt(t,e){return e=e||Object.create(Ot.prototype),Ot.call(e,t,null),e}function St(e,n){var r;x.call(this),r=null!=n?n:null,this.message_8yp7un$_0=void 0===e&&null!=r?t.toString(r):e,this.cause_th0jdv$_0=r,t.captureStack(x,this),this.name="Exception";}function It(t,e){St.call(this,t,e),this.name="RuntimeException";}function Et(t,e){return e=e||Object.create(It.prototype),It.call(e,t,null),e}function At(t,e){It.call(this,t,e),this.name="IllegalArgumentException";}function zt(t,e){return e=e||Object.create(At.prototype),At.call(e,t,null),e}function jt(t,e){It.call(this,t,e),this.name="IllegalStateException";}function Lt(t,e){return e=e||Object.create(jt.prototype),jt.call(e,t,null),e}function Tt(t){Et(t,this),this.name="IndexOutOfBoundsException";}function Mt(t,e){It.call(this,t,e),this.name="UnsupportedOperationException";}function Rt(t){return t=t||Object.create(Mt.prototype),Mt.call(t,null,null),t}function Pt(t,e){return e=e||Object.create(Mt.prototype),Mt.call(e,t,null),e}function qt(t){zt(t,this),this.name="NumberFormatException";}function Bt(t){Et(t,this),this.name="NullPointerException";}function Ut(t){Et(t,this),this.name="ClassCastException";}function Ft(t){Et(t,this),this.name="NoSuchElementException";}function Dt(t){return t=t||Object.create(Ft.prototype),Ft.call(t,null),t}function Vt(t){Et(t,this),this.name="ArithmeticException";}function Wt(t,e,n){return Ar().checkRangeIndexes_cub51b$(e,n,t.length),t.slice(e,n)}function Kt(){Zt=this,this.rangeStart_8be2vx$=new Int32Array([48,1632,1776,1984,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,42528,43216,43264,43472,43504,43600,44016,65296]);}kt.prototype=Object.create(vt.prototype),kt.prototype.constructor=kt,kt.prototype.doResume=function(){var t;if(null!=(t=this.exception_0))throw t;return this.closure$block()},kt.$metadata$={kind:n,interfaces:[vt]},Object.defineProperty(Ot.prototype,"message",{get:function(){return this.message_q7r8iu$_0}}),Object.defineProperty(Ot.prototype,"cause",{get:function(){return this.cause_us9j0c$_0}}),Ot.$metadata$={kind:n,simpleName:"Error",interfaces:[x]},Object.defineProperty(St.prototype,"message",{get:function(){return this.message_8yp7un$_0}}),Object.defineProperty(St.prototype,"cause",{get:function(){return this.cause_th0jdv$_0}}),St.$metadata$={kind:n,simpleName:"Exception",interfaces:[x]},It.$metadata$={kind:n,simpleName:"RuntimeException",interfaces:[St]},At.$metadata$={kind:n,simpleName:"IllegalArgumentException",interfaces:[It]},jt.$metadata$={kind:n,simpleName:"IllegalStateException",interfaces:[It]},Tt.$metadata$={kind:n,simpleName:"IndexOutOfBoundsException",interfaces:[It]},Mt.$metadata$={kind:n,simpleName:"UnsupportedOperationException",interfaces:[It]},qt.$metadata$={kind:n,simpleName:"NumberFormatException",interfaces:[At]},Bt.$metadata$={kind:n,simpleName:"NullPointerException",interfaces:[It]},Ut.$metadata$={kind:n,simpleName:"ClassCastException",interfaces:[It]},Ft.$metadata$={kind:n,simpleName:"NoSuchElementException",interfaces:[It]},Vt.$metadata$={kind:n,simpleName:"ArithmeticException",interfaces:[It]},Kt.$metadata$={kind:m,simpleName:"Digit",interfaces:[]};var Zt=null;function Ht(){return null===Zt&&new Kt,Zt}function Jt(t,e){for(var n=0,r=t.length-1|0,i=-1,o=0;n<=r;)if(e>(o=t[i=(n+r|0)/2|0]))n=i+1|0;else {if(e===o)return i;r=i-1|0;}return i-(e=0;u--)e[n+u|0]=t[r+u|0];}function re(t){return t<0&&Jr(),t}function ie(t){return t}function oe(){kr.call(this);}function ae(){oe.call(this),this.modCount=0;}function se(t){this.$outer=t,this.index_0=0,this.last_0=-1;}function ue(t,e){this.$outer=t,se.call(this,this.$outer),Ar().checkPositionIndex_6xvm5r$(e,this.$outer.size),this.index_0=e;}function pe(t,e,n){ae.call(this),this.list_0=t,this.fromIndex_0=e,this._size_0=0,Ar().checkRangeIndexes_cub51b$(this.fromIndex_0,n,this.list_0.size),this._size_0=n-this.fromIndex_0|0;}function ce(){zr.call(this),this._keys_qe2m0n$_0=null,this._values_kxdlqh$_0=null;}function le(t,e){this.key_5xhq3d$_0=t,this._value_0=e;}function he(){me.call(this);}function fe(t){this.this$AbstractMutableMap=t,me.call(this);}function _e(t){this.closure$entryIterator=t;}function ye(t){this.this$AbstractMutableMap=t,oe.call(this);}function de(t){this.closure$entryIterator=t;}function me(){oe.call(this);}function $e(t){ae.call(this),this.array_hd7ov6$_0=t,this.isReadOnly_dbt2oh$_0=!1;}function ge(t){return t=t||Object.create($e.prototype),$e.call(t,[]),t}function ve(){}function be(){xe=this;}Qt.prototype.compare=function(t,e){return this.function$(t,e)},Qt.$metadata$={kind:d,simpleName:"Comparator",interfaces:[]},oe.prototype.remove_11rb$=function(t){this.checkIsMutable();for(var e=this.iterator();e.hasNext();)if(o(e.next(),t))return e.remove(),!0;return !1},oe.prototype.addAll_brywnq$=function(t){var e;this.checkIsMutable();var n=!1;for(e=t.iterator();e.hasNext();){var r=e.next();this.add_11rb$(r)&&(n=!0);}return n},oe.prototype.removeAll_brywnq$=function(e){var n;return this.checkIsMutable(),Xr(t.isType(this,et)?this:tn(),(n=e,function(t){return n.contains_11rb$(t)}))},oe.prototype.retainAll_brywnq$=function(e){var n;return this.checkIsMutable(),Xr(t.isType(this,et)?this:tn(),(n=e,function(t){return !n.contains_11rb$(t)}))},oe.prototype.clear=function(){this.checkIsMutable();for(var t=this.iterator();t.hasNext();)t.next(),t.remove();},oe.prototype.toJSON=function(){return this.toArray()},oe.prototype.checkIsMutable=function(){},oe.$metadata$={kind:n,simpleName:"AbstractMutableCollection",interfaces:[rt,kr]},ae.prototype.add_11rb$=function(t){return this.checkIsMutable(),this.add_wxm5ur$(this.size,t),!0},ae.prototype.addAll_u57x28$=function(t,e){var n,r;Ar().checkPositionIndex_6xvm5r$(t,this.size),this.checkIsMutable();var i=t,o=!1;for(n=e.iterator();n.hasNext();){var a=n.next();this.add_wxm5ur$((i=(r=i)+1|0,r),a),o=!0;}return o},ae.prototype.clear=function(){this.checkIsMutable(),this.removeRange_vux9f0$(0,this.size);},ae.prototype.removeAll_brywnq$=function(t){return this.checkIsMutable(),ei(this,(e=t,function(t){return e.contains_11rb$(t)}));var e;},ae.prototype.retainAll_brywnq$=function(t){return this.checkIsMutable(),ei(this,(e=t,function(t){return !e.contains_11rb$(t)}));var e;},ae.prototype.iterator=function(){return new se(this)},ae.prototype.contains_11rb$=function(t){return this.indexOf_11rb$(t)>=0},ae.prototype.indexOf_11rb$=function(t){var e;e=Hr(this);for(var n=0;n<=e;n++)if(o(this.get_za3lpa$(n),t))return n;return -1},ae.prototype.lastIndexOf_11rb$=function(t){for(var e=Hr(this);e>=0;e--)if(o(this.get_za3lpa$(e),t))return e;return -1},ae.prototype.listIterator=function(){return this.listIterator_za3lpa$(0)},ae.prototype.listIterator_za3lpa$=function(t){return new ue(this,t)},ae.prototype.subList_vux9f0$=function(t,e){return new pe(this,t,e)},ae.prototype.removeRange_vux9f0$=function(t,e){for(var n=this.listIterator_za3lpa$(t),r=e-t|0,i=0;i0},ue.prototype.nextIndex=function(){return this.index_0},ue.prototype.previous=function(){if(!this.hasPrevious())throw Dt();return this.last_0=(this.index_0=this.index_0-1|0,this.index_0),this.$outer.get_za3lpa$(this.last_0)},ue.prototype.previousIndex=function(){return this.index_0-1|0},ue.prototype.add_11rb$=function(t){this.$outer.add_wxm5ur$(this.index_0,t),this.index_0=this.index_0+1|0,this.last_0=-1;},ue.prototype.set_11rb$=function(t){if(-1===this.last_0)throw Lt("Call next() or previous() before updating element value with the iterator.".toString());this.$outer.set_wxm5ur$(this.last_0,t);},ue.$metadata$={kind:n,simpleName:"ListIteratorImpl",interfaces:[yt,se]},pe.prototype.add_wxm5ur$=function(t,e){Ar().checkPositionIndex_6xvm5r$(t,this._size_0),this.list_0.add_wxm5ur$(this.fromIndex_0+t|0,e),this._size_0=this._size_0+1|0;},pe.prototype.get_za3lpa$=function(t){return Ar().checkElementIndex_6xvm5r$(t,this._size_0),this.list_0.get_za3lpa$(this.fromIndex_0+t|0)},pe.prototype.removeAt_za3lpa$=function(t){Ar().checkElementIndex_6xvm5r$(t,this._size_0);var e=this.list_0.removeAt_za3lpa$(this.fromIndex_0+t|0);return this._size_0=this._size_0-1|0,e},pe.prototype.set_wxm5ur$=function(t,e){return Ar().checkElementIndex_6xvm5r$(t,this._size_0),this.list_0.set_wxm5ur$(this.fromIndex_0+t|0,e)},Object.defineProperty(pe.prototype,"size",{configurable:!0,get:function(){return this._size_0}}),pe.prototype.checkIsMutable=function(){this.list_0.checkIsMutable();},pe.$metadata$={kind:n,simpleName:"SubList",interfaces:[Ze,ae]},ae.$metadata$={kind:n,simpleName:"AbstractMutableList",interfaces:[ot,oe]},Object.defineProperty(le.prototype,"key",{get:function(){return this.key_5xhq3d$_0}}),Object.defineProperty(le.prototype,"value",{configurable:!0,get:function(){return this._value_0}}),le.prototype.setValue_11rc$=function(t){var e=this._value_0;return this._value_0=t,e},le.prototype.hashCode=function(){return qr().entryHashCode_9fthdn$(this)},le.prototype.toString=function(){return qr().entryToString_9fthdn$(this)},le.prototype.equals=function(t){return qr().entryEquals_js7fox$(this,t)},le.$metadata$={kind:n,simpleName:"SimpleEntry",interfaces:[lt]},he.prototype.contains_11rb$=function(t){return this.containsEntry_kw6fkd$(t)},he.prototype.remove_11rb$=function(t){return this.removeEntry_kw6fkd$(t)},he.$metadata$={kind:n,simpleName:"AbstractEntrySet",interfaces:[me]},ce.prototype.clear=function(){this.entries.clear();},fe.prototype.add_11rb$=function(t){throw Pt("Add is not supported on keys")},fe.prototype.clear=function(){this.this$AbstractMutableMap.clear();},fe.prototype.contains_11rb$=function(t){return this.this$AbstractMutableMap.containsKey_11rb$(t)},_e.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},_e.prototype.next=function(){return this.closure$entryIterator.next().key},_e.prototype.remove=function(){this.closure$entryIterator.remove();},_e.$metadata$={kind:n,interfaces:[ft]},fe.prototype.iterator=function(){return new _e(this.this$AbstractMutableMap.entries.iterator())},fe.prototype.remove_11rb$=function(t){return this.checkIsMutable(),!!this.this$AbstractMutableMap.containsKey_11rb$(t)&&(this.this$AbstractMutableMap.remove_11rb$(t),!0)},Object.defineProperty(fe.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMutableMap.size}}),fe.prototype.checkIsMutable=function(){this.this$AbstractMutableMap.checkIsMutable();},fe.$metadata$={kind:n,interfaces:[me]},Object.defineProperty(ce.prototype,"keys",{configurable:!0,get:function(){return null==this._keys_qe2m0n$_0&&(this._keys_qe2m0n$_0=new fe(this)),v(this._keys_qe2m0n$_0)}}),ce.prototype.putAll_a2k3zr$=function(t){var e;for(this.checkIsMutable(),e=t.entries.iterator();e.hasNext();){var n=e.next(),r=n.key,i=n.value;this.put_xwzc9p$(r,i);}},ye.prototype.add_11rb$=function(t){throw Pt("Add is not supported on values")},ye.prototype.clear=function(){this.this$AbstractMutableMap.clear();},ye.prototype.contains_11rb$=function(t){return this.this$AbstractMutableMap.containsValue_11rc$(t)},de.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},de.prototype.next=function(){return this.closure$entryIterator.next().value},de.prototype.remove=function(){this.closure$entryIterator.remove();},de.$metadata$={kind:n,interfaces:[ft]},ye.prototype.iterator=function(){return new de(this.this$AbstractMutableMap.entries.iterator())},Object.defineProperty(ye.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMutableMap.size}}),ye.prototype.checkIsMutable=function(){this.this$AbstractMutableMap.checkIsMutable();},ye.$metadata$={kind:n,interfaces:[oe]},Object.defineProperty(ce.prototype,"values",{configurable:!0,get:function(){return null==this._values_kxdlqh$_0&&(this._values_kxdlqh$_0=new ye(this)),v(this._values_kxdlqh$_0)}}),ce.prototype.remove_11rb$=function(t){this.checkIsMutable();for(var e=this.entries.iterator();e.hasNext();){var n=e.next(),r=n.key;if(o(t,r)){var i=n.value;return e.remove(),i}}return null},ce.prototype.checkIsMutable=function(){},ce.$metadata$={kind:n,simpleName:"AbstractMutableMap",interfaces:[ct,zr]},me.prototype.equals=function(e){return e===this||!!t.isType(e,at)&&Dr().setEquals_y8f7en$(this,e)},me.prototype.hashCode=function(){return Dr().unorderedHashCode_nykoif$(this)},me.$metadata$={kind:n,simpleName:"AbstractMutableSet",interfaces:[st,oe]},$e.prototype.build=function(){return this.checkIsMutable(),this.isReadOnly_dbt2oh$_0=!0,this},$e.prototype.trimToSize=function(){},$e.prototype.ensureCapacity_za3lpa$=function(t){},Object.defineProperty($e.prototype,"size",{configurable:!0,get:function(){return this.array_hd7ov6$_0.length}}),$e.prototype.get_za3lpa$=function(e){var n;return null==(n=this.array_hd7ov6$_0[this.rangeCheck_xcmk5o$_0(e)])||t.isType(n,b)?n:tn()},$e.prototype.set_wxm5ur$=function(e,n){var r;this.checkIsMutable(),this.rangeCheck_xcmk5o$_0(e);var i=this.array_hd7ov6$_0[e];return this.array_hd7ov6$_0[e]=n,null==(r=i)||t.isType(r,b)?r:tn()},$e.prototype.add_11rb$=function(t){return this.checkIsMutable(),this.array_hd7ov6$_0.push(t),this.modCount=this.modCount+1|0,!0},$e.prototype.add_wxm5ur$=function(t,e){this.checkIsMutable(),this.array_hd7ov6$_0.splice(this.insertionRangeCheck_xwivfl$_0(t),0,e),this.modCount=this.modCount+1|0;},$e.prototype.addAll_brywnq$=function(t){return this.checkIsMutable(),!t.isEmpty()&&(this.array_hd7ov6$_0=this.array_hd7ov6$_0.concat(Yt(t)),this.modCount=this.modCount+1|0,!0)},$e.prototype.addAll_u57x28$=function(t,e){return this.checkIsMutable(),this.insertionRangeCheck_xwivfl$_0(t),t===this.size?this.addAll_brywnq$(e):!e.isEmpty()&&(t===this.size?this.addAll_brywnq$(e):(this.array_hd7ov6$_0=0===t?Yt(e).concat(this.array_hd7ov6$_0):Wt(this.array_hd7ov6$_0,0,t).concat(Yt(e),Wt(this.array_hd7ov6$_0,t,this.size)),this.modCount=this.modCount+1|0,!0))},$e.prototype.removeAt_za3lpa$=function(t){return this.checkIsMutable(),this.rangeCheck_xcmk5o$_0(t),this.modCount=this.modCount+1|0,t===Hr(this)?this.array_hd7ov6$_0.pop():this.array_hd7ov6$_0.splice(t,1)[0]},$e.prototype.remove_11rb$=function(t){var e;this.checkIsMutable(),e=this.array_hd7ov6$_0;for(var n=0;n!==e.length;++n)if(o(this.array_hd7ov6$_0[n],t))return this.array_hd7ov6$_0.splice(n,1),this.modCount=this.modCount+1|0,!0;return !1},$e.prototype.removeRange_vux9f0$=function(t,e){this.checkIsMutable(),this.modCount=this.modCount+1|0,this.array_hd7ov6$_0.splice(t,e-t|0);},$e.prototype.clear=function(){this.checkIsMutable(),this.array_hd7ov6$_0=[],this.modCount=this.modCount+1|0;},$e.prototype.indexOf_11rb$=function(t){return E(this.array_hd7ov6$_0,t)},$e.prototype.lastIndexOf_11rb$=function(t){return z(this.array_hd7ov6$_0,t)},$e.prototype.toString=function(){return w(this.array_hd7ov6$_0)},$e.prototype.toArray_ro6dgy$=function(e){var n,r;if(e.lengththis.size&&(e[this.size]=null),e},$e.prototype.toArray=function(){return [].slice.call(this.array_hd7ov6$_0)},$e.prototype.checkIsMutable=function(){if(this.isReadOnly_dbt2oh$_0)throw Rt()},$e.prototype.rangeCheck_xcmk5o$_0=function(t){return Ar().checkElementIndex_6xvm5r$(t,this.size),t},$e.prototype.insertionRangeCheck_xwivfl$_0=function(t){return Ar().checkPositionIndex_6xvm5r$(t,this.size),t},$e.$metadata$={kind:n,simpleName:"ArrayList",interfaces:[Ze,ae,ot]},be.prototype.equals_oaftn8$=function(t,e){return o(t,e)},be.prototype.getHashCode_s8jyv4$=function(t){var e;return null!=(e=null!=t?C(t):null)?e:0},be.$metadata$={kind:m,simpleName:"HashCode",interfaces:[ve]};var xe=null;function we(){return null===xe&&new be,xe}function ke(){this.internalMap_uxhen5$_0=null,this.equality_vgh6cm$_0=null,this._entries_7ih87x$_0=null;}function Ce(t){this.$outer=t,he.call(this);}function Oe(t,e){return e=e||Object.create(ke.prototype),ce.call(e),ke.call(e),e.internalMap_uxhen5$_0=t,e.equality_vgh6cm$_0=t.equality,e}function Ne(t){return t=t||Object.create(ke.prototype),Oe(new je(we()),t),t}function Se(t,e,n){if(Ne(n=n||Object.create(ke.prototype)),!(t>=0))throw zt(("Negative initial capacity: "+t).toString());if(!(e>=0))throw zt(("Non-positive load factor: "+e).toString());return n}function Ie(){this.map_8be2vx$=null;}function Ee(t,e,n){return n=n||Object.create(Ie.prototype),me.call(n),Ie.call(n),n.map_8be2vx$=Se(t,e),n}function Ae(t,e){return Ee(t,0,e=e||Object.create(Ie.prototype)),e}function ze(t,e){return e=e||Object.create(Ie.prototype),me.call(e),Ie.call(e),e.map_8be2vx$=t,e}function je(t){this.equality_mamlu8$_0=t,this.backingMap_0=this.createJsMap(),this.size_x3bm7r$_0=0;}function Le(t){this.this$InternalHashCodeMap=t,this.state=-1,this.keys=Object.keys(t.backingMap_0),this.keyIndex=-1,this.chainOrEntry=null,this.isChain=!1,this.itemIndex=-1,this.lastEntry=null;}function Te(){}function Me(t){this.equality_qma612$_0=t,this.backingMap_0=this.createJsMap(),this.size_6u3ykz$_0=0;}function Re(){this.head_1lr44l$_0=null,this.map_97q5dv$_0=null,this.isReadOnly_uhyvn5$_0=!1;}function Pe(t,e,n){this.$outer=t,le.call(this,e,n),this.next_8be2vx$=null,this.prev_8be2vx$=null;}function qe(t){this.$outer=t,he.call(this);}function Be(t){this.$outer=t,this.last_0=null,this.next_0=null,this.next_0=this.$outer.$outer.head_1lr44l$_0;}function Ue(t){return Ne(t=t||Object.create(Re.prototype)),Re.call(t),t.map_97q5dv$_0=Ne(),t}function Fe(t,e,n){return Se(t,e,n=n||Object.create(Re.prototype)),Re.call(n),n.map_97q5dv$_0=Ne(),n}function De(){}function Ve(t){return t=t||Object.create(De.prototype),ze(Ue(),t),De.call(t),t}function We(t,e,n){return n=n||Object.create(De.prototype),ze(Fe(t,e),n),De.call(n),n}function Ke(t,e){return We(t,0,e=e||Object.create(De.prototype)),e}function Ze(){}function He(){}function Je(t){He.call(this),this.outputStream=t;}function Ge(){He.call(this),this.buffer="";}function Qe(){Ge.call(this);}function Ye(t,e){this.delegate_0=t,this.result_0=e;}function Xe(t,e){this.closure$context=t,this.closure$resumeWith=e;}function tn(){throw new Ut("Illegal cast")}function en(t){throw Lt(t)}function nn(){}function rn(){}function on(){}function an(t){this.jClass_1ppatx$_0=t;}function sn(t){var e;an.call(this,t),this.simpleName_m7mxi0$_0=null!=(e=t.$metadata$)?e.simpleName:null;}function un(t,e,n){an.call(this,t),this.givenSimpleName_0=e,this.isInstanceFunction_0=n;}function pn(){cn=this,an.call(this,Object),this.simpleName_lnzy73$_0="Nothing";}ve.$metadata$={kind:d,simpleName:"EqualityComparator",interfaces:[]},Ce.prototype.add_11rb$=function(t){throw Pt("Add is not supported on entries")},Ce.prototype.clear=function(){this.$outer.clear();},Ce.prototype.containsEntry_kw6fkd$=function(t){return this.$outer.containsEntry_8hxqw4$(t)},Ce.prototype.iterator=function(){return this.$outer.internalMap_uxhen5$_0.iterator()},Ce.prototype.removeEntry_kw6fkd$=function(t){return !!q(this,t)&&(this.$outer.remove_11rb$(t.key),!0)},Object.defineProperty(Ce.prototype,"size",{configurable:!0,get:function(){return this.$outer.size}}),Ce.$metadata$={kind:n,simpleName:"EntrySet",interfaces:[he]},ke.prototype.clear=function(){this.internalMap_uxhen5$_0.clear();},ke.prototype.containsKey_11rb$=function(t){return this.internalMap_uxhen5$_0.contains_11rb$(t)},ke.prototype.containsValue_11rc$=function(e){var n,r=this.internalMap_uxhen5$_0;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!1;break t}for(i=r.iterator();i.hasNext();){var o=i.next();if(this.equality_vgh6cm$_0.equals_oaftn8$(o.value,e)){n=!0;break t}}n=!1;}while(0);return n},Object.defineProperty(ke.prototype,"entries",{configurable:!0,get:function(){return null==this._entries_7ih87x$_0&&(this._entries_7ih87x$_0=this.createEntrySet()),v(this._entries_7ih87x$_0)}}),ke.prototype.createEntrySet=function(){return new Ce(this)},ke.prototype.get_11rb$=function(t){return this.internalMap_uxhen5$_0.get_11rb$(t)},ke.prototype.put_xwzc9p$=function(t,e){return this.internalMap_uxhen5$_0.put_xwzc9p$(t,e)},ke.prototype.remove_11rb$=function(t){return this.internalMap_uxhen5$_0.remove_11rb$(t)},Object.defineProperty(ke.prototype,"size",{configurable:!0,get:function(){return this.internalMap_uxhen5$_0.size}}),ke.$metadata$={kind:n,simpleName:"HashMap",interfaces:[ce,ct]},Ie.prototype.add_11rb$=function(t){return null==this.map_8be2vx$.put_xwzc9p$(t,this)},Ie.prototype.clear=function(){this.map_8be2vx$.clear();},Ie.prototype.contains_11rb$=function(t){return this.map_8be2vx$.containsKey_11rb$(t)},Ie.prototype.isEmpty=function(){return this.map_8be2vx$.isEmpty()},Ie.prototype.iterator=function(){return this.map_8be2vx$.keys.iterator()},Ie.prototype.remove_11rb$=function(t){return null!=this.map_8be2vx$.remove_11rb$(t)},Object.defineProperty(Ie.prototype,"size",{configurable:!0,get:function(){return this.map_8be2vx$.size}}),Ie.$metadata$={kind:n,simpleName:"HashSet",interfaces:[me,st]},Object.defineProperty(je.prototype,"equality",{get:function(){return this.equality_mamlu8$_0}}),Object.defineProperty(je.prototype,"size",{configurable:!0,get:function(){return this.size_x3bm7r$_0},set:function(t){this.size_x3bm7r$_0=t;}}),je.prototype.put_xwzc9p$=function(e,n){var r=this.equality.getHashCode_s8jyv4$(e),i=this.getChainOrEntryOrNull_0(r);if(null==i)this.backingMap_0[r]=new le(e,n);else {if(!t.isArray(i)){var o=i;return this.equality.equals_oaftn8$(o.key,e)?o.setValue_11rc$(n):(this.backingMap_0[r]=[o,new le(e,n)],this.size=this.size+1|0,null)}var a=i,s=this.findEntryInChain_0(a,e);if(null!=s)return s.setValue_11rc$(n);a.push(new le(e,n));}return this.size=this.size+1|0,null},je.prototype.remove_11rb$=function(e){var n,r=this.equality.getHashCode_s8jyv4$(e);if(null==(n=this.getChainOrEntryOrNull_0(r)))return null;var i=n;if(!t.isArray(i)){var o=i;return this.equality.equals_oaftn8$(o.key,e)?(delete this.backingMap_0[r],this.size=this.size-1|0,o.value):null}for(var a=i,s=0;s!==a.length;++s){var u=a[s];if(this.equality.equals_oaftn8$(e,u.key))return 1===a.length?(a.length=0,delete this.backingMap_0[r]):a.splice(s,1),this.size=this.size-1|0,u.value}return null},je.prototype.clear=function(){this.backingMap_0=this.createJsMap(),this.size=0;},je.prototype.contains_11rb$=function(t){return null!=this.getEntry_0(t)},je.prototype.get_11rb$=function(t){var e;return null!=(e=this.getEntry_0(t))?e.value:null},je.prototype.getEntry_0=function(e){var n;if(null==(n=this.getChainOrEntryOrNull_0(this.equality.getHashCode_s8jyv4$(e))))return null;var r=n;if(t.isArray(r)){var i=r;return this.findEntryInChain_0(i,e)}var o=r;return this.equality.equals_oaftn8$(o.key,e)?o:null},je.prototype.findEntryInChain_0=function(t,e){var n;t:do{var r;for(r=0;r!==t.length;++r){var i=t[r];if(this.equality.equals_oaftn8$(i.key,e)){n=i;break t}}n=null;}while(0);return n},Le.prototype.computeNext_0=function(){if(null!=this.chainOrEntry&&this.isChain){var e=this.chainOrEntry.length;if(this.itemIndex=this.itemIndex+1|0,this.itemIndex=0&&(this.buffer=this.buffer+e.substring(0,n),this.flush(),e=e.substring(n+1|0)),this.buffer=this.buffer+e;},Qe.prototype.flush=function(){console.log(this.buffer),this.buffer="";},Qe.$metadata$={kind:n,simpleName:"BufferedOutputToConsoleLog",interfaces:[Ge]},Object.defineProperty(Ye.prototype,"context",{configurable:!0,get:function(){return this.delegate_0.context}}),Ye.prototype.resumeWith_tl1gpc$=function(t){var e=this.result_0;if(e===io())this.result_0=t.value;else {if(e!==to())throw Lt("Already resumed");this.result_0=oo(),this.delegate_0.resumeWith_tl1gpc$(t);}},Ye.prototype.getOrThrow=function(){var e;if(this.result_0===io())return this.result_0=to(),to();var n=this.result_0;if(n===oo())e=to();else {if(t.isType(n,xa))throw n.exception;e=n;}return e},Ye.$metadata$={kind:n,simpleName:"SafeContinuation",interfaces:[ji]},Object.defineProperty(Xe.prototype,"context",{configurable:!0,get:function(){return this.closure$context}}),Xe.prototype.resumeWith_tl1gpc$=function(t){this.closure$resumeWith(t);},Xe.$metadata$={kind:n,interfaces:[ji]},nn.$metadata$={kind:d,simpleName:"Serializable",interfaces:[]},rn.$metadata$={kind:d,simpleName:"KCallable",interfaces:[]},on.$metadata$={kind:d,simpleName:"KClass",interfaces:[Vo]},Object.defineProperty(an.prototype,"jClass",{get:function(){return this.jClass_1ppatx$_0}}),Object.defineProperty(an.prototype,"qualifiedName",{configurable:!0,get:function(){throw new Ca}}),an.prototype.equals=function(e){return t.isType(e,an)&&o(this.jClass,e.jClass)},an.prototype.hashCode=function(){var t,e;return null!=(e=null!=(t=this.simpleName)?C(t):null)?e:0},an.prototype.toString=function(){return "class "+_(this.simpleName)},an.$metadata$={kind:n,simpleName:"KClassImpl",interfaces:[on]},Object.defineProperty(sn.prototype,"simpleName",{configurable:!0,get:function(){return this.simpleName_m7mxi0$_0}}),sn.prototype.isInstance_s8jyv4$=function(e){var n=this.jClass;return t.isType(e,n)},sn.$metadata$={kind:n,simpleName:"SimpleKClassImpl",interfaces:[an]},un.prototype.equals=function(e){return !!t.isType(e,un)&&an.prototype.equals.call(this,e)&&o(this.givenSimpleName_0,e.givenSimpleName_0)},Object.defineProperty(un.prototype,"simpleName",{configurable:!0,get:function(){return this.givenSimpleName_0}}),un.prototype.isInstance_s8jyv4$=function(t){return this.isInstanceFunction_0(t)},un.$metadata$={kind:n,simpleName:"PrimitiveKClassImpl",interfaces:[an]},Object.defineProperty(pn.prototype,"simpleName",{configurable:!0,get:function(){return this.simpleName_lnzy73$_0}}),pn.prototype.isInstance_s8jyv4$=function(t){return !1},Object.defineProperty(pn.prototype,"jClass",{configurable:!0,get:function(){throw Pt("There's no native JS class for Nothing type")}}),pn.prototype.equals=function(t){return t===this},pn.prototype.hashCode=function(){return 0},pn.$metadata$={kind:m,simpleName:"NothingKClassImpl",interfaces:[an]};var cn=null;function ln(){return null===cn&&new pn,cn}function hn(){}function fn(){}function _n(){}function yn(){}function dn(){}function mn(){}function $n(){}function gn(){Bn=this,this.anyClass=new un(Object,"Any",vn),this.numberClass=new un(Number,"Number",bn),this.nothingClass=ln(),this.booleanClass=new un(Boolean,"Boolean",xn),this.byteClass=new un(Number,"Byte",wn),this.shortClass=new un(Number,"Short",kn),this.intClass=new un(Number,"Int",Cn),this.floatClass=new un(Number,"Float",On),this.doubleClass=new un(Number,"Double",Nn),this.arrayClass=new un(Array,"Array",Sn),this.stringClass=new un(String,"String",In),this.throwableClass=new un(Error,"Throwable",En),this.booleanArrayClass=new un(Array,"BooleanArray",An),this.charArrayClass=new un(Uint16Array,"CharArray",zn),this.byteArrayClass=new un(Int8Array,"ByteArray",jn),this.shortArrayClass=new un(Int16Array,"ShortArray",Ln),this.intArrayClass=new un(Int32Array,"IntArray",Tn),this.longArrayClass=new un(Array,"LongArray",Mn),this.floatArrayClass=new un(Float32Array,"FloatArray",Rn),this.doubleArrayClass=new un(Float64Array,"DoubleArray",Pn);}function vn(e){return t.isType(e,b)}function bn(e){return t.isNumber(e)}function xn(t){return "boolean"==typeof t}function wn(t){return "number"==typeof t}function kn(t){return "number"==typeof t}function Cn(t){return "number"==typeof t}function On(t){return "number"==typeof t}function Nn(t){return "number"==typeof t}function Sn(e){return t.isArray(e)}function In(t){return "string"==typeof t}function En(e){return t.isType(e,x)}function An(e){return t.isBooleanArray(e)}function zn(e){return t.isCharArray(e)}function jn(e){return t.isByteArray(e)}function Ln(e){return t.isShortArray(e)}function Tn(e){return t.isIntArray(e)}function Mn(e){return t.isLongArray(e)}function Rn(e){return t.isFloatArray(e)}function Pn(e){return t.isDoubleArray(e)}Object.defineProperty(hn.prototype,"simpleName",{configurable:!0,get:function(){throw Lt("Unknown simpleName for ErrorKClass".toString())}}),Object.defineProperty(hn.prototype,"qualifiedName",{configurable:!0,get:function(){throw Lt("Unknown qualifiedName for ErrorKClass".toString())}}),hn.prototype.isInstance_s8jyv4$=function(t){throw Lt("Can's check isInstance on ErrorKClass".toString())},hn.prototype.equals=function(t){return t===this},hn.prototype.hashCode=function(){return 0},hn.$metadata$={kind:n,simpleName:"ErrorKClass",interfaces:[on]},fn.$metadata$={kind:d,simpleName:"KProperty",interfaces:[rn]},_n.$metadata$={kind:d,simpleName:"KMutableProperty",interfaces:[fn]},yn.$metadata$={kind:d,simpleName:"KProperty0",interfaces:[fn]},dn.$metadata$={kind:d,simpleName:"KMutableProperty0",interfaces:[_n,yn]},mn.$metadata$={kind:d,simpleName:"KProperty1",interfaces:[fn]},$n.$metadata$={kind:d,simpleName:"KMutableProperty1",interfaces:[_n,mn]},gn.prototype.functionClass=function(t){var e,n,r;if(null!=(e=qn[t]))n=e;else {var i=new un(Function,"Function"+t,(r=t,function(t){return "function"==typeof t&&t.length===r}));qn[t]=i,n=i;}return n},gn.$metadata$={kind:m,simpleName:"PrimitiveClasses",interfaces:[]};var qn,Bn=null;function Un(){return null===Bn&&new gn,Bn}function Fn(t){return Array.isArray(t)?Dn(t):Vn(t)}function Dn(t){switch(t.length){case 1:return Vn(t[0]);case 0:return ln();default:return new hn}}function Vn(t){var e;if(t===String)return Un().stringClass;var n=t.$metadata$;if(null!=n)if(null==n.$kClass$){var r=new sn(t);n.$kClass$=r,e=r;}else e=n.$kClass$;else e=new sn(t);return e}function Wn(t){t.lastIndex=0;}function Kn(){}function Zn(t){this.string_0=void 0!==t?t:"";}function Hn(t,e){return Jn(e=e||Object.create(Zn.prototype)),e}function Jn(t){return t=t||Object.create(Zn.prototype),Zn.call(t,""),t}function Gn(t){var e=String.fromCharCode(t).toUpperCase();return e.length>1?t:e.charCodeAt(0)}function Qn(t){return new ho(O.MIN_HIGH_SURROGATE,O.MAX_HIGH_SURROGATE).contains_mef7kx$(t)}function Yn(t){return new ho(O.MIN_LOW_SURROGATE,O.MAX_LOW_SURROGATE).contains_mef7kx$(t)}function Xn(t){var e;return null!=(e=Zo(t))?e:Jo(t)}function tr(t){if(!(2<=t&&t<=36))throw zt("radix "+t+" was not in valid range 2..36");return t}function er(t,e){var n;return (n=t>=48&&t<=57?t-48:t>=65&&t<=90?t-65+10|0:t>=97&&t<=122?t-97+10|0:t<128?-1:t>=65313&&t<=65338?t-65313+10|0:t>=65345&&t<=65370?t-65345+10|0:Gt(t))>=e?-1:n}function nr(t){return t.value}function rr(t,e){return V(t,"",e,void 0,void 0,void 0,nr)}function ir(t){this.value=t;}function or(e,n){var r,i;if(null==(i=t.isType(r=e,pa)?r:null))throw Pt("Retrieving groups by name is not supported on this platform.");return i.get_61zpoe$(n)}function ar(t,e){lr(),this.pattern=t,this.options=F(e),this.nativePattern_0=new RegExp(t,rr(e,"gu")),this.nativeStickyPattern_0=null,this.nativeMatchesEntirePattern_0=null;}function sr(t){return t.next()}function ur(t,e,n,r,i,o){vt.call(this,o),this.$controller=i,this.exceptionState_0=1,this.local$closure$input=t,this.local$this$Regex=e,this.local$closure$limit=n,this.local$match=void 0,this.local$nextStart=void 0,this.local$splitCount=void 0,this.local$foundMatch=void 0,this.local$$receiver=r;}function pr(){cr=this,this.patternEscape_0=new RegExp("[\\\\^$*+?.()|[\\]{}]","g"),this.replacementEscape_0=new RegExp("[\\\\$]","g"),this.nativeReplacementEscape_0=new RegExp("\\$","g");}Kn.$metadata$={kind:d,simpleName:"Appendable",interfaces:[]},Object.defineProperty(Zn.prototype,"length",{configurable:!0,get:function(){return this.string_0.length}}),Zn.prototype.charCodeAt=function(t){var e=this.string_0;if(!(t>=0&&t<=ta(e)))throw new Tt("index: "+t+", length: "+this.length+"}");return e.charCodeAt(t)},Zn.prototype.subSequence_vux9f0$=function(t,e){return this.string_0.substring(t,e)},Zn.prototype.append_s8itvh$=function(t){return this.string_0+=String.fromCharCode(t),this},Zn.prototype.append_gw00v9$=function(t){return this.string_0+=_(t),this},Zn.prototype.append_ezbsdh$=function(t,e,n){return this.appendRange_3peag4$(null!=t?t:"null",e,n)},Zn.prototype.reverse=function(){for(var t,e,n="",r=this.string_0.length-1|0;r>=0;){var i=this.string_0.charCodeAt((r=(t=r)-1|0,t));if(Yn(i)&&r>=0){var o=this.string_0.charCodeAt((r=(e=r)-1|0,e));n=Qn(o)?n+String.fromCharCode(a(o))+String.fromCharCode(a(i)):n+String.fromCharCode(a(i))+String.fromCharCode(a(o));}else n+=String.fromCharCode(i);}return this.string_0=n,this},Zn.prototype.append_s8jyv4$=function(t){return this.string_0+=_(t),this},Zn.prototype.append_6taknv$=function(t){return this.string_0+=t,this},Zn.prototype.append_4hbowm$=function(t){return this.string_0+=vr(t),this},Zn.prototype.append_61zpoe$=function(t){return this.append_pdl1vj$(t)},Zn.prototype.append_pdl1vj$=function(t){return this.string_0=this.string_0+(null!=t?t:"null"),this},Zn.prototype.capacity=function(){return this.length},Zn.prototype.ensureCapacity_za3lpa$=function(t){},Zn.prototype.indexOf_61zpoe$=function(t){return this.string_0.indexOf(t)},Zn.prototype.indexOf_bm4lxs$=function(t,e){return this.string_0.indexOf(t,e)},Zn.prototype.lastIndexOf_61zpoe$=function(t){return this.string_0.lastIndexOf(t)},Zn.prototype.lastIndexOf_bm4lxs$=function(t,e){return 0===t.length&&e<0?-1:this.string_0.lastIndexOf(t,e)},Zn.prototype.insert_fzusl$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_6t1mh3$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+String.fromCharCode(a(e))+this.string_0.substring(t),this},Zn.prototype.insert_7u455s$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+vr(e)+this.string_0.substring(t),this},Zn.prototype.insert_1u9bqd$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_6t2rgq$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_19mbxw$=function(t,e){return this.insert_vqvrqt$(t,e)},Zn.prototype.insert_vqvrqt$=function(t,e){Ar().checkPositionIndex_6xvm5r$(t,this.length);var n=null!=e?e:"null";return this.string_0=this.string_0.substring(0,t)+n+this.string_0.substring(t),this},Zn.prototype.setLength_za3lpa$=function(t){if(t<0)throw zt("Negative new length: "+t+".");if(t<=this.length)this.string_0=this.string_0.substring(0,t);else for(var e=this.length;en)throw new Tt("startIndex: "+t+", length: "+n);if(t>e)throw zt("startIndex("+t+") > endIndex("+e+")")},Zn.prototype.deleteAt_za3lpa$=function(t){return Ar().checkElementIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+this.string_0.substring(t+1|0),this},Zn.prototype.deleteRange_vux9f0$=function(t,e){return this.checkReplaceRange_0(t,e,this.length),this.string_0=this.string_0.substring(0,t)+this.string_0.substring(e),this},Zn.prototype.toCharArray_pqkatk$=function(t,e,n,r){var i;void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=this.length),Ar().checkBoundsIndexes_cub51b$(n,r,this.length),Ar().checkBoundsIndexes_cub51b$(e,e+r-n|0,t.length);for(var o=e,a=n;at.length)throw new Tt("index out of bounds: "+e+", input length: "+t.length);var n=this.initStickyPattern_0();return n.lastIndex=e,n.test(t.toString())},ar.prototype.find_905azu$=function(t,e){if(void 0===e&&(e=0),e<0||e>t.length)throw new Tt("Start index out of bounds: "+e+", input length: "+t.length);return dr(this.nativePattern_0,t.toString(),e,this.nativePattern_0)},ar.prototype.findAll_905azu$=function(t,e){if(void 0===e&&(e=0),e<0||e>t.length)throw new Tt("Start index out of bounds: "+e+", input length: "+t.length);return Oi((n=t,r=e,i=this,function(){return i.find_905azu$(n,r)}),sr);var n,r,i;},ar.prototype.matchEntire_6bul2c$=function(t){return dr(this.initMatchesEntirePattern_0(),t.toString(),0,this.nativePattern_0)},ar.prototype.matchAt_905azu$=function(t,e){if(e<0||e>t.length)throw new Tt("index out of bounds: "+e+", input length: "+t.length);return dr(this.initStickyPattern_0(),t.toString(),e,this.nativePattern_0)},ar.prototype.replace_x2uqeu$=function(t,e){return aa(e,92)||aa(e,36)?this.replace_20wsma$(t,(n=e,function(t){return mr(t,n)})):t.toString().replace(this.nativePattern_0,e);var n;},ar.prototype.replace_20wsma$=function(t,e){var n=this.find_905azu$(t);if(null==n)return t.toString();var r=0,i=t.length,o=Hn();do{var a=v(n);o.append_ezbsdh$(t,r,a.range.start),o.append_gw00v9$(e(a)),r=a.range.endInclusive+1|0,n=a.next();}while(r=f.size)throw new Tt("Group with index "+y+" does not exist");p.append_pdl1vj$(null!=(s=null!=(a=f.get_za3lpa$(y))?a.value:null)?s:""),u=_;}}else p.append_s8itvh$(c);}return p.toString()}function $r(t,e){for(var n=e;n0},Sr.prototype.nextIndex=function(){return this.index_0},Sr.prototype.previous=function(){if(!this.hasPrevious())throw Dt();return this.$outer.get_za3lpa$((this.index_0=this.index_0-1|0,this.index_0))},Sr.prototype.previousIndex=function(){return this.index_0-1|0},Sr.$metadata$={kind:n,simpleName:"ListIteratorImpl",interfaces:[_t,Nr]},Ir.prototype.checkElementIndex_6xvm5r$=function(t,e){if(t<0||t>=e)throw new Tt("index: "+t+", size: "+e)},Ir.prototype.checkPositionIndex_6xvm5r$=function(t,e){if(t<0||t>e)throw new Tt("index: "+t+", size: "+e)},Ir.prototype.checkRangeIndexes_cub51b$=function(t,e,n){if(t<0||e>n)throw new Tt("fromIndex: "+t+", toIndex: "+e+", size: "+n);if(t>e)throw zt("fromIndex: "+t+" > toIndex: "+e)},Ir.prototype.checkBoundsIndexes_cub51b$=function(t,e,n){if(t<0||e>n)throw new Tt("startIndex: "+t+", endIndex: "+e+", size: "+n);if(t>e)throw zt("startIndex: "+t+" > endIndex: "+e)},Ir.prototype.orderedHashCode_nykoif$=function(t){var e,n,r=1;for(e=t.iterator();e.hasNext();){var i=e.next();r=(31*r|0)+(null!=(n=null!=i?C(i):null)?n:0)|0;}return r},Ir.prototype.orderedEquals_e92ka7$=function(t,e){var n;if(t.size!==e.size)return !1;var r=e.iterator();for(n=t.iterator();n.hasNext();){var i=n.next(),a=r.next();if(!o(i,a))return !1}return !0},Ir.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Er=null;function Ar(){return null===Er&&new Ir,Er}function zr(){qr(),this._keys_up5z3z$_0=null,this._values_6nw1f1$_0=null;}function jr(t){this.this$AbstractMap=t,Br.call(this);}function Lr(t){this.closure$entryIterator=t;}function Tr(t){this.this$AbstractMap=t,kr.call(this);}function Mr(t){this.closure$entryIterator=t;}function Rr(){Pr=this;}Cr.$metadata$={kind:n,simpleName:"AbstractList",interfaces:[it,kr]},zr.prototype.containsKey_11rb$=function(t){return null!=this.implFindEntry_8k1i24$_0(t)},zr.prototype.containsValue_11rc$=function(e){var n,r=this.entries;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!1;break t}for(i=r.iterator();i.hasNext();){var a=i.next();if(o(a.value,e)){n=!0;break t}}n=!1;}while(0);return n},zr.prototype.containsEntry_8hxqw4$=function(e){if(!t.isType(e,pt))return !1;var n=e.key,r=e.value,i=(t.isType(this,ut)?this:y()).get_11rb$(n);if(!o(r,i))return !1;var a=null==i;return a&&(a=!(t.isType(this,ut)?this:y()).containsKey_11rb$(n)),!a},zr.prototype.equals=function(e){if(e===this)return !0;if(!t.isType(e,ut))return !1;if(this.size!==e.size)return !1;var n,r=e.entries;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!0;break t}for(i=r.iterator();i.hasNext();){var o=i.next();if(!this.containsEntry_8hxqw4$(o)){n=!1;break t}}n=!0;}while(0);return n},zr.prototype.get_11rb$=function(t){var e;return null!=(e=this.implFindEntry_8k1i24$_0(t))?e.value:null},zr.prototype.hashCode=function(){return C(this.entries)},zr.prototype.isEmpty=function(){return 0===this.size},Object.defineProperty(zr.prototype,"size",{configurable:!0,get:function(){return this.entries.size}}),jr.prototype.contains_11rb$=function(t){return this.this$AbstractMap.containsKey_11rb$(t)},Lr.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},Lr.prototype.next=function(){return this.closure$entryIterator.next().key},Lr.$metadata$={kind:n,interfaces:[ht]},jr.prototype.iterator=function(){return new Lr(this.this$AbstractMap.entries.iterator())},Object.defineProperty(jr.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMap.size}}),jr.$metadata$={kind:n,interfaces:[Br]},Object.defineProperty(zr.prototype,"keys",{configurable:!0,get:function(){return null==this._keys_up5z3z$_0&&(this._keys_up5z3z$_0=new jr(this)),v(this._keys_up5z3z$_0)}}),zr.prototype.toString=function(){return V(this.entries,", ","{","}",void 0,void 0,(t=this,function(e){return t.toString_55he67$_0(e)}));var t;},zr.prototype.toString_55he67$_0=function(t){return this.toString_kthv8s$_0(t.key)+"="+this.toString_kthv8s$_0(t.value)},zr.prototype.toString_kthv8s$_0=function(t){return t===this?"(this Map)":_(t)},Tr.prototype.contains_11rb$=function(t){return this.this$AbstractMap.containsValue_11rc$(t)},Mr.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},Mr.prototype.next=function(){return this.closure$entryIterator.next().value},Mr.$metadata$={kind:n,interfaces:[ht]},Tr.prototype.iterator=function(){return new Mr(this.this$AbstractMap.entries.iterator())},Object.defineProperty(Tr.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMap.size}}),Tr.$metadata$={kind:n,interfaces:[kr]},Object.defineProperty(zr.prototype,"values",{configurable:!0,get:function(){return null==this._values_6nw1f1$_0&&(this._values_6nw1f1$_0=new Tr(this)),v(this._values_6nw1f1$_0)}}),zr.prototype.implFindEntry_8k1i24$_0=function(t){var e,n=this.entries;t:do{var r;for(r=n.iterator();r.hasNext();){var i=r.next();if(o(i.key,t)){e=i;break t}}e=null;}while(0);return e},Rr.prototype.entryHashCode_9fthdn$=function(t){var e,n,r,i;return (null!=(n=null!=(e=t.key)?C(e):null)?n:0)^(null!=(i=null!=(r=t.value)?C(r):null)?i:0)},Rr.prototype.entryToString_9fthdn$=function(t){return _(t.key)+"="+_(t.value)},Rr.prototype.entryEquals_js7fox$=function(e,n){return !!t.isType(n,pt)&&o(e.key,n.key)&&o(e.value,n.value)},Rr.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Pr=null;function qr(){return null===Pr&&new Rr,Pr}function Br(){Dr(),kr.call(this);}function Ur(){Fr=this;}zr.$metadata$={kind:n,simpleName:"AbstractMap",interfaces:[ut]},Br.prototype.equals=function(e){return e===this||!!t.isType(e,at)&&Dr().setEquals_y8f7en$(this,e)},Br.prototype.hashCode=function(){return Dr().unorderedHashCode_nykoif$(this)},Ur.prototype.unorderedHashCode_nykoif$=function(t){var e,n=0;for(e=t.iterator();e.hasNext();){var r,i=e.next();n=n+(null!=(r=null!=i?C(i):null)?r:0)|0;}return n},Ur.prototype.setEquals_y8f7en$=function(t,e){return t.size===e.size&&t.containsAll_brywnq$(e)},Ur.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Fr=null;function Dr(){return null===Fr&&new Ur,Fr}function Vr(){Wr=this;}Br.$metadata$={kind:n,simpleName:"AbstractSet",interfaces:[at,kr]},Vr.prototype.hasNext=function(){return !1},Vr.prototype.hasPrevious=function(){return !1},Vr.prototype.nextIndex=function(){return 0},Vr.prototype.previousIndex=function(){return -1},Vr.prototype.next=function(){throw Dt()},Vr.prototype.previous=function(){throw Dt()},Vr.$metadata$={kind:m,simpleName:"EmptyIterator",interfaces:[_t]};var Wr=null;function Kr(){return null===Wr&&new Vr,Wr}function Zr(t){return new mo(0,t.size-1|0)}function Hr(t){return t.size-1|0}function Jr(){throw new Vt("Index overflow has happened.")}function Xr(t,e){return ti(t,e,!0)}function ti(t,e,n){for(var r={v:!1},i=t.iterator();i.hasNext();)e(i.next())===n&&(i.remove(),r.v=!0);return r.v}function ei(e,n){return function(e,n,r){var i,o,a;if(!t.isType(e,Ze))return ti(t.isType(i=e,et)?i:tn(),n,r);var s=0;o=Hr(e);for(var u=0;u<=o;u++){var p=e.get_za3lpa$(u);n(p)!==r&&(s!==u&&e.set_wxm5ur$(s,p),s=s+1|0);}if(s=a;c--)e.removeAt_za3lpa$(c);return !0}return !1}(e,n,!0)}function ni(){}function ri(){}function ii(){}function oi(){}function ai(t){this.closure$iterator=t;}function si(t){return new ai((e=t,function(){return ui(e)}));var e;}function ui(t){var e=new ci;return e.nextStep=Ct(t,e,e),e}function pi(){}function ci(){pi.call(this),this.state_0=0,this.nextValue_0=null,this.nextIterator_0=null,this.nextStep=null;}function li(){return _i()}function hi(){fi=this;}ni.prototype.next=function(){return a(this.nextChar())},ni.$metadata$={kind:n,simpleName:"CharIterator",interfaces:[ht]},ri.prototype.next=function(){return this.nextInt()},ri.$metadata$={kind:n,simpleName:"IntIterator",interfaces:[ht]},ii.prototype.next=function(){return this.nextLong()},ii.$metadata$={kind:n,simpleName:"LongIterator",interfaces:[ht]},oi.$metadata$={kind:d,simpleName:"Sequence",interfaces:[]},ai.prototype.iterator=function(){return this.closure$iterator()},ai.$metadata$={kind:n,interfaces:[oi]},pi.prototype.yieldAll_p1ys8y$=function(e,n){if(!t.isType(e,nt)||!e.isEmpty())return this.yieldAll_1phuh2$(e.iterator(),n)},pi.prototype.yieldAll_swo9gw$=function(t,e){return this.yieldAll_1phuh2$(t.iterator(),e)},pi.$metadata$={kind:n,simpleName:"SequenceScope",interfaces:[]},ci.prototype.hasNext=function(){for(;;){switch(this.state_0){case 0:break;case 1:if(v(this.nextIterator_0).hasNext())return this.state_0=2,!0;this.nextIterator_0=null;break;case 4:return !1;case 3:case 2:return !0;default:throw this.exceptionalState_0()}this.state_0=5;var t=v(this.nextStep);this.nextStep=null,t.resumeWith_tl1gpc$(new $a($t()));}},ci.prototype.next=function(){var e;switch(this.state_0){case 0:case 1:return this.nextNotReady_0();case 2:return this.state_0=1,v(this.nextIterator_0).next();case 3:this.state_0=0;var n=null==(e=this.nextValue_0)||t.isType(e,b)?e:tn();return this.nextValue_0=null,n;default:throw this.exceptionalState_0()}},ci.prototype.nextNotReady_0=function(){if(this.hasNext())return this.next();throw Dt()},ci.prototype.exceptionalState_0=function(){switch(this.state_0){case 4:return Dt();case 5:return Lt("Iterator has failed.");default:return Lt("Unexpected state of the iterator: "+this.state_0)}},ci.prototype.yield_11rb$=function(t,e){return this.nextValue_0=t,this.state_0=3,(n=this,function(t){return n.nextStep=t,to()})(e);var n;},ci.prototype.yieldAll_1phuh2$=function(t,e){if(t.hasNext())return this.nextIterator_0=t,this.state_0=2,(n=this,function(t){return n.nextStep=t,to()})(e);var n;},ci.prototype.resumeWith_tl1gpc$=function(e){var n;ka(e),null==(n=e.value)||t.isType(n,b)||y(),this.state_0=4;},Object.defineProperty(ci.prototype,"context",{configurable:!0,get:function(){return Wi()}}),ci.$metadata$={kind:n,simpleName:"SequenceBuilderIterator",interfaces:[ji,ht,pi]},hi.prototype.iterator=function(){return Kr()},hi.prototype.drop_za3lpa$=function(t){return _i()},hi.prototype.take_za3lpa$=function(t){return _i()},hi.$metadata$={kind:m,simpleName:"EmptySequence",interfaces:[gi,oi]};var fi=null;function _i(){return null===fi&&new hi,fi}function yi(t,e){this.sequence_0=t,this.transformer_0=e;}function di(t){this.this$TransformingSequence=t,this.iterator=t.sequence_0.iterator();}function mi(t,e,n){this.sequence_0=t,this.transformer_0=e,this.iterator_0=n;}function $i(t){this.this$FlatteningSequence=t,this.iterator=t.sequence_0.iterator(),this.itemIterator=null;}function gi(){}function vi(t,e,n){if(this.sequence_0=t,this.startIndex_0=e,this.endIndex_0=n,!(this.startIndex_0>=0))throw zt(("startIndex should be non-negative, but is "+this.startIndex_0).toString());if(!(this.endIndex_0>=0))throw zt(("endIndex should be non-negative, but is "+this.endIndex_0).toString());if(!(this.endIndex_0>=this.startIndex_0))throw zt(("endIndex should be not less than startIndex, but was "+this.endIndex_0+" < "+this.startIndex_0).toString())}function bi(t){this.this$SubSequence=t,this.iterator=t.sequence_0.iterator(),this.position=0;}function xi(t,e){if(this.sequence_0=t,this.count_0=e,!(this.count_0>=0))throw zt(("count must be non-negative, but was "+this.count_0+".").toString())}function wi(t){this.left=t.count_0,this.iterator=t.sequence_0.iterator();}function ki(t,e){this.getInitialValue_0=t,this.getNextValue_0=e;}function Ci(t){this.this$GeneratorSequence=t,this.nextItem=null,this.nextState=-2;}function Oi(t,e){return new ki(t,e)}function Ni(){Si=this,this.serialVersionUID_0=N;}di.prototype.next=function(){return this.this$TransformingSequence.transformer_0(this.iterator.next())},di.prototype.hasNext=function(){return this.iterator.hasNext()},di.$metadata$={kind:n,interfaces:[ht]},yi.prototype.iterator=function(){return new di(this)},yi.prototype.flatten_1tglza$=function(t){return new mi(this.sequence_0,this.transformer_0,t)},yi.$metadata$={kind:n,simpleName:"TransformingSequence",interfaces:[oi]},$i.prototype.next=function(){if(!this.ensureItemIterator_0())throw Dt();return v(this.itemIterator).next()},$i.prototype.hasNext=function(){return this.ensureItemIterator_0()},$i.prototype.ensureItemIterator_0=function(){var t;for(!1===(null!=(t=this.itemIterator)?t.hasNext():null)&&(this.itemIterator=null);null==this.itemIterator;){if(!this.iterator.hasNext())return !1;var e=this.iterator.next(),n=this.this$FlatteningSequence.iterator_0(this.this$FlatteningSequence.transformer_0(e));if(n.hasNext())return this.itemIterator=n,!0}return !0},$i.$metadata$={kind:n,interfaces:[ht]},mi.prototype.iterator=function(){return new $i(this)},mi.$metadata$={kind:n,simpleName:"FlatteningSequence",interfaces:[oi]},gi.$metadata$={kind:d,simpleName:"DropTakeSequence",interfaces:[oi]},Object.defineProperty(vi.prototype,"count_0",{configurable:!0,get:function(){return this.endIndex_0-this.startIndex_0|0}}),vi.prototype.drop_za3lpa$=function(t){return t>=this.count_0?li():new vi(this.sequence_0,this.startIndex_0+t|0,this.endIndex_0)},vi.prototype.take_za3lpa$=function(t){return t>=this.count_0?this:new vi(this.sequence_0,this.startIndex_0,this.startIndex_0+t|0)},bi.prototype.drop_0=function(){for(;this.position=this.this$SubSequence.endIndex_0)throw Dt();return this.position=this.position+1|0,this.iterator.next()},bi.$metadata$={kind:n,interfaces:[ht]},vi.prototype.iterator=function(){return new bi(this)},vi.$metadata$={kind:n,simpleName:"SubSequence",interfaces:[gi,oi]},xi.prototype.drop_za3lpa$=function(t){return t>=this.count_0?li():new vi(this.sequence_0,t,this.count_0)},xi.prototype.take_za3lpa$=function(t){return t>=this.count_0?this:new xi(this.sequence_0,t)},wi.prototype.next=function(){if(0===this.left)throw Dt();return this.left=this.left-1|0,this.iterator.next()},wi.prototype.hasNext=function(){return this.left>0&&this.iterator.hasNext()},wi.$metadata$={kind:n,interfaces:[ht]},xi.prototype.iterator=function(){return new wi(this)},xi.$metadata$={kind:n,simpleName:"TakeSequence",interfaces:[gi,oi]},Ci.prototype.calcNext_0=function(){this.nextItem=-2===this.nextState?this.this$GeneratorSequence.getInitialValue_0():this.this$GeneratorSequence.getNextValue_0(v(this.nextItem)),this.nextState=null==this.nextItem?0:1;},Ci.prototype.next=function(){var e;if(this.nextState<0&&this.calcNext_0(),0===this.nextState)throw Dt();var n=t.isType(e=this.nextItem,b)?e:tn();return this.nextState=-1,n},Ci.prototype.hasNext=function(){return this.nextState<0&&this.calcNext_0(),1===this.nextState},Ci.$metadata$={kind:n,interfaces:[ht]},ki.prototype.iterator=function(){return new Ci(this)},ki.$metadata$={kind:n,simpleName:"GeneratorSequence",interfaces:[oi]},Ni.prototype.equals=function(e){return t.isType(e,at)&&e.isEmpty()},Ni.prototype.hashCode=function(){return 0},Ni.prototype.toString=function(){return "[]"},Object.defineProperty(Ni.prototype,"size",{configurable:!0,get:function(){return 0}}),Ni.prototype.isEmpty=function(){return !0},Ni.prototype.contains_11rb$=function(t){return !1},Ni.prototype.containsAll_brywnq$=function(t){return t.isEmpty()},Ni.prototype.iterator=function(){return Kr()},Ni.prototype.readResolve_0=function(){return Ii()},Ni.$metadata$={kind:m,simpleName:"EmptySet",interfaces:[nn,at]};var Si=null;function Ii(){return null===Si&&new Ni,Si}function Ei(){return Ii()}function Ai(t){return M(t,Ae(t.length))}function zi(t){switch(t.size){case 0:return Ei();case 1:return ee(t.iterator().next());default:return t}}function ji(){}function Li(){Ri();}function Ti(){Mi=this;}ji.$metadata$={kind:d,simpleName:"Continuation",interfaces:[]},r("kotlin.kotlin.coroutines.suspendCoroutine_922awp$",i((function(){var n=e.kotlin.coroutines.intrinsics.intercepted_f9mg25$,r=e.kotlin.coroutines.SafeContinuation_init_wj8d80$;return function(e,i){return t.suspendCall((o=e,function(t){var e=r(n(t));return o(e),e.getOrThrow()})(t.coroutineReceiver())),t.coroutineResult(t.coroutineReceiver());var o;}}))),Ti.$metadata$={kind:m,simpleName:"Key",interfaces:[Bi]};var Mi=null;function Ri(){return null===Mi&&new Ti,Mi}function Pi(){}function qi(t,e){var n=t.minusKey_yeqjby$(e.key);if(n===Wi())return e;var r=n.get_j3r2sn$(Ri());if(null==r)return new Ki(n,e);var i=n.minusKey_yeqjby$(Ri());return i===Wi()?new Ki(e,r):new Ki(new Ki(i,e),r)}function Bi(){}function Ui(){}function Fi(t){this.key_no4tas$_0=t;}function Di(){Vi=this,this.serialVersionUID_0=u;}Pi.prototype.plus_1fupul$=function(t){return t===Wi()?this:t.fold_3cc69b$(this,qi)},Bi.$metadata$={kind:d,simpleName:"Key",interfaces:[]},Ui.prototype.get_j3r2sn$=function(e){return o(this.key,e)?t.isType(this,Ui)?this:tn():null},Ui.prototype.fold_3cc69b$=function(t,e){return e(t,this)},Ui.prototype.minusKey_yeqjby$=function(t){return o(this.key,t)?Wi():this},Ui.$metadata$={kind:d,simpleName:"Element",interfaces:[Pi]},Pi.$metadata$={kind:d,simpleName:"CoroutineContext",interfaces:[]},Di.prototype.readResolve_0=function(){return Wi()},Di.prototype.get_j3r2sn$=function(t){return null},Di.prototype.fold_3cc69b$=function(t,e){return t},Di.prototype.plus_1fupul$=function(t){return t},Di.prototype.minusKey_yeqjby$=function(t){return this},Di.prototype.hashCode=function(){return 0},Di.prototype.toString=function(){return "EmptyCoroutineContext"},Di.$metadata$={kind:m,simpleName:"EmptyCoroutineContext",interfaces:[nn,Pi]};var Vi=null;function Wi(){return null===Vi&&new Di,Vi}function Ki(t,e){this.left_0=t,this.element_0=e;}function Zi(t,e){return 0===t.length?e.toString():t+", "+e}function Hi(t){this.elements=t;}Ki.prototype.get_j3r2sn$=function(e){for(var n,r=this;;){if(null!=(n=r.element_0.get_j3r2sn$(e)))return n;var i=r.left_0;if(!t.isType(i,Ki))return i.get_j3r2sn$(e);r=i;}},Ki.prototype.fold_3cc69b$=function(t,e){return e(this.left_0.fold_3cc69b$(t,e),this.element_0)},Ki.prototype.minusKey_yeqjby$=function(t){if(null!=this.element_0.get_j3r2sn$(t))return this.left_0;var e=this.left_0.minusKey_yeqjby$(t);return e===this.left_0?this:e===Wi()?this.element_0:new Ki(e,this.element_0)},Ki.prototype.size_0=function(){for(var e,n,r=this,i=2;;){if(null==(n=t.isType(e=r.left_0,Ki)?e:null))return i;r=n,i=i+1|0;}},Ki.prototype.contains_0=function(t){return o(this.get_j3r2sn$(t.key),t)},Ki.prototype.containsAll_0=function(e){for(var n,r=e;;){if(!this.contains_0(r.element_0))return !1;var i=r.left_0;if(!t.isType(i,Ki))return this.contains_0(t.isType(n=i,Ui)?n:tn());r=i;}},Ki.prototype.equals=function(e){return this===e||t.isType(e,Ki)&&e.size_0()===this.size_0()&&e.containsAll_0(this)},Ki.prototype.hashCode=function(){return C(this.left_0)+C(this.element_0)|0},Ki.prototype.toString=function(){return "["+this.fold_3cc69b$("",Zi)+"]"},Ki.prototype.writeReplace_0=function(){var e,n,r,i=this.size_0(),o=t.newArray(i,null),a={v:0};if(this.fold_3cc69b$($t(),(n=o,r=a,function(t,e){var i;return n[(i=r.v,r.v=i+1|0,i)]=e,dt})),a.v!==i)throw Lt("Check failed.".toString());return new Hi(t.isArray(e=o)?e:tn())};var Gi,Qi,Yi;function to(){return ro()}function eo(t,e){$.call(this),this.name$=t,this.ordinal$=e;}function no(){no=function(){},Gi=new eo("COROUTINE_SUSPENDED",0),Qi=new eo("UNDECIDED",1),Yi=new eo("RESUMED",2);}function ro(){return no(),Gi}function io(){return no(),Qi}function oo(){return no(),Yi}function ao(t,e){var n=t%e|0;return n>=0?n:n+e|0}function so(t,e){var n=t.modulo(e);return n.toNumber()>=0?n:n.add(e)}function uo(t,e,n){return ao(ao(t,n)-ao(e,n)|0,n)}function po(t,e,n){return so(so(t,n).subtract(so(e,n)),n)}function co(t,e,n){if(n>0)return t>=e?e:e-uo(e,t,n)|0;if(n<0)return t<=e?e:e+uo(t,e,0|-n)|0;throw zt("Step is zero.")}function lo(t,e,n){if(n.toNumber()>0)return t.compareTo_11rb$(e)>=0?e:e.subtract(po(e,t,n));if(n.toNumber()<0)return t.compareTo_11rb$(e)<=0?e:e.add(po(t,e,n.unaryMinus()));throw zt("Step is zero.")}function ho(t,e){yo(),So.call(this,t,e,1);}function fo(){_o=this,this.EMPTY=new ho(c(1),c(0));}Hi.prototype.readResolve_0=function(){var t,e=this.elements,n=Wi();for(t=0;t!==e.length;++t){var r=e[t];n=n.plus_1fupul$(r);}return n},Hi.$metadata$={kind:n,simpleName:"Serialized",interfaces:[nn]},Ki.$metadata$={kind:n,simpleName:"CombinedContext",interfaces:[nn,Pi]},r("kotlin.kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn_zb0pmy$",i((function(){var t=e.kotlin.NotImplementedError;return function(e,n){throw new t("Implementation of suspendCoroutineUninterceptedOrReturn is intrinsic")}}))),eo.$metadata$={kind:n,simpleName:"CoroutineSingletons",interfaces:[$]},eo.values=function(){return [ro(),io(),oo()]},eo.valueOf_61zpoe$=function(t){switch(t){case"COROUTINE_SUSPENDED":return ro();case"UNDECIDED":return io();case"RESUMED":return oo();default:en("No enum constant kotlin.coroutines.intrinsics.CoroutineSingletons."+t);}},Object.defineProperty(ho.prototype,"start",{configurable:!0,get:function(){return a(this.first)}}),Object.defineProperty(ho.prototype,"endInclusive",{configurable:!0,get:function(){return a(this.last)}}),Object.defineProperty(ho.prototype,"endExclusive",{configurable:!0,get:function(){if(this.last===O.MAX_VALUE)throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return a(c(this.last+1))}}),ho.prototype.contains_mef7kx$=function(t){return this.first<=t&&t<=this.last},ho.prototype.isEmpty=function(){return this.first>this.last},ho.prototype.equals=function(e){return t.isType(e,ho)&&(this.isEmpty()&&e.isEmpty()||this.first===e.first&&this.last===e.last)},ho.prototype.hashCode=function(){return this.isEmpty()?-1:(31*(0|this.first)|0)+(0|this.last)|0},ho.prototype.toString=function(){return String.fromCharCode(this.first)+".."+String.fromCharCode(this.last)},fo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var _o=null;function yo(){return null===_o&&new fo,_o}function mo(t,e){vo(),zo.call(this,t,e,1);}function $o(){go=this,this.EMPTY=new mo(1,0);}ho.$metadata$={kind:n,simpleName:"CharRange",interfaces:[Uo,Bo,So]},Object.defineProperty(mo.prototype,"start",{configurable:!0,get:function(){return this.first}}),Object.defineProperty(mo.prototype,"endInclusive",{configurable:!0,get:function(){return this.last}}),Object.defineProperty(mo.prototype,"endExclusive",{configurable:!0,get:function(){if(2147483647===this.last)throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return this.last+1|0}}),mo.prototype.contains_mef7kx$=function(t){return this.first<=t&&t<=this.last},mo.prototype.isEmpty=function(){return this.first>this.last},mo.prototype.equals=function(e){return t.isType(e,mo)&&(this.isEmpty()&&e.isEmpty()||this.first===e.first&&this.last===e.last)},mo.prototype.hashCode=function(){return this.isEmpty()?-1:(31*this.first|0)+this.last|0},mo.prototype.toString=function(){return this.first.toString()+".."+this.last},$o.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var go=null;function vo(){return null===go&&new $o,go}function bo(t,e){ko(),Mo.call(this,t,e,S);}function xo(){wo=this,this.EMPTY=new bo(S,u);}mo.$metadata$={kind:n,simpleName:"IntRange",interfaces:[Uo,Bo,zo]},Object.defineProperty(bo.prototype,"start",{configurable:!0,get:function(){return this.first}}),Object.defineProperty(bo.prototype,"endInclusive",{configurable:!0,get:function(){return this.last}}),Object.defineProperty(bo.prototype,"endExclusive",{configurable:!0,get:function(){if(o(this.last,f))throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return this.last.add(t.Long.fromInt(1))}}),bo.prototype.contains_mef7kx$=function(t){return this.first.compareTo_11rb$(t)<=0&&t.compareTo_11rb$(this.last)<=0},bo.prototype.isEmpty=function(){return this.first.compareTo_11rb$(this.last)>0},bo.prototype.equals=function(e){return t.isType(e,bo)&&(this.isEmpty()&&e.isEmpty()||o(this.first,e.first)&&o(this.last,e.last))},bo.prototype.hashCode=function(){return this.isEmpty()?-1:t.Long.fromInt(31).multiply(this.first.xor(this.first.shiftRightUnsigned(32))).add(this.last.xor(this.last.shiftRightUnsigned(32))).toInt()},bo.prototype.toString=function(){return this.first.toString()+".."+this.last.toString()},xo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var wo=null;function ko(){return null===wo&&new xo,wo}function Co(t,e,n){ni.call(this),this.step=n,this.finalElement_0=0|e,this.hasNext_0=this.step>0?t<=e:t>=e,this.next_0=this.hasNext_0?0|t:this.finalElement_0;}function Oo(t,e,n){ri.call(this),this.step=n,this.finalElement_0=e,this.hasNext_0=this.step>0?t<=e:t>=e,this.next_0=this.hasNext_0?t:this.finalElement_0;}function No(t,e,n){ii.call(this),this.step=n,this.finalElement_0=e,this.hasNext_0=this.step.toNumber()>0?t.compareTo_11rb$(e)<=0:t.compareTo_11rb$(e)>=0,this.next_0=this.hasNext_0?t:this.finalElement_0;}function So(t,e,n){if(Ao(),0===n)throw zt("Step must be non-zero.");if(-2147483648===n)throw zt("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=c(co(0|t,0|e,n)),this.step=n;}function Io(){Eo=this;}bo.$metadata$={kind:n,simpleName:"LongRange",interfaces:[Uo,Bo,Mo]},Co.prototype.hasNext=function(){return this.hasNext_0},Co.prototype.nextChar=function(){var t=this.next_0;if(t===this.finalElement_0){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0+this.step|0;return c(t)},Co.$metadata$={kind:n,simpleName:"CharProgressionIterator",interfaces:[ni]},Oo.prototype.hasNext=function(){return this.hasNext_0},Oo.prototype.nextInt=function(){var t=this.next_0;if(t===this.finalElement_0){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0+this.step|0;return t},Oo.$metadata$={kind:n,simpleName:"IntProgressionIterator",interfaces:[ri]},No.prototype.hasNext=function(){return this.hasNext_0},No.prototype.nextLong=function(){var t=this.next_0;if(o(t,this.finalElement_0)){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0.add(this.step);return t},No.$metadata$={kind:n,simpleName:"LongProgressionIterator",interfaces:[ii]},So.prototype.iterator=function(){return new Co(this.first,this.last,this.step)},So.prototype.isEmpty=function(){return this.step>0?this.first>this.last:this.first0?String.fromCharCode(this.first)+".."+String.fromCharCode(this.last)+" step "+this.step:String.fromCharCode(this.first)+" downTo "+String.fromCharCode(this.last)+" step "+(0|-this.step)},Io.prototype.fromClosedRange_ayra44$=function(t,e,n){return new So(t,e,n)},Io.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Eo=null;function Ao(){return null===Eo&&new Io,Eo}function zo(t,e,n){if(To(),0===n)throw zt("Step must be non-zero.");if(-2147483648===n)throw zt("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=co(t,e,n),this.step=n;}function jo(){Lo=this;}So.$metadata$={kind:n,simpleName:"CharProgression",interfaces:[tt]},zo.prototype.iterator=function(){return new Oo(this.first,this.last,this.step)},zo.prototype.isEmpty=function(){return this.step>0?this.first>this.last:this.first0?this.first.toString()+".."+this.last+" step "+this.step:this.first.toString()+" downTo "+this.last+" step "+(0|-this.step)},jo.prototype.fromClosedRange_qt1dr2$=function(t,e,n){return new zo(t,e,n)},jo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Lo=null;function To(){return null===Lo&&new jo,Lo}function Mo(t,e,n){if(qo(),o(n,u))throw zt("Step must be non-zero.");if(o(n,h))throw zt("Step must be greater than Long.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=lo(t,e,n),this.step=n;}function Ro(){Po=this;}zo.$metadata$={kind:n,simpleName:"IntProgression",interfaces:[tt]},Mo.prototype.iterator=function(){return new No(this.first,this.last,this.step)},Mo.prototype.isEmpty=function(){return this.step.toNumber()>0?this.first.compareTo_11rb$(this.last)>0:this.first.compareTo_11rb$(this.last)<0},Mo.prototype.equals=function(e){return t.isType(e,Mo)&&(this.isEmpty()&&e.isEmpty()||o(this.first,e.first)&&o(this.last,e.last)&&o(this.step,e.step))},Mo.prototype.hashCode=function(){return this.isEmpty()?-1:t.Long.fromInt(31).multiply(t.Long.fromInt(31).multiply(this.first.xor(this.first.shiftRightUnsigned(32))).add(this.last.xor(this.last.shiftRightUnsigned(32)))).add(this.step.xor(this.step.shiftRightUnsigned(32))).toInt()},Mo.prototype.toString=function(){return this.step.toNumber()>0?this.first.toString()+".."+this.last.toString()+" step "+this.step.toString():this.first.toString()+" downTo "+this.last.toString()+" step "+this.step.unaryMinus().toString()},Ro.prototype.fromClosedRange_b9bd0d$=function(t,e,n){return new Mo(t,e,n)},Ro.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Po=null;function qo(){return null===Po&&new Ro,Po}function Bo(){}function Uo(){}function Vo(){}function Wo(e,n,r){null!=r?e.append_gw00v9$(r(n)):null==n||t.isCharSequence(n)?e.append_gw00v9$(n):t.isChar(n)?e.append_s8itvh$(s(n)):e.append_gw00v9$(_(n));}function Ko(t,e,n){if(void 0===n&&(n=!1),t===e)return !0;if(!n)return !1;var r=Gn(t),i=Gn(e),o=r===i;return o||(o=String.fromCharCode(r).toLowerCase().charCodeAt(0)===String.fromCharCode(i).toLowerCase().charCodeAt(0)),o}function Zo(t){return Ho(t,10)}function Ho(e,n){tr(n);var r,i,o,a=e.length;if(0===a)return null;var s=e.charCodeAt(0);if(s<48){if(1===a)return null;if(r=1,45===s)i=!0,o=-2147483648;else {if(43!==s)return null;i=!1,o=-2147483647;}}else r=0,i=!1,o=-2147483647;for(var u=-59652323,p=u,c=0,l=r;l(t.length-i|0)||r>(n.length-i|0))return !1;for(var a=0;a0&&Ko(t.charCodeAt(0),e,n)}function ra(t,e,n){return void 0===n&&(n=!1),t.length>0&&Ko(t.charCodeAt(ta(t)),e,n)}function ia(t,e,n,r){var i,o;if(void 0===n&&(n=0),void 0===r&&(r=!1),!r&&1===e.length&&"string"==typeof t){var u=j(e);return t.indexOf(String.fromCharCode(u),n)}i=H(n,0),o=ta(t);for(var p=i;p<=o;p++){var c,l=t.charCodeAt(p);t:do{var h;for(h=0;h!==e.length;++h){var f=s(e[h]);if(Ko(s(a(f)),l,r)){c=!0;break t}}c=!1;}while(0);if(c)return p}return -1}function oa(e,n,r,i){return void 0===r&&(r=0),void 0===i&&(i=!1),i||"string"!=typeof e?ia(e,t.charArrayOf(n),r,i):e.indexOf(String.fromCharCode(n),r)}function aa(t,e,n){return void 0===n&&(n=!1),oa(t,e,void 0,n)>=0}function sa(t){if(!(t>=0))throw zt(("Limit must be non-negative, but was "+t).toString())}function ua(){}function pa(){}function ca(){}function la(t){this.match=t;}function ha(){}function fa(){_a=this;}Mo.$metadata$={kind:n,simpleName:"LongProgression",interfaces:[tt]},Bo.prototype.contains_mef7kx$=function(e){return t.compareTo(e,this.start)>=0&&t.compareTo(e,this.endInclusive)<=0},Bo.prototype.isEmpty=function(){return t.compareTo(this.start,this.endInclusive)>0},Bo.$metadata$={kind:d,simpleName:"ClosedRange",interfaces:[]},Uo.prototype.contains_mef7kx$=function(e){return t.compareTo(e,this.start)>=0&&t.compareTo(e,this.endExclusive)<0},Uo.prototype.isEmpty=function(){return t.compareTo(this.start,this.endExclusive)>=0},Uo.$metadata$={kind:d,simpleName:"OpenEndRange",interfaces:[]},Vo.$metadata$={kind:d,simpleName:"KClassifier",interfaces:[]},Yo.prototype.nextChar=function(){var t,e;return t=this.index_0,this.index_0=t+1|0,e=t,this.this$iterator.charCodeAt(e)},Yo.prototype.hasNext=function(){return this.index_00?R(t):Ei()},Sa.hashSetOf_i5x0yv$=Ai,Sa.optimizeReadOnlySet_94kdbt$=zi,La.Continuation=ji,Oa.Result=$a,Ta.get_COROUTINE_SUSPENDED=to,Object.defineProperty(Li,"Key",{get:Ri}),La.ContinuationInterceptor=Li,Pi.Key=Bi,Pi.Element=Ui,La.CoroutineContext=Pi,La.AbstractCoroutineContextElement=Fi,Object.defineProperty(La,"EmptyCoroutineContext",{get:Wi}),La.CombinedContext=Ki,Object.defineProperty(Ta,"COROUTINE_SUSPENDED",{get:to}),Object.defineProperty(eo,"COROUTINE_SUSPENDED",{get:ro}),Object.defineProperty(eo,"UNDECIDED",{get:io}),Object.defineProperty(eo,"RESUMED",{get:oo}),Ta.CoroutineSingletons=eo,Na.getProgressionLastElement_qt1dr2$=co,Na.getProgressionLastElement_b9bd0d$=lo,Object.defineProperty(ho,"Companion",{get:yo}),Ia.CharRange=ho,Object.defineProperty(mo,"Companion",{get:vo}),Ia.IntRange=mo,Object.defineProperty(bo,"Companion",{get:ko}),Ia.LongRange=bo,Ia.CharProgressionIterator=Co,Ia.IntProgressionIterator=Oo,Ia.LongProgressionIterator=No,Object.defineProperty(So,"Companion",{get:Ao}),Ia.CharProgression=So,Object.defineProperty(zo,"Companion",{get:To}),Ia.IntProgression=zo,Object.defineProperty(Mo,"Companion",{get:qo}),Ia.LongProgression=Mo,Ia.OpenEndRange=Uo,Ma.KClassifier=Vo,Ea.appendElement_k2zgzt$=Wo,Ea.equals_4lte5s$=Ko,Ea.toIntOrNull_pdl1vz$=Zo,Ea.toIntOrNull_6ic1pp$=Ho,Ea.numberFormatError_y4putb$=Jo,Ea.trimStart_wqw3xr$=Go,Ea.trimEnd_wqw3xr$=Qo,Ea.regionMatchesImpl_4c7s8r$=ea,Ea.startsWith_sgbm27$=na,Ea.endsWith_sgbm27$=ra,Ea.indexOfAny_junqau$=ia,Ea.indexOf_8eortd$=oa,Ea.indexOf_l5u8uk$=function(t,e,n,r){return void 0===n&&(n=0),void 0===r&&(r=!1),r||"string"!=typeof t?function(t,e,n,r,i,o){var a,s;void 0===o&&(o=!1);var u=o?K(J(n,ta(t)),H(r,0)):new mo(H(n,0),J(r,t.length));if("string"==typeof t&&"string"==typeof e)for(a=u.iterator();a.hasNext();){var p=a.next();if(wr(e,0,t,p,e.length,i))return p}else for(s=u.iterator();s.hasNext();){var c=s.next();if(ea(e,0,t,c,e.length,i))return c}return -1}(t,e,n,t.length,r):t.indexOf(e,n)},Ea.contains_sgbm27$=aa,Ea.requireNonNegativeLimit_kcn2v3$=sa,Ea.MatchGroupCollection=ua,Ea.MatchNamedGroupCollection=pa,ca.Destructured=la,Ea.MatchResult=ca,Oa.Lazy=ha,Object.defineProperty(Oa,"UNINITIALIZED_VALUE",{get:ya}),Oa.UnsafeLazyImpl=da,Oa.InitializedLazyImpl=ma,Oa.createFailure_tcv7n7$=wa,Object.defineProperty($a,"Companion",{get:ba}),$a.Failure=xa,Oa.throwOnFailure_iacion$=ka,Oa.NotImplementedError=Ca,ct.prototype.getOrDefault_xwzc9p$=ut.prototype.getOrDefault_xwzc9p$,zr.prototype.getOrDefault_xwzc9p$=ut.prototype.getOrDefault_xwzc9p$,ce.prototype.remove_xwzc9p$=ct.prototype.remove_xwzc9p$,je.prototype.createJsMap=Te.prototype.createJsMap,Me.prototype.createJsMap=Te.prototype.createJsMap,Object.defineProperty(fr.prototype,"destructured",Object.getOwnPropertyDescriptor(ca.prototype,"destructured")),ut.prototype.getOrDefault_xwzc9p$,ct.prototype.remove_xwzc9p$,ct.prototype.getOrDefault_xwzc9p$,ut.prototype.getOrDefault_xwzc9p$,Ui.prototype.plus_1fupul$=Pi.prototype.plus_1fupul$,Li.prototype.fold_3cc69b$=Ui.prototype.fold_3cc69b$,Li.prototype.plus_1fupul$=Ui.prototype.plus_1fupul$,Fi.prototype.get_j3r2sn$=Ui.prototype.get_j3r2sn$,Fi.prototype.fold_3cc69b$=Ui.prototype.fold_3cc69b$,Fi.prototype.minusKey_yeqjby$=Ui.prototype.minusKey_yeqjby$,Fi.prototype.plus_1fupul$=Ui.prototype.plus_1fupul$,Ki.prototype.plus_1fupul$=Pi.prototype.plus_1fupul$,Bo.prototype.contains_mef7kx$,Bo.prototype.isEmpty,Uo.prototype.contains_mef7kx$,Uo.prototype.isEmpty,"undefined"!=typeof process&&process.versions&&process.versions.node?new Je(process.stdout):new Qe,new Xe(Wi(),(function(e){var n;return ka(e),null==(n=e.value)||t.isType(n,b)||y(),dt})),qn=t.newArray(0,null),new Qt((function(t,e){return xr(t,e,!0)})),new Int8Array([l(239),l(191),l(189)]),new $a(to());}();},void 0===(r=n.apply(e,[e]))||(t.exports=r);},42:function(t,e,n){var r,i,o;i=[e,n(421)],void 0===(o="function"==typeof(r=function(t,e){var n=e.Kind.OBJECT,r=e.Kind.CLASS,i=(e.kotlin.js.internal.StringCompanionObject,Error),o=e.Kind.INTERFACE,a=e.toChar,s=e.ensureNotNull,u=e.kotlin.Unit,p=(e.kotlin.js.internal.IntCompanionObject,e.kotlin.js.internal.LongCompanionObject,e.kotlin.js.internal.FloatCompanionObject,e.kotlin.js.internal.DoubleCompanionObject,e.kotlin.collections.MutableIterator),c=e.hashCode,l=e.throwCCE,h=e.equals,f=e.kotlin.collections.MutableIterable,_=e.kotlin.collections.ArrayList_init_mqih57$,y=e.getKClass,d=e.kotlin.collections.Iterator,m=e.toByte,$=e.kotlin.collections.Iterable,g=e.toString,v=e.unboxChar,b=e.kotlin.collections.joinToString_fmv235$,x=e.kotlin.collections.setOf_i5x0yv$,w=e.kotlin.collections.ArrayList_init_ww73n8$,k=e.kotlin.text.iterator_gw00vp$,C=e.toBoxedChar,O=Math,N=e.kotlin.text.Regex_init_61zpoe$,S=e.kotlin.lazy_klfg04$,I=e.kotlin.text.replace_680rmw$,E=e.kotlin.Annotation,A=String,z=e.kotlin.text.indexOf_l5u8uk$,j=e.kotlin.NumberFormatException,L=e.kotlin.Exception,T=Object,M=e.kotlin.collections.MutableList;function R(){P=this;}J.prototype=Object.create(i.prototype),J.prototype.constructor=J,G.prototype=Object.create(i.prototype),G.prototype.constructor=G,Y.prototype=Object.create(i.prototype),Y.prototype.constructor=Y,X.prototype=Object.create(i.prototype),X.prototype.constructor=X,nt.prototype=Object.create(i.prototype),nt.prototype.constructor=nt,at.prototype=Object.create(xt.prototype),at.prototype.constructor=at,bt.prototype=Object.create(i.prototype),bt.prototype.constructor=bt,St.prototype=Object.create(Pt.prototype),St.prototype.constructor=St,At.prototype=Object.create(Yt.prototype),At.prototype.constructor=At,qt.prototype=Object.create(Yt.prototype),qt.prototype.constructor=qt,Bt.prototype=Object.create(Yt.prototype),Bt.prototype.constructor=Bt,Ut.prototype=Object.create(Yt.prototype),Ut.prototype.constructor=Ut,Qt.prototype=Object.create(Yt.prototype),Qt.prototype.constructor=Qt,ue.prototype=Object.create(i.prototype),ue.prototype.constructor=ue,ce.prototype=Object.create(ne.prototype),ce.prototype.constructor=ce,pe.prototype=Object.create(_e.prototype),pe.prototype.constructor=pe,de.prototype=Object.create(_e.prototype),de.prototype.constructor=de,ge.prototype=Object.create(xt.prototype),ge.prototype.constructor=ge,ve.prototype=Object.create(i.prototype),ve.prototype.constructor=ve,be.prototype=Object.create(i.prototype),be.prototype.constructor=be,Te.prototype=Object.create(Le.prototype),Te.prototype.constructor=Te,Me.prototype=Object.create(Le.prototype),Me.prototype.constructor=Me,Re.prototype=Object.create(Le.prototype),Re.prototype.constructor=Re,qe.prototype=Object.create(i.prototype),qe.prototype.constructor=qe,Be.prototype=Object.create(i.prototype),Be.prototype.constructor=Be,We.prototype=Object.create(i.prototype),We.prototype.constructor=We,Ze.prototype=Object.create(Re.prototype),Ze.prototype.constructor=Ze,He.prototype=Object.create(Re.prototype),He.prototype.constructor=He,Je.prototype=Object.create(Re.prototype),Je.prototype.constructor=Je,Ge.prototype=Object.create(Re.prototype),Ge.prototype.constructor=Ge,Qe.prototype=Object.create(Re.prototype),Qe.prototype.constructor=Qe,Ye.prototype=Object.create(Re.prototype),Ye.prototype.constructor=Ye,Xe.prototype=Object.create(Re.prototype),Xe.prototype.constructor=Xe,tn.prototype=Object.create(Re.prototype),tn.prototype.constructor=tn,en.prototype=Object.create(Re.prototype),en.prototype.constructor=en,nn.prototype=Object.create(Re.prototype),nn.prototype.constructor=nn,R.prototype.fill_ugzc7n$=function(t,e){var n;n=t.length-1|0;for(var r=0;r<=n;r++)t[r]=e;},R.$metadata$={kind:n,simpleName:"Arrays",interfaces:[]};var P=null;function q(){return null===P&&new R,P}function B(t){void 0===t&&(t=""),this.src=t;}function U(t){this.this$ByteInputStream=t,this.next=0;}function F(){D=this;}U.prototype.read_8chfmy$=function(t,e,n){var r,i,o=0;r=e+n-1|0;for(var a=e;a<=r&&!(this.next>=this.this$ByteInputStream.src.length);a++)t[a]=this.this$ByteInputStream.src.charCodeAt((i=this.next,this.next=i+1|0,i)),o=o+1|0;return 0===o?-1:o},U.$metadata$={kind:r,interfaces:[et]},B.prototype.bufferedReader=function(){return new U(this)},B.prototype.reader=function(){return this.bufferedReader()},B.$metadata$={kind:r,simpleName:"ByteInputStream",interfaces:[Q]},F.prototype.isWhitespace_s8itvh$=function(t){var e;switch(t){case 32:case 9:case 10:case 13:e=!0;break;default:e=!1;}return e},F.$metadata$={kind:n,simpleName:"Character",interfaces:[]};var D=null;function V(){W=this;}V.prototype.unmodifiableList_zfnyf4$=function(t){yt("not implemented");},V.$metadata$={kind:n,simpleName:"Collections",interfaces:[]};var W=null;function K(){return null===W&&new V,W}function Z(t,e,n,r,i){var o,a,s=n;o=r+i-1|0;for(var u=r;u<=o;u++)e[(a=s,s=a+1|0,a)]=t.charCodeAt(u);}function H(t,e,n,r){return zn().create_8chfmy$(e,n,r)}function J(t){void 0===t&&(t=null),i.call(this),this.message_opjsbb$_0=t,this.cause_18nhvr$_0=null,e.captureStack(i,this),this.name="IOException";}function G(t){void 0===t&&(t=null),i.call(this),this.message_nykor0$_0=t,this.cause_n038z2$_0=null,e.captureStack(i,this),this.name="IllegalArgumentException";}function Q(){}function Y(t){void 0===t&&(t=null),i.call(this),this.message_77za5l$_0=t,this.cause_jiegcr$_0=null,e.captureStack(i,this),this.name="NullPointerException";}function X(){i.call(this),this.message_l78tod$_0=void 0,this.cause_y27uld$_0=null,e.captureStack(i,this),this.name="NumberFormatException";}function tt(){}function et(){}function nt(t){void 0===t&&(t=null),i.call(this),this.message_2hhrll$_0=t,this.cause_blbmi1$_0=null,e.captureStack(i,this),this.name="RuntimeException";}function rt(t,e){return e=e||Object.create(nt.prototype),nt.call(e,t.message),e}function it(){this.value="";}function ot(t){this.string=t,this.nextPos_0=0;}function at(){Ot(this),this.value="";}function st(t,e){e();}function ut(t){return new B(t)}function pt(t,e,n){yt("implement");}function ct(t,e){yt("implement");}function lt(t,e,n){yt("implement");}function ht(t,e,n){yt("implement");}function ft(t,e){yt("implement");}function _t(t,e){yt("implement");}function yt(t){throw e.newThrowable(t)}function dt(t,e){yt("implement");}function mt(t,e){yt("implement");}function $t(t,e){yt("implement");}function gt(t,e){yt("implement");}function vt(t,e){yt("implement");}function bt(t){void 0===t&&(t=null),i.call(this),this.message_3rkdyj$_0=t,this.cause_2kxft9$_0=null,e.captureStack(i,this),this.name="UnsupportedOperationException";}function xt(){Ct(),this.writeBuffer_9jar4r$_0=null,this.lock=null;}function wt(){kt=this,this.WRITE_BUFFER_SIZE_0=1024;}Object.defineProperty(J.prototype,"message",{get:function(){return this.message_opjsbb$_0}}),Object.defineProperty(J.prototype,"cause",{get:function(){return this.cause_18nhvr$_0}}),J.$metadata$={kind:r,simpleName:"IOException",interfaces:[i]},Object.defineProperty(G.prototype,"message",{get:function(){return this.message_nykor0$_0}}),Object.defineProperty(G.prototype,"cause",{get:function(){return this.cause_n038z2$_0}}),G.$metadata$={kind:r,simpleName:"IllegalArgumentException",interfaces:[i]},Q.$metadata$={kind:o,simpleName:"InputStream",interfaces:[]},Object.defineProperty(Y.prototype,"message",{get:function(){return this.message_77za5l$_0}}),Object.defineProperty(Y.prototype,"cause",{get:function(){return this.cause_jiegcr$_0}}),Y.$metadata$={kind:r,simpleName:"NullPointerException",interfaces:[i]},Object.defineProperty(X.prototype,"message",{get:function(){return this.message_l78tod$_0}}),Object.defineProperty(X.prototype,"cause",{get:function(){return this.cause_y27uld$_0}}),X.$metadata$={kind:r,simpleName:"NumberFormatException",interfaces:[i]},tt.prototype.defaultReadObject=function(){yt("not implemented");},tt.$metadata$={kind:o,simpleName:"ObjectInputStream",interfaces:[]},et.$metadata$={kind:o,simpleName:"Reader",interfaces:[]},Object.defineProperty(nt.prototype,"message",{get:function(){return this.message_2hhrll$_0}}),Object.defineProperty(nt.prototype,"cause",{get:function(){return this.cause_blbmi1$_0}}),nt.$metadata$={kind:r,simpleName:"RuntimeException",interfaces:[i]},Object.defineProperty(it.prototype,"length",{configurable:!0,get:function(){return this.value.length},set:function(t){this.value=this.value.substring(0,t);}}),it.prototype.append_8chfmy$=function(t,e,n){var r;r=e+n-1|0;for(var i=e;i<=r;i++)this.value+=String.fromCharCode(t[i]);},it.prototype.append_s8itvh$=function(t){this.value+=String.fromCharCode(t);},it.prototype.append_61zpoe$=function(t){var e;e=t.length-1|0;for(var n=0;n<=e;n++)this.value+=String.fromCharCode(t.charCodeAt(n));},it.prototype.isEmpty=function(){return 0===this.length},it.prototype.toString=function(){return this.value},it.prototype.byteInputStream=function(){return new B(this.value)},it.$metadata$={kind:r,simpleName:"StringBuilder",interfaces:[]},ot.prototype.read_8chfmy$=function(t,e,n){var r,i,o=0;r=e+n-1|0;for(var a=e;a<=r&&!(this.nextPos_0>=this.string.length);a++)t[a]=this.string.charCodeAt((i=this.nextPos_0,this.nextPos_0=i+1|0,i)),o=o+1|0;return o>0?o:-1},ot.$metadata$={kind:r,simpleName:"StringReader",interfaces:[et]},at.prototype.write_8chfmy$=function(t,e,n){var r;r=e+n-1|0;for(var i=e;i<=r;i++)this.value+=String.fromCharCode(t[i]);},at.prototype.flush=function(){this.value="";},at.prototype.close=function(){},at.prototype.toString=function(){return this.value},at.$metadata$={kind:r,simpleName:"StringWriter",interfaces:[xt]},Object.defineProperty(bt.prototype,"message",{get:function(){return this.message_3rkdyj$_0}}),Object.defineProperty(bt.prototype,"cause",{get:function(){return this.cause_2kxft9$_0}}),bt.$metadata$={kind:r,simpleName:"UnsupportedOperationException",interfaces:[i]},xt.prototype.write_za3lpa$=function(t){var n,r;st(this.lock,(n=this,r=t,function(){return null==n.writeBuffer_9jar4r$_0&&(n.writeBuffer_9jar4r$_0=e.charArray(Ct().WRITE_BUFFER_SIZE_0)),s(n.writeBuffer_9jar4r$_0)[0]=a(r),n.write_8chfmy$(s(n.writeBuffer_9jar4r$_0),0,1),u}));},xt.prototype.write_4hbowm$=function(t){this.write_8chfmy$(t,0,t.length);},xt.prototype.write_61zpoe$=function(t){this.write_3m52m6$(t,0,t.length);},xt.prototype.write_3m52m6$=function(t,n,r){var i,o,a,p;st(this.lock,(i=r,o=this,a=t,p=n,function(){var t;return i<=Ct().WRITE_BUFFER_SIZE_0?(null==o.writeBuffer_9jar4r$_0&&(o.writeBuffer_9jar4r$_0=e.charArray(Ct().WRITE_BUFFER_SIZE_0)),t=s(o.writeBuffer_9jar4r$_0)):t=e.charArray(i),Z(a,t,0,p,p+i|0),o.write_8chfmy$(t,0,i),u}));},xt.prototype.append_gw00v9$=function(t){return null==t?this.write_61zpoe$("null"):this.write_61zpoe$(t.toString()),this},xt.prototype.append_ezbsdh$=function(t,n,r){var i=null!=t?t:"null";return this.write_61zpoe$(e.subSequence(i,n,r).toString()),this},xt.prototype.append_s8itvh$=function(t){return this.write_za3lpa$(0|t),this},wt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var kt=null;function Ct(){return null===kt&&new wt,kt}function Ot(t){return t=t||Object.create(xt.prototype),xt.call(t),t.lock=t,t}function Nt(){It=this,this.NULL=new qt("null"),this.TRUE=new qt("true"),this.FALSE=new qt("false");}function St(){Pt.call(this),this.value_wcgww9$_0=null;}xt.$metadata$={kind:r,simpleName:"Writer",interfaces:[]},Nt.prototype.value_za3lpa$=function(t){return new Bt(ht())},Nt.prototype.value_s8cxhz$=function(t){return new Bt(lt())},Nt.prototype.value_mx4ult$=function(t){if($t()||mt())throw new G("Infinite and NaN values not permitted in JSON");return new Bt(this.cutOffPointZero_0(ft()))},Nt.prototype.value_14dthe$=function(t){if(vt()||gt())throw new G("Infinite and NaN values not permitted in JSON");return new Bt(this.cutOffPointZero_0(_t()))},Nt.prototype.value_pdl1vj$=function(t){return null==t?this.NULL:new Qt(t)},Nt.prototype.value_6taknv$=function(t){return t?this.TRUE:this.FALSE},Nt.prototype.array=function(){return Mt()},Nt.prototype.array_pmhfmb$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_za3lpa$(r);}return n},Nt.prototype.array_2muz52$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_s8cxhz$(r);}return n},Nt.prototype.array_8cqhcw$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_mx4ult$(r);}return n},Nt.prototype.array_yqxtqz$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_14dthe$(r);}return n},Nt.prototype.array_wwrst0$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_6taknv$(r);}return n},Nt.prototype.array_vqirvp$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_61zpoe$(r);}return n},Nt.prototype.object=function(){return Jt()},Nt.prototype.parse_61zpoe$=function(t){return (new yn).parse_61zpoe$(t)},Nt.prototype.parse_6nb378$=function(t){return (new yn).streamToValue(new Cn(t))},Nt.prototype.cutOffPointZero_0=function(t){var e;if(dt()){var n=t.length-2|0;e=t.substring(0,n);}else e=t;return e},Object.defineProperty(St.prototype,"value",{configurable:!0,get:function(){return this.value_wcgww9$_0},set:function(t){this.value_wcgww9$_0=t;}}),St.prototype.startArray=function(){return Mt()},St.prototype.startObject=function(){return Jt()},St.prototype.endNull=function(){this.value=Et().NULL;},St.prototype.endBoolean_6taknv$=function(t){this.value=t?Et().TRUE:Et().FALSE;},St.prototype.endString_61zpoe$=function(t){this.value=new Qt(t);},St.prototype.endNumber_61zpoe$=function(t){this.value=new Bt(t);},St.prototype.endArray_11rb$=function(t){this.value=t;},St.prototype.endObject_11rc$=function(t){this.value=t;},St.prototype.endArrayValue_11rb$=function(t){null!=t&&t.add_luq74r$(this.value);},St.prototype.endObjectValue_otyqx2$=function(t,e){null!=t&&t.add_8kvr2e$(e,this.value);},St.$metadata$={kind:r,simpleName:"DefaultHandler",interfaces:[Pt]},Nt.$metadata$={kind:n,simpleName:"Json",interfaces:[]};var It=null;function Et(){return null===It&&new Nt,It}function At(){Tt(),this.values_0=null;}function zt(t){this.closure$iterator=t;}function jt(){Lt=this;}Object.defineProperty(At.prototype,"isEmpty",{configurable:!0,get:function(){return this.values_0.isEmpty()}}),At.prototype.add_za3lpa$=function(t){return this.values_0.add_11rb$(Et().value_za3lpa$(t)),this},At.prototype.add_s8cxhz$=function(t){return this.values_0.add_11rb$(Et().value_s8cxhz$(t)),this},At.prototype.add_mx4ult$=function(t){return this.values_0.add_11rb$(Et().value_mx4ult$(t)),this},At.prototype.add_14dthe$=function(t){return this.values_0.add_11rb$(Et().value_14dthe$(t)),this},At.prototype.add_6taknv$=function(t){return this.values_0.add_11rb$(Et().value_6taknv$(t)),this},At.prototype.add_61zpoe$=function(t){return this.values_0.add_11rb$(Et().value_pdl1vj$(t)),this},At.prototype.add_luq74r$=function(t){if(null==t)throw new Y("value is null");return this.values_0.add_11rb$(t),this},At.prototype.set_vux9f0$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_za3lpa$(e)),this},At.prototype.set_6svq3l$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_s8cxhz$(e)),this},At.prototype.set_24o109$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_mx4ult$(e)),this},At.prototype.set_5wr77w$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_14dthe$(e)),this},At.prototype.set_fzusl$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_6taknv$(e)),this},At.prototype.set_19mbxw$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_pdl1vj$(e)),this},At.prototype.set_zefct7$=function(t,e){if(null==e)throw new Y("value is null");return this.values_0.set_wxm5ur$(t,e),this},At.prototype.remove_za3lpa$=function(t){return this.values_0.removeAt_za3lpa$(t),this},At.prototype.size=function(){return this.values_0.size},At.prototype.get_za3lpa$=function(t){return this.values_0.get_za3lpa$(t)},At.prototype.values=function(){return K().unmodifiableList_zfnyf4$(this.values_0)},zt.prototype.hasNext=function(){return this.closure$iterator.hasNext()},zt.prototype.next=function(){return this.closure$iterator.next()},zt.prototype.remove=function(){throw new bt},zt.$metadata$={kind:r,interfaces:[p]},At.prototype.iterator=function(){return new zt(this.values_0.iterator())},At.prototype.write_l4e0ba$=function(t){t.writeArrayOpen();var e=this.iterator();if(e.hasNext())for(e.next().write_l4e0ba$(t);e.hasNext();)t.writeArraySeparator(),e.next().write_l4e0ba$(t);t.writeArrayClose();},Object.defineProperty(At.prototype,"isArray",{configurable:!0,get:function(){return !0}}),At.prototype.asArray=function(){return this},At.prototype.hashCode=function(){return c(this.values_0)},At.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,At)?r:l();return h(this.values_0,s(i).values_0)},jt.prototype.readFrom_6nb378$=function(t){return ee().readFromReader_6nb378$(t).asArray()},jt.prototype.readFrom_61zpoe$=function(t){return ee().readFrom_61zpoe$(t).asArray()},jt.prototype.unmodifiableArray_v27daa$=function(t){return Rt(t,!0)},jt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Lt=null;function Tt(){return null===Lt&&new jt,Lt}function Mt(t){return t=t||Object.create(At.prototype),Yt.call(t),At.call(t),t.values_0=new Rn,t}function Rt(t,e,n){if(n=n||Object.create(At.prototype),Yt.call(n),At.call(n),null==t)throw new Y("array is null");return n.values_0=e?K().unmodifiableList_zfnyf4$(t.values_0):_(t.values_0),n}function Pt(){this.parser_3qxlfk$_0=null;}function qt(t){Yt.call(this),this.value=t,this.isNull_35npp$_0=h("null",this.value),this.isTrue_3de4$_0=h("true",this.value),this.isFalse_6t83vt$_0=h("false",this.value);}function Bt(t){Yt.call(this),this.string_0=t;}function Ut(){Ht(),this.names_0=null,this.values_0=null,this.table_0=null;}function Ft(t,e){this.closure$namesIterator=t,this.closure$valuesIterator=e;}function Dt(t,e){this.name=t,this.value=e;}function Vt(){this.hashTable_0=new Int8Array(32);}function Wt(t){return t=t||Object.create(Vt.prototype),Vt.call(t),t}function Kt(){Zt=this;}At.$metadata$={kind:r,simpleName:"JsonArray",interfaces:[f,Yt]},Object.defineProperty(Pt.prototype,"parser",{configurable:!0,get:function(){return this.parser_3qxlfk$_0},set:function(t){this.parser_3qxlfk$_0=t;}}),Object.defineProperty(Pt.prototype,"location",{configurable:!0,get:function(){return s(this.parser).location}}),Pt.prototype.startNull=function(){},Pt.prototype.endNull=function(){},Pt.prototype.startBoolean=function(){},Pt.prototype.endBoolean_6taknv$=function(t){},Pt.prototype.startString=function(){},Pt.prototype.endString_61zpoe$=function(t){},Pt.prototype.startNumber=function(){},Pt.prototype.endNumber_61zpoe$=function(t){},Pt.prototype.startArray=function(){return null},Pt.prototype.endArray_11rb$=function(t){},Pt.prototype.startArrayValue_11rb$=function(t){},Pt.prototype.endArrayValue_11rb$=function(t){},Pt.prototype.startObject=function(){return null},Pt.prototype.endObject_11rc$=function(t){},Pt.prototype.startObjectName_11rc$=function(t){},Pt.prototype.endObjectName_otyqx2$=function(t,e){},Pt.prototype.startObjectValue_otyqx2$=function(t,e){},Pt.prototype.endObjectValue_otyqx2$=function(t,e){},Pt.$metadata$={kind:r,simpleName:"JsonHandler",interfaces:[]},Object.defineProperty(qt.prototype,"isNull",{configurable:!0,get:function(){return this.isNull_35npp$_0}}),Object.defineProperty(qt.prototype,"isTrue",{configurable:!0,get:function(){return this.isTrue_3de4$_0}}),Object.defineProperty(qt.prototype,"isFalse",{configurable:!0,get:function(){return this.isFalse_6t83vt$_0}}),Object.defineProperty(qt.prototype,"isBoolean",{configurable:!0,get:function(){return this.isTrue||this.isFalse}}),qt.prototype.write_l4e0ba$=function(t){t.writeLiteral_y4putb$(this.value);},qt.prototype.toString=function(){return this.value},qt.prototype.hashCode=function(){return c(this.value)},qt.prototype.asBoolean=function(){return this.isNull?Yt.prototype.asBoolean.call(this):this.isTrue},qt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=y(qt))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,qt)?r:l();return h(this.value,s(i).value)},qt.$metadata$={kind:r,simpleName:"JsonLiteral",interfaces:[Yt]},Object.defineProperty(Bt.prototype,"isNumber",{configurable:!0,get:function(){return !0}}),Bt.prototype.toString=function(){return this.string_0},Bt.prototype.write_l4e0ba$=function(t){t.writeNumber_y4putb$(this.string_0);},Bt.prototype.asInt=function(){return Fn(0,this.string_0,10)},Bt.prototype.asLong=function(){return pt(0,this.string_0)},Bt.prototype.asFloat=function(){return ct(0,this.string_0)},Bt.prototype.asDouble=function(){return Mn(0,this.string_0)},Bt.prototype.hashCode=function(){return c(this.string_0)},Bt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Bt)?r:l();return h(this.string_0,s(i).string_0)},Bt.$metadata$={kind:r,simpleName:"JsonNumber",interfaces:[Yt]},Object.defineProperty(Ut.prototype,"isEmpty",{configurable:!0,get:function(){return this.names_0.isEmpty()}}),Object.defineProperty(Ut.prototype,"isObject",{configurable:!0,get:function(){return !0}}),Ut.prototype.add_bm4lxs$=function(t,e){return this.add_8kvr2e$(t,Et().value_za3lpa$(e)),this},Ut.prototype.add_4wgjuj$=function(t,e){return this.add_8kvr2e$(t,Et().value_s8cxhz$(e)),this},Ut.prototype.add_9sobi5$=function(t,e){return this.add_8kvr2e$(t,Et().value_mx4ult$(e)),this},Ut.prototype.add_io5o9c$=function(t,e){return this.add_8kvr2e$(t,Et().value_14dthe$(e)),this},Ut.prototype.add_ivxn3r$=function(t,e){return this.add_8kvr2e$(t,Et().value_6taknv$(e)),this},Ut.prototype.add_puj7f4$=function(t,e){return this.add_8kvr2e$(t,Et().value_pdl1vj$(e)),this},Ut.prototype.add_8kvr2e$=function(t,e){if(null==t)throw new Y("name is null");if(null==e)throw new Y("value is null");return s(this.table_0).add_bm4lxs$(t,this.names_0.size),this.names_0.add_11rb$(t),this.values_0.add_11rb$(e),this},Ut.prototype.set_bm4lxs$=function(t,e){return this.set_8kvr2e$(t,Et().value_za3lpa$(e)),this},Ut.prototype.set_4wgjuj$=function(t,e){return this.set_8kvr2e$(t,Et().value_s8cxhz$(e)),this},Ut.prototype.set_9sobi5$=function(t,e){return this.set_8kvr2e$(t,Et().value_mx4ult$(e)),this},Ut.prototype.set_io5o9c$=function(t,e){return this.set_8kvr2e$(t,Et().value_14dthe$(e)),this},Ut.prototype.set_ivxn3r$=function(t,e){return this.set_8kvr2e$(t,Et().value_6taknv$(e)),this},Ut.prototype.set_puj7f4$=function(t,e){return this.set_8kvr2e$(t,Et().value_pdl1vj$(e)),this},Ut.prototype.set_8kvr2e$=function(t,e){if(null==t)throw new Y("name is null");if(null==e)throw new Y("value is null");var n=this.indexOf_y4putb$(t);return -1!==n?this.values_0.set_wxm5ur$(n,e):(s(this.table_0).add_bm4lxs$(t,this.names_0.size),this.names_0.add_11rb$(t),this.values_0.add_11rb$(e)),this},Ut.prototype.remove_pdl1vj$=function(t){if(null==t)throw new Y("name is null");var e=this.indexOf_y4putb$(t);return -1!==e&&(s(this.table_0).remove_za3lpa$(e),this.names_0.removeAt_za3lpa$(e),this.values_0.removeAt_za3lpa$(e)),this},Ut.prototype.merge_1kkabt$=function(t){var e;if(null==t)throw new Y("object is null");for(e=t.iterator();e.hasNext();){var n=e.next();this.set_8kvr2e$(n.name,n.value);}return this},Ut.prototype.get_pdl1vj$=function(t){if(null==t)throw new Y("name is null");var e=this.indexOf_y4putb$(t);return -1!==e?this.values_0.get_za3lpa$(e):null},Ut.prototype.getInt_bm4lxs$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asInt():null)?n:e},Ut.prototype.getLong_4wgjuj$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asLong():null)?n:e},Ut.prototype.getFloat_9sobi5$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asFloat():null)?n:e},Ut.prototype.getDouble_io5o9c$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asDouble():null)?n:e},Ut.prototype.getBoolean_ivxn3r$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asBoolean():null)?n:e},Ut.prototype.getString_puj7f4$=function(t,e){var n=this.get_pdl1vj$(t);return null!=n?n.asString():e},Ut.prototype.size=function(){return this.names_0.size},Ut.prototype.names=function(){return K().unmodifiableList_zfnyf4$(this.names_0)},Ft.prototype.hasNext=function(){return this.closure$namesIterator.hasNext()},Ft.prototype.next=function(){return new Dt(this.closure$namesIterator.next(),this.closure$valuesIterator.next())},Ft.$metadata$={kind:r,interfaces:[d]},Ut.prototype.iterator=function(){return new Ft(this.names_0.iterator(),this.values_0.iterator())},Ut.prototype.write_l4e0ba$=function(t){t.writeObjectOpen();var e=this.names_0.iterator(),n=this.values_0.iterator();if(e.hasNext())for(t.writeMemberName_y4putb$(e.next()),t.writeMemberSeparator(),n.next().write_l4e0ba$(t);e.hasNext();)t.writeObjectSeparator(),t.writeMemberName_y4putb$(e.next()),t.writeMemberSeparator(),n.next().write_l4e0ba$(t);t.writeObjectClose();},Ut.prototype.asObject=function(){return this},Ut.prototype.hashCode=function(){var t=1;return (31*(t=(31*t|0)+c(this.names_0)|0)|0)+c(this.values_0)|0},Ut.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Ut)?r:l();return h(this.names_0,s(i).names_0)&&h(this.values_0,i.values_0)},Ut.prototype.indexOf_y4putb$=function(t){var e=s(this.table_0).get_za3rmp$(t);return -1!==e&&h(t,this.names_0.get_za3lpa$(e))?e:this.names_0.lastIndexOf_11rb$(t)},Ut.prototype.readObject_0=function(t){t.defaultReadObject(),this.table_0=Wt(),this.updateHashIndex_0();},Ut.prototype.updateHashIndex_0=function(){var t;t=this.names_0.size-1|0;for(var e=0;e<=t;e++)s(this.table_0).add_bm4lxs$(this.names_0.get_za3lpa$(e),e);},Dt.prototype.hashCode=function(){var t=1;return (31*(t=(31*t|0)+c(this.name)|0)|0)+c(this.value)|0},Dt.prototype.equals=function(t){var n,r,i;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var o=null==(r=t)||e.isType(r,Dt)?r:l();return h(this.name,s(o).name)&&(null!=(i=this.value)?i.equals(o.value):null)},Dt.$metadata$={kind:r,simpleName:"Member",interfaces:[]},Vt.prototype.add_bm4lxs$=function(t,e){var n=this.hashSlotFor_0(t);this.hashTable_0[n]=e<255?m(e+1|0):0;},Vt.prototype.remove_za3lpa$=function(t){var e;e=this.hashTable_0.length-1|0;for(var n=0;n<=e;n++)if(this.hashTable_0[n]===(t+1|0))this.hashTable_0[n]=0;else if(this.hashTable_0[n]>(t+1|0)){var r;(r=this.hashTable_0)[n]=m(r[n]-1);}},Vt.prototype.get_za3rmp$=function(t){var e=this.hashSlotFor_0(t);return (255&this.hashTable_0[e])-1|0},Vt.prototype.hashSlotFor_0=function(t){return c(t)&this.hashTable_0.length-1},Vt.$metadata$={kind:r,simpleName:"HashIndexTable",interfaces:[]},Kt.prototype.readFrom_6nb378$=function(t){return ee().readFromReader_6nb378$(t).asObject()},Kt.prototype.readFrom_61zpoe$=function(t){return ee().readFrom_61zpoe$(t).asObject()},Kt.prototype.unmodifiableObject_p5jd56$=function(t){return Gt(t,!0)},Kt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Zt=null;function Ht(){return null===Zt&&new Kt,Zt}function Jt(t){return t=t||Object.create(Ut.prototype),Yt.call(t),Ut.call(t),t.names_0=new Rn,t.values_0=new Rn,t.table_0=Wt(),t}function Gt(t,e,n){if(n=n||Object.create(Ut.prototype),Yt.call(n),Ut.call(n),null==t)throw new Y("object is null");return e?(n.names_0=K().unmodifiableList_zfnyf4$(t.names_0),n.values_0=K().unmodifiableList_zfnyf4$(t.values_0)):(n.names_0=_(t.names_0),n.values_0=_(t.values_0)),n.table_0=Wt(),n.updateHashIndex_0(),n}function Qt(t){Yt.call(this),this.string_0=t;}function Yt(){ee();}function Xt(){te=this,this.TRUE=new qt("true"),this.FALSE=new qt("false"),this.NULL=new qt("null");}Ut.$metadata$={kind:r,simpleName:"JsonObject",interfaces:[$,Yt]},Qt.prototype.write_l4e0ba$=function(t){t.writeString_y4putb$(this.string_0);},Object.defineProperty(Qt.prototype,"isString",{configurable:!0,get:function(){return !0}}),Qt.prototype.asString=function(){return this.string_0},Qt.prototype.hashCode=function(){return c(this.string_0)},Qt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Qt)?r:l();return h(this.string_0,s(i).string_0)},Qt.$metadata$={kind:r,simpleName:"JsonString",interfaces:[Yt]},Object.defineProperty(Yt.prototype,"isObject",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isArray",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isNumber",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isString",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isBoolean",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isTrue",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isFalse",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isNull",{configurable:!0,get:function(){return !1}}),Yt.prototype.asObject=function(){throw new bt("Not an object: "+this.toString())},Yt.prototype.asArray=function(){throw new bt("Not an array: "+this.toString())},Yt.prototype.asInt=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asLong=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asFloat=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asDouble=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asString=function(){throw new bt("Not a string: "+this.toString())},Yt.prototype.asBoolean=function(){throw new bt("Not a boolean: "+this.toString())},Yt.prototype.writeTo_j6tqms$=function(t,e){if(void 0===e&&(e=$e().MINIMAL),null==t)throw new Y("writer is null");if(null==e)throw new Y("config is null");var n=new ge(t,128);this.write_l4e0ba$(e.createWriter_97tyn8$(n)),n.flush();},Yt.prototype.toString=function(){return this.toString_fmi98k$($e().MINIMAL)},Yt.prototype.toString_fmi98k$=function(t){var n=new at;try{this.writeTo_j6tqms$(n,t);}catch(t){throw e.isType(t,J)?rt(t):t}return n.toString()},Yt.prototype.equals=function(t){return this===t},Xt.prototype.readFromReader_6nb378$=function(t){return Et().parse_6nb378$(t)},Xt.prototype.readFrom_61zpoe$=function(t){return Et().parse_61zpoe$(t)},Xt.prototype.valueOf_za3lpa$=function(t){return Et().value_za3lpa$(t)},Xt.prototype.valueOf_s8cxhz$=function(t){return Et().value_s8cxhz$(t)},Xt.prototype.valueOf_mx4ult$=function(t){return Et().value_mx4ult$(t)},Xt.prototype.valueOf_14dthe$=function(t){return Et().value_14dthe$(t)},Xt.prototype.valueOf_61zpoe$=function(t){return Et().value_pdl1vj$(t)},Xt.prototype.valueOf_6taknv$=function(t){return Et().value_6taknv$(t)},Xt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var te=null;function ee(){return null===te&&new Xt,te}function ne(t){oe(),this.writer=t;}function re(){ie=this,this.CONTROL_CHARACTERS_END_0=31,this.QUOT_CHARS_0=e.charArrayOf(92,34),this.BS_CHARS_0=e.charArrayOf(92,92),this.LF_CHARS_0=e.charArrayOf(92,110),this.CR_CHARS_0=e.charArrayOf(92,114),this.TAB_CHARS_0=e.charArrayOf(92,116),this.UNICODE_2028_CHARS_0=e.charArrayOf(92,117,50,48,50,56),this.UNICODE_2029_CHARS_0=e.charArrayOf(92,117,50,48,50,57),this.HEX_DIGITS_0=e.charArrayOf(48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102);}Yt.$metadata$={kind:r,simpleName:"JsonValue",interfaces:[]},ne.prototype.writeLiteral_y4putb$=function(t){this.writer.write_61zpoe$(t);},ne.prototype.writeNumber_y4putb$=function(t){this.writer.write_61zpoe$(t);},ne.prototype.writeString_y4putb$=function(t){ae(this.writer,34),this.writeJsonString_y4putb$(t),ae(this.writer,34);},ne.prototype.writeArrayOpen=function(){ae(this.writer,91);},ne.prototype.writeArrayClose=function(){ae(this.writer,93);},ne.prototype.writeArraySeparator=function(){ae(this.writer,44);},ne.prototype.writeObjectOpen=function(){ae(this.writer,123);},ne.prototype.writeObjectClose=function(){ae(this.writer,125);},ne.prototype.writeMemberName_y4putb$=function(t){ae(this.writer,34),this.writeJsonString_y4putb$(t),ae(this.writer,34);},ne.prototype.writeMemberSeparator=function(){ae(this.writer,58);},ne.prototype.writeObjectSeparator=function(){ae(this.writer,44);},ne.prototype.writeJsonString_y4putb$=function(t){var e,n=t.length,r=0;e=n-1|0;for(var i=0;i<=e;i++){var o=oe().getReplacementChars_0(t.charCodeAt(i));null!=o&&(this.writer.write_3m52m6$(t,r,i-r|0),this.writer.write_4hbowm$(o),r=i+1|0);}this.writer.write_3m52m6$(t,r,n-r|0);},re.prototype.getReplacementChars_0=function(t){return t>92?t<8232||t>8233?null:8232===t?this.UNICODE_2028_CHARS_0:this.UNICODE_2029_CHARS_0:92===t?this.BS_CHARS_0:t>34?null:34===t?this.QUOT_CHARS_0:(0|t)>this.CONTROL_CHARACTERS_END_0?null:10===t?this.LF_CHARS_0:13===t?this.CR_CHARS_0:9===t?this.TAB_CHARS_0:e.charArrayOf(92,117,48,48,this.HEX_DIGITS_0[(0|t)>>4&15],this.HEX_DIGITS_0[15&(0|t)])},re.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var ie=null;function oe(){return null===ie&&new re,ie}function ae(t,e){t.write_za3lpa$(0|e);}function se(t,e,n){this.offset=t,this.line=e,this.column=n;}function ue(t,n){i.call(this),this.message_72rz6e$_0=t+" at "+g(n),this.cause_95carw$_0=null,this.location=n,e.captureStack(i,this),this.name="ParseException";}function pe(t){fe(),_e.call(this),this.indentChars_0=t;}function ce(t,e){ne.call(this,t),this.indentChars_0=e,this.indent_0=0;}function le(){he=this;}ne.$metadata$={kind:r,simpleName:"JsonWriter",interfaces:[]},se.prototype.toString=function(){return this.line.toString()+":"+g(this.column)},se.prototype.hashCode=function(){return this.offset},se.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,se)?r:l();return this.offset===s(i).offset&&this.column===i.column&&this.line===i.line},se.$metadata$={kind:r,simpleName:"Location",interfaces:[]},Object.defineProperty(ue.prototype,"offset",{configurable:!0,get:function(){return this.location.offset}}),Object.defineProperty(ue.prototype,"line",{configurable:!0,get:function(){return this.location.line}}),Object.defineProperty(ue.prototype,"column",{configurable:!0,get:function(){return this.location.column}}),Object.defineProperty(ue.prototype,"message",{get:function(){return this.message_72rz6e$_0}}),Object.defineProperty(ue.prototype,"cause",{get:function(){return this.cause_95carw$_0}}),ue.$metadata$={kind:r,simpleName:"ParseException",interfaces:[i]},pe.prototype.createWriter_97tyn8$=function(t){return new ce(t,this.indentChars_0)},ce.prototype.writeArrayOpen=function(){this.indent_0=this.indent_0+1|0,this.writer.write_za3lpa$(91),this.writeNewLine_0();},ce.prototype.writeArrayClose=function(){this.indent_0=this.indent_0-1|0,this.writeNewLine_0(),this.writer.write_za3lpa$(93);},ce.prototype.writeArraySeparator=function(){this.writer.write_za3lpa$(44),this.writeNewLine_0()||this.writer.write_za3lpa$(32);},ce.prototype.writeObjectOpen=function(){this.indent_0=this.indent_0+1|0,this.writer.write_za3lpa$(123),this.writeNewLine_0();},ce.prototype.writeObjectClose=function(){this.indent_0=this.indent_0-1|0,this.writeNewLine_0(),this.writer.write_za3lpa$(125);},ce.prototype.writeMemberSeparator=function(){this.writer.write_za3lpa$(58),this.writer.write_za3lpa$(32);},ce.prototype.writeObjectSeparator=function(){this.writer.write_za3lpa$(44),this.writeNewLine_0()||this.writer.write_za3lpa$(32);},ce.prototype.writeNewLine_0=function(){var t;if(null==this.indentChars_0)return !1;this.writer.write_za3lpa$(10),t=this.indent_0-1|0;for(var e=0;e<=t;e++)this.writer.write_4hbowm$(this.indentChars_0);return !0},ce.$metadata$={kind:r,simpleName:"PrettyPrintWriter",interfaces:[ne]},le.prototype.singleLine=function(){return new pe(e.charArray(0))},le.prototype.indentWithSpaces_za3lpa$=function(t){if(t<0)throw new G("number is negative");var n=e.charArray(t);return q().fill_ugzc7n$(n,32),new pe(n)},le.prototype.indentWithTabs=function(){return new pe(e.charArrayOf(9))},le.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var he=null;function fe(){return null===he&&new le,he}function _e(){$e();}function ye(){me=this,this.MINIMAL=new de,this.PRETTY_PRINT=fe().indentWithSpaces_za3lpa$(2);}function de(){_e.call(this);}pe.$metadata$={kind:r,simpleName:"PrettyPrint",interfaces:[_e]},de.prototype.createWriter_97tyn8$=function(t){return new ne(t)},de.$metadata$={kind:r,interfaces:[_e]},ye.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var me=null;function $e(){return null===me&&new ye,me}function ge(t,n){void 0===n&&(n=16),Ot(this),this.writer_0=t,this.buffer_0=null,this.fill_0=0,this.buffer_0=e.charArray(n);}function ve(t){void 0===t&&(t=null),i.call(this),this.message_y7nasg$_0=t,this.cause_26vz5q$_0=null,e.captureStack(i,this),this.name="SyntaxException";}function be(t){void 0===t&&(t=null),i.call(this),this.message_kt89er$_0=t,this.cause_c2uidd$_0=null,e.captureStack(i,this),this.name="IoException";}function xe(t){Ce(),this.flex=t,this.myTokenType_0=null,this.bufferSequence_i8enee$_0=null,this.myTokenStart_0=0,this.myTokenEnd_0=0,this.bufferEnd_7ee91e$_0=0,this.myState_0=0,this.myFailed_0=!1;}function we(){ke=this;}_e.$metadata$={kind:r,simpleName:"WriterConfig",interfaces:[]},ge.prototype.write_za3lpa$=function(t){var e;this.fill_0>(this.buffer_0.length-1|0)&&this.flush(),this.buffer_0[(e=this.fill_0,this.fill_0=e+1|0,e)]=a(t);},ge.prototype.write_8chfmy$=function(t,e,n){this.fill_0>(this.buffer_0.length-n|0)&&(this.flush(),n>this.buffer_0.length)?this.writer_0.write_8chfmy$(t,e,n):(Un().arraycopy_yp22ie$(t,e,this.buffer_0,this.fill_0,n),this.fill_0=this.fill_0+n|0);},ge.prototype.write_3m52m6$=function(t,e,n){this.fill_0>(this.buffer_0.length-n|0)&&(this.flush(),n>this.buffer_0.length)?this.writer_0.write_3m52m6$(t,e,n):(Z(t,this.buffer_0,this.fill_0,e,n),this.fill_0=this.fill_0+n|0);},ge.prototype.flush=function(){this.writer_0.write_8chfmy$(this.buffer_0,0,this.fill_0),this.fill_0=0;},ge.prototype.close=function(){},ge.$metadata$={kind:r,simpleName:"WritingBuffer",interfaces:[xt]},Object.defineProperty(ve.prototype,"message",{get:function(){return this.message_y7nasg$_0}}),Object.defineProperty(ve.prototype,"cause",{get:function(){return this.cause_26vz5q$_0}}),ve.$metadata$={kind:r,simpleName:"SyntaxException",interfaces:[i]},Object.defineProperty(be.prototype,"message",{get:function(){return this.message_kt89er$_0}}),Object.defineProperty(be.prototype,"cause",{get:function(){return this.cause_c2uidd$_0}}),be.$metadata$={kind:r,simpleName:"IoException",interfaces:[i]},Object.defineProperty(xe.prototype,"bufferSequence",{configurable:!0,get:function(){return this.bufferSequence_i8enee$_0},set:function(t){this.bufferSequence_i8enee$_0=t;}}),Object.defineProperty(xe.prototype,"bufferEnd",{configurable:!0,get:function(){return this.bufferEnd_7ee91e$_0},set:function(t){this.bufferEnd_7ee91e$_0=t;}}),Object.defineProperty(xe.prototype,"state",{configurable:!0,get:function(){return this.locateToken_0(),this.myState_0}}),Object.defineProperty(xe.prototype,"tokenType",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenType_0}}),Object.defineProperty(xe.prototype,"tokenStart",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenStart_0}}),Object.defineProperty(xe.prototype,"tokenEnd",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenEnd_0}}),xe.prototype.start_6na8x6$=function(t,e,n,r){this.bufferSequence=t,this.myTokenEnd_0=e,this.myTokenStart_0=this.myTokenEnd_0,this.bufferEnd=n,this.flex.reset_6na8x6$(s(this.bufferSequence),e,n,r),this.myTokenType_0=null;},xe.prototype.advance=function(){this.locateToken_0(),this.myTokenType_0=null;},xe.prototype.locateToken_0=function(){if(null==this.myTokenType_0&&(this.myTokenStart_0=this.myTokenEnd_0,!this.myFailed_0))try{this.myState_0=this.flex.yystate(),this.myTokenType_0=this.flex.advance();}catch(t){if(e.isType(t,We))throw t;if(!e.isType(t,i))throw t;this.myFailed_0=!0,this.myTokenType_0=kn().BAD_CHARACTER,this.myTokenEnd_0=this.bufferEnd;}},we.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var ke=null;function Ce(){return null===ke&&new we,ke}function Oe(t){void 0===t&&(t=new Ne),this.options_0=t,this.buffer_0=new it,this.level_0=0;}function Ne(){Ae(),this.target="json",this.quoteFallback="double",this.useQuotes=!0,this.usePropertyNameQuotes=!0,this.useArrayCommas=!0,this.useObjectCommas=!0,this.indentLevel=2,this.objectItemNewline=!1,this.arrayItemNewline=!1,this.isSpaceAfterComma=!0,this.isSpaceAfterColon=!0,this.escapeUnicode=!1;}function Se(){Ee=this;}xe.$metadata$={kind:r,simpleName:"FlexAdapter",interfaces:[]},Object.defineProperty(Se.prototype,"RJsonCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="rjson",t.useQuotes=!1,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!1,t.useObjectCommas=!1,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"RJsonPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="rjson",t.useQuotes=!1,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!1,t.useObjectCommas=!1,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Object.defineProperty(Se.prototype,"JsonCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="json",t.useQuotes=!0,t.usePropertyNameQuotes=!0,t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"JsonPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="json",t.useQuotes=!0,t.usePropertyNameQuotes=!0,t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Object.defineProperty(Se.prototype,"JsCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="js",t.useQuotes=!0,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"JsPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="js",t.useQuotes=!0,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Se.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Ie,Ee=null;function Ae(){return null===Ee&&new Se,Ee}function ze(t){return !!Ie.contains_11rb$(t)||!N("[a-zA-Z_][a-zA-Z_0-9]*").matches_6bul2c$(t)}function je(t){this.elementType=t;}function Le(t){this.id=t;}function Te(t){Le.call(this,t);}function Me(t){Le.call(this,t);}function Re(t){Le.call(this,t.elementType.id),this.node=t;}function Pe(t){this.string=t;}function qe(){i.call(this),this.message_5xs4d4$_0=void 0,this.cause_f0a41y$_0=null,e.captureStack(i,this),this.name="ArrayIndexOutOfBoundsException";}function Be(t){i.call(this),this.message_v24yh0$_0=t,this.cause_rj05em$_0=null,e.captureStack(i,this),this.name="Error";}function Ue(){Ve();}function Fe(){De=this;}Ne.$metadata$={kind:r,simpleName:"Options",interfaces:[]},Oe.prototype.valueToStream=function(t){return this.buffer_0.length=0,this.printValue_0(t),this.buffer_0.byteInputStream()},Oe.prototype.valueToString=function(t){return this.buffer_0.length=0,this.printValue_0(t),this.buffer_0.toString()},Oe.prototype.stringToString=function(t){var e=_n().getDefault().createParser().streamToValue(ut(t));return this.buffer_0.length=0,this.printValue_0(e),this.buffer_0.toString()},Oe.prototype.streamToStream=function(t){var e=_n().getDefault().createParser().streamToValue(t);return this.buffer_0.length=0,this.printValue_0(e),this.buffer_0.byteInputStream()},Oe.prototype.streamToString=function(t){var e=_n().getDefault().createParser().streamToValue(t);return this.printValue_0(e),this.buffer_0.toString()},Oe.prototype.printValue_0=function(t,n){if(void 0===n&&(n=!1),e.isType(t,qt))this.append_0(t.value,void 0,n);else if(e.isType(t,Qt)){var r=this.tryEscapeUnicode_0(t.asString());this.append_0(Ln(r,this.options_0,!1),void 0,n);}else if(e.isType(t,Bt))this.append_0(this.toIntOrDecimalString_0(t),void 0,n);else if(e.isType(t,Ut))this.printObject_0(t,n);else {if(!e.isType(t,At))throw new ve("Unexpected type: "+e.getKClassFromExpression(t).toString());this.printArray_0(t,n);}},Oe.prototype.tryEscapeUnicode_0=function(t){var e;if(this.options_0.escapeUnicode){var n,r=w(t.length);for(n=k(t);n.hasNext();){var i,o=v(n.next()),a=r.add_11rb$,s=C(o);if((0|v(s))>2047){for(var u="\\u"+jn(0|v(s));u.length<4;)u="0"+u;i=u;}else i=String.fromCharCode(v(s));a.call(r,i);}e=b(r,"");}else e=t;return e},Oe.prototype.printObject_0=function(t,e){this.append_0("{",void 0,e),this.level_0=this.level_0+1|0;for(var n=!!this.options_0.objectItemNewline&&this.options_0.arrayItemNewline,r=0,i=t.iterator();i.hasNext();++r){var o=i.next();this.options_0.objectItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.printPair_0(o.name,o.value,n),r<(t.size()-1|0)&&(this.options_0.useObjectCommas?(this.append_0(",",void 0,!1),this.options_0.isSpaceAfterComma&&!this.options_0.objectItemNewline&&this.append_0(" ",void 0,!1)):this.options_0.objectItemNewline||this.append_0(" ",void 0,!1));}this.level_0=this.level_0-1|0,this.options_0.objectItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.append_0("}",void 0,this.options_0.objectItemNewline);},Oe.prototype.printArray_0=function(t,e){var n;void 0===e&&(e=!0),this.append_0("[",void 0,e),this.level_0=this.level_0+1|0;var r=0;for(n=t.iterator();n.hasNext();){var i=n.next(),o=this.options_0.arrayItemNewline;this.options_0.arrayItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.printValue_0(i,o),r<(t.size()-1|0)&&(this.options_0.useArrayCommas?(this.append_0(",",void 0,!1),this.options_0.isSpaceAfterComma&&!this.options_0.arrayItemNewline&&this.append_0(" ",void 0,!1)):this.options_0.arrayItemNewline||this.append_0(" ",void 0,!1)),r=r+1|0;}this.level_0=this.level_0-1|0,this.options_0.arrayItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.append_0("]",void 0,this.options_0.arrayItemNewline);},Oe.prototype.printPair_0=function(t,e,n){void 0===n&&(n=!0),this.printKey_0(t,n),this.append_0(":",void 0,!1),this.options_0.isSpaceAfterColon&&this.append_0(" ",void 0,!1),this.printValue_0(e,!1);},Oe.prototype.printKey_0=function(t,e){if(void 0===e&&(e=!0),!this.options_0.usePropertyNameQuotes&&Tn(t))this.append_0(t,void 0,e);else {var n=this.tryEscapeUnicode_0(t);this.append_0(Ln(n,this.options_0,!0),void 0,e);}},Oe.prototype.append_0=function(t,e,n){var r,i;if(void 0===e&&(e=!1),void 0===n&&(n=!0),e&&this.buffer_0.append_61zpoe$("\n"),n){r=this.level_0;for(var o=0;o\0\0\0\0?\0\0\0\0@\0\0\0A\0\0\0\0\0B\0\0\0\tC\0\0\0\0\nD\0\0\0\0\v8\0',this.ZZ_TRANS_0=this.zzUnpackTrans_1(),this.ZZ_UNKNOWN_ERROR_0=0,this.ZZ_NO_MATCH_0=1,this.ZZ_PUSHBACK_2BIG_0=2,this.ZZ_ERROR_MSG_0=["Unknown internal scanner error","Error: could not match input","Error: pushback value was too large"],this.ZZ_ATTRIBUTE_PACKED_0_0="\0\t\r\t\0\0\t\0\t\0\t\b\0\t\0\b",this.ZZ_ATTRIBUTE_0=this.zzUnpackAttribute_1();}Ue.$metadata$={kind:r,simpleName:"Character",interfaces:[]},Object.defineProperty(We.prototype,"message",{get:function(){return this.message_us6fov$_0}}),Object.defineProperty(We.prototype,"cause",{get:function(){return this.cause_i5ew99$_0}}),We.$metadata$={kind:r,simpleName:"ProcessCanceledException",interfaces:[i]},Ke.$metadata$={kind:r,simpleName:"StringBuffer",interfaces:[]},Ze.$metadata$={kind:r,simpleName:"RJsonIdImpl",interfaces:[Re]},He.$metadata$={kind:r,simpleName:"RJsonBooleanImpl",interfaces:[Re]},Je.$metadata$={kind:r,simpleName:"RJsonCommentImpl",interfaces:[Re]},Ge.$metadata$={kind:r,simpleName:"RJsonListImpl",interfaces:[Re]},Qe.$metadata$={kind:r,simpleName:"RJsonObjectImpl",interfaces:[Re]},Ye.$metadata$={kind:r,simpleName:"RJsonPairImpl",interfaces:[Re]},Xe.$metadata$={kind:r,simpleName:"RJsonStringImpl",interfaces:[Re]},tn.$metadata$={kind:r,simpleName:"RJsonValueImpl",interfaces:[Re]},en.$metadata$={kind:r,simpleName:"RJsonWhiteSpaceImpl",interfaces:[Re]},nn.$metadata$={kind:r,simpleName:"RJsonBadCharacterImpl",interfaces:[Re]},Object.defineProperty(rn.prototype,"zzStartRead",{configurable:!0,get:function(){return this.zzStartRead_amyg19$_0},set:function(t){this.zzStartRead_amyg19$_0=t;}}),rn.prototype.getTokenStart=function(){return this.zzStartRead},rn.prototype.getTokenEnd=function(){return this.getTokenStart()+this.yylength()|0},rn.prototype.reset_6na8x6$=function(t,e,n,r){this.zzBuffer_0=t,this.zzStartRead=e,this.zzMarkedPos_0=this.zzStartRead,this.zzCurrentPos_0=this.zzMarkedPos_0,this.zzAtEOF_0=!1,this.zzAtBOL_0=!0,this.zzEndRead_0=n,this.yybegin_za3lpa$(r);},rn.prototype.zzRefill_0=function(){return !0},rn.prototype.yystate=function(){return this.zzLexicalState_0},rn.prototype.yybegin_za3lpa$=function(t){this.zzLexicalState_0=t;},rn.prototype.yytext=function(){return e.subSequence(this.zzBuffer_0,this.zzStartRead,this.zzMarkedPos_0)},rn.prototype.yycharat_za3lpa$=function(t){return C(this.zzBuffer_0.charCodeAt(this.zzStartRead+t|0))},rn.prototype.yylength=function(){return this.zzMarkedPos_0-this.zzStartRead|0},rn.prototype.zzScanError_0=function(t){var n;try{n=sn().ZZ_ERROR_MSG_0[t];}catch(t){if(!e.isType(t,qe))throw t;n=sn().ZZ_ERROR_MSG_0[0];}throw new Be(n)},rn.prototype.yypushback_za3lpa$=function(t){t>this.yylength()&&this.zzScanError_0(2),this.zzMarkedPos_0=this.zzMarkedPos_0-t|0;},rn.prototype.zzDoEOF_0=function(){this.zzEOFDone_0||(this.zzEOFDone_0=!0);},rn.prototype.advance=function(){for(var t={v:0},e={v:null},n={v:null},r={v:null},i={v:this.zzEndRead_0},o={v:this.zzBuffer_0},a=sn().ZZ_TRANS_0,s=sn().ZZ_ROWMAP_0,u=sn().ZZ_ATTRIBUTE_0;;){r.v=this.zzMarkedPos_0,this.yychar=this.yychar+(r.v-this.zzStartRead)|0;var p,c,l=!1;for(n.v=this.zzStartRead;n.v>14]|t>>7&127])<<7|127&t]},on.prototype.zzUnpackActionx_0=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackAction_0(this.ZZ_ACTION_PACKED_0_0,e,t),t},on.prototype.zzUnpackAction_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackRowMap_1=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackRowMap_0(this.ZZ_ROWMAP_PACKED_0_0,e,t),t},on.prototype.zzUnpackRowMap_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackAttribute_1=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackAttribute_0(this.ZZ_ATTRIBUTE_PACKED_0_0,e,t),t},on.prototype.zzUnpackAttribute_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackCMap_0=function(t){for(var n,r,i,o={v:0},a=0,s=t.length;a0)}return u},on.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var an=null;function sn(){return null===an&&new on,an}function un(){}function pn(){}function cn(){_n();}function ln(){fn=this,this.factory_2h3e2k$_0=S(hn);}function hn(){return new cn}rn.$metadata$={kind:r,simpleName:"RJsonLexer",interfaces:[]},un.$metadata$={kind:o,simpleName:"RJsonParser",interfaces:[]},pn.prototype.stringToJson=function(t){return Et().parse_61zpoe$(t).toString()},pn.prototype.stringToValue=function(t){return Et().parse_61zpoe$(t)},pn.prototype.streamToValue=function(t){return Et().parse_6nb378$(t.reader())},pn.prototype.streamToJsonStream=function(t){return new B(Et().parse_6nb378$(t.reader()).toString())},pn.prototype.streamToRJsonStream=function(t){var e=Et().parse_6nb378$(t.bufferedReader());return new Oe(Ae().RJsonCompact).valueToStream(e)},pn.$metadata$={kind:r,simpleName:"RJsonParserImpl",interfaces:[un]},Object.defineProperty(ln.prototype,"factory_0",{configurable:!0,get:function(){return this.factory_2h3e2k$_0.value}}),ln.prototype.getDefault=function(){return this.factory_0},ln.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var fn=null;function _n(){return null===fn&&new ln,fn}function yn(){this.lexer=new rn(null),this.type=null,this.location_i61z51$_0=new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn),this.rxUnicode_0=N("\\\\u([a-fA-F0-9]{4})"),this.rxBareEscape_0=N("\\\\.");}function dn(t){return ""+String.fromCharCode(C(a(Fn(0,s(t.groups.get_za3lpa$(1)).value,16))))}function mn(t){return ""+String.fromCharCode(C(a(Fn(0,s(t.groups.get_za3lpa$(1)).value,16))))}function $n(t){return t.value.substring(1)}function gn(){kn();}function vn(){bn=this;}cn.prototype.createParser=function(){return new yn},cn.$metadata$={kind:r,simpleName:"RJsonParserFactory",interfaces:[]},Object.defineProperty(yn.prototype,"location",{configurable:!0,get:function(){return new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn)},set:function(t){this.location_i61z51$_0=t;}}),yn.prototype.parse_61zpoe$=function(t){var n;this.lexer.reset_6na8x6$(t,0,t.length,0),this.advance_0(),this.skipWhitespaceAndComments_0();try{n=this.readValue_0();}catch(t){throw e.isType(t,ue)?t:e.isType(t,i)?new ue("Expected value",this.location):t}if(this.skipWhitespaceAndComments_0(),null!=this.type)throw new ue("Expected EOF but received "+this.currentTokenString_0(),this.location);return n},yn.prototype.stringToValue=function(t){return this.parse_61zpoe$(t)},yn.prototype.stringToJson=function(t){return this.stringToValue(t).toString()},yn.prototype.streamToValue=function(t){return e.isType(t,B)?this.parse_61zpoe$(t.src):this.parse_61zpoe$(t.bufferedReader().toString())},yn.prototype.streamToJsonStream=function(t){return new Oe(Ae().JsonCompact).streamToStream(t)},yn.prototype.streamToRJsonStream=function(t){return new Oe(Ae().RJsonCompact).streamToStream(t)},yn.prototype.advance_0=function(){this.type=this.lexer.advance();},yn.prototype.readValue_0=function(){var t;if(this.skipWhitespaceAndComments_0(),s(this.type),t=this.type,h(t,kn().L_BRACKET))return this.advance_0(),this.readList_0();if(h(t,kn().L_CURLY))return this.advance_0(),this.readObject_0();if(h(t,kn().BARE_STRING)){var e=new Qt(this.unescapeBare_0(this.lexer.yytext().toString()));return this.advance_0(),e}if(h(t,kn().DOUBLE_QUOTED_STRING)||h(t,kn().SINGLE_QUOTED_STRING)||h(t,kn().TICK_QUOTED_STRING)){var n=this.lexer.yytext().toString(),r=n.length-1|0,i=new Qt(this.unescape_0(n.substring(1,r)));return this.advance_0(),i}if(h(t,kn().TRUE)){var o=new qt(this.lexer.yytext().toString());return this.advance_0(),o}if(h(t,kn().FALSE)){var a=new qt(this.lexer.yytext().toString());return this.advance_0(),a}if(h(t,kn().NULL)){var u=new qt(this.lexer.yytext().toString());return this.advance_0(),u}if(h(t,kn().NUMBER)){var p=new Bt(this.lexer.yytext().toString());return this.advance_0(),p}throw new ue("Did not expect "+this.currentTokenString_0(),this.location)},yn.prototype.currentTokenString_0=function(){return h(this.type,kn().BAD_CHARACTER)?"("+this.lexer.yytext()+")":s(this.type).id},yn.prototype.skipWhitespaceAndComments_0=function(){for(var t;;){if(t=this.type,!(h(t,kn().WHITE_SPACE)||h(t,kn().BLOCK_COMMENT)||h(t,kn().LINE_COMMENT)))return;this.advance_0();}},yn.prototype.skipComma_0=function(){for(var t;;){if(t=this.type,!(h(t,kn().WHITE_SPACE)||h(t,kn().BLOCK_COMMENT)||h(t,kn().LINE_COMMENT)||h(t,kn().COMMA)))return;this.advance_0();}},yn.prototype.readList_0=function(){for(var t=Mt();;){if(this.skipWhitespaceAndComments_0(),h(this.type,kn().R_BRACKET))return this.advance_0(),t;try{t.add_luq74r$(this.readValue_0());}catch(t){throw e.isType(t,i)?new ue("Expected value or R_BRACKET",this.location):t}this.skipComma_0();}},yn.prototype.readObject_0=function(){for(var t=Jt();;){if(this.skipWhitespaceAndComments_0(),h(this.type,kn().R_CURLY))return this.advance_0(),t;var n,r;try{n=this.readName_0();}catch(t){throw e.isType(t,i)?new ue("Expected object property name or R_CURLY",this.location):t}this.skipWhitespaceAndComments_0(),this.consume_0(kn().COLON),this.skipWhitespaceAndComments_0();try{r=this.readValue_0();}catch(t){throw e.isType(t,i)?new ue("Expected value or R_CURLY",this.location):t}this.skipComma_0(),t.add_8kvr2e$(n,r);}},yn.prototype.consume_0=function(t){if(this.skipWhitespaceAndComments_0(),!h(this.type,t))throw new ue("Expected "+t.id,new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn));this.advance_0();},yn.prototype.readName_0=function(){var t;if(this.skipWhitespaceAndComments_0(),t=this.type,h(t,kn().NUMBER)||h(t,kn().TRUE)||h(t,kn().FALSE)||h(t,kn().NULL)){var e=this.lexer.yytext().toString();return this.advance_0(),e}if(h(t,kn().BARE_STRING)){var n=this.lexer.yytext().toString();return this.advance_0(),this.unescapeBare_0(n)}if(h(t,kn().DOUBLE_QUOTED_STRING)||h(t,kn().SINGLE_QUOTED_STRING)||h(t,kn().TICK_QUOTED_STRING)){var r=this.lexer.yytext().toString(),i=r.length-1|0,o=r.substring(1,i);return this.advance_0(),this.unescape_0(o)}throw new ue("Expected property name or R_CURLY, not "+this.currentTokenString_0(),new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn))},yn.prototype.unescape_0=function(t){var e=this.rxUnicode_0.replace_20wsma$(t,dn);return e=I(e,"\\'","'"),e=I(e,"\\`","`"),e=I(e,'\\"','"'),e=I(e,"\\ "," "),I(e,"\\\n","")},yn.prototype.unescapeBare_0=function(t){var e=this.rxUnicode_0.replace_20wsma$(t,mn),n=e;return this.rxBareEscape_0.replace_20wsma$(n,$n)},yn.$metadata$={kind:r,simpleName:"RJsonParser2",interfaces:[un]},vn.prototype.createElement_a4qy0p$=function(t){var n=t.elementType;if(n===kn().BOOLEAN)return new He(t);if(n===kn().COMMENT)return new Je(t);if(n===kn().ID)return new Ze(t);if(n===kn().LIST)return new Ge(t);if(n===kn().OBJECT)return new Qe(t);if(n===kn().PAIR)return new Ye(t);if(n===kn().STRING)return new Xe(t);if(n===kn().VALUE)return new tn(t);if(n===kn().WHITE_SPACE)return new en(t);if(n===kn().BAD_CHARACTER)return new nn(t);throw e.newThrowable("Unknown element type: "+n)},vn.$metadata$={kind:n,simpleName:"Factory",interfaces:[]};var bn=null;function xn(){wn=this,this.BOOLEAN=new Te("BOOLEAN"),this.COMMENT=new Te("COMMENT"),this.ID=new Te("ID"),this.LIST=new Te("LIST"),this.OBJECT=new Te("OBJECT"),this.PAIR=new Te("PAIR"),this.STRING=new Te("STRING"),this.VALUE=new Te("VALUE"),this.BARE_STRING=new Me("BARE_STRING"),this.BLOCK_COMMENT=new Me("BLOCK_COMMENT"),this.COLON=new Me("COLON"),this.COMMA=new Me("COMMA"),this.DOUBLE_QUOTED_STRING=new Me("DOUBLE_QUOTED_STRING"),this.FALSE=new Me("FALSE"),this.LINE_COMMENT=new Me("LINE_COMMENT"),this.L_BRACKET=new Me("L_BRACKET"),this.L_CURLY=new Me("L_CURLY"),this.NULL=new Me("NULL"),this.NUMBER=new Me("NUMBER"),this.R_BRACKET=new Me("R_BRACKET"),this.R_CURLY=new Me("R_CURLY"),this.SINGLE_QUOTED_STRING=new Me("SINGLE_QUOTED_STRING"),this.TICK_QUOTED_STRING=new Me("TICK_QUOTED_STRING"),this.TRUE=new Me("TRUE"),this.WHITE_SPACE=new Me("WHITE_SPACE"),this.BAD_CHARACTER=new Me("BAD_CHARACTER");}xn.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var wn=null;function kn(){return null===wn&&new xn,wn}function Cn(t){this.theReader_0=t;}function On(){}function Nn(){zn();}function Sn(){An=this;}gn.$metadata$={kind:o,simpleName:"RJsonTypes",interfaces:[]},Cn.prototype.reader=function(){return this.theReader_0},Cn.prototype.bufferedReader=function(){return this.reader()},Cn.$metadata$={kind:r,simpleName:"ReaderInputStream",interfaces:[Q]},On.$metadata$={kind:r,simpleName:"JsDummy",interfaces:[E]},Sn.prototype.create_8chfmy$=function(t,e,n){var r,i=new A;r=e+n-1|0;for(var o=e;o<=r;o++)i+=String.fromCharCode(C(t[o]));return i},Sn.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var In,En,An=null;function zn(){return null===An&&new Sn,An}function jn(t){return t.toString(16)}function Ln(t,e,n){var r;if(!isNaN(parseFloat(t)))return h(e.quoteFallback,"single")?"'"+t+"'":h(e.quoteFallback,"backtick")?"`"+t+"`":'"'+t+'"';var i=n?e.usePropertyNameQuotes:e.useQuotes;if(!i&&In.test(t)&&(i=!0),!i&&h(t,"")&&(i=!0),!i&&n&&h(e.target,"js")&&(i=ze(t)),i){var o=t;r=h(e.quoteFallback,"single")&&-1===z(t,"'")?"'"+(o=I(o,"'","\\'"))+"'":h(e.quoteFallback,"backtick")&&-1===z(t,"`")?"`"+(o=I(o,"`","\\`"))+"`":'"'+(o=I(o,'"','\\"'))+'"';}else r=t;return r}function Tn(t){return En.test(t)}function Mn(t,n){try{if(!En.test(n))throw new j("not a float");var r=parseFloat(n);if(!isFinite(r))throw new j("not finite");return r}catch(t){throw e.isType(t,L)?new j(t.message):t}}function Rn(){this.a=[];}function Pn(t){this.this$ArrayList=t,this._n=0;}function qn(){Bn=this;}Nn.$metadata$={kind:r,simpleName:"XString",interfaces:[]},Rn.prototype.add_11rb$=function(t){return this.a.push(t),!0},Rn.prototype.add_wxm5ur$=function(t,e){yt("not implemented");},Rn.prototype.addAll_u57x28$=function(t,e){yt("not implemented");},Rn.prototype.addAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.clear=function(){yt("not implemented");},Rn.prototype.listIterator=function(){yt("not implemented");},Rn.prototype.listIterator_za3lpa$=function(t){yt("not implemented");},Rn.prototype.remove_11rb$=function(t){yt("not implemented");},Rn.prototype.removeAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.removeAt_za3lpa$=function(t){yt("not implemented");},Rn.prototype.retainAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.subList_vux9f0$=function(t,e){yt("not implemented");},Object.defineProperty(Rn.prototype,"size",{configurable:!0,get:function(){return this.a.length}}),Rn.prototype.contains_11rb$=function(t){yt("not implemented");},Rn.prototype.containsAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.get_za3lpa$=function(t){return this.a[t]},Rn.prototype.indexOf_11rb$=function(t){yt("not implemented");},Rn.prototype.isEmpty=function(){yt("not implemented");},Pn.prototype.hasNext=function(){var t;return this._n<("number"==typeof(t=this.this$ArrayList.a.length)?t:l())},Pn.prototype.next=function(){var t,n;return null==(n=this.this$ArrayList.a[(t=this._n,this._n=t+1|0,t)])||e.isType(n,T)?n:l()},Pn.prototype.remove=function(){yt("not implemented");},Pn.$metadata$={kind:r,interfaces:[p]},Rn.prototype.iterator=function(){return new Pn(this)},Rn.prototype.set_wxm5ur$=function(t,e){yt("not implemented");},Rn.prototype.lastIndexOf_11rb$=function(t){yt("not implemented");},Rn.$metadata$={kind:r,simpleName:"ArrayList",interfaces:[M]},qn.prototype.arraycopy_yp22ie$=function(t,e,n,r,i){var o,a,s=r;o=e+i|0;for(var u=e;u thePackage.RJsonParserFactory.Companion.getDefault().createParser(), - createParserFactory: () => thePackage.RJsonParserFactory.Companion.getDefault(), - - PrettyPrinter: thePackage.PrettyPrinter, - /** - * @deprecated since 0.1.0. Use toJson() instead. - * @param rjsonString {String} - * @returns {String} - */ - convert: function (rjsonString) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - return parser.stringToJson(rjsonString); - }, - /** - * - * @param rjsonString {String} - * @param compact {Boolean} - * @returns {String} - */ - toJson: function (rjsonString, compact = true) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - const value = parser.stringToValue(rjsonString); - let opts; - if (compact) { - opts = thePackage.PrettyPrinter.Options.Companion.JsonCompact; - } else { - opts = thePackage.PrettyPrinter.Options.Companion.JsonPretty; - } - const printer = new thePackage.PrettyPrinter(opts); - return printer.valueToString(value); - }, - /** - * - * @param rjsonString {String} - * @param compact {Boolean} - * @returns {String} - */ - toRJson: function (jsonString, compact = true) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - const value = parser.stringToValue(jsonString); - let opts; - if (compact) { - opts = thePackage.PrettyPrinter.Options.Companion.RJsonCompact; - } else { - opts = thePackage.PrettyPrinter.Options.Companion.RJsonPretty; - } - const printer = new thePackage.PrettyPrinter(opts); - return printer.valueToString(value); - }, - /** - * - * @param rjsonString {String} - * @param compact {Boolean} - * @returns {String} - */ - toJs: function (rjsonString, compact = true) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - const value = parser.stringToValue(rjsonString); - let opts; - if (compact) { - opts = thePackage.PrettyPrinter.Options.Companion.JsCompact; - } else { - opts = thePackage.PrettyPrinter.Options.Companion.JsPretty; - } - const printer = new thePackage.PrettyPrinter(opts); - return printer.valueToString(value); - }, - - /** - * - * @param options {Options} PrettyPrinter options - * @param stringOrValue {string|object} a JsonLike string or JsonValue - * @returns {string} - */ - prettyPrint: function (options, stringOrValue) { - const prettyPrinter = new thePackage.PrettyPrinter(options); - if (typeof stringOrValue === 'string') { - return prettyPrinter.stringToString(stringOrValue); - } else { - return prettyPrinter.valueToString(stringOrValue); - } - }, - - api: theModule, - PrettyPrinter: thePackage.PrettyPrinter, - Options, - - }; - - module.exports.default = module.exports; -} (src)); - -function relaxedJSONToJSON(text, compact) { - if (text.trim().length === 0) { - return ""; - } - return srcExports.toJson(text, compact); -} - -function call(content, context, segment) { - if (!content) { - return new ValueAndMsg("", undefined, { segments: [{ value: segment, success: true }] }); - } - try { - var value = evalScript(content, context); - return new ValueAndMsg(value, undefined, { segments: [{ value: segment, success: true }] }); - } - catch (err) { - return new ValueAndMsg("", getErrorMessage(err), { - segments: [{ value: segment, success: false }], - }); - } -} -function evalDefault(unevaledValue, context) { - return new DefaultParser(unevaledValue, context).parse(); -} -var DefaultParser = /** @class */ (function () { - function DefaultParser(unevaledValue, context) { - this.context = context; - this.valueAndMsgs = []; - this.segments = getDynamicStringSegments(unevaledValue.trim()); - } - DefaultParser.prototype.parse = function () { - var _a; - try { - var object = this.parseObject(); - if (this.valueAndMsgs.length === 0) { - return new ValueAndMsg(object); - } - return new ValueAndMsg(object, (_a = ___default["default"].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 : []; }), - }); - } - 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; - }); - return values.length === 1 ? values[0] : values.join(""); - }; - DefaultParser.prototype.evalDynamicSegment = function (segment) { - var 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; - } - RelaxedJsonParser.prototype.parseObject = function () { - try { - return this.parseRelaxedJson(); - } - catch (e) { - return _super.prototype.parseObject.call(this); - } - }; - RelaxedJsonParser.prototype.parseRelaxedJson = function () { - // replace the original {{...}} as relaxed-json adaptive \{\{ + ${index} + \}\} - var indexedRelaxedJsonString = this.segments - .map(function (s, i) { return (isDynamicSegment(s) ? "\\{\\{" + i + "\\}\\}" : s); }) - .join(""); - if (indexedRelaxedJsonString.length === 0) { - // return empty, let the later transform determines the default value - return ""; - } - // 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); - // 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) + "\\\\}\\\\}"; }), {}); - return this.evalIndexedObject(indexedJsonObject); - }; - RelaxedJsonParser.prototype.evalIndexedObject = function (obj) { - if (typeof obj === "string") { - return this.evalIndexedStringToObject(obj); - } - if (typeof obj !== "object" || obj === null) { - return obj; - } - 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]; - ret[this.evalIndexedStringToString(key)] = this.evalIndexedObject(value); - } - return ret; - }; - RelaxedJsonParser.prototype.evalIndexedStringToObject = function (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; - // replace all {{ + ${index} + }} and \{\{ + ${index} \}\} - return indexedString.replace(/({{\d+}})|(\\{\\{\d+\\}\\})/g, function (s) { return _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)); - if (index >= 0 && index < this.segments.length) { - var 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); - }); - } - 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*/]; - } - }); - }); -} -function string2Fn(unevaledValue, type, methods) { - if (type) { - switch (type) { - case "JSON": - return function (context) { return evalJson(unevaledValue, context); }; - case "Function": - return function (context) { return evalFunction(unevaledValue, context, methods); }; - } - } - return function (context) { return evalDefault(unevaledValue, context); }; -} - -var IS_FETCHING_FIELD = "isFetching"; -var LATEST_END_TIME_FIELD = "latestEndTime"; -var TRIGGER_TYPE_FIELD = "triggerType"; -/** - * user input node - * - * @remarks - * CodeNode should resolve the cyclic dependency problem - * we may assume cyclic dependency only imported by CodeNode - * - * 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; - } - // FIXME: optimize later - CodeNode.prototype.convertedValue = function () { - if (this.codeType === "Function") { - return "{{function(){".concat(this.unevaledValue, "}}}"); - } - return this.unevaledValue; - }; - CodeNode.prototype.filterNodes = function (exposingNodes) { - if (!!this.evalCache.inFilterNodes) { - return new Map(); - } - this.evalCache.inFilterNodes = true; - try { - var 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)); - }); - // Add isFetching & latestEndTime node for FetchCheck - var topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); - topDepends.forEach(function (paths, depend) { - if (nodeIsRecord(depend)) { - var _loop_1 = function (field) { - var node = depend.children[field]; - if (node) { - addDepend(result_1, node, Array.from(paths).map(function (p) { return 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; - } - finally { - this.evalCache.inFilterNodes = false; - } - }; - // only includes direct depends, exlucdes depends of dependencies - CodeNode.prototype.filterDirectDepends = function (exposingNodes) { - return filterDepends(this.convertedValue(), exposingNodes); - }; - CodeNode.prototype.justEval = function (exposingNodes, methods) { - // log.log("justEval: ", this, "\nexposingNodes: ", exposingNodes); - if (!!this.evalCache.inEval) { - // found cyclic eval - this.evalCache.cyclic = true; - return new ValueAndMsg(""); - } - this.evalCache.inEval = true; - try { - var 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); - // 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)); - } - return valueAndMsg; - } - finally { - this.evalCache.inEval = false; - } - }; - CodeNode.prototype.getChildren = function () { - if (this.directDepends) { - return Array.from(this.directDepends.keys()); - } - return []; - }; - CodeNode.prototype.dependValues = function () { - var ret = {}; - this.directDepends.forEach(function (paths, node) { - if (node instanceof AbstractNode) { - paths.forEach(function (path) { - ret[path] = node.evalCache.value; - }); - } - }); - return ret; - }; - CodeNode.prototype.fetchInfo = function (exposingNodes, options) { - if (!!this.evalCache.inIsFetching) { - return { - isFetching: false, - ready: true, - }; - } - 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) && - ___default["default"].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)) - return; - // wait for lazy loaded comps to load before executing query on page load - if (!Object.keys(value).length && paths.size) { - isFetching_1 = true; - ready_1 = false; - } - if (___default["default"].has(value, IS_FETCHING_FIELD)) { - isFetching_1 = isFetching_1 || value.isFetching === true; - } - if (___default["default"].has(value, LATEST_END_TIME_FIELD)) { - ready_1 = ready_1 && 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; - }); - return { - isFetching: isFetching_1, - ready: ready_1, - }; - } - 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)); -/** - * generate node for unevaledValue - */ -function fromUnevaledValue(unevaledValue) { - return new FunctionNode(new CodeNode(unevaledValue), function (valueAndMsg) { return 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) { - if (segment.success) { - segment.success = !hasCycle(segment.value, exposingNodes); - } - }); - return extra; -} - -/** - * 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) { - return this.child.filterNodes(exposingNodes); - }; - FetchCheckNode.prototype.justEval = function (exposingNodes) { - return this.fetchInfo(exposingNodes); - }; - FetchCheckNode.prototype.getChildren = function () { - return [this.child]; - }; - FetchCheckNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - FetchCheckNode.prototype.fetchInfo = function (exposingNodes) { - return this.child.fetchInfo(exposingNodes, this.options); - }; - __decorate([ - memoized() - ], FetchCheckNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], FetchCheckNode.prototype, "fetchInfo", null); - return FetchCheckNode; -}(AbstractNode)); -function isFetching(node) { - return new FetchCheckNode(node); -} - -const perf = - typeof performance === 'object' && - performance && - typeof performance.now === 'function' - ? performance - : Date; - -const hasAbortController = typeof AbortController === 'function'; - -// minimal backwards-compatibility polyfill -// this doesn't have nearly all the checks and whatnot that -// actual AbortController/Signal has, but it's enough for -// our purposes, and if used properly, behaves the same. -const AC = hasAbortController - ? AbortController - : class AbortController { - constructor() { - this.signal = new AS(); - } - abort(reason = new Error('This operation was aborted')) { - this.signal.reason = this.signal.reason || reason; - this.signal.aborted = true; - this.signal.dispatchEvent({ - type: 'abort', - target: this.signal, - }); - } - }; - -const hasAbortSignal = typeof AbortSignal === 'function'; -// Some polyfills put this on the AC class, not global -const hasACAbortSignal = typeof AC.AbortSignal === 'function'; -const AS = hasAbortSignal - ? AbortSignal - : hasACAbortSignal - ? AC.AbortController - : class AbortSignal { - constructor() { - this.reason = undefined; - this.aborted = false; - this._listeners = []; - } - dispatchEvent(e) { - if (e.type === 'abort') { - this.aborted = true; - this.onabort(e); - this._listeners.forEach(f => f(e), this); - } - } - onabort() {} - addEventListener(ev, fn) { - if (ev === 'abort') { - this._listeners.push(fn); - } - } - removeEventListener(ev, fn) { - if (ev === 'abort') { - this._listeners = this._listeners.filter(f => f !== fn); - } - } - }; - -const warned = new Set(); -const deprecatedOption = (opt, instead) => { - const code = `LRU_CACHE_OPTION_${opt}`; - if (shouldWarn(code)) { - warn(code, `${opt} option`, `options.${instead}`, LRUCache); - } -}; -const deprecatedMethod = (method, instead) => { - const code = `LRU_CACHE_METHOD_${method}`; - if (shouldWarn(code)) { - const { prototype } = LRUCache; - const { get } = Object.getOwnPropertyDescriptor(prototype, method); - warn(code, `${method} method`, `cache.${instead}()`, get); - } -}; -const deprecatedProperty = (field, instead) => { - const code = `LRU_CACHE_PROPERTY_${field}`; - if (shouldWarn(code)) { - const { prototype } = LRUCache; - const { get } = Object.getOwnPropertyDescriptor(prototype, field); - warn(code, `${field} property`, `cache.${instead}`, get); - } -}; - -const emitWarning = (...a) => { - typeof process === 'object' && - process && - typeof process.emitWarning === 'function' - ? process.emitWarning(...a) - : console.error(...a); -}; - -const shouldWarn = code => !warned.has(code); - -const warn = (code, what, instead, fn) => { - warned.add(code); - const msg = `The ${what} is deprecated. Please use ${instead} instead.`; - emitWarning(msg, 'DeprecationWarning', code, fn); -}; - -const isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n); - -/* istanbul ignore next - This is a little bit ridiculous, tbh. - * The maximum array length is 2^32-1 or thereabouts on most JS impls. - * And well before that point, you're caching the entire world, I mean, - * that's ~32GB of just integers for the next/prev links, plus whatever - * else to hold that many keys and values. Just filling the memory with - * zeroes at init time is brutal when you get that big. - * But why not be complete? - * Maybe in the future, these limits will have expanded. */ -const getUintArray = max => - !isPosInt(max) - ? null - : max <= Math.pow(2, 8) - ? Uint8Array - : max <= Math.pow(2, 16) - ? Uint16Array - : max <= Math.pow(2, 32) - ? Uint32Array - : max <= Number.MAX_SAFE_INTEGER - ? ZeroArray - : null; - -class ZeroArray extends Array { - constructor(size) { - super(size); - this.fill(0); - } -} - -class Stack { - constructor(max) { - if (max === 0) { - return [] - } - const UintArray = getUintArray(max); - this.heap = new UintArray(max); - this.length = 0; - } - push(n) { - this.heap[this.length++] = n; - } - pop() { - return this.heap[--this.length] - } -} - -class LRUCache { - constructor(options = {}) { - const { - max = 0, - ttl, - ttlResolution = 1, - ttlAutopurge, - updateAgeOnGet, - updateAgeOnHas, - allowStale, - dispose, - disposeAfter, - noDisposeOnSet, - noUpdateTTL, - maxSize = 0, - maxEntrySize = 0, - sizeCalculation, - fetchMethod, - fetchContext, - noDeleteOnFetchRejection, - noDeleteOnStaleGet, - allowStaleOnFetchRejection, - allowStaleOnFetchAbort, - ignoreFetchAbort, - } = options; - - // deprecated options, don't trigger a warning for getting them if - // the thing being passed in is another LRUCache we're copying. - const { length, maxAge, stale } = - options instanceof LRUCache ? {} : options; - - if (max !== 0 && !isPosInt(max)) { - throw new TypeError('max option must be a nonnegative integer') - } - - const UintArray = max ? getUintArray(max) : Array; - if (!UintArray) { - throw new Error('invalid max value: ' + max) - } - - this.max = max; - this.maxSize = maxSize; - this.maxEntrySize = maxEntrySize || this.maxSize; - this.sizeCalculation = sizeCalculation || length; - if (this.sizeCalculation) { - if (!this.maxSize && !this.maxEntrySize) { - throw new TypeError( - 'cannot set sizeCalculation without setting maxSize or maxEntrySize' - ) - } - if (typeof this.sizeCalculation !== 'function') { - throw new TypeError('sizeCalculation set to non-function') - } - } - - this.fetchMethod = fetchMethod || null; - if (this.fetchMethod && typeof this.fetchMethod !== 'function') { - throw new TypeError( - 'fetchMethod must be a function if specified' - ) - } - - this.fetchContext = fetchContext; - if (!this.fetchMethod && fetchContext !== undefined) { - throw new TypeError( - 'cannot set fetchContext without fetchMethod' - ) - } - - this.keyMap = new Map(); - this.keyList = new Array(max).fill(null); - this.valList = new Array(max).fill(null); - this.next = new UintArray(max); - this.prev = new UintArray(max); - this.head = 0; - this.tail = 0; - this.free = new Stack(max); - this.initialFill = 1; - this.size = 0; - - if (typeof dispose === 'function') { - this.dispose = dispose; - } - if (typeof disposeAfter === 'function') { - this.disposeAfter = disposeAfter; - this.disposed = []; - } else { - this.disposeAfter = null; - this.disposed = null; - } - this.noDisposeOnSet = !!noDisposeOnSet; - this.noUpdateTTL = !!noUpdateTTL; - this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; - this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; - this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; - this.ignoreFetchAbort = !!ignoreFetchAbort; - - // NB: maxEntrySize is set to maxSize if it's set - if (this.maxEntrySize !== 0) { - if (this.maxSize !== 0) { - if (!isPosInt(this.maxSize)) { - throw new TypeError( - 'maxSize must be a positive integer if specified' - ) - } - } - if (!isPosInt(this.maxEntrySize)) { - throw new TypeError( - 'maxEntrySize must be a positive integer if specified' - ) - } - this.initializeSizeTracking(); - } - - this.allowStale = !!allowStale || !!stale; - this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; - this.updateAgeOnGet = !!updateAgeOnGet; - this.updateAgeOnHas = !!updateAgeOnHas; - this.ttlResolution = - isPosInt(ttlResolution) || ttlResolution === 0 - ? ttlResolution - : 1; - this.ttlAutopurge = !!ttlAutopurge; - this.ttl = ttl || maxAge || 0; - if (this.ttl) { - if (!isPosInt(this.ttl)) { - throw new TypeError( - 'ttl must be a positive integer if specified' - ) - } - this.initializeTTLTracking(); - } - - // do not allow completely unbounded caches - if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) { - throw new TypeError( - 'At least one of max, maxSize, or ttl is required' - ) - } - if (!this.ttlAutopurge && !this.max && !this.maxSize) { - const code = 'LRU_CACHE_UNBOUNDED'; - if (shouldWarn(code)) { - warned.add(code); - const msg = - 'TTL caching without ttlAutopurge, max, or maxSize can ' + - 'result in unbounded memory consumption.'; - emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache); - } - } - - if (stale) { - deprecatedOption('stale', 'allowStale'); - } - if (maxAge) { - deprecatedOption('maxAge', 'ttl'); - } - if (length) { - deprecatedOption('length', 'sizeCalculation'); - } - } - - getRemainingTTL(key) { - return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0 - } - - initializeTTLTracking() { - this.ttls = new ZeroArray(this.max); - this.starts = new ZeroArray(this.max); - - this.setItemTTL = (index, ttl, start = perf.now()) => { - this.starts[index] = ttl !== 0 ? start : 0; - this.ttls[index] = ttl; - if (ttl !== 0 && this.ttlAutopurge) { - const t = setTimeout(() => { - if (this.isStale(index)) { - this.delete(this.keyList[index]); - } - }, ttl + 1); - /* istanbul ignore else - unref() not supported on all platforms */ - if (t.unref) { - t.unref(); - } - } - }; - - this.updateItemAge = index => { - this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0; - }; - - this.statusTTL = (status, index) => { - if (status) { - status.ttl = this.ttls[index]; - status.start = this.starts[index]; - status.now = cachedNow || getNow(); - status.remainingTTL = status.now + status.ttl - status.start; - } - }; - - // debounce calls to perf.now() to 1s so we're not hitting - // that costly call repeatedly. - let cachedNow = 0; - const getNow = () => { - const n = perf.now(); - if (this.ttlResolution > 0) { - cachedNow = n; - const t = setTimeout( - () => (cachedNow = 0), - this.ttlResolution - ); - /* istanbul ignore else - not available on all platforms */ - if (t.unref) { - t.unref(); - } - } - return n - }; - - this.getRemainingTTL = key => { - const index = this.keyMap.get(key); - if (index === undefined) { - return 0 - } - return this.ttls[index] === 0 || this.starts[index] === 0 - ? Infinity - : this.starts[index] + - this.ttls[index] - - (cachedNow || getNow()) - }; - - this.isStale = index => { - return ( - this.ttls[index] !== 0 && - this.starts[index] !== 0 && - (cachedNow || getNow()) - this.starts[index] > - this.ttls[index] - ) - }; - } - updateItemAge(_index) {} - statusTTL(_status, _index) {} - setItemTTL(_index, _ttl, _start) {} - isStale(_index) { - return false - } - - initializeSizeTracking() { - this.calculatedSize = 0; - this.sizes = new ZeroArray(this.max); - this.removeItemSize = index => { - this.calculatedSize -= this.sizes[index]; - this.sizes[index] = 0; - }; - this.requireSize = (k, v, size, sizeCalculation) => { - // provisionally accept background fetches. - // actual value size will be checked when they return. - if (this.isBackgroundFetch(v)) { - return 0 - } - if (!isPosInt(size)) { - if (sizeCalculation) { - if (typeof sizeCalculation !== 'function') { - throw new TypeError('sizeCalculation must be a function') - } - size = sizeCalculation(v, k); - if (!isPosInt(size)) { - throw new TypeError( - 'sizeCalculation return invalid (expect positive integer)' - ) - } - } else { - throw new TypeError( - 'invalid size value (must be positive integer). ' + - 'When maxSize or maxEntrySize is used, sizeCalculation or size ' + - 'must be set.' - ) - } - } - return size - }; - this.addItemSize = (index, size, status) => { - this.sizes[index] = size; - if (this.maxSize) { - const maxSize = this.maxSize - this.sizes[index]; - while (this.calculatedSize > maxSize) { - this.evict(true); - } - } - this.calculatedSize += this.sizes[index]; - if (status) { - status.entrySize = size; - status.totalCalculatedSize = this.calculatedSize; - } - }; - } - removeItemSize(_index) {} - addItemSize(_index, _size) {} - requireSize(_k, _v, size, sizeCalculation) { - if (size || sizeCalculation) { - throw new TypeError( - 'cannot set size without setting maxSize or maxEntrySize on cache' - ) - } - } - - *indexes({ allowStale = this.allowStale } = {}) { - if (this.size) { - for (let i = this.tail; true; ) { - if (!this.isValidIndex(i)) { - break - } - if (allowStale || !this.isStale(i)) { - yield i; - } - if (i === this.head) { - break - } else { - i = this.prev[i]; - } - } - } - } - - *rindexes({ allowStale = this.allowStale } = {}) { - if (this.size) { - for (let i = this.head; true; ) { - if (!this.isValidIndex(i)) { - break - } - if (allowStale || !this.isStale(i)) { - yield i; - } - if (i === this.tail) { - break - } else { - i = this.next[i]; - } - } - } - } - - isValidIndex(index) { - return ( - index !== undefined && - this.keyMap.get(this.keyList[index]) === index - ) - } - - *entries() { - for (const i of this.indexes()) { - if ( - this.valList[i] !== undefined && - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield [this.keyList[i], this.valList[i]]; - } - } - } - *rentries() { - for (const i of this.rindexes()) { - if ( - this.valList[i] !== undefined && - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield [this.keyList[i], this.valList[i]]; - } - } - } - - *keys() { - for (const i of this.indexes()) { - if ( - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.keyList[i]; - } - } - } - *rkeys() { - for (const i of this.rindexes()) { - if ( - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.keyList[i]; - } - } - } - - *values() { - for (const i of this.indexes()) { - if ( - this.valList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.valList[i]; - } - } - } - *rvalues() { - for (const i of this.rindexes()) { - if ( - this.valList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.valList[i]; - } - } - } - - [Symbol.iterator]() { - return this.entries() - } - - find(fn, getOptions) { - for (const i of this.indexes()) { - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - if (fn(value, this.keyList[i], this)) { - return this.get(this.keyList[i], getOptions) - } - } - } - - forEach(fn, thisp = this) { - for (const i of this.indexes()) { - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - fn.call(thisp, value, this.keyList[i], this); - } - } - - rforEach(fn, thisp = this) { - for (const i of this.rindexes()) { - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - fn.call(thisp, value, this.keyList[i], this); - } - } - - get prune() { - deprecatedMethod('prune', 'purgeStale'); - return this.purgeStale - } - - purgeStale() { - let deleted = false; - for (const i of this.rindexes({ allowStale: true })) { - if (this.isStale(i)) { - this.delete(this.keyList[i]); - deleted = true; - } - } - return deleted - } - - dump() { - const arr = []; - for (const i of this.indexes({ allowStale: true })) { - const key = this.keyList[i]; - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - const entry = { value }; - if (this.ttls) { - entry.ttl = this.ttls[i]; - // always dump the start relative to a portable timestamp - // it's ok for this to be a bit slow, it's a rare operation. - const age = perf.now() - this.starts[i]; - entry.start = Math.floor(Date.now() - age); - } - if (this.sizes) { - entry.size = this.sizes[i]; - } - arr.unshift([key, entry]); - } - return arr - } - - load(arr) { - this.clear(); - for (const [key, entry] of arr) { - if (entry.start) { - // entry.start is a portable timestamp, but we may be using - // node's performance.now(), so calculate the offset. - // it's ok for this to be a bit slow, it's a rare operation. - const age = Date.now() - entry.start; - entry.start = perf.now() - age; - } - this.set(key, entry.value, entry); - } - } - - dispose(_v, _k, _reason) {} - - set( - k, - v, - { - ttl = this.ttl, - start, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - status, - } = {} - ) { - size = this.requireSize(k, v, size, sizeCalculation); - // if the item doesn't fit, don't do anything - // NB: maxEntrySize set to maxSize by default - if (this.maxEntrySize && size > this.maxEntrySize) { - if (status) { - status.set = 'miss'; - status.maxEntrySizeExceeded = true; - } - // have to delete, in case a background fetch is there already. - // in non-async cases, this is a no-op - this.delete(k); - return this - } - let index = this.size === 0 ? undefined : this.keyMap.get(k); - if (index === undefined) { - // addition - index = this.newIndex(); - this.keyList[index] = k; - this.valList[index] = v; - this.keyMap.set(k, index); - this.next[this.tail] = index; - this.prev[index] = this.tail; - this.tail = index; - this.size++; - this.addItemSize(index, size, status); - if (status) { - status.set = 'add'; - } - noUpdateTTL = false; - } else { - // update - this.moveToTail(index); - const oldVal = this.valList[index]; - if (v !== oldVal) { - if (this.isBackgroundFetch(oldVal)) { - oldVal.__abortController.abort(new Error('replaced')); - } else { - if (!noDisposeOnSet) { - this.dispose(oldVal, k, 'set'); - if (this.disposeAfter) { - this.disposed.push([oldVal, k, 'set']); - } - } - } - this.removeItemSize(index); - this.valList[index] = v; - this.addItemSize(index, size, status); - if (status) { - status.set = 'replace'; - const oldValue = - oldVal && this.isBackgroundFetch(oldVal) - ? oldVal.__staleWhileFetching - : oldVal; - if (oldValue !== undefined) status.oldValue = oldValue; - } - } else if (status) { - status.set = 'update'; - } - } - if (ttl !== 0 && this.ttl === 0 && !this.ttls) { - this.initializeTTLTracking(); - } - if (!noUpdateTTL) { - this.setItemTTL(index, ttl, start); - } - this.statusTTL(status, index); - if (this.disposeAfter) { - while (this.disposed.length) { - this.disposeAfter(...this.disposed.shift()); - } - } - return this - } - - newIndex() { - if (this.size === 0) { - return this.tail - } - if (this.size === this.max && this.max !== 0) { - return this.evict(false) - } - if (this.free.length !== 0) { - return this.free.pop() - } - // initial fill, just keep writing down the list - return this.initialFill++ - } - - pop() { - if (this.size) { - const val = this.valList[this.head]; - this.evict(true); - return val - } - } - - evict(free) { - const head = this.head; - const k = this.keyList[head]; - const v = this.valList[head]; - if (this.isBackgroundFetch(v)) { - v.__abortController.abort(new Error('evicted')); - } else { - this.dispose(v, k, 'evict'); - if (this.disposeAfter) { - this.disposed.push([v, k, 'evict']); - } - } - this.removeItemSize(head); - // if we aren't about to use the index, then null these out - if (free) { - this.keyList[head] = null; - this.valList[head] = null; - this.free.push(head); - } - this.head = this.next[head]; - this.keyMap.delete(k); - this.size--; - return head - } - - has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) { - const index = this.keyMap.get(k); - if (index !== undefined) { - if (!this.isStale(index)) { - if (updateAgeOnHas) { - this.updateItemAge(index); - } - if (status) status.has = 'hit'; - this.statusTTL(status, index); - return true - } else if (status) { - status.has = 'stale'; - this.statusTTL(status, index); - } - } else if (status) { - status.has = 'miss'; - } - return false - } - - // like get(), but without any LRU updating or TTL expiration - peek(k, { allowStale = this.allowStale } = {}) { - const index = this.keyMap.get(k); - if (index !== undefined && (allowStale || !this.isStale(index))) { - const v = this.valList[index]; - // either stale and allowed, or forcing a refresh of non-stale value - return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v - } - } - - backgroundFetch(k, index, options, context) { - const v = index === undefined ? undefined : this.valList[index]; - if (this.isBackgroundFetch(v)) { - return v - } - const ac = new AC(); - if (options.signal) { - options.signal.addEventListener('abort', () => - ac.abort(options.signal.reason) - ); - } - const fetchOpts = { - signal: ac.signal, - options, - context, - }; - const cb = (v, updateCache = false) => { - const { aborted } = ac.signal; - const ignoreAbort = options.ignoreFetchAbort && v !== undefined; - if (options.status) { - if (aborted && !updateCache) { - options.status.fetchAborted = true; - options.status.fetchError = ac.signal.reason; - if (ignoreAbort) options.status.fetchAbortIgnored = true; - } else { - options.status.fetchResolved = true; - } - } - if (aborted && !ignoreAbort && !updateCache) { - return fetchFail(ac.signal.reason) - } - // either we didn't abort, and are still here, or we did, and ignored - if (this.valList[index] === p) { - if (v === undefined) { - if (p.__staleWhileFetching) { - this.valList[index] = p.__staleWhileFetching; - } else { - this.delete(k); - } - } else { - if (options.status) options.status.fetchUpdated = true; - this.set(k, v, fetchOpts.options); - } - } - return v - }; - const eb = er => { - if (options.status) { - options.status.fetchRejected = true; - options.status.fetchError = er; - } - return fetchFail(er) - }; - const fetchFail = er => { - const { aborted } = ac.signal; - const allowStaleAborted = - aborted && options.allowStaleOnFetchAbort; - const allowStale = - allowStaleAborted || options.allowStaleOnFetchRejection; - const noDelete = allowStale || options.noDeleteOnFetchRejection; - if (this.valList[index] === p) { - // if we allow stale on fetch rejections, then we need to ensure that - // the stale value is not removed from the cache when the fetch fails. - const del = !noDelete || p.__staleWhileFetching === undefined; - if (del) { - this.delete(k); - } else if (!allowStaleAborted) { - // still replace the *promise* with the stale value, - // since we are done with the promise at this point. - // leave it untouched if we're still waiting for an - // aborted background fetch that hasn't yet returned. - this.valList[index] = p.__staleWhileFetching; - } - } - if (allowStale) { - if (options.status && p.__staleWhileFetching !== undefined) { - options.status.returnedStale = true; - } - return p.__staleWhileFetching - } else if (p.__returned === p) { - throw er - } - }; - const pcall = (res, rej) => { - this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej); - // ignored, we go until we finish, regardless. - // defer check until we are actually aborting, - // so fetchMethod can override. - ac.signal.addEventListener('abort', () => { - if ( - !options.ignoreFetchAbort || - options.allowStaleOnFetchAbort - ) { - res(); - // when it eventually resolves, update the cache. - if (options.allowStaleOnFetchAbort) { - res = v => cb(v, true); - } - } - }); - }; - if (options.status) options.status.fetchDispatched = true; - const p = new Promise(pcall).then(cb, eb); - p.__abortController = ac; - p.__staleWhileFetching = v; - p.__returned = null; - if (index === undefined) { - // internal, don't expose status. - this.set(k, p, { ...fetchOpts.options, status: undefined }); - index = this.keyMap.get(k); - } else { - this.valList[index] = p; - } - return p - } - - isBackgroundFetch(p) { - return ( - p && - typeof p === 'object' && - typeof p.then === 'function' && - Object.prototype.hasOwnProperty.call( - p, - '__staleWhileFetching' - ) && - Object.prototype.hasOwnProperty.call(p, '__returned') && - (p.__returned === p || p.__returned === null) - ) - } - - // this takes the union of get() and set() opts, because it does both - async fetch( - k, - { - // get options - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - noDeleteOnStaleGet = this.noDeleteOnStaleGet, - // set options - ttl = this.ttl, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - // fetch exclusive options - noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, - allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, - ignoreFetchAbort = this.ignoreFetchAbort, - allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, - fetchContext = this.fetchContext, - forceRefresh = false, - status, - signal, - } = {} - ) { - if (!this.fetchMethod) { - if (status) status.fetch = 'get'; - return this.get(k, { - allowStale, - updateAgeOnGet, - noDeleteOnStaleGet, - status, - }) - } - - const options = { - allowStale, - updateAgeOnGet, - noDeleteOnStaleGet, - ttl, - noDisposeOnSet, - size, - sizeCalculation, - noUpdateTTL, - noDeleteOnFetchRejection, - allowStaleOnFetchRejection, - allowStaleOnFetchAbort, - ignoreFetchAbort, - status, - signal, - }; - - let index = this.keyMap.get(k); - if (index === undefined) { - if (status) status.fetch = 'miss'; - const p = this.backgroundFetch(k, index, options, fetchContext); - return (p.__returned = p) - } else { - // in cache, maybe already fetching - const v = this.valList[index]; - if (this.isBackgroundFetch(v)) { - const stale = - allowStale && v.__staleWhileFetching !== undefined; - if (status) { - status.fetch = 'inflight'; - if (stale) status.returnedStale = true; - } - return stale ? v.__staleWhileFetching : (v.__returned = v) - } - - // if we force a refresh, that means do NOT serve the cached value, - // unless we are already in the process of refreshing the cache. - const isStale = this.isStale(index); - if (!forceRefresh && !isStale) { - if (status) status.fetch = 'hit'; - this.moveToTail(index); - if (updateAgeOnGet) { - this.updateItemAge(index); - } - this.statusTTL(status, index); - return v - } - - // ok, it is stale or a forced refresh, and not already fetching. - // refresh the cache. - const p = this.backgroundFetch(k, index, options, fetchContext); - const hasStale = p.__staleWhileFetching !== undefined; - const staleVal = hasStale && allowStale; - if (status) { - status.fetch = hasStale && isStale ? 'stale' : 'refresh'; - if (staleVal && isStale) status.returnedStale = true; - } - return staleVal ? p.__staleWhileFetching : (p.__returned = p) - } - } - - get( - k, - { - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - noDeleteOnStaleGet = this.noDeleteOnStaleGet, - status, - } = {} - ) { - const index = this.keyMap.get(k); - if (index !== undefined) { - const value = this.valList[index]; - const fetching = this.isBackgroundFetch(value); - this.statusTTL(status, index); - if (this.isStale(index)) { - if (status) status.get = 'stale'; - // delete only if not an in-flight background fetch - if (!fetching) { - if (!noDeleteOnStaleGet) { - this.delete(k); - } - if (status) status.returnedStale = allowStale; - return allowStale ? value : undefined - } else { - if (status) { - status.returnedStale = - allowStale && value.__staleWhileFetching !== undefined; - } - return allowStale ? value.__staleWhileFetching : undefined - } - } else { - if (status) status.get = 'hit'; - // if we're currently fetching it, we don't actually have it yet - // it's not stale, which means this isn't a staleWhileRefetching. - // If it's not stale, and fetching, AND has a __staleWhileFetching - // value, then that means the user fetched with {forceRefresh:true}, - // so it's safe to return that value. - if (fetching) { - return value.__staleWhileFetching - } - this.moveToTail(index); - if (updateAgeOnGet) { - this.updateItemAge(index); - } - return value - } - } else if (status) { - status.get = 'miss'; - } - } - - connect(p, n) { - this.prev[n] = p; - this.next[p] = n; - } - - moveToTail(index) { - // if tail already, nothing to do - // if head, move head to next[index] - // else - // move next[prev[index]] to next[index] (head has no prev) - // move prev[next[index]] to prev[index] - // prev[index] = tail - // next[tail] = index - // tail = index - if (index !== this.tail) { - if (index === this.head) { - this.head = this.next[index]; - } else { - this.connect(this.prev[index], this.next[index]); - } - this.connect(this.tail, index); - this.tail = index; - } - } - - get del() { - deprecatedMethod('del', 'delete'); - return this.delete - } - - delete(k) { - let deleted = false; - if (this.size !== 0) { - const index = this.keyMap.get(k); - if (index !== undefined) { - deleted = true; - if (this.size === 1) { - this.clear(); - } else { - this.removeItemSize(index); - const v = this.valList[index]; - if (this.isBackgroundFetch(v)) { - v.__abortController.abort(new Error('deleted')); - } else { - this.dispose(v, k, 'delete'); - if (this.disposeAfter) { - this.disposed.push([v, k, 'delete']); - } - } - this.keyMap.delete(k); - this.keyList[index] = null; - this.valList[index] = null; - if (index === this.tail) { - this.tail = this.prev[index]; - } else if (index === this.head) { - this.head = this.next[index]; - } else { - this.next[this.prev[index]] = this.next[index]; - this.prev[this.next[index]] = this.prev[index]; - } - this.size--; - this.free.push(index); - } - } - } - if (this.disposed) { - while (this.disposed.length) { - this.disposeAfter(...this.disposed.shift()); - } - } - return deleted - } - - clear() { - for (const index of this.rindexes({ allowStale: true })) { - const v = this.valList[index]; - if (this.isBackgroundFetch(v)) { - v.__abortController.abort(new Error('deleted')); - } else { - const k = this.keyList[index]; - this.dispose(v, k, 'delete'); - if (this.disposeAfter) { - this.disposed.push([v, k, 'delete']); - } - } - } - - this.keyMap.clear(); - this.valList.fill(null); - this.keyList.fill(null); - if (this.ttls) { - this.ttls.fill(0); - this.starts.fill(0); - } - if (this.sizes) { - this.sizes.fill(0); - } - this.head = 0; - this.tail = 0; - this.initialFill = 1; - this.free.length = 0; - this.calculatedSize = 0; - this.size = 0; - if (this.disposed) { - while (this.disposed.length) { - this.disposeAfter(...this.disposed.shift()); - } - } - } - - get reset() { - deprecatedMethod('reset', 'clear'); - return this.clear - } - - get length() { - deprecatedProperty('length', 'size'); - return this.size - } - - static get AbortController() { - return AC - } - static get AbortSignal() { - return AS - } -} - -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; - } - SimpleNode.prototype.filterNodes = function (exposingNodes) { - return evalPerfUtil.perf(this, "filterNodes", function () { - return new Map(); - }); - }; - SimpleNode.prototype.justEval = function (exposingNodes) { - return this.value; - }; - SimpleNode.prototype.getChildren = function () { - return []; - }; - SimpleNode.prototype.dependValues = function () { - return {}; - }; - SimpleNode.prototype.fetchInfo = function (exposingNodes) { - return { - isFetching: false, - ready: true, - }; - }; - __decorate([ - memoized() - ], SimpleNode.prototype, "filterNodes", null); - return SimpleNode; -}(AbstractNode)); -/** - * provide simple value, don't need to eval - */ -function fromValue(value) { - return new SimpleNode(value); -} -var lru = new LRU({ max: 16384 }); -function fromValueWithCache(value) { - var res = lru.get(value); - if (res === undefined) { - res = fromValue(value); - lru.set(value, res); - } - return res; -} - -// 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) { - if (!this.inputNodes) { - return this.moduleExposingNodes; - } - var 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; - if (!targetNode) { - return; - } - inputNodes[name] = new WrapNode(targetNode, exposingNodes, exposingMethods); - }); - return __assign(__assign({}, this.moduleExposingNodes), inputNodes); - }; - WrapNode.prototype.filterNodes = function (exposingNodes) { - return this.delegate.filterNodes(this.wrap(exposingNodes, {})); - }; - WrapNode.prototype.justEval = function (exposingNodes, methods) { - return this.delegate.evaluate(this.wrap(exposingNodes, methods), this.moduleExposingMethods); - }; - WrapNode.prototype.fetchInfo = function (exposingNodes) { - return this.delegate.fetchInfo(this.wrap(exposingNodes, {})); - }; - WrapNode.prototype.getChildren = function () { - return [this.delegate]; - }; - WrapNode.prototype.dependValues = function () { - 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) { - return this.child.filterNodes(exposingNodes); - }; - WrapContextNode.prototype.justEval = function (exposingNodes, methods) { - var _this = this; - return function (params) { - var nodes; - if (params) { - nodes = __assign({}, exposingNodes); - Object.entries(params).forEach(function (_a) { - var key = _a[0], value = _a[1]; - nodes[key] = fromValueWithCache(value); - }); - } - else { - nodes = exposingNodes; - } - return _this.child.evaluate(nodes, methods); - }; - }; - WrapContextNode.prototype.getChildren = function () { - return [this.child]; - }; - WrapContextNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - WrapContextNode.prototype.fetchInfo = function (exposingNodes) { - return this.child.fetchInfo(exposingNodes); - }; - __decorate([ - memoized() - ], WrapContextNode.prototype, "filterNodes", null); - return WrapContextNode; -}(AbstractNode)); -function wrapContext(node) { - return new WrapContextNode(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) { - return this.child.filterNodes(exposingNodes); - }; - WrapContextNodeV2.prototype.justEval = function (exposingNodes, methods) { - return this.child.evaluate(this.wrap(exposingNodes), methods); - }; - WrapContextNodeV2.prototype.getChildren = function () { - return [this.child]; - }; - WrapContextNodeV2.prototype.dependValues = function () { - return this.child.dependValues(); - }; - WrapContextNodeV2.prototype.fetchInfo = function (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)); - -function transformWrapper(transformFn, defaultValue) { - function transformWithMsg(valueAndMsg) { - var _a; - var result; - try { - var value = transformFn(valueAndMsg.value); - result = new ValueAndMsg(value, valueAndMsg.msg, valueAndMsg.extra, valueAndMsg.value); - } - catch (err) { - var value = void 0; - try { - value = defaultValue !== null && defaultValue !== void 0 ? defaultValue : transformFn(""); - } - catch (err2) { - value = undefined; - } - var errorMsg = (_a = valueAndMsg.msg) !== null && _a !== void 0 ? _a : getErrorMessage(err); - result = new ValueAndMsg(value, errorMsg, valueAndMsg.extra, valueAndMsg.value); - } - // log.trace( - // "transformWithMsg. func: ", - // transformFn.name, - // "\nsource: ", - // valueAndMsg, - // "\nresult: ", - // result - // ); - return result; - } - return transformWithMsg; -} - -function styleNamespace(id) { - return "style-for-".concat(id); -} -function evalStyle(id, css, globalStyle) { - var _a; - var styleId = styleNamespace(id); - var prefixId = globalStyle ? id : "#".concat(id); - var compiledCSS = ""; - css.forEach(function (i) { - if (!i.trim()) { - return; - } - compiledCSS += stylis.serialize(stylis.compile("".concat(prefixId, "{").concat(i, "}")), stylis.middleware([stylis.prefixer, stylis.stringify])); - }); - var styleNode = document.querySelector("#".concat(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); - } - styleNode.textContent = compiledCSS; -} -function clearStyleEval(id) { - var styleId = id && styleNamespace(id); - var styleNode = document.querySelectorAll("style[data-style-src=eval]"); - if (styleNode) { - styleNode.forEach(function (i) { - if (!styleId || styleId === i.id) { - i.remove(); - } - }); - } -} - -exports.CompActionTypes = void 0; -(function (CompActionTypes) { - CompActionTypes["CHANGE_VALUE"] = "CHANGE_VALUE"; - CompActionTypes["RENAME"] = "RENAME"; - CompActionTypes["MULTI_CHANGE"] = "MULTI_CHANGE"; - CompActionTypes["DELETE_COMP"] = "DELETE_COMP"; - CompActionTypes["REPLACE_COMP"] = "REPLACE_COMP"; - CompActionTypes["ONLY_EVAL"] = "NEED_EVAL"; - // UPDATE_NODES = "UPDATE_NODES", - CompActionTypes["UPDATE_NODES_V2"] = "UPDATE_NODES_V2"; - CompActionTypes["EXECUTE_QUERY"] = "EXECUTE_QUERY"; - CompActionTypes["TRIGGER_MODULE_EVENT"] = "TRIGGER_MODULE_EVENT"; - /** - * this action can pass data to the comp by name - */ - CompActionTypes["ROUTE_BY_NAME"] = "ROUTE_BY_NAME"; - /** - * execute action with context. for example, buttons in table's column should has currentRow as context - * FIXME: this is a broadcast message, better to be improved by a heritage mechanism. - */ - CompActionTypes["UPDATE_ACTION_CONTEXT"] = "UPDATE_ACTION_CONTEXT"; - /** - * comp-specific action can be placed not globally. - * use CUSTOM uniformly. - */ - CompActionTypes["CUSTOM"] = "CUSTOM"; - /** - * broadcast other actions in comp tree structure. - * used for encapsulate MultiBaseComp - */ - CompActionTypes["BROADCAST"] = "BROADCAST"; -})(exports.CompActionTypes || (exports.CompActionTypes = {})); - -function customAction(value, editDSL) { - return { - type: exports.CompActionTypes.CUSTOM, - path: [], - value: value, - editDSL: editDSL, - }; -} -function updateActionContextAction(context) { - var value = { - type: exports.CompActionTypes.UPDATE_ACTION_CONTEXT, - path: [], - editDSL: false, - context: context, - }; - return { - type: exports.CompActionTypes.BROADCAST, - path: [], - editDSL: false, - action: value, - }; -} -/** - * check if it's current custom action. - * keep type safe via generics, users should keep type the same as T, otherwise may cause bug. - */ -function isMyCustomAction(action, type) { - return !isChildAction(action) && isCustomAction(action, type); -} -function isCustomAction(action, type) { - return action.type === exports.CompActionTypes.CUSTOM && ___default["default"].get(action.value, "type") === type; -} -/** - * The action of execute query. - * path route to the query exactly. - * RootComp will change the path correctly when queryName is passed. - */ -function executeQueryAction(props) { - return __assign({ type: exports.CompActionTypes.EXECUTE_QUERY, path: [], editDSL: false }, props); -} -function triggerModuleEventAction(name) { - return { - type: exports.CompActionTypes.TRIGGER_MODULE_EVENT, - path: [], - editDSL: false, - name: name, - }; -} -/** - * better to use comp.dispatchChangeValueAction to keep type safe - */ -function changeValueAction(value, editDSL) { - return { - type: exports.CompActionTypes.CHANGE_VALUE, - path: [], - editDSL: editDSL, - value: value, - }; -} -function isBroadcastAction(action, type) { - return action.type === exports.CompActionTypes.BROADCAST && ___default["default"].get(action.action, "type") === type; -} -function renameAction(oldName, name) { - var value = { - type: exports.CompActionTypes.RENAME, - path: [], - editDSL: true, - oldName: oldName, - name: name, - }; - return { - type: exports.CompActionTypes.BROADCAST, - path: [], - editDSL: true, - action: value, - }; -} -function routeByNameAction(name, action) { - return { - type: exports.CompActionTypes.ROUTE_BY_NAME, - path: [], - name: name, - editDSL: action.editDSL, - action: action, - }; -} -function multiChangeAction(changes) { - var editDSL = Object.values(changes).some(function (action) { return !!action.editDSL; }); - console.assert(Object.values(changes).every(function (action) { return !___default["default"].isNil(action.editDSL) && action.editDSL === editDSL; }), "multiChangeAction should wrap actions with the same editDSL value in property. editDSL: ".concat(editDSL, "\nchanges:"), changes); - return { - type: exports.CompActionTypes.MULTI_CHANGE, - path: [], - editDSL: editDSL, - changes: changes, - }; -} -function deleteCompAction() { - return { - type: exports.CompActionTypes.DELETE_COMP, - path: [], - editDSL: true, - }; -} -function replaceCompAction(compFactory) { - return { - type: exports.CompActionTypes.REPLACE_COMP, - path: [], - editDSL: false, - compFactory: compFactory, - }; -} -function onlyEvalAction() { - return { - type: exports.CompActionTypes.ONLY_EVAL, - path: [], - editDSL: false, - }; -} -function wrapChildAction(childName, action) { - return __assign(__assign({}, action), { path: __spreadArray([childName], action.path, true) }); -} -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; -} -function unwrapChildAction(action) { - return [action.path[0], __assign(__assign({}, action), { path: action.path.slice(1) })]; -} -function changeChildAction(childName, value, editDSL) { - return wrapChildAction(childName, changeValueAction(value, editDSL)); -} -function updateNodesV2Action(value) { - return { - type: exports.CompActionTypes.UPDATE_NODES_V2, - path: [], - editDSL: false, - value: value, - }; -} -function wrapActionExtraInfo(action, extraInfos) { - return __assign(__assign({}, action), { extraInfo: __assign(__assign({}, action.extraInfo), extraInfos) }); -} -function deferAction(action) { - return __assign(__assign({}, action), { priority: "defer" }); -} -function changeEditDSLAction(action, editDSL) { - return __assign(__assign({}, action), { editDSL: editDSL }); -} - -var CACHE_PREFIX = "__cache__"; -/** - * a decorator for caching function's result ignoring params. - * - * @remarks - * caches are stored in `__cache__xxx` fields. - * `ObjectUtils.setFields` will not save this 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; - if (!thisObj[cachePropertyKey]) { - // put the result into array, for representing `undefined` - thisObj[cachePropertyKey] = [originalMethod.apply(this, args)]; - } - return thisObj[cachePropertyKey][0]; - }; -} - -/** - * compare keys and values - */ -function shallowEqual(obj1, obj2) { - if (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]; })); -} -function containFields(obj, fields) { - if (fields === undefined) { - return true; - } - var notEqualIndex = Object.keys(fields).findIndex(function (key) { - return obj[key] !== fields[key]; - }); - return notEqualIndex === -1; -} -/** - * type unsafe, users should keep safe by self. - * 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) { - 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))) { - delete res[key]; - } - } - }); - 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) { }); - } - AbstractComp.prototype.changeDispatch = function (dispatch) { - return setFieldsNoTypeCheck(this, { dispatch: dispatch }, { keepCacheKeys: ["node"] }); - }; - /** - * trigger changeValueAction, type safe - */ - AbstractComp.prototype.dispatchChangeValueAction = function (value) { - this.dispatch(this.changeValueAction(value)); - }; - AbstractComp.prototype.changeValueAction = function (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 () { - return this.nodeWithoutCache(); - }; - __decorate([ - memo - ], AbstractComp.prototype, "node", null); - return AbstractComp; -}()); - -/** - * wrap a dispatch as a child dispatch - * - * @param dispatch input dispatch - * @param childName the key of the child dispatch - * @returns a wrapped dispatch with the child dispatch - */ -function wrapDispatch(dispatch, childName) { - return function (action) { - if (dispatch) { - dispatch(wrapChildAction(childName, action)); - } - }; -} -/** - * the core class of multi function - * build the tree structure of comps - * @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); - 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; - // log.debug("reduceOrUndefined. action: ", action, " this: ", this); - // must handle DELETE in the parent level - if (action.type === exports.CompActionTypes.DELETE_COMP && action.path.length === 1) { - return this.setChildren(___default["default"].omit(this.children, action.path[0])); - } - if (action.type === exports.CompActionTypes.REPLACE_COMP && action.path.length === 1) { - var 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, - dispatch: wrapDispatch(this.dispatch, compName), - }); - return this.setChildren(__assign(__assign({}, this.children), (_a = {}, _a[compName] = nextComp, _a))); - } - if (isChildAction(action)) { - var _d = unwrapChildAction(action), childName = _d[0], childAction = _d[1]; - var child = this.children[childName]; - if (!child) { - log.error("found bad action path ", childName); - return this; - } - var newChild = child.reduce(childAction); - return this.setChild(childName, newChild); - } - // key, value - switch (action.type) { - case exports.CompActionTypes.MULTI_CHANGE: { - var changes_1 = action.changes; - // handle DELETE in the parent level - var mcChildren = ___default["default"].omitBy(this.children, function (comp, childName) { - var innerAction = changes_1[childName]; - return (innerAction && - innerAction.type === exports.CompActionTypes.DELETE_COMP && - innerAction.path.length === 0); - }); - // CHANGE - mcChildren = ___default["default"].mapValues(mcChildren, function (comp, childName) { - var innerAction = changes_1[childName]; - if (innerAction) { - return comp.reduce(innerAction); - } - return comp; - }); - return this.setChildren(mcChildren); - } - case exports.CompActionTypes.UPDATE_NODES_V2: { - var value_1 = action.value; - if (value_1 === undefined) { - return this; - } - var cacheKey = CACHE_PREFIX + "REDUCE_UPDATE_NODE"; - // if constructed by the value, just return - if (this[cacheKey] === value_1) { - // console.info("inside: UPDATE_NODE_V2 cache hit. action: ", action, "\nvalue: ", value, "\nthis: ", this); - return this; - } - var children = ___default["default"].mapValues(this.children, function (comp, childName) { - if (value_1.hasOwnProperty(childName)) { - return comp.reduce(updateNodesV2Action(value_1[childName])); - } - return comp; - }); - var extraFields = (_c = this.extraNode()) === null || _c === void 0 ? void 0 : _c.updateNodeFields(value_1); - 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"] }); - } - case exports.CompActionTypes.CHANGE_VALUE: { - return this.setChildren(this.parseChildrenFromValue({ - dispatch: this.dispatch, - value: action.value, - })); - } - case exports.CompActionTypes.BROADCAST: { - return this.setChildren(___default["default"].mapValues(this.children, function (comp) { - return comp.reduce(action); - })); - } - case exports.CompActionTypes.ONLY_EVAL: { - return this; - } - } - }; - MultiBaseComp.prototype.setChild = function (childName, newChild) { - var _a; - 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) { - 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 () { - return undefined; - }; - MultiBaseComp.prototype.childrenNode = function () { - var _this = this; - var result = {}; - Object.keys(this.children).forEach(function (key) { - var 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 = ___default["default"].mapValues(this.children, function (comp, childName) { - return comp.changeDispatch(wrapDispatch(dispatch, childName)); - }); - return _super.prototype.changeDispatch.call(this, dispatch).setChildren(newChildren, { keepCacheKeys: ["node"] }); - }; - MultiBaseComp.prototype.ignoreChildDefaultValue = function () { - 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]; - // FIXME: this implementation is a little tricky, better choose a encapsulated implementation - if (comp.hasOwnProperty("NO_PERSISTENCE")) { - return; - } - var value = comp.toJsonValue(); - if (ignore && ___default["default"].isEqual(value, comp["IGNORABLE_DEFAULT_VALUE"])) { - return; - } - result[key] = value; - }); - return result; - }; - // FIXME: autoHeight should be encapsulated in UIComp/UICompBuilder - MultiBaseComp.prototype.autoHeight = function () { - return true; - }; - MultiBaseComp.prototype.changeChildAction = function (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)); - }, - }; -} - -/** - * 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; - } - /** - * may override this to implement compatibility - */ - SimpleAbstractComp.prototype.oldValueToNew = function (value) { - return value; - }; - SimpleAbstractComp.prototype.reduce = function (action) { - if (action.type === exports.CompActionTypes.CHANGE_VALUE) { - if (this.value === action.value) { - return this; - } - return setFieldsNoTypeCheck(this, { value: action.value }); - } - return this; - }; - SimpleAbstractComp.prototype.nodeWithoutCache = function () { - return fromValue(this.value); - }; - SimpleAbstractComp.prototype.exposingNode = function () { - return this.node(); - }; - // may be used in defaultValue - SimpleAbstractComp.prototype.toJsonValue = function () { - 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 () { - return this.value; - }; - return SimpleComp; -}(SimpleAbstractComp)); - -var jsxRuntimeExports = {}; -var jsxRuntime = { - get exports(){ return jsxRuntimeExports; }, - set exports(v){ jsxRuntimeExports = v; }, -}; - -var reactJsxRuntime_production_min = {}; - -var reactExports = {}; -var react = { - get exports(){ return reactExports; }, - set exports(v){ reactExports = v; }, -}; - -var react_production_min = {}; - -/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -var hasRequiredReact_production_min; - -function requireReact_production_min () { - if (hasRequiredReact_production_min) return react_production_min; - hasRequiredReact_production_min = 1; -var l=Symbol.for("react.element"),n=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),q=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),t=Symbol.for("react.provider"),u=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),z=Symbol.iterator;function A(a){if(null===a||"object"!==typeof a)return null;a=z&&a[z]||a["@@iterator"];return "function"===typeof a?a:null} - var B={isMounted:function(){return !1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B;}E.prototype.isReactComponent={}; - E.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,a,b,"setState");};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate");};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B;}var H=G.prototype=new F; - H.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0}; - function M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=""+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - printWarning('warn', format, args); - } - } - } - function error(format) { - { - { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - printWarning('error', format, args); - } - } - } - - function printWarning(level, format, args) { - // When changing this logic, you might want to also - // update consoleWithStackDev.www.js as well. - { - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - var stack = ReactDebugCurrentFrame.getStackAddendum(); - - if (stack !== '') { - format += '%s'; - args = args.concat([stack]); - } // eslint-disable-next-line react-internal/safe-string-coercion - - - var argsWithFormat = args.map(function (item) { - return String(item); - }); // Careful: RN currently depends on this prefix - - argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it - // breaks IE9: https://github.com/facebook/react/issues/13610 - // eslint-disable-next-line react-internal/no-production-logging - - Function.prototype.apply.call(console[level], console, argsWithFormat); - } - } - - var didWarnStateUpdateForUnmountedComponent = {}; - - function warnNoop(publicInstance, callerName) { - { - var _constructor = publicInstance.constructor; - var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; - var warningKey = componentName + "." + callerName; - - if (didWarnStateUpdateForUnmountedComponent[warningKey]) { - return; - } - - error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); - - didWarnStateUpdateForUnmountedComponent[warningKey] = true; - } - } - /** - * This is the abstract API for an update queue. - */ - - - var ReactNoopUpdateQueue = { - /** - * Checks whether or not this composite component is mounted. - * @param {ReactClass} publicInstance The instance we want to test. - * @return {boolean} True if mounted, false otherwise. - * @protected - * @final - */ - isMounted: function (publicInstance) { - return false; - }, - - /** - * Forces an update. This should only be invoked when it is known with - * certainty that we are **not** in a DOM transaction. - * - * You may want to call this when you know that some deeper aspect of the - * component's state has changed but `setState` was not called. - * - * This will not invoke `shouldComponentUpdate`, but it will invoke - * `componentWillUpdate` and `componentDidUpdate`. - * - * @param {ReactClass} publicInstance The instance that should rerender. - * @param {?function} callback Called after component is updated. - * @param {?string} callerName name of the calling function in the public API. - * @internal - */ - enqueueForceUpdate: function (publicInstance, callback, callerName) { - warnNoop(publicInstance, 'forceUpdate'); - }, - - /** - * Replaces all of the state. Always use this or `setState` to mutate state. - * You should treat `this.state` as immutable. - * - * There is no guarantee that `this.state` will be immediately updated, so - * accessing `this.state` after calling this method may return the old value. - * - * @param {ReactClass} publicInstance The instance that should rerender. - * @param {object} completeState Next state. - * @param {?function} callback Called after component is updated. - * @param {?string} callerName name of the calling function in the public API. - * @internal - */ - enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { - warnNoop(publicInstance, 'replaceState'); - }, - - /** - * Sets a subset of the state. This only exists because _pendingState is - * internal. This provides a merging strategy that is not available to deep - * properties which is confusing. TODO: Expose pendingState or don't use it - * during the merge. - * - * @param {ReactClass} publicInstance The instance that should rerender. - * @param {object} partialState Next partial state to be merged with state. - * @param {?function} callback Called after component is updated. - * @param {?string} Name of the calling function in the public API. - * @internal - */ - enqueueSetState: function (publicInstance, partialState, callback, callerName) { - warnNoop(publicInstance, 'setState'); - } - }; - - var assign = Object.assign; - - var emptyObject = {}; - - { - Object.freeze(emptyObject); - } - /** - * Base class helpers for the updating state of a component. - */ - - - function Component(props, context, updater) { - this.props = props; - this.context = context; // If a component has string refs, we will assign a different object later. - - this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the - // renderer. - - this.updater = updater || ReactNoopUpdateQueue; - } - - Component.prototype.isReactComponent = {}; - /** - * Sets a subset of the state. Always use this to mutate - * state. You should treat `this.state` as immutable. - * - * There is no guarantee that `this.state` will be immediately updated, so - * accessing `this.state` after calling this method may return the old value. - * - * There is no guarantee that calls to `setState` will run synchronously, - * as they may eventually be batched together. You can provide an optional - * callback that will be executed when the call to setState is actually - * completed. - * - * When a function is provided to setState, it will be called at some point in - * the future (not synchronously). It will be called with the up to date - * component arguments (state, props, context). These values can be different - * from this.* because your function may be called after receiveProps but before - * shouldComponentUpdate, and this new state, props, and context will not yet be - * assigned to this. - * - * @param {object|function} partialState Next partial state or function to - * produce next partial state to be merged with current state. - * @param {?function} callback Called after state is updated. - * @final - * @protected - */ - - Component.prototype.setState = function (partialState, callback) { - if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) { - throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.'); - } - - this.updater.enqueueSetState(this, partialState, callback, 'setState'); - }; - /** - * Forces an update. This should only be invoked when it is known with - * certainty that we are **not** in a DOM transaction. - * - * You may want to call this when you know that some deeper aspect of the - * component's state has changed but `setState` was not called. - * - * This will not invoke `shouldComponentUpdate`, but it will invoke - * `componentWillUpdate` and `componentDidUpdate`. - * - * @param {?function} callback Called after update is complete. - * @final - * @protected - */ - - - Component.prototype.forceUpdate = function (callback) { - this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); - }; - /** - * Deprecated APIs. These APIs used to exist on classic React classes but since - * we would like to deprecate them, we're not going to move them over to this - * modern base class. Instead, we define a getter that warns if it's accessed. - */ - - - { - var deprecatedAPIs = { - isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], - replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] - }; - - var defineDeprecationWarning = function (methodName, info) { - Object.defineProperty(Component.prototype, methodName, { - get: function () { - warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); - - return undefined; - } - }); - }; - - for (var fnName in deprecatedAPIs) { - if (deprecatedAPIs.hasOwnProperty(fnName)) { - defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); - } - } - } - - function ComponentDummy() {} - - ComponentDummy.prototype = Component.prototype; - /** - * Convenience component with default shallow equality check for sCU. - */ - - function PureComponent(props, context, updater) { - this.props = props; - this.context = context; // If a component has string refs, we will assign a different object later. - - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; - } - - var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); - pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. - - assign(pureComponentPrototype, Component.prototype); - pureComponentPrototype.isPureReactComponent = true; - - // an immutable object with a single mutable value - function createRef() { - var refObject = { - current: null - }; - - { - Object.seal(refObject); - } - - return refObject; - } - - var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare - - function isArray(a) { - return isArrayImpl(a); - } - - /* - * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol - * and Temporal.* types. See https://github.com/facebook/react/pull/22064. - * - * The functions in this module will throw an easier-to-understand, - * easier-to-debug exception with a clear errors message message explaining the - * problem. (Instead of a confusing exception thrown inside the implementation - * of the `value` object). - */ - // $FlowFixMe only called in DEV, so void return is not possible. - function typeName(value) { - { - // toStringTag is needed for namespaced types like Temporal.Instant - var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; - var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; - return type; - } - } // $FlowFixMe only called in DEV, so void return is not possible. - - - function willCoercionThrow(value) { - { - try { - testStringCoercion(value); - return false; - } catch (e) { - return true; - } - } - } - - function testStringCoercion(value) { - // If you ended up here by following an exception call stack, here's what's - // happened: you supplied an object or symbol value to React (as a prop, key, - // DOM attribute, CSS property, string ref, etc.) and when React tried to - // coerce it to a string using `'' + value`, an exception was thrown. - // - // The most common types that will cause this exception are `Symbol` instances - // and Temporal objects like `Temporal.Instant`. But any object that has a - // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this - // exception. (Library authors do this to prevent users from using built-in - // numeric operators like `+` or comparison operators like `>=` because custom - // methods are needed to perform accurate arithmetic or comparison.) - // - // To fix the problem, coerce this object or symbol value to a string before - // passing it to React. The most reliable way is usually `String(value)`. - // - // To find which value is throwing, check the browser or debugger console. - // Before this exception was thrown, there should be `console.error` output - // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the - // problem and how that type was used: key, atrribute, input value prop, etc. - // In most cases, this console output also shows the component and its - // ancestor components where the exception happened. - // - // eslint-disable-next-line react-internal/safe-string-coercion - return '' + value; - } - function checkKeyStringCoercion(value) { - { - if (willCoercionThrow(value)) { - error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); - - return testStringCoercion(value); // throw (to help callers find troubleshooting comments) - } - } - } - - function getWrappedName(outerType, innerType, wrapperName) { - var displayName = outerType.displayName; - - if (displayName) { - return displayName; - } - - var functionName = innerType.displayName || innerType.name || ''; - return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; - } // Keep in sync with react-reconciler/getComponentNameFromFiber - - - function getContextName(type) { - return type.displayName || 'Context'; - } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. - - - function getComponentNameFromType(type) { - if (type == null) { - // Host root, text node or just invalid type. - return null; - } - - { - if (typeof type.tag === 'number') { - error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); - } - } - - if (typeof type === 'function') { - return type.displayName || type.name || null; - } - - if (typeof type === 'string') { - return type; - } - - switch (type) { - case REACT_FRAGMENT_TYPE: - return 'Fragment'; - - case REACT_PORTAL_TYPE: - return 'Portal'; - - case REACT_PROFILER_TYPE: - return 'Profiler'; - - case REACT_STRICT_MODE_TYPE: - return 'StrictMode'; - - case REACT_SUSPENSE_TYPE: - return 'Suspense'; - - case REACT_SUSPENSE_LIST_TYPE: - return 'SuspenseList'; - - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_CONTEXT_TYPE: - var context = type; - return getContextName(context) + '.Consumer'; - - case REACT_PROVIDER_TYPE: - var provider = type; - return getContextName(provider._context) + '.Provider'; - - case REACT_FORWARD_REF_TYPE: - return getWrappedName(type, type.render, 'ForwardRef'); - - case REACT_MEMO_TYPE: - var outerName = type.displayName || null; - - if (outerName !== null) { - return outerName; - } - - return getComponentNameFromType(type.type) || 'Memo'; - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - return getComponentNameFromType(init(payload)); - } catch (x) { - return null; - } - } - - // eslint-disable-next-line no-fallthrough - } - } - - return null; - } - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - var RESERVED_PROPS = { - key: true, - ref: true, - __self: true, - __source: true - }; - var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; - - { - didWarnAboutStringRefs = {}; - } - - function hasValidRef(config) { - { - if (hasOwnProperty.call(config, 'ref')) { - var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.ref !== undefined; - } - - function hasValidKey(config) { - { - if (hasOwnProperty.call(config, 'key')) { - var getter = Object.getOwnPropertyDescriptor(config, 'key').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.key !== undefined; - } - - function defineKeyPropWarningGetter(props, displayName) { - var warnAboutAccessingKey = function () { - { - if (!specialPropKeyWarningShown) { - specialPropKeyWarningShown = true; - - error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - } - }; - - warnAboutAccessingKey.isReactWarning = true; - Object.defineProperty(props, 'key', { - get: warnAboutAccessingKey, - configurable: true - }); - } - - function defineRefPropWarningGetter(props, displayName) { - var warnAboutAccessingRef = function () { - { - if (!specialPropRefWarningShown) { - specialPropRefWarningShown = true; - - error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - } - }; - - warnAboutAccessingRef.isReactWarning = true; - Object.defineProperty(props, 'ref', { - get: warnAboutAccessingRef, - configurable: true - }); - } - - function warnIfStringRefCannotBeAutoConverted(config) { - { - if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { - var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); - - if (!didWarnAboutStringRefs[componentName]) { - error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); - - didWarnAboutStringRefs[componentName] = true; - } - } - } - } - /** - * Factory method to create a new React element. This no longer adheres to - * the class pattern, so do not use new to call it. Also, instanceof check - * will not work. Instead test $$typeof field against Symbol.for('react.element') to check - * if something is a React Element. - * - * @param {*} type - * @param {*} props - * @param {*} key - * @param {string|object} ref - * @param {*} owner - * @param {*} self A *temporary* helper to detect places where `this` is - * different from the `owner` when React.createElement is called, so that we - * can warn. We want to get rid of owner and replace string `ref`s with arrow - * functions, and as long as `this` and owner are the same, there will be no - * change in behavior. - * @param {*} source An annotation object (added by a transpiler or otherwise) - * indicating filename, line number, and/or other information. - * @internal - */ - - - var ReactElement = function (type, key, ref, self, source, owner, props) { - var element = { - // This tag allows us to uniquely identify this as a React Element - $$typeof: REACT_ELEMENT_TYPE, - // Built-in properties that belong on the element - type: type, - key: key, - ref: ref, - props: props, - // Record the component responsible for creating this element. - _owner: owner - }; - - { - // The validation flag is currently mutative. We put it on - // an external backing store so that we can freeze the whole object. - // This can be replaced with a WeakMap once they are implemented in - // commonly used development environments. - element._store = {}; // To make comparing ReactElements easier for testing purposes, we make - // the validation flag non-enumerable (where possible, which should - // include every environment we run tests in), so the test framework - // ignores it. - - Object.defineProperty(element._store, 'validated', { - configurable: false, - enumerable: false, - writable: true, - value: false - }); // self and source are DEV only properties. - - Object.defineProperty(element, '_self', { - configurable: false, - enumerable: false, - writable: false, - value: self - }); // Two elements created in two different places should be considered - // equal for testing purposes and therefore we hide it from enumeration. - - Object.defineProperty(element, '_source', { - configurable: false, - enumerable: false, - writable: false, - value: source - }); - - if (Object.freeze) { - Object.freeze(element.props); - Object.freeze(element); - } - } - - return element; - }; - /** - * Create and return a new ReactElement of the given type. - * See https://reactjs.org/docs/react-api.html#createelement - */ - - function createElement(type, config, children) { - var propName; // Reserved names are extracted - - var props = {}; - var key = null; - var ref = null; - var self = null; - var source = null; - - if (config != null) { - if (hasValidRef(config)) { - ref = config.ref; - - { - warnIfStringRefCannotBeAutoConverted(config); - } - } - - if (hasValidKey(config)) { - { - checkKeyStringCoercion(config.key); - } - - key = '' + config.key; - } - - self = config.__self === undefined ? null : config.__self; - source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object - - for (propName in config) { - if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { - props[propName] = config[propName]; - } - } - } // Children can be more than one argument, and those are transferred onto - // the newly allocated props object. - - - var childrenLength = arguments.length - 2; - - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 2]; - } - - { - if (Object.freeze) { - Object.freeze(childArray); - } - } - - props.children = childArray; - } // Resolve default props - - - if (type && type.defaultProps) { - var defaultProps = type.defaultProps; - - for (propName in defaultProps) { - if (props[propName] === undefined) { - props[propName] = defaultProps[propName]; - } - } - } - - { - if (key || ref) { - var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; - - if (key) { - defineKeyPropWarningGetter(props, displayName); - } - - if (ref) { - defineRefPropWarningGetter(props, displayName); - } - } - } - - return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); - } - function cloneAndReplaceKey(oldElement, newKey) { - var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); - return newElement; - } - /** - * Clone and return a new ReactElement using element as the starting point. - * See https://reactjs.org/docs/react-api.html#cloneelement - */ - - function cloneElement(element, config, children) { - if (element === null || element === undefined) { - throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + "."); - } - - var propName; // Original props are copied - - var props = assign({}, element.props); // Reserved names are extracted - - var key = element.key; - var ref = element.ref; // Self is preserved since the owner is preserved. - - var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a - // transpiler, and the original source is probably a better indicator of the - // true owner. - - var source = element._source; // Owner will be preserved, unless ref is overridden - - var owner = element._owner; - - if (config != null) { - if (hasValidRef(config)) { - // Silently steal the ref from the parent. - ref = config.ref; - owner = ReactCurrentOwner.current; - } - - if (hasValidKey(config)) { - { - checkKeyStringCoercion(config.key); - } - - key = '' + config.key; - } // Remaining properties override existing props - - - var defaultProps; - - if (element.type && element.type.defaultProps) { - defaultProps = element.type.defaultProps; - } - - for (propName in config) { - if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { - if (config[propName] === undefined && defaultProps !== undefined) { - // Resolve default props - props[propName] = defaultProps[propName]; - } else { - props[propName] = config[propName]; - } - } - } - } // Children can be more than one argument, and those are transferred onto - // the newly allocated props object. - - - var childrenLength = arguments.length - 2; - - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 2]; - } - - props.children = childArray; - } - - return ReactElement(element.type, key, ref, self, source, owner, props); - } - /** - * Verifies the object is a ReactElement. - * See https://reactjs.org/docs/react-api.html#isvalidelement - * @param {?object} object - * @return {boolean} True if `object` is a ReactElement. - * @final - */ - - function isValidElement(object) { - return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; - } - - var SEPARATOR = '.'; - var SUBSEPARATOR = ':'; - /** - * Escape and wrap key so it is safe to use as a reactid - * - * @param {string} key to be escaped. - * @return {string} the escaped key. - */ - - function escape(key) { - var escapeRegex = /[=:]/g; - var escaperLookup = { - '=': '=0', - ':': '=2' - }; - var escapedString = key.replace(escapeRegex, function (match) { - return escaperLookup[match]; - }); - return '$' + escapedString; - } - /** - * TODO: Test that a single child and an array with one item have the same key - * pattern. - */ - - - var didWarnAboutMaps = false; - var userProvidedKeyEscapeRegex = /\/+/g; - - function escapeUserProvidedKey(text) { - return text.replace(userProvidedKeyEscapeRegex, '$&/'); - } - /** - * Generate a key string that identifies a element within a set. - * - * @param {*} element A element that could contain a manual key. - * @param {number} index Index that is used if a manual key is not provided. - * @return {string} - */ - - - function getElementKey(element, index) { - // Do some typechecking here since we call this blindly. We want to ensure - // that we don't block potential future ES APIs. - if (typeof element === 'object' && element !== null && element.key != null) { - // Explicit key - { - checkKeyStringCoercion(element.key); - } - - return escape('' + element.key); - } // Implicit key determined by the index in the set - - - return index.toString(36); - } - - function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - - if (type === 'undefined' || type === 'boolean') { - // All of the above are perceived as null. - children = null; - } - - var invokeCallback = false; - - if (children === null) { - invokeCallback = true; - } else { - switch (type) { - case 'string': - case 'number': - invokeCallback = true; - break; - - case 'object': - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = true; - } - - } - } - - if (invokeCallback) { - var _child = children; - var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array - // so that it's consistent if the number of children grows: - - var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; - - if (isArray(mappedChild)) { - var escapedChildKey = ''; - - if (childKey != null) { - escapedChildKey = escapeUserProvidedKey(childKey) + '/'; - } - - mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { - return c; - }); - } else if (mappedChild != null) { - if (isValidElement(mappedChild)) { - { - // The `if` statement here prevents auto-disabling of the safe - // coercion ESLint rule, so we must manually disable it below. - // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key - if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) { - checkKeyStringCoercion(mappedChild.key); - } - } - - mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as - // traverseAllChildren used to do for objects as children - escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key - mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number - // eslint-disable-next-line react-internal/safe-string-coercion - escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); - } - - array.push(mappedChild); - } - - return 1; - } - - var child; - var nextName; - var subtreeCount = 0; // Count of children found in the current subtree. - - var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; - - if (isArray(children)) { - for (var i = 0; i < children.length; i++) { - child = children[i]; - nextName = nextNamePrefix + getElementKey(child, i); - subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); - } - } else { - var iteratorFn = getIteratorFn(children); - - if (typeof iteratorFn === 'function') { - var iterableChildren = children; - - { - // Warn about using Maps as children - if (iteratorFn === iterableChildren.entries) { - if (!didWarnAboutMaps) { - warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); - } - - didWarnAboutMaps = true; - } - } - - var iterator = iteratorFn.call(iterableChildren); - var step; - var ii = 0; - - while (!(step = iterator.next()).done) { - child = step.value; - nextName = nextNamePrefix + getElementKey(child, ii++); - subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); - } - } else if (type === 'object') { - // eslint-disable-next-line react-internal/safe-string-coercion - var childrenString = String(children); - throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.'); - } - } - - return subtreeCount; - } - - /** - * Maps children that are typically specified as `props.children`. - * - * See https://reactjs.org/docs/react-api.html#reactchildrenmap - * - * The provided mapFunction(child, index) will be called for each - * leaf child. - * - * @param {?*} children Children tree container. - * @param {function(*, int)} func The map function. - * @param {*} context Context for mapFunction. - * @return {object} Object containing the ordered map of results. - */ - function mapChildren(children, func, context) { - if (children == null) { - return children; - } - - var result = []; - var count = 0; - mapIntoArray(children, result, '', '', function (child) { - return func.call(context, child, count++); - }); - return result; - } - /** - * Count the number of children that are typically specified as - * `props.children`. - * - * See https://reactjs.org/docs/react-api.html#reactchildrencount - * - * @param {?*} children Children tree container. - * @return {number} The number of children. - */ - - - function countChildren(children) { - var n = 0; - mapChildren(children, function () { - n++; // Don't return anything - }); - return n; - } - - /** - * Iterates through children that are typically specified as `props.children`. - * - * See https://reactjs.org/docs/react-api.html#reactchildrenforeach - * - * The provided forEachFunc(child, index) will be called for each - * leaf child. - * - * @param {?*} children Children tree container. - * @param {function(*, int)} forEachFunc - * @param {*} forEachContext Context for forEachContext. - */ - function forEachChildren(children, forEachFunc, forEachContext) { - mapChildren(children, function () { - forEachFunc.apply(this, arguments); // Don't return anything. - }, forEachContext); - } - /** - * Flatten a children object (typically specified as `props.children`) and - * return an array with appropriately re-keyed children. - * - * See https://reactjs.org/docs/react-api.html#reactchildrentoarray - */ - - - function toArray(children) { - return mapChildren(children, function (child) { - return child; - }) || []; - } - /** - * Returns the first child in a collection of children and verifies that there - * is only one child in the collection. - * - * See https://reactjs.org/docs/react-api.html#reactchildrenonly - * - * The current implementation of this function assumes that a single child gets - * passed without a wrapper, but the purpose of this helper function is to - * abstract away the particular structure of children. - * - * @param {?object} children Child collection structure. - * @return {ReactElement} The first and only `ReactElement` contained in the - * structure. - */ - - - function onlyChild(children) { - if (!isValidElement(children)) { - throw new Error('React.Children.only expected to receive a single React element child.'); - } - - return children; - } - - function createContext(defaultValue) { - // TODO: Second argument used to be an optional `calculateChangedBits` - // function. Warn to reserve for future use? - var context = { - $$typeof: REACT_CONTEXT_TYPE, - // As a workaround to support multiple concurrent renderers, we categorize - // some renderers as primary and others as secondary. We only expect - // there to be two concurrent renderers at most: React Native (primary) and - // Fabric (secondary); React DOM (primary) and React ART (secondary). - // Secondary renderers store their context values on separate fields. - _currentValue: defaultValue, - _currentValue2: defaultValue, - // Used to track how many concurrent renderers this context currently - // supports within in a single renderer. Such as parallel server rendering. - _threadCount: 0, - // These are circular - Provider: null, - Consumer: null, - // Add these to use same hidden class in VM as ServerContext - _defaultValue: null, - _globalName: null - }; - context.Provider = { - $$typeof: REACT_PROVIDER_TYPE, - _context: context - }; - var hasWarnedAboutUsingNestedContextConsumers = false; - var hasWarnedAboutUsingConsumerProvider = false; - var hasWarnedAboutDisplayNameOnConsumer = false; - - { - // A separate object, but proxies back to the original context object for - // backwards compatibility. It has a different $$typeof, so we can properly - // warn for the incorrect usage of Context as a Consumer. - var Consumer = { - $$typeof: REACT_CONTEXT_TYPE, - _context: context - }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here - - Object.defineProperties(Consumer, { - Provider: { - get: function () { - if (!hasWarnedAboutUsingConsumerProvider) { - hasWarnedAboutUsingConsumerProvider = true; - - error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); - } - - return context.Provider; - }, - set: function (_Provider) { - context.Provider = _Provider; - } - }, - _currentValue: { - get: function () { - return context._currentValue; - }, - set: function (_currentValue) { - context._currentValue = _currentValue; - } - }, - _currentValue2: { - get: function () { - return context._currentValue2; - }, - set: function (_currentValue2) { - context._currentValue2 = _currentValue2; - } - }, - _threadCount: { - get: function () { - return context._threadCount; - }, - set: function (_threadCount) { - context._threadCount = _threadCount; - } - }, - Consumer: { - get: function () { - if (!hasWarnedAboutUsingNestedContextConsumers) { - hasWarnedAboutUsingNestedContextConsumers = true; - - error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); - } - - return context.Consumer; - } - }, - displayName: { - get: function () { - return context.displayName; - }, - set: function (displayName) { - if (!hasWarnedAboutDisplayNameOnConsumer) { - warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); - - hasWarnedAboutDisplayNameOnConsumer = true; - } - } - } - }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty - - context.Consumer = Consumer; - } - - { - context._currentRenderer = null; - context._currentRenderer2 = null; - } - - return context; - } - - var Uninitialized = -1; - var Pending = 0; - var Resolved = 1; - var Rejected = 2; - - function lazyInitializer(payload) { - if (payload._status === Uninitialized) { - var ctor = payload._result; - var thenable = ctor(); // Transition to the next state. - // This might throw either because it's missing or throws. If so, we treat it - // as still uninitialized and try again next time. Which is the same as what - // happens if the ctor or any wrappers processing the ctor throws. This might - // end up fixing it if the resolution was a concurrency bug. - - thenable.then(function (moduleObject) { - if (payload._status === Pending || payload._status === Uninitialized) { - // Transition to the next state. - var resolved = payload; - resolved._status = Resolved; - resolved._result = moduleObject; - } - }, function (error) { - if (payload._status === Pending || payload._status === Uninitialized) { - // Transition to the next state. - var rejected = payload; - rejected._status = Rejected; - rejected._result = error; - } - }); - - if (payload._status === Uninitialized) { - // In case, we're still uninitialized, then we're waiting for the thenable - // to resolve. Set it as pending in the meantime. - var pending = payload; - pending._status = Pending; - pending._result = thenable; - } - } - - if (payload._status === Resolved) { - var moduleObject = payload._result; - - { - if (moduleObject === undefined) { - error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. - 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject); - } - } - - { - if (!('default' in moduleObject)) { - error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. - 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); - } - } - - return moduleObject.default; - } else { - throw payload._result; - } - } - - function lazy(ctor) { - var payload = { - // We use these fields to store the result. - _status: Uninitialized, - _result: ctor - }; - var lazyType = { - $$typeof: REACT_LAZY_TYPE, - _payload: payload, - _init: lazyInitializer - }; - - { - // In production, this would just set it on the object. - var defaultProps; - var propTypes; // $FlowFixMe - - Object.defineProperties(lazyType, { - defaultProps: { - configurable: true, - get: function () { - return defaultProps; - }, - set: function (newDefaultProps) { - error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); - - defaultProps = newDefaultProps; // Match production behavior more closely: - // $FlowFixMe - - Object.defineProperty(lazyType, 'defaultProps', { - enumerable: true - }); - } - }, - propTypes: { - configurable: true, - get: function () { - return propTypes; - }, - set: function (newPropTypes) { - error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); - - propTypes = newPropTypes; // Match production behavior more closely: - // $FlowFixMe - - Object.defineProperty(lazyType, 'propTypes', { - enumerable: true - }); - } - } - }); - } - - return lazyType; - } - - function forwardRef(render) { - { - if (render != null && render.$$typeof === REACT_MEMO_TYPE) { - error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); - } else if (typeof render !== 'function') { - error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); - } else { - if (render.length !== 0 && render.length !== 2) { - error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); - } - } - - if (render != null) { - if (render.defaultProps != null || render.propTypes != null) { - error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); - } - } - } - - var elementType = { - $$typeof: REACT_FORWARD_REF_TYPE, - render: render - }; - - { - var ownName; - Object.defineProperty(elementType, 'displayName', { - enumerable: false, - configurable: true, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; // The inner component shouldn't inherit this display name in most cases, - // because the component may be used elsewhere. - // But it's nice for anonymous functions to inherit the name, - // so that our component-stack generation logic will display their frames. - // An anonymous function generally suggests a pattern like: - // React.forwardRef((props, ref) => {...}); - // This kind of inner function is not used elsewhere so the side effect is okay. - - if (!render.name && !render.displayName) { - render.displayName = name; - } - } - }); - } - - return elementType; - } - - var REACT_MODULE_REFERENCE; - - { - REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); - } - - function isValidElementType(type) { - if (typeof type === 'string' || typeof type === 'function') { - return true; - } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). - - - if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { - return true; - } - - if (typeof type === 'object' && type !== null) { - if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object - // types supported by any Flight configuration anywhere since - // we don't know which Flight build this will end up being used - // with. - type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { - return true; - } - } - - return false; - } - - function memo(type, compare) { - { - if (!isValidElementType(type)) { - error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); - } - } - - var elementType = { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: compare === undefined ? null : compare - }; - - { - var ownName; - Object.defineProperty(elementType, 'displayName', { - enumerable: false, - configurable: true, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; // The inner component shouldn't inherit this display name in most cases, - // because the component may be used elsewhere. - // But it's nice for anonymous functions to inherit the name, - // so that our component-stack generation logic will display their frames. - // An anonymous function generally suggests a pattern like: - // React.memo((props) => {...}); - // This kind of inner function is not used elsewhere so the side effect is okay. - - if (!type.name && !type.displayName) { - type.displayName = name; - } - } - }); - } - - return elementType; - } - - function resolveDispatcher() { - var dispatcher = ReactCurrentDispatcher.current; - - { - if (dispatcher === null) { - error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.'); - } - } // Will result in a null access error if accessed outside render phase. We - // intentionally don't throw our own error because this is in a hot path. - // Also helps ensure this is inlined. - - - return dispatcher; - } - function useContext(Context) { - var dispatcher = resolveDispatcher(); - - { - // TODO: add a more generic warning for invalid values. - if (Context._context !== undefined) { - var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs - // and nobody should be using this in existing code. - - if (realContext.Consumer === Context) { - error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); - } else if (realContext.Provider === Context) { - error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); - } - } - } - - return dispatcher.useContext(Context); - } - function useState(initialState) { - var dispatcher = resolveDispatcher(); - return dispatcher.useState(initialState); - } - function useReducer(reducer, initialArg, init) { - var dispatcher = resolveDispatcher(); - return dispatcher.useReducer(reducer, initialArg, init); - } - function useRef(initialValue) { - var dispatcher = resolveDispatcher(); - return dispatcher.useRef(initialValue); - } - function useEffect(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useEffect(create, deps); - } - function useInsertionEffect(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useInsertionEffect(create, deps); - } - function useLayoutEffect(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useLayoutEffect(create, deps); - } - function useCallback(callback, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useCallback(callback, deps); - } - function useMemo(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useMemo(create, deps); - } - function useImperativeHandle(ref, create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useImperativeHandle(ref, create, deps); - } - function useDebugValue(value, formatterFn) { - { - var dispatcher = resolveDispatcher(); - return dispatcher.useDebugValue(value, formatterFn); - } - } - function useTransition() { - var dispatcher = resolveDispatcher(); - return dispatcher.useTransition(); - } - function useDeferredValue(value) { - var dispatcher = resolveDispatcher(); - return dispatcher.useDeferredValue(value); - } - function useId() { - var dispatcher = resolveDispatcher(); - return dispatcher.useId(); - } - function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { - var dispatcher = resolveDispatcher(); - return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); - } - - // Helpers to patch console.logs to avoid logging during side-effect free - // replaying on render function. This currently only patches the object - // lazily which won't cover if the log function was extracted eagerly. - // We could also eagerly patch the method. - var disabledDepth = 0; - var prevLog; - var prevInfo; - var prevWarn; - var prevError; - var prevGroup; - var prevGroupCollapsed; - var prevGroupEnd; - - function disabledLog() {} - - disabledLog.__reactDisabledLog = true; - function disableLogs() { - { - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - prevLog = console.log; - prevInfo = console.info; - prevWarn = console.warn; - prevError = console.error; - prevGroup = console.group; - prevGroupCollapsed = console.groupCollapsed; - prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 - - var props = { - configurable: true, - enumerable: true, - value: disabledLog, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - info: props, - log: props, - warn: props, - error: props, - group: props, - groupCollapsed: props, - groupEnd: props - }); - /* eslint-enable react-internal/no-production-logging */ - } - - disabledDepth++; - } - } - function reenableLogs() { - { - disabledDepth--; - - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - var props = { - configurable: true, - enumerable: true, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - log: assign({}, props, { - value: prevLog - }), - info: assign({}, props, { - value: prevInfo - }), - warn: assign({}, props, { - value: prevWarn - }), - error: assign({}, props, { - value: prevError - }), - group: assign({}, props, { - value: prevGroup - }), - groupCollapsed: assign({}, props, { - value: prevGroupCollapsed - }), - groupEnd: assign({}, props, { - value: prevGroupEnd - }) - }); - /* eslint-enable react-internal/no-production-logging */ - } - - if (disabledDepth < 0) { - error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); - } - } - } - - var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; - var prefix; - function describeBuiltInComponentFrame(name, source, ownerFn) { - { - if (prefix === undefined) { - // Extract the VM specific prefix used by each line. - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = match && match[1] || ''; - } - } // We use the prefix to ensure our stacks line up with native stack frames. - - - return '\n' + prefix + name; - } - } - var reentry = false; - var componentFrameCache; - - { - var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; - componentFrameCache = new PossiblyWeakMap(); - } - - function describeNativeComponentFrame(fn, construct) { - // If something asked for a stack inside a fake render, it should get ignored. - if ( !fn || reentry) { - return ''; - } - - { - var frame = componentFrameCache.get(fn); - - if (frame !== undefined) { - return frame; - } - } - - var control; - reentry = true; - var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. - - Error.prepareStackTrace = undefined; - var previousDispatcher; - - { - previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function - // for warnings. - - ReactCurrentDispatcher$1.current = null; - disableLogs(); - } - - try { - // This should throw. - if (construct) { - // Something should be setting the props in the constructor. - var Fake = function () { - throw Error(); - }; // $FlowFixMe - - - Object.defineProperty(Fake.prototype, 'props', { - set: function () { - // We use a throwing setter instead of frozen or non-writable props - // because that won't throw in a non-strict mode function. - throw Error(); - } - }); - - if (typeof Reflect === 'object' && Reflect.construct) { - // We construct a different control for this case to include any extra - // frames added by the construct call. - try { - Reflect.construct(Fake, []); - } catch (x) { - control = x; - } - - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x) { - control = x; - } - - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x) { - control = x; - } - - fn(); - } - } catch (sample) { - // This is inlined manually because closure doesn't do it for us. - if (sample && control && typeof sample.stack === 'string') { - // This extracts the first frame from the sample that isn't also in the control. - // Skipping one frame that we assume is the frame that calls the two. - var sampleLines = sample.stack.split('\n'); - var controlLines = control.stack.split('\n'); - var s = sampleLines.length - 1; - var c = controlLines.length - 1; - - while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { - // We expect at least one stack frame to be shared. - // Typically this will be the root most one. However, stack frames may be - // cut off due to maximum stack limits. In this case, one maybe cut off - // earlier than the other. We assume that the sample is longer or the same - // and there for cut off earlier. So we should find the root most frame in - // the sample somewhere in the control. - c--; - } - - for (; s >= 1 && c >= 0; s--, c--) { - // Next we find the first one that isn't the same which should be the - // frame that called our sample function and the control. - if (sampleLines[s] !== controlLines[c]) { - // In V8, the first line is describing the message but other VMs don't. - // If we're about to return the first line, and the control is also on the same - // line, that's a pretty good indicator that our sample threw at same line as - // the control. I.e. before we entered the sample frame. So we ignore this result. - // This can happen if you passed a class to function component, or non-function. - if (s !== 1 || c !== 1) { - do { - s--; - c--; // We may still have similar intermediate frames from the construct call. - // The next one that isn't the same should be our match though. - - if (c < 0 || sampleLines[s] !== controlLines[c]) { - // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. - var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" - // but we have a user-provided "displayName" - // splice it in to make the stack more readable. - - - if (fn.displayName && _frame.includes('')) { - _frame = _frame.replace('', fn.displayName); - } - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, _frame); - } - } // Return the line we found. - - - return _frame; - } - } while (s >= 1 && c >= 0); - } - - break; - } - } - } - } finally { - reentry = false; - - { - ReactCurrentDispatcher$1.current = previousDispatcher; - reenableLogs(); - } - - Error.prepareStackTrace = previousPrepareStackTrace; - } // Fallback to just using the name if we couldn't make it throw. - - - var name = fn ? fn.displayName || fn.name : ''; - var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, syntheticFrame); - } - } - - return syntheticFrame; - } - function describeFunctionComponentFrame(fn, source, ownerFn) { - { - return describeNativeComponentFrame(fn, false); - } - } - - function shouldConstruct(Component) { - var prototype = Component.prototype; - return !!(prototype && prototype.isReactComponent); - } - - function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { - - if (type == null) { - return ''; - } - - if (typeof type === 'function') { - { - return describeNativeComponentFrame(type, shouldConstruct(type)); - } - } - - if (typeof type === 'string') { - return describeBuiltInComponentFrame(type); - } - - switch (type) { - case REACT_SUSPENSE_TYPE: - return describeBuiltInComponentFrame('Suspense'); - - case REACT_SUSPENSE_LIST_TYPE: - return describeBuiltInComponentFrame('SuspenseList'); - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - return describeFunctionComponentFrame(type.render); - - case REACT_MEMO_TYPE: - // Memo may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - // Lazy may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); - } catch (x) {} - } - } - } - - return ''; - } - - var loggedTypeFailures = {}; - var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; - - function setCurrentlyValidatingElement(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - ReactDebugCurrentFrame$1.setExtraStackFrame(stack); - } else { - ReactDebugCurrentFrame$1.setExtraStackFrame(null); - } - } - } - - function checkPropTypes(typeSpecs, values, location, componentName, element) { - { - // $FlowFixMe This is okay but Flow doesn't know it. - var has = Function.call.bind(hasOwnProperty); - - for (var typeSpecName in typeSpecs) { - if (has(typeSpecs, typeSpecName)) { - var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - if (typeof typeSpecs[typeSpecName] !== 'function') { - // eslint-disable-next-line react-internal/prod-error-codes - var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); - err.name = 'Invariant Violation'; - throw err; - } - - error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); - } catch (ex) { - error$1 = ex; - } - - if (error$1 && !(error$1 instanceof Error)) { - setCurrentlyValidatingElement(element); - - error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); - - setCurrentlyValidatingElement(null); - } - - if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error$1.message] = true; - setCurrentlyValidatingElement(element); - - error('Failed %s type: %s', location, error$1.message); - - setCurrentlyValidatingElement(null); - } - } - } - } - } - - function setCurrentlyValidatingElement$1(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - setExtraStackFrame(stack); - } else { - setExtraStackFrame(null); - } - } - } - - var propTypesMisspellWarningShown; - - { - propTypesMisspellWarningShown = false; - } - - function getDeclarationErrorAddendum() { - if (ReactCurrentOwner.current) { - var name = getComponentNameFromType(ReactCurrentOwner.current.type); - - if (name) { - return '\n\nCheck the render method of `' + name + '`.'; - } - } - - return ''; - } - - function getSourceInfoErrorAddendum(source) { - if (source !== undefined) { - var fileName = source.fileName.replace(/^.*[\\\/]/, ''); - var lineNumber = source.lineNumber; - return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; - } - - return ''; - } - - function getSourceInfoErrorAddendumForProps(elementProps) { - if (elementProps !== null && elementProps !== undefined) { - return getSourceInfoErrorAddendum(elementProps.__source); - } - - return ''; - } - /** - * Warn if there's no key explicitly set on dynamic arrays of children or - * object keys are not valid. This allows us to keep track of children between - * updates. - */ - - - var ownerHasKeyUseWarning = {}; - - function getCurrentComponentErrorInfo(parentType) { - var info = getDeclarationErrorAddendum(); - - if (!info) { - var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; - - if (parentName) { - info = "\n\nCheck the top-level render call using <" + parentName + ">."; - } - } - - return info; - } - /** - * Warn if the element doesn't have an explicit key assigned to it. - * This element is in an array. The array could grow and shrink or be - * reordered. All children that haven't already been validated are required to - * have a "key" property assigned to it. Error statuses are cached so a warning - * will only be shown once. - * - * @internal - * @param {ReactElement} element Element that requires a key. - * @param {*} parentType element's parent's type. - */ - - - function validateExplicitKey(element, parentType) { - if (!element._store || element._store.validated || element.key != null) { - return; - } - - element._store.validated = true; - var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); - - if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { - return; - } - - ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a - // property, it may be the creator of the child that's responsible for - // assigning it a key. - - var childOwner = ''; - - if (element && element._owner && element._owner !== ReactCurrentOwner.current) { - // Give the component that originally created this child. - childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; - } - - { - setCurrentlyValidatingElement$1(element); - - error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); - - setCurrentlyValidatingElement$1(null); - } - } - /** - * Ensure that every element either is passed in a static location, in an - * array with an explicit keys property defined, or in an object literal - * with valid key property. - * - * @internal - * @param {ReactNode} node Statically passed child of any type. - * @param {*} parentType node's parent's type. - */ - - - function validateChildKeys(node, parentType) { - if (typeof node !== 'object') { - return; - } - - if (isArray(node)) { - for (var i = 0; i < node.length; i++) { - var child = node[i]; - - if (isValidElement(child)) { - validateExplicitKey(child, parentType); - } - } - } else if (isValidElement(node)) { - // This element was passed in a valid location. - if (node._store) { - node._store.validated = true; - } - } else if (node) { - var iteratorFn = getIteratorFn(node); - - if (typeof iteratorFn === 'function') { - // Entry iterators used to provide implicit keys, - // but now we print a separate warning for them later. - if (iteratorFn !== node.entries) { - var iterator = iteratorFn.call(node); - var step; - - while (!(step = iterator.next()).done) { - if (isValidElement(step.value)) { - validateExplicitKey(step.value, parentType); - } - } - } - } - } - } - /** - * Given an element, validate that its props follow the propTypes definition, - * provided by the type. - * - * @param {ReactElement} element - */ - - - function validatePropTypes(element) { - { - var type = element.type; - - if (type === null || type === undefined || typeof type === 'string') { - return; - } - - var propTypes; - - if (typeof type === 'function') { - propTypes = type.propTypes; - } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. - // Inner props are checked in the reconciler. - type.$$typeof === REACT_MEMO_TYPE)) { - propTypes = type.propTypes; - } else { - return; - } - - if (propTypes) { - // Intentionally inside to avoid triggering lazy initializers: - var name = getComponentNameFromType(type); - checkPropTypes(propTypes, element.props, 'prop', name, element); - } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { - propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: - - var _name = getComponentNameFromType(type); - - error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); - } - - if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { - error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); - } - } - } - /** - * Given a fragment, validate that it can only be provided with fragment props - * @param {ReactElement} fragment - */ - - - function validateFragmentProps(fragment) { - { - var keys = Object.keys(fragment.props); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - - if (key !== 'children' && key !== 'key') { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); - - setCurrentlyValidatingElement$1(null); - break; - } - } - - if (fragment.ref !== null) { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid attribute `ref` supplied to `React.Fragment`.'); - - setCurrentlyValidatingElement$1(null); - } - } - } - function createElementWithValidation(type, props, children) { - var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to - // succeed and there will likely be errors in render. - - if (!validType) { - var info = ''; - - if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { - info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; - } - - var sourceInfo = getSourceInfoErrorAddendumForProps(props); - - if (sourceInfo) { - info += sourceInfo; - } else { - info += getDeclarationErrorAddendum(); - } - - var typeString; - - if (type === null) { - typeString = 'null'; - } else if (isArray(type)) { - typeString = 'array'; - } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { - typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; - info = ' Did you accidentally export a JSX literal instead of a component?'; - } else { - typeString = typeof type; - } - - { - error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); - } - } - - var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. - // TODO: Drop this when these are no longer allowed as the type argument. - - if (element == null) { - return element; - } // Skip key warning if the type isn't valid since our key validation logic - // doesn't expect a non-string/function type and can throw confusing errors. - // We don't want exception behavior to differ between dev and prod. - // (Rendering will throw with a helpful message and as soon as the type is - // fixed, the key warnings will appear.) - - - if (validType) { - for (var i = 2; i < arguments.length; i++) { - validateChildKeys(arguments[i], type); - } - } - - if (type === REACT_FRAGMENT_TYPE) { - validateFragmentProps(element); - } else { - validatePropTypes(element); - } - - return element; - } - var didWarnAboutDeprecatedCreateFactory = false; - function createFactoryWithValidation(type) { - var validatedFactory = createElementWithValidation.bind(null, type); - validatedFactory.type = type; - - { - if (!didWarnAboutDeprecatedCreateFactory) { - didWarnAboutDeprecatedCreateFactory = true; - - warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); - } // Legacy hook: remove it - - - Object.defineProperty(validatedFactory, 'type', { - enumerable: false, - get: function () { - warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); - - Object.defineProperty(this, 'type', { - value: type - }); - return type; - } - }); - } - - return validatedFactory; - } - function cloneElementWithValidation(element, props, children) { - var newElement = cloneElement.apply(this, arguments); - - for (var i = 2; i < arguments.length; i++) { - validateChildKeys(arguments[i], newElement.type); - } - - validatePropTypes(newElement); - return newElement; - } - - function startTransition(scope, options) { - var prevTransition = ReactCurrentBatchConfig.transition; - ReactCurrentBatchConfig.transition = {}; - var currentTransition = ReactCurrentBatchConfig.transition; - - { - ReactCurrentBatchConfig.transition._updatedFibers = new Set(); - } - - try { - scope(); - } finally { - ReactCurrentBatchConfig.transition = prevTransition; - - { - if (prevTransition === null && currentTransition._updatedFibers) { - var updatedFibersCount = currentTransition._updatedFibers.size; - - if (updatedFibersCount > 10) { - warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.'); - } - - currentTransition._updatedFibers.clear(); - } - } - } - } - - var didWarnAboutMessageChannel = false; - var enqueueTaskImpl = null; - function enqueueTask(task) { - if (enqueueTaskImpl === null) { - try { - // read require off the module object to get around the bundlers. - // we don't want them to detect a require and bundle a Node polyfill. - var requireString = ('require' + Math.random()).slice(0, 7); - var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's - // version of setImmediate, bypassing fake timers if any. - - enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate; - } catch (_err) { - // we're in a browser - // we can't use regular timers because they may still be faked - // so we try MessageChannel+postMessage instead - enqueueTaskImpl = function (callback) { - { - if (didWarnAboutMessageChannel === false) { - didWarnAboutMessageChannel = true; - - if (typeof MessageChannel === 'undefined') { - error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.'); - } - } - } - - var channel = new MessageChannel(); - channel.port1.onmessage = callback; - channel.port2.postMessage(undefined); - }; - } - } - - return enqueueTaskImpl(task); - } - - var actScopeDepth = 0; - var didWarnNoAwaitAct = false; - function act(callback) { - { - // `act` calls can be nested, so we track the depth. This represents the - // number of `act` scopes on the stack. - var prevActScopeDepth = actScopeDepth; - actScopeDepth++; - - if (ReactCurrentActQueue.current === null) { - // This is the outermost `act` scope. Initialize the queue. The reconciler - // will detect the queue and use it instead of Scheduler. - ReactCurrentActQueue.current = []; - } - - var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy; - var result; - - try { - // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only - // set to `true` while the given callback is executed, not for updates - // triggered during an async event, because this is how the legacy - // implementation of `act` behaved. - ReactCurrentActQueue.isBatchingLegacy = true; - result = callback(); // Replicate behavior of original `act` implementation in legacy mode, - // which flushed updates immediately after the scope function exits, even - // if it's an async function. - - if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) { - var queue = ReactCurrentActQueue.current; - - if (queue !== null) { - ReactCurrentActQueue.didScheduleLegacyUpdate = false; - flushActQueue(queue); - } - } - } catch (error) { - popActScope(prevActScopeDepth); - throw error; - } finally { - ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy; - } - - if (result !== null && typeof result === 'object' && typeof result.then === 'function') { - var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait - // for it to resolve before exiting the current scope. - - var wasAwaited = false; - var thenable = { - then: function (resolve, reject) { - wasAwaited = true; - thenableResult.then(function (returnValue) { - popActScope(prevActScopeDepth); - - if (actScopeDepth === 0) { - // We've exited the outermost act scope. Recursively flush the - // queue until there's no remaining work. - recursivelyFlushAsyncActWork(returnValue, resolve, reject); - } else { - resolve(returnValue); - } - }, function (error) { - // The callback threw an error. - popActScope(prevActScopeDepth); - reject(error); - }); - } - }; - - { - if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') { - // eslint-disable-next-line no-undef - Promise.resolve().then(function () {}).then(function () { - if (!wasAwaited) { - didWarnNoAwaitAct = true; - - error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);'); - } - }); - } - } - - return thenable; - } else { - var returnValue = result; // The callback is not an async function. Exit the current scope - // immediately, without awaiting. - - popActScope(prevActScopeDepth); - - if (actScopeDepth === 0) { - // Exiting the outermost act scope. Flush the queue. - var _queue = ReactCurrentActQueue.current; - - if (_queue !== null) { - flushActQueue(_queue); - ReactCurrentActQueue.current = null; - } // Return a thenable. If the user awaits it, we'll flush again in - // case additional work was scheduled by a microtask. - - - var _thenable = { - then: function (resolve, reject) { - // Confirm we haven't re-entered another `act` scope, in case - // the user does something weird like await the thenable - // multiple times. - if (ReactCurrentActQueue.current === null) { - // Recursively flush the queue until there's no remaining work. - ReactCurrentActQueue.current = []; - recursivelyFlushAsyncActWork(returnValue, resolve, reject); - } else { - resolve(returnValue); - } - } - }; - return _thenable; - } else { - // Since we're inside a nested `act` scope, the returned thenable - // immediately resolves. The outer scope will flush the queue. - var _thenable2 = { - then: function (resolve, reject) { - resolve(returnValue); - } - }; - return _thenable2; - } - } - } - } - - function popActScope(prevActScopeDepth) { - { - if (prevActScopeDepth !== actScopeDepth - 1) { - error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. '); - } - - actScopeDepth = prevActScopeDepth; - } - } - - function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { - { - var queue = ReactCurrentActQueue.current; - - if (queue !== null) { - try { - flushActQueue(queue); - enqueueTask(function () { - if (queue.length === 0) { - // No additional work was scheduled. Finish. - ReactCurrentActQueue.current = null; - resolve(returnValue); - } else { - // Keep flushing work until there's none left. - recursivelyFlushAsyncActWork(returnValue, resolve, reject); - } - }); - } catch (error) { - reject(error); - } - } else { - resolve(returnValue); - } - } - } - - var isFlushing = false; - - function flushActQueue(queue) { - { - if (!isFlushing) { - // Prevent re-entrance. - isFlushing = true; - var i = 0; - - try { - for (; i < queue.length; i++) { - var callback = queue[i]; - - do { - callback = callback(true); - } while (callback !== null); - } - - queue.length = 0; - } catch (error) { - // If something throws, leave the remaining callbacks on the queue. - queue = queue.slice(i + 1); - throw error; - } finally { - isFlushing = false; - } - } - } - } - - var createElement$1 = createElementWithValidation ; - var cloneElement$1 = cloneElementWithValidation ; - var createFactory = createFactoryWithValidation ; - var Children = { - map: mapChildren, - forEach: forEachChildren, - count: countChildren, - toArray: toArray, - only: onlyChild - }; - - exports.Children = Children; - exports.Component = Component; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.Profiler = REACT_PROFILER_TYPE; - exports.PureComponent = PureComponent; - 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; - exports.createFactory = createFactory; - exports.createRef = createRef; - exports.forwardRef = forwardRef; - exports.isValidElement = isValidElement; - exports.lazy = lazy; - exports.memo = memo; - exports.startTransition = startTransition; - exports.unstable_act = act; - exports.useCallback = useCallback; - exports.useContext = useContext; - exports.useDebugValue = useDebugValue; - exports.useDeferredValue = useDeferredValue; - exports.useEffect = useEffect; - exports.useId = useId; - exports.useImperativeHandle = useImperativeHandle; - exports.useInsertionEffect = useInsertionEffect; - exports.useLayoutEffect = useLayoutEffect; - exports.useMemo = useMemo; - exports.useReducer = useReducer; - exports.useRef = useRef; - exports.useState = useState; - exports.useSyncExternalStore = useSyncExternalStore; - exports.useTransition = useTransition; - exports.version = ReactVersion; - /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ - if ( - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === - 'function' - ) { - __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); - } - - })(); - } -} (react_development, react_developmentExports)); - return react_developmentExports; -} - -(function (module) { - - if (process.env.NODE_ENV === 'production') { - module.exports = requireReact_production_min(); - } else { - module.exports = requireReact_development(); - } -} (react)); - -/** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -var hasRequiredReactJsxRuntime_production_min; - -function requireReactJsxRuntime_production_min () { - if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min; - hasRequiredReactJsxRuntime_production_min = 1; -var f=reactExports,k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0}; - function q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return {$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}reactJsxRuntime_production_min.Fragment=l;reactJsxRuntime_production_min.jsx=q;reactJsxRuntime_production_min.jsxs=q; - return reactJsxRuntime_production_min; -} - -var reactJsxRuntime_development = {}; - -/** - * @license React - * react-jsx-runtime.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -var hasRequiredReactJsxRuntime_development; - -function requireReactJsxRuntime_development () { - if (hasRequiredReactJsxRuntime_development) return reactJsxRuntime_development; - hasRequiredReactJsxRuntime_development = 1; - - if (process.env.NODE_ENV !== "production") { - (function() { - - var React = reactExports; - - // ATTENTION - // When adding new symbols to this file, - // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' - // The Symbol used to tag the ReactElement-like types. - var REACT_ELEMENT_TYPE = Symbol.for('react.element'); - var REACT_PORTAL_TYPE = Symbol.for('react.portal'); - var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); - var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); - var REACT_PROFILER_TYPE = Symbol.for('react.profiler'); - var REACT_PROVIDER_TYPE = Symbol.for('react.provider'); - var REACT_CONTEXT_TYPE = Symbol.for('react.context'); - var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); - var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); - var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list'); - var REACT_MEMO_TYPE = Symbol.for('react.memo'); - var REACT_LAZY_TYPE = Symbol.for('react.lazy'); - var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen'); - var MAYBE_ITERATOR_SYMBOL = Symbol.iterator; - var FAUX_ITERATOR_SYMBOL = '@@iterator'; - function getIteratorFn(maybeIterable) { - if (maybeIterable === null || typeof maybeIterable !== 'object') { - return null; - } - - var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; - - if (typeof maybeIterator === 'function') { - return maybeIterator; - } - - return null; - } - - var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; - - function error(format) { - { - { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - printWarning('error', format, args); - } - } - } - - function printWarning(level, format, args) { - // When changing this logic, you might want to also - // update consoleWithStackDev.www.js as well. - { - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - var stack = ReactDebugCurrentFrame.getStackAddendum(); - - if (stack !== '') { - format += '%s'; - args = args.concat([stack]); - } // eslint-disable-next-line react-internal/safe-string-coercion - - - var argsWithFormat = args.map(function (item) { - return String(item); - }); // Careful: RN currently depends on this prefix - - argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it - // breaks IE9: https://github.com/facebook/react/issues/13610 - // eslint-disable-next-line react-internal/no-production-logging - - Function.prototype.apply.call(console[level], console, argsWithFormat); - } - } - - // ----------------------------------------------------------------------------- - - var enableScopeAPI = false; // Experimental Create Event Handle API. - var enableCacheElement = false; - var enableTransitionTracing = false; // No known bugs, but needs performance testing - - var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber - // stuff. Intended to enable React core members to more easily debug scheduling - // issues in DEV builds. - - var enableDebugTracing = false; // Track which Fiber(s) schedule render work. - - var REACT_MODULE_REFERENCE; - - { - REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); - } - - function isValidElementType(type) { - if (typeof type === 'string' || typeof type === 'function') { - return true; - } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). - - - if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { - return true; - } - - if (typeof type === 'object' && type !== null) { - if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object - // types supported by any Flight configuration anywhere since - // we don't know which Flight build this will end up being used - // with. - type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { - return true; - } - } - - return false; - } - - function getWrappedName(outerType, innerType, wrapperName) { - var displayName = outerType.displayName; - - if (displayName) { - return displayName; - } - - var functionName = innerType.displayName || innerType.name || ''; - return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; - } // Keep in sync with react-reconciler/getComponentNameFromFiber - - - function getContextName(type) { - return type.displayName || 'Context'; - } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. - - - function getComponentNameFromType(type) { - if (type == null) { - // Host root, text node or just invalid type. - return null; - } - - { - if (typeof type.tag === 'number') { - error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); - } - } - - if (typeof type === 'function') { - return type.displayName || type.name || null; - } - - if (typeof type === 'string') { - return type; - } - - switch (type) { - case REACT_FRAGMENT_TYPE: - return 'Fragment'; - - case REACT_PORTAL_TYPE: - return 'Portal'; - - case REACT_PROFILER_TYPE: - return 'Profiler'; - - case REACT_STRICT_MODE_TYPE: - return 'StrictMode'; - - case REACT_SUSPENSE_TYPE: - return 'Suspense'; - - case REACT_SUSPENSE_LIST_TYPE: - return 'SuspenseList'; - - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_CONTEXT_TYPE: - var context = type; - return getContextName(context) + '.Consumer'; - - case REACT_PROVIDER_TYPE: - var provider = type; - return getContextName(provider._context) + '.Provider'; - - case REACT_FORWARD_REF_TYPE: - return getWrappedName(type, type.render, 'ForwardRef'); - - case REACT_MEMO_TYPE: - var outerName = type.displayName || null; - - if (outerName !== null) { - return outerName; - } - - return getComponentNameFromType(type.type) || 'Memo'; - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - return getComponentNameFromType(init(payload)); - } catch (x) { - return null; - } - } - - // eslint-disable-next-line no-fallthrough - } - } - - return null; - } - - var assign = Object.assign; - - // Helpers to patch console.logs to avoid logging during side-effect free - // replaying on render function. This currently only patches the object - // lazily which won't cover if the log function was extracted eagerly. - // We could also eagerly patch the method. - var disabledDepth = 0; - var prevLog; - var prevInfo; - var prevWarn; - var prevError; - var prevGroup; - var prevGroupCollapsed; - var prevGroupEnd; - - function disabledLog() {} - - disabledLog.__reactDisabledLog = true; - function disableLogs() { - { - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - prevLog = console.log; - prevInfo = console.info; - prevWarn = console.warn; - prevError = console.error; - prevGroup = console.group; - prevGroupCollapsed = console.groupCollapsed; - prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 - - var props = { - configurable: true, - enumerable: true, - value: disabledLog, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - info: props, - log: props, - warn: props, - error: props, - group: props, - groupCollapsed: props, - groupEnd: props - }); - /* eslint-enable react-internal/no-production-logging */ - } - - disabledDepth++; - } - } - function reenableLogs() { - { - disabledDepth--; - - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - var props = { - configurable: true, - enumerable: true, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - log: assign({}, props, { - value: prevLog - }), - info: assign({}, props, { - value: prevInfo - }), - warn: assign({}, props, { - value: prevWarn - }), - error: assign({}, props, { - value: prevError - }), - group: assign({}, props, { - value: prevGroup - }), - groupCollapsed: assign({}, props, { - value: prevGroupCollapsed - }), - groupEnd: assign({}, props, { - value: prevGroupEnd - }) - }); - /* eslint-enable react-internal/no-production-logging */ - } - - if (disabledDepth < 0) { - error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); - } - } - } - - var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; - var prefix; - function describeBuiltInComponentFrame(name, source, ownerFn) { - { - if (prefix === undefined) { - // Extract the VM specific prefix used by each line. - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = match && match[1] || ''; - } - } // We use the prefix to ensure our stacks line up with native stack frames. - - - return '\n' + prefix + name; - } - } - var reentry = false; - var componentFrameCache; - - { - var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; - componentFrameCache = new PossiblyWeakMap(); - } - - function describeNativeComponentFrame(fn, construct) { - // If something asked for a stack inside a fake render, it should get ignored. - if ( !fn || reentry) { - return ''; - } - - { - var frame = componentFrameCache.get(fn); - - if (frame !== undefined) { - return frame; - } - } - - var control; - reentry = true; - var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. - - Error.prepareStackTrace = undefined; - var previousDispatcher; - - { - previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function - // for warnings. - - ReactCurrentDispatcher.current = null; - disableLogs(); - } - - try { - // This should throw. - if (construct) { - // Something should be setting the props in the constructor. - var Fake = function () { - throw Error(); - }; // $FlowFixMe - - - Object.defineProperty(Fake.prototype, 'props', { - set: function () { - // We use a throwing setter instead of frozen or non-writable props - // because that won't throw in a non-strict mode function. - throw Error(); - } - }); - - if (typeof Reflect === 'object' && Reflect.construct) { - // We construct a different control for this case to include any extra - // frames added by the construct call. - try { - Reflect.construct(Fake, []); - } catch (x) { - control = x; - } - - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x) { - control = x; - } - - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x) { - control = x; - } - - fn(); - } - } catch (sample) { - // This is inlined manually because closure doesn't do it for us. - if (sample && control && typeof sample.stack === 'string') { - // This extracts the first frame from the sample that isn't also in the control. - // Skipping one frame that we assume is the frame that calls the two. - var sampleLines = sample.stack.split('\n'); - var controlLines = control.stack.split('\n'); - var s = sampleLines.length - 1; - var c = controlLines.length - 1; - - while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { - // We expect at least one stack frame to be shared. - // Typically this will be the root most one. However, stack frames may be - // cut off due to maximum stack limits. In this case, one maybe cut off - // earlier than the other. We assume that the sample is longer or the same - // and there for cut off earlier. So we should find the root most frame in - // the sample somewhere in the control. - c--; - } - - for (; s >= 1 && c >= 0; s--, c--) { - // Next we find the first one that isn't the same which should be the - // frame that called our sample function and the control. - if (sampleLines[s] !== controlLines[c]) { - // In V8, the first line is describing the message but other VMs don't. - // If we're about to return the first line, and the control is also on the same - // line, that's a pretty good indicator that our sample threw at same line as - // the control. I.e. before we entered the sample frame. So we ignore this result. - // This can happen if you passed a class to function component, or non-function. - if (s !== 1 || c !== 1) { - do { - s--; - c--; // We may still have similar intermediate frames from the construct call. - // The next one that isn't the same should be our match though. - - if (c < 0 || sampleLines[s] !== controlLines[c]) { - // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. - var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" - // but we have a user-provided "displayName" - // splice it in to make the stack more readable. - - - if (fn.displayName && _frame.includes('')) { - _frame = _frame.replace('', fn.displayName); - } - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, _frame); - } - } // Return the line we found. - - - return _frame; - } - } while (s >= 1 && c >= 0); - } - - break; - } - } - } - } finally { - reentry = false; - - { - ReactCurrentDispatcher.current = previousDispatcher; - reenableLogs(); - } - - Error.prepareStackTrace = previousPrepareStackTrace; - } // Fallback to just using the name if we couldn't make it throw. - - - var name = fn ? fn.displayName || fn.name : ''; - var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, syntheticFrame); - } - } - - return syntheticFrame; - } - function describeFunctionComponentFrame(fn, source, ownerFn) { - { - return describeNativeComponentFrame(fn, false); - } - } - - function shouldConstruct(Component) { - var prototype = Component.prototype; - return !!(prototype && prototype.isReactComponent); - } - - function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { - - if (type == null) { - return ''; - } - - if (typeof type === 'function') { - { - return describeNativeComponentFrame(type, shouldConstruct(type)); - } - } - - if (typeof type === 'string') { - return describeBuiltInComponentFrame(type); - } - - switch (type) { - case REACT_SUSPENSE_TYPE: - return describeBuiltInComponentFrame('Suspense'); - - case REACT_SUSPENSE_LIST_TYPE: - return describeBuiltInComponentFrame('SuspenseList'); - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - return describeFunctionComponentFrame(type.render); - - case REACT_MEMO_TYPE: - // Memo may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - // Lazy may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); - } catch (x) {} - } - } - } - - return ''; - } - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - var loggedTypeFailures = {}; - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - - function setCurrentlyValidatingElement(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - ReactDebugCurrentFrame.setExtraStackFrame(stack); - } else { - ReactDebugCurrentFrame.setExtraStackFrame(null); - } - } - } - - function checkPropTypes(typeSpecs, values, location, componentName, element) { - { - // $FlowFixMe This is okay but Flow doesn't know it. - var has = Function.call.bind(hasOwnProperty); - - for (var typeSpecName in typeSpecs) { - if (has(typeSpecs, typeSpecName)) { - var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - if (typeof typeSpecs[typeSpecName] !== 'function') { - // eslint-disable-next-line react-internal/prod-error-codes - var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); - err.name = 'Invariant Violation'; - throw err; - } - - error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); - } catch (ex) { - error$1 = ex; - } - - if (error$1 && !(error$1 instanceof Error)) { - setCurrentlyValidatingElement(element); - - error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); - - setCurrentlyValidatingElement(null); - } - - if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error$1.message] = true; - setCurrentlyValidatingElement(element); - - error('Failed %s type: %s', location, error$1.message); - - setCurrentlyValidatingElement(null); - } - } - } - } - } - - var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare - - function isArray(a) { - return isArrayImpl(a); - } - - /* - * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol - * and Temporal.* types. See https://github.com/facebook/react/pull/22064. - * - * The functions in this module will throw an easier-to-understand, - * easier-to-debug exception with a clear errors message message explaining the - * problem. (Instead of a confusing exception thrown inside the implementation - * of the `value` object). - */ - // $FlowFixMe only called in DEV, so void return is not possible. - function typeName(value) { - { - // toStringTag is needed for namespaced types like Temporal.Instant - var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; - var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; - return type; - } - } // $FlowFixMe only called in DEV, so void return is not possible. - - - function willCoercionThrow(value) { - { - try { - testStringCoercion(value); - return false; - } catch (e) { - return true; - } - } - } - - function testStringCoercion(value) { - // If you ended up here by following an exception call stack, here's what's - // happened: you supplied an object or symbol value to React (as a prop, key, - // DOM attribute, CSS property, string ref, etc.) and when React tried to - // coerce it to a string using `'' + value`, an exception was thrown. - // - // The most common types that will cause this exception are `Symbol` instances - // and Temporal objects like `Temporal.Instant`. But any object that has a - // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this - // exception. (Library authors do this to prevent users from using built-in - // numeric operators like `+` or comparison operators like `>=` because custom - // methods are needed to perform accurate arithmetic or comparison.) - // - // To fix the problem, coerce this object or symbol value to a string before - // passing it to React. The most reliable way is usually `String(value)`. - // - // To find which value is throwing, check the browser or debugger console. - // Before this exception was thrown, there should be `console.error` output - // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the - // problem and how that type was used: key, atrribute, input value prop, etc. - // In most cases, this console output also shows the component and its - // ancestor components where the exception happened. - // - // eslint-disable-next-line react-internal/safe-string-coercion - return '' + value; - } - function checkKeyStringCoercion(value) { - { - if (willCoercionThrow(value)) { - error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); - - return testStringCoercion(value); // throw (to help callers find troubleshooting comments) - } - } - } - - var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; - var RESERVED_PROPS = { - key: true, - ref: true, - __self: true, - __source: true - }; - var specialPropKeyWarningShown; - var specialPropRefWarningShown; - var didWarnAboutStringRefs; - - { - didWarnAboutStringRefs = {}; - } - - function hasValidRef(config) { - { - if (hasOwnProperty.call(config, 'ref')) { - var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.ref !== undefined; - } - - function hasValidKey(config) { - { - if (hasOwnProperty.call(config, 'key')) { - var getter = Object.getOwnPropertyDescriptor(config, 'key').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.key !== undefined; - } - - function warnIfStringRefCannotBeAutoConverted(config, self) { - { - if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) { - var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); - - if (!didWarnAboutStringRefs[componentName]) { - error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref); - - didWarnAboutStringRefs[componentName] = true; - } - } - } - } - - function defineKeyPropWarningGetter(props, displayName) { - { - var warnAboutAccessingKey = function () { - if (!specialPropKeyWarningShown) { - specialPropKeyWarningShown = true; - - error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - }; - - warnAboutAccessingKey.isReactWarning = true; - Object.defineProperty(props, 'key', { - get: warnAboutAccessingKey, - configurable: true - }); - } - } - - function defineRefPropWarningGetter(props, displayName) { - { - var warnAboutAccessingRef = function () { - if (!specialPropRefWarningShown) { - specialPropRefWarningShown = true; - - error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - }; - - warnAboutAccessingRef.isReactWarning = true; - Object.defineProperty(props, 'ref', { - get: warnAboutAccessingRef, - configurable: true - }); - } - } - /** - * Factory method to create a new React element. This no longer adheres to - * the class pattern, so do not use new to call it. Also, instanceof check - * will not work. Instead test $$typeof field against Symbol.for('react.element') to check - * if something is a React Element. - * - * @param {*} type - * @param {*} props - * @param {*} key - * @param {string|object} ref - * @param {*} owner - * @param {*} self A *temporary* helper to detect places where `this` is - * different from the `owner` when React.createElement is called, so that we - * can warn. We want to get rid of owner and replace string `ref`s with arrow - * functions, and as long as `this` and owner are the same, there will be no - * change in behavior. - * @param {*} source An annotation object (added by a transpiler or otherwise) - * indicating filename, line number, and/or other information. - * @internal - */ - - - var ReactElement = function (type, key, ref, self, source, owner, props) { - var element = { - // This tag allows us to uniquely identify this as a React Element - $$typeof: REACT_ELEMENT_TYPE, - // Built-in properties that belong on the element - type: type, - key: key, - ref: ref, - props: props, - // Record the component responsible for creating this element. - _owner: owner - }; - - { - // The validation flag is currently mutative. We put it on - // an external backing store so that we can freeze the whole object. - // This can be replaced with a WeakMap once they are implemented in - // commonly used development environments. - element._store = {}; // To make comparing ReactElements easier for testing purposes, we make - // the validation flag non-enumerable (where possible, which should - // include every environment we run tests in), so the test framework - // ignores it. - - Object.defineProperty(element._store, 'validated', { - configurable: false, - enumerable: false, - writable: true, - value: false - }); // self and source are DEV only properties. - - Object.defineProperty(element, '_self', { - configurable: false, - enumerable: false, - writable: false, - value: self - }); // Two elements created in two different places should be considered - // equal for testing purposes and therefore we hide it from enumeration. - - Object.defineProperty(element, '_source', { - configurable: false, - enumerable: false, - writable: false, - value: source - }); - - if (Object.freeze) { - Object.freeze(element.props); - Object.freeze(element); - } - } - - return element; - }; - /** - * https://github.com/reactjs/rfcs/pull/107 - * @param {*} type - * @param {object} props - * @param {string} key - */ - - function jsxDEV(type, config, maybeKey, source, self) { - { - var propName; // Reserved names are extracted - - var props = {}; - var key = null; - var ref = null; // Currently, key can be spread in as a prop. This causes a potential - // issue if key is also explicitly declared (ie.
- // or
). We want to deprecate key spread, - // but as an intermediary step, we will use jsxDEV for everything except - //
, because we aren't currently able to tell if - // key is explicitly declared to be undefined or not. - - if (maybeKey !== undefined) { - { - checkKeyStringCoercion(maybeKey); - } - - key = '' + maybeKey; - } - - if (hasValidKey(config)) { - { - checkKeyStringCoercion(config.key); - } - - key = '' + config.key; - } - - if (hasValidRef(config)) { - ref = config.ref; - warnIfStringRefCannotBeAutoConverted(config, self); - } // Remaining properties are added to a new props object - - - for (propName in config) { - if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { - props[propName] = config[propName]; - } - } // Resolve default props - - - if (type && type.defaultProps) { - var defaultProps = type.defaultProps; - - for (propName in defaultProps) { - if (props[propName] === undefined) { - props[propName] = defaultProps[propName]; - } - } - } - - if (key || ref) { - var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; - - if (key) { - defineKeyPropWarningGetter(props, displayName); - } - - if (ref) { - defineRefPropWarningGetter(props, displayName); - } - } - - return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); - } - } - - var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; - var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; - - function setCurrentlyValidatingElement$1(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - ReactDebugCurrentFrame$1.setExtraStackFrame(stack); - } else { - ReactDebugCurrentFrame$1.setExtraStackFrame(null); - } - } - } - - var propTypesMisspellWarningShown; - - { - propTypesMisspellWarningShown = false; - } - /** - * Verifies the object is a ReactElement. - * See https://reactjs.org/docs/react-api.html#isvalidelement - * @param {?object} object - * @return {boolean} True if `object` is a ReactElement. - * @final - */ - - - function isValidElement(object) { - { - return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; - } - } - - function getDeclarationErrorAddendum() { - { - if (ReactCurrentOwner$1.current) { - var name = getComponentNameFromType(ReactCurrentOwner$1.current.type); - - if (name) { - return '\n\nCheck the render method of `' + name + '`.'; - } - } - - return ''; - } - } - - function getSourceInfoErrorAddendum(source) { - { - if (source !== undefined) { - var fileName = source.fileName.replace(/^.*[\\\/]/, ''); - var lineNumber = source.lineNumber; - return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; - } - - return ''; - } - } - /** - * Warn if there's no key explicitly set on dynamic arrays of children or - * object keys are not valid. This allows us to keep track of children between - * updates. - */ - - - var ownerHasKeyUseWarning = {}; - - function getCurrentComponentErrorInfo(parentType) { - { - var info = getDeclarationErrorAddendum(); - - if (!info) { - var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; - - if (parentName) { - info = "\n\nCheck the top-level render call using <" + parentName + ">."; - } - } - - return info; - } - } - /** - * Warn if the element doesn't have an explicit key assigned to it. - * This element is in an array. The array could grow and shrink or be - * reordered. All children that haven't already been validated are required to - * have a "key" property assigned to it. Error statuses are cached so a warning - * will only be shown once. - * - * @internal - * @param {ReactElement} element Element that requires a key. - * @param {*} parentType element's parent's type. - */ - - - function validateExplicitKey(element, parentType) { - { - if (!element._store || element._store.validated || element.key != null) { - return; - } - - element._store.validated = true; - var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); - - if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { - return; - } - - ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a - // property, it may be the creator of the child that's responsible for - // assigning it a key. - - var childOwner = ''; - - if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { - // Give the component that originally created this child. - childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; - } - - setCurrentlyValidatingElement$1(element); - - error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); - - setCurrentlyValidatingElement$1(null); - } - } - /** - * Ensure that every element either is passed in a static location, in an - * array with an explicit keys property defined, or in an object literal - * with valid key property. - * - * @internal - * @param {ReactNode} node Statically passed child of any type. - * @param {*} parentType node's parent's type. - */ - - - function validateChildKeys(node, parentType) { - { - if (typeof node !== 'object') { - return; - } - - if (isArray(node)) { - for (var i = 0; i < node.length; i++) { - var child = node[i]; - - if (isValidElement(child)) { - validateExplicitKey(child, parentType); - } - } - } else if (isValidElement(node)) { - // This element was passed in a valid location. - if (node._store) { - node._store.validated = true; - } - } else if (node) { - var iteratorFn = getIteratorFn(node); - - if (typeof iteratorFn === 'function') { - // Entry iterators used to provide implicit keys, - // but now we print a separate warning for them later. - if (iteratorFn !== node.entries) { - var iterator = iteratorFn.call(node); - var step; - - while (!(step = iterator.next()).done) { - if (isValidElement(step.value)) { - validateExplicitKey(step.value, parentType); - } - } - } - } - } - } - } - /** - * Given an element, validate that its props follow the propTypes definition, - * provided by the type. - * - * @param {ReactElement} element - */ - - - function validatePropTypes(element) { - { - var type = element.type; - - if (type === null || type === undefined || typeof type === 'string') { - return; - } - - var propTypes; - - if (typeof type === 'function') { - propTypes = type.propTypes; - } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. - // Inner props are checked in the reconciler. - type.$$typeof === REACT_MEMO_TYPE)) { - propTypes = type.propTypes; - } else { - return; - } - - if (propTypes) { - // Intentionally inside to avoid triggering lazy initializers: - var name = getComponentNameFromType(type); - checkPropTypes(propTypes, element.props, 'prop', name, element); - } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { - propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: - - var _name = getComponentNameFromType(type); - - error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); - } - - if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { - error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); - } - } - } - /** - * Given a fragment, validate that it can only be provided with fragment props - * @param {ReactElement} fragment - */ - - - function validateFragmentProps(fragment) { - { - var keys = Object.keys(fragment.props); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - - if (key !== 'children' && key !== 'key') { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); - - setCurrentlyValidatingElement$1(null); - break; - } - } - - if (fragment.ref !== null) { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid attribute `ref` supplied to `React.Fragment`.'); - - setCurrentlyValidatingElement$1(null); - } - } - } - - var didWarnAboutKeySpread = {}; - function jsxWithValidation(type, props, key, isStaticChildren, source, self) { - { - var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to - // succeed and there will likely be errors in render. - - if (!validType) { - var info = ''; - - if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { - info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; - } - - var sourceInfo = getSourceInfoErrorAddendum(source); - - if (sourceInfo) { - info += sourceInfo; - } else { - info += getDeclarationErrorAddendum(); - } - - var typeString; - - if (type === null) { - typeString = 'null'; - } else if (isArray(type)) { - typeString = 'array'; - } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { - typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; - info = ' Did you accidentally export a JSX literal instead of a component?'; - } else { - typeString = typeof type; - } - - error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); - } - - var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used. - // TODO: Drop this when these are no longer allowed as the type argument. - - if (element == null) { - return element; - } // Skip key warning if the type isn't valid since our key validation logic - // doesn't expect a non-string/function type and can throw confusing errors. - // We don't want exception behavior to differ between dev and prod. - // (Rendering will throw with a helpful message and as soon as the type is - // fixed, the key warnings will appear.) - - - if (validType) { - var children = props.children; - - if (children !== undefined) { - if (isStaticChildren) { - if (isArray(children)) { - for (var i = 0; i < children.length; i++) { - validateChildKeys(children[i], type); - } - - if (Object.freeze) { - Object.freeze(children); - } - } else { - error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); - } - } else { - validateChildKeys(children, type); - } - } - } - - { - if (hasOwnProperty.call(props, 'key')) { - var componentName = getComponentNameFromType(type); - var keys = Object.keys(props).filter(function (k) { - return k !== 'key'; - }); - var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}'; - - if (!didWarnAboutKeySpread[componentName + beforeExample]) { - var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}'; - - error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName); - - didWarnAboutKeySpread[componentName + beforeExample] = true; - } - } - } - - if (type === REACT_FRAGMENT_TYPE) { - validateFragmentProps(element); - } else { - validatePropTypes(element); - } - - return element; - } - } // These two functions exist to still get child warnings in dev - // even with the prod transform. This means that jsxDEV is purely - // opt-in behavior for better messages but that we won't stop - // giving you warnings if you use production apis. - - function jsxWithValidationStatic(type, props, key) { - { - return jsxWithValidation(type, props, key, true); - } - } - function jsxWithValidationDynamic(type, props, key) { - { - return jsxWithValidation(type, props, key, false); - } - } - - var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children. - // for now we can ship identical prod functions - - var jsxs = jsxWithValidationStatic ; - - reactJsxRuntime_development.Fragment = REACT_FRAGMENT_TYPE; - reactJsxRuntime_development.jsx = jsx; - reactJsxRuntime_development.jsxs = jsxs; - })(); - } - return reactJsxRuntime_development; -} - -(function (module) { - - if (process.env.NODE_ENV === 'production') { - module.exports = requireReactJsxRuntime_production_min(); - } else { - module.exports = requireReactJsxRuntime_development(); - } -} (jsxRuntime)); - -var en = {}; - -var zh = {}; - -var de = {}; - -var pt = {}; - -// file examples: en, enGB, zh, zhHK - -var localeData = /*#__PURE__*/Object.freeze({ - __proto__: null, - en: en, - zh: zh, - de: de, - pt: pt -}); - -var ErrorKind; -(function (ErrorKind) { - /** Argument is unclosed (e.g. `{0`) */ - ErrorKind[ErrorKind["EXPECT_ARGUMENT_CLOSING_BRACE"] = 1] = "EXPECT_ARGUMENT_CLOSING_BRACE"; - /** Argument is empty (e.g. `{}`). */ - ErrorKind[ErrorKind["EMPTY_ARGUMENT"] = 2] = "EMPTY_ARGUMENT"; - /** Argument is malformed (e.g. `{foo!}``) */ - ErrorKind[ErrorKind["MALFORMED_ARGUMENT"] = 3] = "MALFORMED_ARGUMENT"; - /** Expect an argument type (e.g. `{foo,}`) */ - ErrorKind[ErrorKind["EXPECT_ARGUMENT_TYPE"] = 4] = "EXPECT_ARGUMENT_TYPE"; - /** Unsupported argument type (e.g. `{foo,foo}`) */ - ErrorKind[ErrorKind["INVALID_ARGUMENT_TYPE"] = 5] = "INVALID_ARGUMENT_TYPE"; - /** Expect an argument style (e.g. `{foo, number, }`) */ - ErrorKind[ErrorKind["EXPECT_ARGUMENT_STYLE"] = 6] = "EXPECT_ARGUMENT_STYLE"; - /** The number skeleton is invalid. */ - ErrorKind[ErrorKind["INVALID_NUMBER_SKELETON"] = 7] = "INVALID_NUMBER_SKELETON"; - /** The date time skeleton is invalid. */ - ErrorKind[ErrorKind["INVALID_DATE_TIME_SKELETON"] = 8] = "INVALID_DATE_TIME_SKELETON"; - /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */ - ErrorKind[ErrorKind["EXPECT_NUMBER_SKELETON"] = 9] = "EXPECT_NUMBER_SKELETON"; - /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */ - ErrorKind[ErrorKind["EXPECT_DATE_TIME_SKELETON"] = 10] = "EXPECT_DATE_TIME_SKELETON"; - /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */ - ErrorKind[ErrorKind["UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"] = 11] = "UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"; - /** Missing select argument options (e.g. `{foo, select}`) */ - ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_OPTIONS"] = 12] = "EXPECT_SELECT_ARGUMENT_OPTIONS"; - /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */ - ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"] = 13] = "EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"; - /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */ - ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"] = 14] = "INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"; - /** Expecting a selector in `select` argument (e.g `{foo, select}`) */ - ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR"] = 15] = "EXPECT_SELECT_ARGUMENT_SELECTOR"; - /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */ - ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR"] = 16] = "EXPECT_PLURAL_ARGUMENT_SELECTOR"; - /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */ - ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"] = 17] = "EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"; - /** - * Expecting a message fragment after the `plural` or `selectordinal` selector - * (e.g. `{foo, plural, one}`) - */ - ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"] = 18] = "EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"; - /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */ - ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_SELECTOR"] = 19] = "INVALID_PLURAL_ARGUMENT_SELECTOR"; - /** - * Duplicate selectors in `plural` or `selectordinal` argument. - * (e.g. {foo, plural, one {#} one {#}}) - */ - ErrorKind[ErrorKind["DUPLICATE_PLURAL_ARGUMENT_SELECTOR"] = 20] = "DUPLICATE_PLURAL_ARGUMENT_SELECTOR"; - /** Duplicate selectors in `select` argument. - * (e.g. {foo, select, apple {apple} apple {apple}}) - */ - ErrorKind[ErrorKind["DUPLICATE_SELECT_ARGUMENT_SELECTOR"] = 21] = "DUPLICATE_SELECT_ARGUMENT_SELECTOR"; - /** Plural or select argument option must have `other` clause. */ - ErrorKind[ErrorKind["MISSING_OTHER_CLAUSE"] = 22] = "MISSING_OTHER_CLAUSE"; - /** The tag is malformed. (e.g. `foo) */ - ErrorKind[ErrorKind["INVALID_TAG"] = 23] = "INVALID_TAG"; - /** The tag name is invalid. (e.g. `<123>foo`) */ - ErrorKind[ErrorKind["INVALID_TAG_NAME"] = 25] = "INVALID_TAG_NAME"; - /** The closing tag does not match the opening tag. (e.g. `foo`) */ - ErrorKind[ErrorKind["UNMATCHED_CLOSING_TAG"] = 26] = "UNMATCHED_CLOSING_TAG"; - /** The opening tag has unmatched closing tag. (e.g. `foo`) */ - ErrorKind[ErrorKind["UNCLOSED_TAG"] = 27] = "UNCLOSED_TAG"; -})(ErrorKind || (ErrorKind = {})); - -var TYPE; -(function (TYPE) { - /** - * Raw text - */ - TYPE[TYPE["literal"] = 0] = "literal"; - /** - * Variable w/o any format, e.g `var` in `this is a {var}` - */ - TYPE[TYPE["argument"] = 1] = "argument"; - /** - * Variable w/ number format - */ - TYPE[TYPE["number"] = 2] = "number"; - /** - * Variable w/ date format - */ - TYPE[TYPE["date"] = 3] = "date"; - /** - * Variable w/ time format - */ - TYPE[TYPE["time"] = 4] = "time"; - /** - * Variable w/ select format - */ - TYPE[TYPE["select"] = 5] = "select"; - /** - * Variable w/ plural format - */ - TYPE[TYPE["plural"] = 6] = "plural"; - /** - * Only possible within plural argument. - * This is the `#` symbol that will be substituted with the count. - */ - TYPE[TYPE["pound"] = 7] = "pound"; - /** - * XML-like tag - */ - TYPE[TYPE["tag"] = 8] = "tag"; -})(TYPE || (TYPE = {})); -var SKELETON_TYPE; -(function (SKELETON_TYPE) { - SKELETON_TYPE[SKELETON_TYPE["number"] = 0] = "number"; - SKELETON_TYPE[SKELETON_TYPE["dateTime"] = 1] = "dateTime"; -})(SKELETON_TYPE || (SKELETON_TYPE = {})); -/** - * Type Guards - */ -function isLiteralElement(el) { - return el.type === TYPE.literal; -} -function isArgumentElement(el) { - return el.type === TYPE.argument; -} -function isNumberElement(el) { - return el.type === TYPE.number; -} -function isDateElement(el) { - return el.type === TYPE.date; -} -function isTimeElement(el) { - return el.type === TYPE.time; -} -function isSelectElement(el) { - return el.type === TYPE.select; -} -function isPluralElement(el) { - return el.type === TYPE.plural; -} -function isPoundElement(el) { - return el.type === TYPE.pound; -} -function isTagElement(el) { - return el.type === TYPE.tag; -} -function isNumberSkeleton(el) { - return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number); -} -function isDateTimeSkeleton(el) { - return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime); -} - -// @generated from regex-gen.ts -var SPACE_SEPARATOR_REGEX = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/; - -/** - * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js - * with some tweaks - */ -var DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g; -/** - * Parse Date time skeleton into Intl.DateTimeFormatOptions - * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - * @public - * @param skeleton skeleton string - */ -function parseDateTimeSkeleton(skeleton) { - var result = {}; - skeleton.replace(DATE_TIME_REGEX, function (match) { - var len = match.length; - switch (match[0]) { - // Era - case 'G': - result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'; - break; - // Year - case 'y': - result.year = len === 2 ? '2-digit' : 'numeric'; - break; - case 'Y': - case 'u': - case 'U': - case 'r': - throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead'); - // Quarter - case 'q': - case 'Q': - throw new RangeError('`q/Q` (quarter) patterns are not supported'); - // Month - case 'M': - case 'L': - result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1]; - break; - // Week - case 'w': - case 'W': - throw new RangeError('`w/W` (week) patterns are not supported'); - case 'd': - result.day = ['numeric', '2-digit'][len - 1]; - break; - case 'D': - case 'F': - case 'g': - throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead'); - // Weekday - case 'E': - result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'; - break; - case 'e': - if (len < 4) { - throw new RangeError('`e..eee` (weekday) patterns are not supported'); - } - result.weekday = ['short', 'long', 'narrow', 'short'][len - 4]; - break; - case 'c': - if (len < 4) { - throw new RangeError('`c..ccc` (weekday) patterns are not supported'); - } - result.weekday = ['short', 'long', 'narrow', 'short'][len - 4]; - break; - // Period - case 'a': // AM, PM - result.hour12 = true; - break; - case 'b': // am, pm, noon, midnight - case 'B': // flexible day periods - throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead'); - // Hour - case 'h': - result.hourCycle = 'h12'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'H': - result.hourCycle = 'h23'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'K': - result.hourCycle = 'h11'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'k': - result.hourCycle = 'h24'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'j': - case 'J': - case 'C': - throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead'); - // Minute - case 'm': - result.minute = ['numeric', '2-digit'][len - 1]; - break; - // Second - case 's': - result.second = ['numeric', '2-digit'][len - 1]; - break; - case 'S': - case 'A': - throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead'); - // Zone - case 'z': // 1..3, 4: specific non-location format - result.timeZoneName = len < 4 ? 'short' : 'long'; - break; - case 'Z': // 1..3, 4, 5: The ISO8601 varios formats - case 'O': // 1, 4: milliseconds in day short, long - case 'v': // 1, 4: generic non-location format - case 'V': // 1, 2, 3, 4: time zone ID or city - case 'X': // 1, 2, 3, 4: The ISO8601 varios formats - case 'x': // 1, 2, 3, 4: The ISO8601 varios formats - throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead'); - } - return ''; - }); - return result; -} - -// @generated from regex-gen.ts -var WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/i; - -function parseNumberSkeletonFromString(skeleton) { - if (skeleton.length === 0) { - throw new Error('Number skeleton cannot be empty'); - } - // Parse the skeleton - var stringTokens = skeleton - .split(WHITE_SPACE_REGEX) - .filter(function (x) { return x.length > 0; }); - var tokens = []; - for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) { - var stringToken = stringTokens_1[_i]; - var stemAndOptions = stringToken.split('/'); - if (stemAndOptions.length === 0) { - throw new Error('Invalid number skeleton'); - } - var stem = stemAndOptions[0], options = stemAndOptions.slice(1); - for (var _a = 0, options_1 = options; _a < options_1.length; _a++) { - var option = options_1[_a]; - if (option.length === 0) { - throw new Error('Invalid number skeleton'); - } - } - tokens.push({ stem: stem, options: options }); - } - return tokens; -} -function icuUnitToEcma(unit) { - return unit.replace(/^(.*?)-/, ''); -} -var FRACTION_PRECISION_REGEX = /^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g; -var SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\+|#+)?[rs]?$/g; -var INTEGER_WIDTH_REGEX = /(\*)(0+)|(#+)(0+)|(0+)/g; -var CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/; -function parseSignificantPrecision(str) { - var result = {}; - if (str[str.length - 1] === 'r') { - result.roundingPriority = 'morePrecision'; - } - else if (str[str.length - 1] === 's') { - result.roundingPriority = 'lessPrecision'; - } - str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) { - // @@@ case - if (typeof g2 !== 'string') { - result.minimumSignificantDigits = g1.length; - result.maximumSignificantDigits = g1.length; - } - // @@@+ case - else if (g2 === '+') { - result.minimumSignificantDigits = g1.length; - } - // .### case - else if (g1[0] === '#') { - result.maximumSignificantDigits = g1.length; - } - // .@@## or .@@@ case - else { - result.minimumSignificantDigits = g1.length; - result.maximumSignificantDigits = - g1.length + (typeof g2 === 'string' ? g2.length : 0); - } - return ''; - }); - return result; -} -function parseSign(str) { - switch (str) { - case 'sign-auto': - return { - signDisplay: 'auto', - }; - case 'sign-accounting': - case '()': - return { - currencySign: 'accounting', - }; - case 'sign-always': - case '+!': - return { - signDisplay: 'always', - }; - case 'sign-accounting-always': - case '()!': - return { - signDisplay: 'always', - currencySign: 'accounting', - }; - case 'sign-except-zero': - case '+?': - return { - signDisplay: 'exceptZero', - }; - case 'sign-accounting-except-zero': - case '()?': - return { - signDisplay: 'exceptZero', - currencySign: 'accounting', - }; - case 'sign-never': - case '+_': - return { - signDisplay: 'never', - }; - } -} -function parseConciseScientificAndEngineeringStem(stem) { - // Engineering - var result; - if (stem[0] === 'E' && stem[1] === 'E') { - result = { - notation: 'engineering', - }; - stem = stem.slice(2); - } - else if (stem[0] === 'E') { - result = { - notation: 'scientific', - }; - stem = stem.slice(1); - } - if (result) { - var signDisplay = stem.slice(0, 2); - if (signDisplay === '+!') { - result.signDisplay = 'always'; - stem = stem.slice(2); - } - else if (signDisplay === '+?') { - result.signDisplay = 'exceptZero'; - stem = stem.slice(2); - } - if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) { - throw new Error('Malformed concise eng/scientific notation'); - } - result.minimumIntegerDigits = stem.length; - } - return result; -} -function parseNotationOptions(opt) { - var result = {}; - var signOpts = parseSign(opt); - if (signOpts) { - return signOpts; - } - return result; -} -/** - * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options - */ -function parseNumberSkeleton(tokens) { - var result = {}; - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - switch (token.stem) { - case 'percent': - case '%': - result.style = 'percent'; - continue; - case '%x100': - result.style = 'percent'; - result.scale = 100; - continue; - case 'currency': - result.style = 'currency'; - result.currency = token.options[0]; - continue; - case 'group-off': - case ',_': - result.useGrouping = false; - continue; - case 'precision-integer': - case '.': - result.maximumFractionDigits = 0; - continue; - case 'measure-unit': - case 'unit': - result.style = 'unit'; - result.unit = icuUnitToEcma(token.options[0]); - continue; - case 'compact-short': - case 'K': - result.notation = 'compact'; - result.compactDisplay = 'short'; - continue; - case 'compact-long': - case 'KK': - result.notation = 'compact'; - result.compactDisplay = 'long'; - continue; - case 'scientific': - result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {})); - continue; - case 'engineering': - result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {})); - continue; - case 'notation-simple': - result.notation = 'standard'; - continue; - // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h - case 'unit-width-narrow': - result.currencyDisplay = 'narrowSymbol'; - result.unitDisplay = 'narrow'; - continue; - case 'unit-width-short': - result.currencyDisplay = 'code'; - result.unitDisplay = 'short'; - continue; - case 'unit-width-full-name': - result.currencyDisplay = 'name'; - result.unitDisplay = 'long'; - continue; - case 'unit-width-iso-code': - result.currencyDisplay = 'symbol'; - continue; - case 'scale': - result.scale = parseFloat(token.options[0]); - continue; - case 'rounding-mode-floor': - result.roundingMode = 'floor'; - continue; - case 'rounding-mode-ceiling': - result.roundingMode = 'ceil'; - continue; - case 'rounding-mode-down': - result.roundingMode = 'trunc'; - continue; - case 'rounding-mode-up': - result.roundingMode = 'expand'; - continue; - case 'rounding-mode-half-even': - result.roundingMode = 'halfEven'; - continue; - case 'rounding-mode-half-down': - result.roundingMode = 'halfTrunc'; - continue; - case 'rounding-mode-half-up': - result.roundingMode = 'halfExpand'; - continue; - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width - case 'integer-width': - if (token.options.length > 1) { - throw new RangeError('integer-width stems only accept a single optional option'); - } - token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) { - if (g1) { - result.minimumIntegerDigits = g2.length; - } - else if (g3 && g4) { - throw new Error('We currently do not support maximum integer digits'); - } - else if (g5) { - throw new Error('We currently do not support exact integer digits'); - } - return ''; - }); - continue; - } - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width - if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) { - result.minimumIntegerDigits = token.stem.length; - continue; - } - if (FRACTION_PRECISION_REGEX.test(token.stem)) { - // Precision - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision - // precision-integer case - if (token.options.length > 1) { - throw new RangeError('Fraction-precision stems only accept a single optional option'); - } - token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) { - // .000* case (before ICU67 it was .000+) - if (g2 === '*') { - result.minimumFractionDigits = g1.length; - } - // .### case - else if (g3 && g3[0] === '#') { - result.maximumFractionDigits = g3.length; - } - // .00## case - else if (g4 && g5) { - result.minimumFractionDigits = g4.length; - result.maximumFractionDigits = g4.length + g5.length; - } - else { - result.minimumFractionDigits = g1.length; - result.maximumFractionDigits = g1.length; - } - return ''; - }); - var opt = token.options[0]; - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display - if (opt === 'w') { - result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' }); - } - else if (opt) { - result = __assign(__assign({}, result), parseSignificantPrecision(opt)); - } - continue; - } - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision - if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) { - result = __assign(__assign({}, result), parseSignificantPrecision(token.stem)); - continue; - } - var signOpts = parseSign(token.stem); - if (signOpts) { - result = __assign(__assign({}, result), signOpts); - } - var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem); - if (conciseScientificAndEngineeringOpts) { - result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts); - } - } - return result; -} - -// @generated from time-data-gen.ts -// prettier-ignore -var timeData = { - "001": [ - "H", - "h" - ], - "AC": [ - "H", - "h", - "hb", - "hB" - ], - "AD": [ - "H", - "hB" - ], - "AE": [ - "h", - "hB", - "hb", - "H" - ], - "AF": [ - "H", - "hb", - "hB", - "h" - ], - "AG": [ - "h", - "hb", - "H", - "hB" - ], - "AI": [ - "H", - "h", - "hb", - "hB" - ], - "AL": [ - "h", - "H", - "hB" - ], - "AM": [ - "H", - "hB" - ], - "AO": [ - "H", - "hB" - ], - "AR": [ - "H", - "h", - "hB", - "hb" - ], - "AS": [ - "h", - "H" - ], - "AT": [ - "H", - "hB" - ], - "AU": [ - "h", - "hb", - "H", - "hB" - ], - "AW": [ - "H", - "hB" - ], - "AX": [ - "H" - ], - "AZ": [ - "H", - "hB", - "h" - ], - "BA": [ - "H", - "hB", - "h" - ], - "BB": [ - "h", - "hb", - "H", - "hB" - ], - "BD": [ - "h", - "hB", - "H" - ], - "BE": [ - "H", - "hB" - ], - "BF": [ - "H", - "hB" - ], - "BG": [ - "H", - "hB", - "h" - ], - "BH": [ - "h", - "hB", - "hb", - "H" - ], - "BI": [ - "H", - "h" - ], - "BJ": [ - "H", - "hB" - ], - "BL": [ - "H", - "hB" - ], - "BM": [ - "h", - "hb", - "H", - "hB" - ], - "BN": [ - "hb", - "hB", - "h", - "H" - ], - "BO": [ - "H", - "hB", - "h", - "hb" - ], - "BQ": [ - "H" - ], - "BR": [ - "H", - "hB" - ], - "BS": [ - "h", - "hb", - "H", - "hB" - ], - "BT": [ - "h", - "H" - ], - "BW": [ - "H", - "h", - "hb", - "hB" - ], - "BY": [ - "H", - "h" - ], - "BZ": [ - "H", - "h", - "hb", - "hB" - ], - "CA": [ - "h", - "hb", - "H", - "hB" - ], - "CC": [ - "H", - "h", - "hb", - "hB" - ], - "CD": [ - "hB", - "H" - ], - "CF": [ - "H", - "h", - "hB" - ], - "CG": [ - "H", - "hB" - ], - "CH": [ - "H", - "hB", - "h" - ], - "CI": [ - "H", - "hB" - ], - "CK": [ - "H", - "h", - "hb", - "hB" - ], - "CL": [ - "H", - "h", - "hB", - "hb" - ], - "CM": [ - "H", - "h", - "hB" - ], - "CN": [ - "H", - "hB", - "hb", - "h" - ], - "CO": [ - "h", - "H", - "hB", - "hb" - ], - "CP": [ - "H" - ], - "CR": [ - "H", - "h", - "hB", - "hb" - ], - "CU": [ - "H", - "h", - "hB", - "hb" - ], - "CV": [ - "H", - "hB" - ], - "CW": [ - "H", - "hB" - ], - "CX": [ - "H", - "h", - "hb", - "hB" - ], - "CY": [ - "h", - "H", - "hb", - "hB" - ], - "CZ": [ - "H" - ], - "DE": [ - "H", - "hB" - ], - "DG": [ - "H", - "h", - "hb", - "hB" - ], - "DJ": [ - "h", - "H" - ], - "DK": [ - "H" - ], - "DM": [ - "h", - "hb", - "H", - "hB" - ], - "DO": [ - "h", - "H", - "hB", - "hb" - ], - "DZ": [ - "h", - "hB", - "hb", - "H" - ], - "EA": [ - "H", - "h", - "hB", - "hb" - ], - "EC": [ - "H", - "hB", - "h", - "hb" - ], - "EE": [ - "H", - "hB" - ], - "EG": [ - "h", - "hB", - "hb", - "H" - ], - "EH": [ - "h", - "hB", - "hb", - "H" - ], - "ER": [ - "h", - "H" - ], - "ES": [ - "H", - "hB", - "h", - "hb" - ], - "ET": [ - "hB", - "hb", - "h", - "H" - ], - "FI": [ - "H" - ], - "FJ": [ - "h", - "hb", - "H", - "hB" - ], - "FK": [ - "H", - "h", - "hb", - "hB" - ], - "FM": [ - "h", - "hb", - "H", - "hB" - ], - "FO": [ - "H", - "h" - ], - "FR": [ - "H", - "hB" - ], - "GA": [ - "H", - "hB" - ], - "GB": [ - "H", - "h", - "hb", - "hB" - ], - "GD": [ - "h", - "hb", - "H", - "hB" - ], - "GE": [ - "H", - "hB", - "h" - ], - "GF": [ - "H", - "hB" - ], - "GG": [ - "H", - "h", - "hb", - "hB" - ], - "GH": [ - "h", - "H" - ], - "GI": [ - "H", - "h", - "hb", - "hB" - ], - "GL": [ - "H", - "h" - ], - "GM": [ - "h", - "hb", - "H", - "hB" - ], - "GN": [ - "H", - "hB" - ], - "GP": [ - "H", - "hB" - ], - "GQ": [ - "H", - "hB", - "h", - "hb" - ], - "GR": [ - "h", - "H", - "hb", - "hB" - ], - "GT": [ - "H", - "h", - "hB", - "hb" - ], - "GU": [ - "h", - "hb", - "H", - "hB" - ], - "GW": [ - "H", - "hB" - ], - "GY": [ - "h", - "hb", - "H", - "hB" - ], - "HK": [ - "h", - "hB", - "hb", - "H" - ], - "HN": [ - "H", - "h", - "hB", - "hb" - ], - "HR": [ - "H", - "hB" - ], - "HU": [ - "H", - "h" - ], - "IC": [ - "H", - "h", - "hB", - "hb" - ], - "ID": [ - "H" - ], - "IE": [ - "H", - "h", - "hb", - "hB" - ], - "IL": [ - "H", - "hB" - ], - "IM": [ - "H", - "h", - "hb", - "hB" - ], - "IN": [ - "h", - "H" - ], - "IO": [ - "H", - "h", - "hb", - "hB" - ], - "IQ": [ - "h", - "hB", - "hb", - "H" - ], - "IR": [ - "hB", - "H" - ], - "IS": [ - "H" - ], - "IT": [ - "H", - "hB" - ], - "JE": [ - "H", - "h", - "hb", - "hB" - ], - "JM": [ - "h", - "hb", - "H", - "hB" - ], - "JO": [ - "h", - "hB", - "hb", - "H" - ], - "JP": [ - "H", - "K", - "h" - ], - "KE": [ - "hB", - "hb", - "H", - "h" - ], - "KG": [ - "H", - "h", - "hB", - "hb" - ], - "KH": [ - "hB", - "h", - "H", - "hb" - ], - "KI": [ - "h", - "hb", - "H", - "hB" - ], - "KM": [ - "H", - "h", - "hB", - "hb" - ], - "KN": [ - "h", - "hb", - "H", - "hB" - ], - "KP": [ - "h", - "H", - "hB", - "hb" - ], - "KR": [ - "h", - "H", - "hB", - "hb" - ], - "KW": [ - "h", - "hB", - "hb", - "H" - ], - "KY": [ - "h", - "hb", - "H", - "hB" - ], - "KZ": [ - "H", - "hB" - ], - "LA": [ - "H", - "hb", - "hB", - "h" - ], - "LB": [ - "h", - "hB", - "hb", - "H" - ], - "LC": [ - "h", - "hb", - "H", - "hB" - ], - "LI": [ - "H", - "hB", - "h" - ], - "LK": [ - "H", - "h", - "hB", - "hb" - ], - "LR": [ - "h", - "hb", - "H", - "hB" - ], - "LS": [ - "h", - "H" - ], - "LT": [ - "H", - "h", - "hb", - "hB" - ], - "LU": [ - "H", - "h", - "hB" - ], - "LV": [ - "H", - "hB", - "hb", - "h" - ], - "LY": [ - "h", - "hB", - "hb", - "H" - ], - "MA": [ - "H", - "h", - "hB", - "hb" - ], - "MC": [ - "H", - "hB" - ], - "MD": [ - "H", - "hB" - ], - "ME": [ - "H", - "hB", - "h" - ], - "MF": [ - "H", - "hB" - ], - "MG": [ - "H", - "h" - ], - "MH": [ - "h", - "hb", - "H", - "hB" - ], - "MK": [ - "H", - "h", - "hb", - "hB" - ], - "ML": [ - "H" - ], - "MM": [ - "hB", - "hb", - "H", - "h" - ], - "MN": [ - "H", - "h", - "hb", - "hB" - ], - "MO": [ - "h", - "hB", - "hb", - "H" - ], - "MP": [ - "h", - "hb", - "H", - "hB" - ], - "MQ": [ - "H", - "hB" - ], - "MR": [ - "h", - "hB", - "hb", - "H" - ], - "MS": [ - "H", - "h", - "hb", - "hB" - ], - "MT": [ - "H", - "h" - ], - "MU": [ - "H", - "h" - ], - "MV": [ - "H", - "h" - ], - "MW": [ - "h", - "hb", - "H", - "hB" - ], - "MX": [ - "H", - "h", - "hB", - "hb" - ], - "MY": [ - "hb", - "hB", - "h", - "H" - ], - "MZ": [ - "H", - "hB" - ], - "NA": [ - "h", - "H", - "hB", - "hb" - ], - "NC": [ - "H", - "hB" - ], - "NE": [ - "H" - ], - "NF": [ - "H", - "h", - "hb", - "hB" - ], - "NG": [ - "H", - "h", - "hb", - "hB" - ], - "NI": [ - "H", - "h", - "hB", - "hb" - ], - "NL": [ - "H", - "hB" - ], - "NO": [ - "H", - "h" - ], - "NP": [ - "H", - "h", - "hB" - ], - "NR": [ - "H", - "h", - "hb", - "hB" - ], - "NU": [ - "H", - "h", - "hb", - "hB" - ], - "NZ": [ - "h", - "hb", - "H", - "hB" - ], - "OM": [ - "h", - "hB", - "hb", - "H" - ], - "PA": [ - "h", - "H", - "hB", - "hb" - ], - "PE": [ - "H", - "hB", - "h", - "hb" - ], - "PF": [ - "H", - "h", - "hB" - ], - "PG": [ - "h", - "H" - ], - "PH": [ - "h", - "hB", - "hb", - "H" - ], - "PK": [ - "h", - "hB", - "H" - ], - "PL": [ - "H", - "h" - ], - "PM": [ - "H", - "hB" - ], - "PN": [ - "H", - "h", - "hb", - "hB" - ], - "PR": [ - "h", - "H", - "hB", - "hb" - ], - "PS": [ - "h", - "hB", - "hb", - "H" - ], - "PT": [ - "H", - "hB" - ], - "PW": [ - "h", - "H" - ], - "PY": [ - "H", - "h", - "hB", - "hb" - ], - "QA": [ - "h", - "hB", - "hb", - "H" - ], - "RE": [ - "H", - "hB" - ], - "RO": [ - "H", - "hB" - ], - "RS": [ - "H", - "hB", - "h" - ], - "RU": [ - "H" - ], - "RW": [ - "H", - "h" - ], - "SA": [ - "h", - "hB", - "hb", - "H" - ], - "SB": [ - "h", - "hb", - "H", - "hB" - ], - "SC": [ - "H", - "h", - "hB" - ], - "SD": [ - "h", - "hB", - "hb", - "H" - ], - "SE": [ - "H" - ], - "SG": [ - "h", - "hb", - "H", - "hB" - ], - "SH": [ - "H", - "h", - "hb", - "hB" - ], - "SI": [ - "H", - "hB" - ], - "SJ": [ - "H" - ], - "SK": [ - "H" - ], - "SL": [ - "h", - "hb", - "H", - "hB" - ], - "SM": [ - "H", - "h", - "hB" - ], - "SN": [ - "H", - "h", - "hB" - ], - "SO": [ - "h", - "H" - ], - "SR": [ - "H", - "hB" - ], - "SS": [ - "h", - "hb", - "H", - "hB" - ], - "ST": [ - "H", - "hB" - ], - "SV": [ - "H", - "h", - "hB", - "hb" - ], - "SX": [ - "H", - "h", - "hb", - "hB" - ], - "SY": [ - "h", - "hB", - "hb", - "H" - ], - "SZ": [ - "h", - "hb", - "H", - "hB" - ], - "TA": [ - "H", - "h", - "hb", - "hB" - ], - "TC": [ - "h", - "hb", - "H", - "hB" - ], - "TD": [ - "h", - "H", - "hB" - ], - "TF": [ - "H", - "h", - "hB" - ], - "TG": [ - "H", - "hB" - ], - "TH": [ - "H", - "h" - ], - "TJ": [ - "H", - "h" - ], - "TL": [ - "H", - "hB", - "hb", - "h" - ], - "TM": [ - "H", - "h" - ], - "TN": [ - "h", - "hB", - "hb", - "H" - ], - "TO": [ - "h", - "H" - ], - "TR": [ - "H", - "hB" - ], - "TT": [ - "h", - "hb", - "H", - "hB" - ], - "TW": [ - "hB", - "hb", - "h", - "H" - ], - "TZ": [ - "hB", - "hb", - "H", - "h" - ], - "UA": [ - "H", - "hB", - "h" - ], - "UG": [ - "hB", - "hb", - "H", - "h" - ], - "UM": [ - "h", - "hb", - "H", - "hB" - ], - "US": [ - "h", - "hb", - "H", - "hB" - ], - "UY": [ - "H", - "h", - "hB", - "hb" - ], - "UZ": [ - "H", - "hB", - "h" - ], - "VA": [ - "H", - "h", - "hB" - ], - "VC": [ - "h", - "hb", - "H", - "hB" - ], - "VE": [ - "h", - "H", - "hB", - "hb" - ], - "VG": [ - "h", - "hb", - "H", - "hB" - ], - "VI": [ - "h", - "hb", - "H", - "hB" - ], - "VN": [ - "H", - "h" - ], - "VU": [ - "h", - "H" - ], - "WF": [ - "H", - "hB" - ], - "WS": [ - "h", - "H" - ], - "XK": [ - "H", - "hB", - "h" - ], - "YE": [ - "h", - "hB", - "hb", - "H" - ], - "YT": [ - "H", - "hB" - ], - "ZA": [ - "H", - "h", - "hb", - "hB" - ], - "ZM": [ - "h", - "hb", - "H", - "hB" - ], - "ZW": [ - "H", - "h" - ], - "af-ZA": [ - "H", - "h", - "hB", - "hb" - ], - "ar-001": [ - "h", - "hB", - "hb", - "H" - ], - "ca-ES": [ - "H", - "h", - "hB" - ], - "en-001": [ - "h", - "hb", - "H", - "hB" - ], - "es-BO": [ - "H", - "h", - "hB", - "hb" - ], - "es-BR": [ - "H", - "h", - "hB", - "hb" - ], - "es-EC": [ - "H", - "h", - "hB", - "hb" - ], - "es-ES": [ - "H", - "h", - "hB", - "hb" - ], - "es-GQ": [ - "H", - "h", - "hB", - "hb" - ], - "es-PE": [ - "H", - "h", - "hB", - "hb" - ], - "fr-CA": [ - "H", - "h", - "hB" - ], - "gl-ES": [ - "H", - "h", - "hB" - ], - "gu-IN": [ - "hB", - "hb", - "h", - "H" - ], - "hi-IN": [ - "hB", - "h", - "H" - ], - "it-CH": [ - "H", - "h", - "hB" - ], - "it-IT": [ - "H", - "h", - "hB" - ], - "kn-IN": [ - "hB", - "h", - "H" - ], - "ml-IN": [ - "hB", - "h", - "H" - ], - "mr-IN": [ - "hB", - "hb", - "h", - "H" - ], - "pa-IN": [ - "hB", - "hb", - "h", - "H" - ], - "ta-IN": [ - "hB", - "h", - "hb", - "H" - ], - "te-IN": [ - "hB", - "h", - "H" - ], - "zu-ZA": [ - "H", - "hB", - "hb", - "h" - ] -}; - -/** - * Returns the best matching date time pattern if a date time skeleton - * pattern is provided with a locale. Follows the Unicode specification: - * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns - * @param skeleton date time skeleton pattern that possibly includes j, J or C - * @param locale - */ -function getBestPattern(skeleton, locale) { - var skeletonCopy = ''; - for (var patternPos = 0; patternPos < skeleton.length; patternPos++) { - var patternChar = skeleton.charAt(patternPos); - if (patternChar === 'j') { - var extraLength = 0; - while (patternPos + 1 < skeleton.length && - skeleton.charAt(patternPos + 1) === patternChar) { - extraLength++; - patternPos++; - } - var hourLen = 1 + (extraLength & 1); - var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1); - var dayPeriodChar = 'a'; - var hourChar = getDefaultHourSymbolFromLocale(locale); - if (hourChar == 'H' || hourChar == 'k') { - dayPeriodLen = 0; - } - while (dayPeriodLen-- > 0) { - skeletonCopy += dayPeriodChar; - } - while (hourLen-- > 0) { - skeletonCopy = hourChar + skeletonCopy; - } - } - else if (patternChar === 'J') { - skeletonCopy += 'H'; - } - else { - skeletonCopy += patternChar; - } - } - return skeletonCopy; -} -/** - * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle) - * of the given `locale` to the corresponding time pattern. - * @param locale - */ -function getDefaultHourSymbolFromLocale(locale) { - var hourCycle = locale.hourCycle; - if (hourCycle === undefined && - // @ts-ignore hourCycle(s) is not identified yet - locale.hourCycles && - // @ts-ignore - locale.hourCycles.length) { - // @ts-ignore - hourCycle = locale.hourCycles[0]; - } - if (hourCycle) { - switch (hourCycle) { - case 'h24': - return 'k'; - case 'h23': - return 'H'; - case 'h12': - return 'h'; - case 'h11': - return 'K'; - default: - throw new Error('Invalid hourCycle'); - } - } - // TODO: Once hourCycle is fully supported remove the following with data generation - var languageTag = locale.language; - var regionTag; - if (languageTag !== 'root') { - regionTag = locale.maximize().region; - } - var hourCycles = timeData[regionTag || ''] || - timeData[languageTag || ''] || - timeData["".concat(languageTag, "-001")] || - timeData['001']; - return hourCycles[0]; -} - -var _a; -var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(SPACE_SEPARATOR_REGEX.source, "*")); -var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(SPACE_SEPARATOR_REGEX.source, "*$")); -function createLocation(start, end) { - return { start: start, end: end }; -} -// #region Ponyfills -// Consolidate these variables up top for easier toggling during debugging -var hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1); -var hasNativeFromCodePoint = !!String.fromCodePoint; -var hasNativeFromEntries = !!Object.fromEntries; -var hasNativeCodePointAt = !!String.prototype.codePointAt; -var hasTrimStart = !!String.prototype.trimStart; -var hasTrimEnd = !!String.prototype.trimEnd; -var hasNativeIsSafeInteger = !!Number.isSafeInteger; -var isSafeInteger = hasNativeIsSafeInteger - ? Number.isSafeInteger - : function (n) { - return (typeof n === 'number' && - isFinite(n) && - Math.floor(n) === n && - Math.abs(n) <= 0x1fffffffffffff); - }; -// IE11 does not support y and u. -var REGEX_SUPPORTS_U_AND_Y = true; -try { - var re = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu'); - /** - * legacy Edge or Xbox One browser - * Unicode flag support: supported - * Pattern_Syntax support: not supported - * See https://github.com/formatjs/formatjs/issues/2822 - */ - REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a'; -} -catch (_) { - REGEX_SUPPORTS_U_AND_Y = false; -} -var startsWith = hasNativeStartsWith - ? // Native - function startsWith(s, search, position) { - return s.startsWith(search, position); - } - : // For IE11 - function startsWith(s, search, position) { - return s.slice(position, position + search.length) === search; - }; -var fromCodePoint = hasNativeFromCodePoint - ? String.fromCodePoint - : // IE11 - function fromCodePoint() { - var codePoints = []; - for (var _i = 0; _i < arguments.length; _i++) { - codePoints[_i] = arguments[_i]; - } - var elements = ''; - var length = codePoints.length; - var i = 0; - var code; - while (length > i) { - code = codePoints[i++]; - if (code > 0x10ffff) - throw RangeError(code + ' is not a valid code point'); - elements += - code < 0x10000 - ? String.fromCharCode(code) - : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00); - } - return elements; - }; -var fromEntries = -// native -hasNativeFromEntries - ? Object.fromEntries - : // Ponyfill - function fromEntries(entries) { - var obj = {}; - for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { - var _a = entries_1[_i], k = _a[0], v = _a[1]; - obj[k] = v; - } - return obj; - }; -var codePointAt = hasNativeCodePointAt - ? // Native - function codePointAt(s, index) { - return s.codePointAt(index); - } - : // IE 11 - function codePointAt(s, index) { - var size = s.length; - if (index < 0 || index >= size) { - return undefined; - } - var first = s.charCodeAt(index); - var second; - return first < 0xd800 || - first > 0xdbff || - index + 1 === size || - (second = s.charCodeAt(index + 1)) < 0xdc00 || - second > 0xdfff - ? first - : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000; - }; -var trimStart = hasTrimStart - ? // Native - function trimStart(s) { - return s.trimStart(); - } - : // Ponyfill - function trimStart(s) { - return s.replace(SPACE_SEPARATOR_START_REGEX, ''); - }; -var trimEnd = hasTrimEnd - ? // Native - function trimEnd(s) { - return s.trimEnd(); - } - : // Ponyfill - function trimEnd(s) { - return s.replace(SPACE_SEPARATOR_END_REGEX, ''); - }; -// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11. -function RE(s, flag) { - return new RegExp(s, flag); -} -// #endregion -var matchIdentifierAtIndex; -if (REGEX_SUPPORTS_U_AND_Y) { - // Native - var IDENTIFIER_PREFIX_RE_1 = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu'); - matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) { - var _a; - IDENTIFIER_PREFIX_RE_1.lastIndex = index; - var match = IDENTIFIER_PREFIX_RE_1.exec(s); - return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; - }; -} -else { - // IE11 - matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) { - var match = []; - while (true) { - var c = codePointAt(s, index); - if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) { - break; - } - match.push(c); - index += c >= 0x10000 ? 2 : 1; - } - return fromCodePoint.apply(void 0, match); - }; -} -var Parser = /** @class */ (function () { - function Parser(message, options) { - if (options === void 0) { options = {}; } - this.message = message; - this.position = { offset: 0, line: 1, column: 1 }; - this.ignoreTag = !!options.ignoreTag; - this.locale = options.locale; - this.requiresOtherClause = !!options.requiresOtherClause; - this.shouldParseSkeletons = !!options.shouldParseSkeletons; - } - Parser.prototype.parse = function () { - if (this.offset() !== 0) { - throw Error('parser can only be used once'); - } - return this.parseMessage(0, '', false); - }; - Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) { - var elements = []; - while (!this.isEOF()) { - var char = this.char(); - if (char === 123 /* `{` */) { - var result = this.parseArgument(nestingLevel, expectingCloseTag); - if (result.err) { - return result; - } - elements.push(result.val); - } - else if (char === 125 /* `}` */ && nestingLevel > 0) { - break; - } - else if (char === 35 /* `#` */ && - (parentArgType === 'plural' || parentArgType === 'selectordinal')) { - var position = this.clonePosition(); - this.bump(); - elements.push({ - type: TYPE.pound, - location: createLocation(position, this.clonePosition()), - }); - } - else if (char === 60 /* `<` */ && - !this.ignoreTag && - this.peek() === 47 // char code for '/' - ) { - if (expectingCloseTag) { - break; - } - else { - return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition())); - } - } - else if (char === 60 /* `<` */ && - !this.ignoreTag && - _isAlpha(this.peek() || 0)) { - var result = this.parseTag(nestingLevel, parentArgType); - if (result.err) { - return result; - } - elements.push(result.val); - } - else { - var result = this.parseLiteral(nestingLevel, parentArgType); - if (result.err) { - return result; - } - elements.push(result.val); - } - } - return { val: elements, err: null }; - }; - /** - * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the - * [custom element name][] except that a dash is NOT always mandatory and uppercase letters - * are accepted: - * - * ``` - * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" - * tagName ::= [a-z] (PENChar)* - * PENChar ::= - * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] | - * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] | - * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] - * ``` - * - * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name - * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do - * since other tag-based engines like React allow it - */ - Parser.prototype.parseTag = function (nestingLevel, parentArgType) { - var startPosition = this.clonePosition(); - this.bump(); // `<` - var tagName = this.parseTagName(); - this.bumpSpace(); - if (this.bumpIf('/>')) { - // Self closing tag - return { - val: { - type: TYPE.literal, - value: "<".concat(tagName, "/>"), - location: createLocation(startPosition, this.clonePosition()), - }, - err: null, - }; - } - else if (this.bumpIf('>')) { - var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true); - if (childrenResult.err) { - return childrenResult; - } - var children = childrenResult.val; - // Expecting a close tag - var endTagStartPosition = this.clonePosition(); - if (this.bumpIf('')) { - return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition())); - } - return { - val: { - type: TYPE.tag, - value: tagName, - children: children, - location: createLocation(startPosition, this.clonePosition()), - }, - err: null, - }; - } - else { - return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition())); - } - } - else { - return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition())); - } - }; - /** - * This method assumes that the caller has peeked ahead for the first tag character. - */ - Parser.prototype.parseTagName = function () { - var startOffset = this.offset(); - this.bump(); // the first tag name character - while (!this.isEOF() && _isPotentialElementNameChar(this.char())) { - this.bump(); - } - return this.message.slice(startOffset, this.offset()); - }; - Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) { - var start = this.clonePosition(); - var value = ''; - while (true) { - var parseQuoteResult = this.tryParseQuote(parentArgType); - if (parseQuoteResult) { - value += parseQuoteResult; - continue; - } - var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType); - if (parseUnquotedResult) { - value += parseUnquotedResult; - continue; - } - var parseLeftAngleResult = this.tryParseLeftAngleBracket(); - if (parseLeftAngleResult) { - value += parseLeftAngleResult; - continue; - } - break; - } - var location = createLocation(start, this.clonePosition()); - return { - val: { type: TYPE.literal, value: value, location: location }, - err: null, - }; - }; - Parser.prototype.tryParseLeftAngleBracket = function () { - if (!this.isEOF() && - this.char() === 60 /* `<` */ && - (this.ignoreTag || - // If at the opening tag or closing tag position, bail. - !_isAlphaOrSlash(this.peek() || 0))) { - this.bump(); // `<` - return '<'; - } - return null; - }; - /** - * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes - * a character that requires quoting (that is, "only where needed"), and works the same in - * nested messages as on the top level of the pattern. The new behavior is otherwise compatible. - */ - Parser.prototype.tryParseQuote = function (parentArgType) { - if (this.isEOF() || this.char() !== 39 /* `'` */) { - return null; - } - // Parse escaped char following the apostrophe, or early return if there is no escaped char. - // Check if is valid escaped character - switch (this.peek()) { - case 39 /* `'` */: - // double quote, should return as a single quote. - this.bump(); - this.bump(); - return "'"; - // '{', '<', '>', '}' - case 123: - case 60: - case 62: - case 125: - break; - case 35: // '#' - if (parentArgType === 'plural' || parentArgType === 'selectordinal') { - break; - } - return null; - default: - return null; - } - this.bump(); // apostrophe - var codePoints = [this.char()]; // escaped char - this.bump(); - // read chars until the optional closing apostrophe is found - while (!this.isEOF()) { - var ch = this.char(); - if (ch === 39 /* `'` */) { - if (this.peek() === 39 /* `'` */) { - codePoints.push(39); - // Bump one more time because we need to skip 2 characters. - this.bump(); - } - else { - // Optional closing apostrophe. - this.bump(); - break; - } - } - else { - codePoints.push(ch); - } - this.bump(); - } - return fromCodePoint.apply(void 0, codePoints); - }; - Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) { - if (this.isEOF()) { - return null; - } - var ch = this.char(); - if (ch === 60 /* `<` */ || - ch === 123 /* `{` */ || - (ch === 35 /* `#` */ && - (parentArgType === 'plural' || parentArgType === 'selectordinal')) || - (ch === 125 /* `}` */ && nestingLevel > 0)) { - return null; - } - else { - this.bump(); - return fromCodePoint(ch); - } - }; - Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) { - var openingBracePosition = this.clonePosition(); - this.bump(); // `{` - this.bumpSpace(); - if (this.isEOF()) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - if (this.char() === 125 /* `}` */) { - this.bump(); - return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); - } - // argument name - var value = this.parseIdentifierIfPossible().value; - if (!value) { - return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); - } - this.bumpSpace(); - if (this.isEOF()) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - switch (this.char()) { - // Simple argument: `{name}` - case 125 /* `}` */: { - this.bump(); // `}` - return { - val: { - type: TYPE.argument, - // value does not include the opening and closing braces. - value: value, - location: createLocation(openingBracePosition, this.clonePosition()), - }, - err: null, - }; - } - // Argument with options: `{name, format, ...}` - case 44 /* `,` */: { - this.bump(); // `,` - this.bumpSpace(); - if (this.isEOF()) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition); - } - default: - return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); - } - }; - /** - * Advance the parser until the end of the identifier, if it is currently on - * an identifier character. Return an empty string otherwise. - */ - Parser.prototype.parseIdentifierIfPossible = function () { - var startingPosition = this.clonePosition(); - var startOffset = this.offset(); - var value = matchIdentifierAtIndex(this.message, startOffset); - var endOffset = startOffset + value.length; - this.bumpTo(endOffset); - var endPosition = this.clonePosition(); - var location = createLocation(startingPosition, endPosition); - return { value: value, location: location }; - }; - Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) { - var _a; - // Parse this range: - // {name, type, style} - // ^---^ - var typeStartPosition = this.clonePosition(); - var argType = this.parseIdentifierIfPossible().value; - var typeEndPosition = this.clonePosition(); - switch (argType) { - case '': - // Expecting a style string number, date, time, plural, selectordinal, or select. - return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition)); - case 'number': - case 'date': - case 'time': { - // Parse this range: - // {name, number, style} - // ^-------^ - this.bumpSpace(); - var styleAndLocation = null; - if (this.bumpIf(',')) { - this.bumpSpace(); - var styleStartPosition = this.clonePosition(); - var result = this.parseSimpleArgStyleIfPossible(); - if (result.err) { - return result; - } - var style = trimEnd(result.val); - if (style.length === 0) { - return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition())); - } - var styleLocation = createLocation(styleStartPosition, this.clonePosition()); - styleAndLocation = { style: style, styleLocation: styleLocation }; - } - var argCloseResult = this.tryParseArgumentClose(openingBracePosition); - if (argCloseResult.err) { - return argCloseResult; - } - var location_1 = createLocation(openingBracePosition, this.clonePosition()); - // Extract style or skeleton - if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) { - // Skeleton starts with `::`. - var skeleton = trimStart(styleAndLocation.style.slice(2)); - if (argType === 'number') { - var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation); - if (result.err) { - return result; - } - return { - val: { type: TYPE.number, value: value, location: location_1, style: result.val }, - err: null, - }; - } - else { - if (skeleton.length === 0) { - return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1); - } - var dateTimePattern = skeleton; - // Get "best match" pattern only if locale is passed, if not, let it - // pass as-is where `parseDateTimeSkeleton()` will throw an error - // for unsupported patterns. - if (this.locale) { - dateTimePattern = getBestPattern(skeleton, this.locale); - } - var style = { - type: SKELETON_TYPE.dateTime, - pattern: dateTimePattern, - location: styleAndLocation.styleLocation, - parsedOptions: this.shouldParseSkeletons - ? parseDateTimeSkeleton(dateTimePattern) - : {}, - }; - var type = argType === 'date' ? TYPE.date : TYPE.time; - return { - val: { type: type, value: value, location: location_1, style: style }, - err: null, - }; - } - } - // Regular style or no style. - return { - val: { - type: argType === 'number' - ? TYPE.number - : argType === 'date' - ? TYPE.date - : TYPE.time, - value: value, - location: location_1, - style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null, - }, - err: null, - }; - } - case 'plural': - case 'selectordinal': - case 'select': { - // Parse this range: - // {name, plural, options} - // ^---------^ - var typeEndPosition_1 = this.clonePosition(); - this.bumpSpace(); - if (!this.bumpIf(',')) { - return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1))); - } - this.bumpSpace(); - // Parse offset: - // {name, plural, offset:1, options} - // ^-----^ - // - // or the first option: - // - // {name, plural, one {...} other {...}} - // ^--^ - var identifierAndLocation = this.parseIdentifierIfPossible(); - var pluralOffset = 0; - if (argType !== 'select' && identifierAndLocation.value === 'offset') { - if (!this.bumpIf(':')) { - return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition())); - } - this.bumpSpace(); - var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE); - if (result.err) { - return result; - } - // Parse another identifier for option parsing - this.bumpSpace(); - identifierAndLocation = this.parseIdentifierIfPossible(); - pluralOffset = result.val; - } - var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation); - if (optionsResult.err) { - return optionsResult; - } - var argCloseResult = this.tryParseArgumentClose(openingBracePosition); - if (argCloseResult.err) { - return argCloseResult; - } - var location_2 = createLocation(openingBracePosition, this.clonePosition()); - if (argType === 'select') { - return { - val: { - type: TYPE.select, - value: value, - options: fromEntries(optionsResult.val), - location: location_2, - }, - err: null, - }; - } - else { - return { - val: { - type: TYPE.plural, - value: value, - options: fromEntries(optionsResult.val), - offset: pluralOffset, - pluralType: argType === 'plural' ? 'cardinal' : 'ordinal', - location: location_2, - }, - err: null, - }; - } - } - default: - return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition)); - } - }; - Parser.prototype.tryParseArgumentClose = function (openingBracePosition) { - // Parse: {value, number, ::currency/GBP } - // - if (this.isEOF() || this.char() !== 125 /* `}` */) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - this.bump(); // `}` - return { val: true, err: null }; - }; - /** - * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659 - */ - Parser.prototype.parseSimpleArgStyleIfPossible = function () { - var nestedBraces = 0; - var startPosition = this.clonePosition(); - while (!this.isEOF()) { - var ch = this.char(); - switch (ch) { - case 39 /* `'` */: { - // Treat apostrophe as quoting but include it in the style part. - // Find the end of the quoted literal text. - this.bump(); - var apostrophePosition = this.clonePosition(); - if (!this.bumpUntil("'")) { - return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition())); - } - this.bump(); - break; - } - case 123 /* `{` */: { - nestedBraces += 1; - this.bump(); - break; - } - case 125 /* `}` */: { - if (nestedBraces > 0) { - nestedBraces -= 1; - } - else { - return { - val: this.message.slice(startPosition.offset, this.offset()), - err: null, - }; - } - break; - } - default: - this.bump(); - break; - } - } - return { - val: this.message.slice(startPosition.offset, this.offset()), - err: null, - }; - }; - Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) { - var tokens = []; - try { - tokens = parseNumberSkeletonFromString(skeleton); - } - catch (e) { - return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location); - } - return { - val: { - type: SKELETON_TYPE.number, - tokens: tokens, - location: location, - parsedOptions: this.shouldParseSkeletons - ? parseNumberSkeleton(tokens) - : {}, - }, - err: null, - }; - }; - /** - * @param nesting_level The current nesting level of messages. - * This can be positive when parsing message fragment in select or plural argument options. - * @param parent_arg_type The parent argument's type. - * @param parsed_first_identifier If provided, this is the first identifier-like selector of - * the argument. It is a by-product of a previous parsing attempt. - * @param expecting_close_tag If true, this message is directly or indirectly nested inside - * between a pair of opening and closing tags. The nested message will not parse beyond - * the closing tag boundary. - */ - Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) { - var _a; - var hasOtherClause = false; - var options = []; - var parsedSelectors = new Set(); - var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location; - // Parse: - // one {one apple} - // ^--^ - while (true) { - if (selector.length === 0) { - var startPosition = this.clonePosition(); - if (parentArgType !== 'select' && this.bumpIf('=')) { - // Try parse `={number}` selector - var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR); - if (result.err) { - return result; - } - selectorLocation = createLocation(startPosition, this.clonePosition()); - selector = this.message.slice(startPosition.offset, this.offset()); - } - else { - break; - } - } - // Duplicate selector clauses - if (parsedSelectors.has(selector)) { - return this.error(parentArgType === 'select' - ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR - : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation); - } - if (selector === 'other') { - hasOtherClause = true; - } - // Parse: - // one {one apple} - // ^----------^ - this.bumpSpace(); - var openingBracePosition = this.clonePosition(); - if (!this.bumpIf('{')) { - return this.error(parentArgType === 'select' - ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT - : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition())); - } - var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag); - if (fragmentResult.err) { - return fragmentResult; - } - var argCloseResult = this.tryParseArgumentClose(openingBracePosition); - if (argCloseResult.err) { - return argCloseResult; - } - options.push([ - selector, - { - value: fragmentResult.val, - location: createLocation(openingBracePosition, this.clonePosition()), - }, - ]); - // Keep track of the existing selectors - parsedSelectors.add(selector); - // Prep next selector clause. - this.bumpSpace(); - (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location); - } - if (options.length === 0) { - return this.error(parentArgType === 'select' - ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR - : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition())); - } - if (this.requiresOtherClause && !hasOtherClause) { - return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition())); - } - return { val: options, err: null }; - }; - Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) { - var sign = 1; - var startingPosition = this.clonePosition(); - if (this.bumpIf('+')) ; - else if (this.bumpIf('-')) { - sign = -1; - } - var hasDigits = false; - var decimal = 0; - while (!this.isEOF()) { - var ch = this.char(); - if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) { - hasDigits = true; - decimal = decimal * 10 + (ch - 48); - this.bump(); - } - else { - break; - } - } - var location = createLocation(startingPosition, this.clonePosition()); - if (!hasDigits) { - return this.error(expectNumberError, location); - } - decimal *= sign; - if (!isSafeInteger(decimal)) { - return this.error(invalidNumberError, location); - } - return { val: decimal, err: null }; - }; - Parser.prototype.offset = function () { - return this.position.offset; - }; - Parser.prototype.isEOF = function () { - return this.offset() === this.message.length; - }; - Parser.prototype.clonePosition = function () { - // This is much faster than `Object.assign` or spread. - return { - offset: this.position.offset, - line: this.position.line, - column: this.position.column, - }; - }; - /** - * Return the code point at the current position of the parser. - * Throws if the index is out of bound. - */ - Parser.prototype.char = function () { - var offset = this.position.offset; - if (offset >= this.message.length) { - throw Error('out of bound'); - } - var code = codePointAt(this.message, offset); - if (code === undefined) { - throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary")); - } - return code; - }; - Parser.prototype.error = function (kind, location) { - return { - val: null, - err: { - kind: kind, - message: this.message, - location: location, - }, - }; - }; - /** Bump the parser to the next UTF-16 code unit. */ - Parser.prototype.bump = function () { - if (this.isEOF()) { - return; - } - var code = this.char(); - if (code === 10 /* '\n' */) { - this.position.line += 1; - this.position.column = 1; - this.position.offset += 1; - } - else { - this.position.column += 1; - // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair. - this.position.offset += code < 0x10000 ? 1 : 2; - } - }; - /** - * If the substring starting at the current position of the parser has - * the given prefix, then bump the parser to the character immediately - * following the prefix and return true. Otherwise, don't bump the parser - * and return false. - */ - Parser.prototype.bumpIf = function (prefix) { - if (startsWith(this.message, prefix, this.offset())) { - for (var i = 0; i < prefix.length; i++) { - this.bump(); - } - return true; - } - return false; - }; - /** - * Bump the parser until the pattern character is found and return `true`. - * Otherwise bump to the end of the file and return `false`. - */ - Parser.prototype.bumpUntil = function (pattern) { - var currentOffset = this.offset(); - var index = this.message.indexOf(pattern, currentOffset); - if (index >= 0) { - this.bumpTo(index); - return true; - } - else { - this.bumpTo(this.message.length); - return false; - } - }; - /** - * Bump the parser to the target offset. - * If target offset is beyond the end of the input, bump the parser to the end of the input. - */ - Parser.prototype.bumpTo = function (targetOffset) { - if (this.offset() > targetOffset) { - throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset())); - } - targetOffset = Math.min(targetOffset, this.message.length); - while (true) { - var offset = this.offset(); - if (offset === targetOffset) { - break; - } - if (offset > targetOffset) { - throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary")); - } - this.bump(); - if (this.isEOF()) { - break; - } - } - }; - /** advance the parser through all whitespace to the next non-whitespace code unit. */ - Parser.prototype.bumpSpace = function () { - while (!this.isEOF() && _isWhiteSpace(this.char())) { - this.bump(); - } - }; - /** - * Peek at the *next* Unicode codepoint in the input without advancing the parser. - * If the input has been exhausted, then this returns null. - */ - Parser.prototype.peek = function () { - if (this.isEOF()) { - return null; - } - var code = this.char(); - var offset = this.offset(); - var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1)); - return nextCode !== null && nextCode !== void 0 ? nextCode : null; - }; - return Parser; -}()); -/** - * This check if codepoint is alphabet (lower & uppercase) - * @param codepoint - * @returns - */ -function _isAlpha(codepoint) { - return ((codepoint >= 97 && codepoint <= 122) || - (codepoint >= 65 && codepoint <= 90)); -} -function _isAlphaOrSlash(codepoint) { - return _isAlpha(codepoint) || codepoint === 47; /* '/' */ -} -/** See `parseTag` function docs. */ -function _isPotentialElementNameChar(c) { - return (c === 45 /* '-' */ || - c === 46 /* '.' */ || - (c >= 48 && c <= 57) /* 0..9 */ || - c === 95 /* '_' */ || - (c >= 97 && c <= 122) /** a..z */ || - (c >= 65 && c <= 90) /* A..Z */ || - c == 0xb7 || - (c >= 0xc0 && c <= 0xd6) || - (c >= 0xd8 && c <= 0xf6) || - (c >= 0xf8 && c <= 0x37d) || - (c >= 0x37f && c <= 0x1fff) || - (c >= 0x200c && c <= 0x200d) || - (c >= 0x203f && c <= 0x2040) || - (c >= 0x2070 && c <= 0x218f) || - (c >= 0x2c00 && c <= 0x2fef) || - (c >= 0x3001 && c <= 0xd7ff) || - (c >= 0xf900 && c <= 0xfdcf) || - (c >= 0xfdf0 && c <= 0xfffd) || - (c >= 0x10000 && c <= 0xeffff)); -} -/** - * Code point equivalent of regex `\p{White_Space}`. - * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt - */ -function _isWhiteSpace(c) { - return ((c >= 0x0009 && c <= 0x000d) || - c === 0x0020 || - c === 0x0085 || - (c >= 0x200e && c <= 0x200f) || - c === 0x2028 || - c === 0x2029); -} -/** - * Code point equivalent of regex `\p{Pattern_Syntax}`. - * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt - */ -function _isPatternSyntax(c) { - return ((c >= 0x0021 && c <= 0x0023) || - c === 0x0024 || - (c >= 0x0025 && c <= 0x0027) || - c === 0x0028 || - c === 0x0029 || - c === 0x002a || - c === 0x002b || - c === 0x002c || - c === 0x002d || - (c >= 0x002e && c <= 0x002f) || - (c >= 0x003a && c <= 0x003b) || - (c >= 0x003c && c <= 0x003e) || - (c >= 0x003f && c <= 0x0040) || - c === 0x005b || - c === 0x005c || - c === 0x005d || - c === 0x005e || - c === 0x0060 || - c === 0x007b || - c === 0x007c || - c === 0x007d || - c === 0x007e || - c === 0x00a1 || - (c >= 0x00a2 && c <= 0x00a5) || - c === 0x00a6 || - c === 0x00a7 || - c === 0x00a9 || - c === 0x00ab || - c === 0x00ac || - c === 0x00ae || - c === 0x00b0 || - c === 0x00b1 || - c === 0x00b6 || - c === 0x00bb || - c === 0x00bf || - c === 0x00d7 || - c === 0x00f7 || - (c >= 0x2010 && c <= 0x2015) || - (c >= 0x2016 && c <= 0x2017) || - c === 0x2018 || - c === 0x2019 || - c === 0x201a || - (c >= 0x201b && c <= 0x201c) || - c === 0x201d || - c === 0x201e || - c === 0x201f || - (c >= 0x2020 && c <= 0x2027) || - (c >= 0x2030 && c <= 0x2038) || - c === 0x2039 || - c === 0x203a || - (c >= 0x203b && c <= 0x203e) || - (c >= 0x2041 && c <= 0x2043) || - c === 0x2044 || - c === 0x2045 || - c === 0x2046 || - (c >= 0x2047 && c <= 0x2051) || - c === 0x2052 || - c === 0x2053 || - (c >= 0x2055 && c <= 0x205e) || - (c >= 0x2190 && c <= 0x2194) || - (c >= 0x2195 && c <= 0x2199) || - (c >= 0x219a && c <= 0x219b) || - (c >= 0x219c && c <= 0x219f) || - c === 0x21a0 || - (c >= 0x21a1 && c <= 0x21a2) || - c === 0x21a3 || - (c >= 0x21a4 && c <= 0x21a5) || - c === 0x21a6 || - (c >= 0x21a7 && c <= 0x21ad) || - c === 0x21ae || - (c >= 0x21af && c <= 0x21cd) || - (c >= 0x21ce && c <= 0x21cf) || - (c >= 0x21d0 && c <= 0x21d1) || - c === 0x21d2 || - c === 0x21d3 || - c === 0x21d4 || - (c >= 0x21d5 && c <= 0x21f3) || - (c >= 0x21f4 && c <= 0x22ff) || - (c >= 0x2300 && c <= 0x2307) || - c === 0x2308 || - c === 0x2309 || - c === 0x230a || - c === 0x230b || - (c >= 0x230c && c <= 0x231f) || - (c >= 0x2320 && c <= 0x2321) || - (c >= 0x2322 && c <= 0x2328) || - c === 0x2329 || - c === 0x232a || - (c >= 0x232b && c <= 0x237b) || - c === 0x237c || - (c >= 0x237d && c <= 0x239a) || - (c >= 0x239b && c <= 0x23b3) || - (c >= 0x23b4 && c <= 0x23db) || - (c >= 0x23dc && c <= 0x23e1) || - (c >= 0x23e2 && c <= 0x2426) || - (c >= 0x2427 && c <= 0x243f) || - (c >= 0x2440 && c <= 0x244a) || - (c >= 0x244b && c <= 0x245f) || - (c >= 0x2500 && c <= 0x25b6) || - c === 0x25b7 || - (c >= 0x25b8 && c <= 0x25c0) || - c === 0x25c1 || - (c >= 0x25c2 && c <= 0x25f7) || - (c >= 0x25f8 && c <= 0x25ff) || - (c >= 0x2600 && c <= 0x266e) || - c === 0x266f || - (c >= 0x2670 && c <= 0x2767) || - c === 0x2768 || - c === 0x2769 || - c === 0x276a || - c === 0x276b || - c === 0x276c || - c === 0x276d || - c === 0x276e || - c === 0x276f || - c === 0x2770 || - c === 0x2771 || - c === 0x2772 || - c === 0x2773 || - c === 0x2774 || - c === 0x2775 || - (c >= 0x2794 && c <= 0x27bf) || - (c >= 0x27c0 && c <= 0x27c4) || - c === 0x27c5 || - c === 0x27c6 || - (c >= 0x27c7 && c <= 0x27e5) || - c === 0x27e6 || - c === 0x27e7 || - c === 0x27e8 || - c === 0x27e9 || - c === 0x27ea || - c === 0x27eb || - c === 0x27ec || - c === 0x27ed || - c === 0x27ee || - c === 0x27ef || - (c >= 0x27f0 && c <= 0x27ff) || - (c >= 0x2800 && c <= 0x28ff) || - (c >= 0x2900 && c <= 0x2982) || - c === 0x2983 || - c === 0x2984 || - c === 0x2985 || - c === 0x2986 || - c === 0x2987 || - c === 0x2988 || - c === 0x2989 || - c === 0x298a || - c === 0x298b || - c === 0x298c || - c === 0x298d || - c === 0x298e || - c === 0x298f || - c === 0x2990 || - c === 0x2991 || - c === 0x2992 || - c === 0x2993 || - c === 0x2994 || - c === 0x2995 || - c === 0x2996 || - c === 0x2997 || - c === 0x2998 || - (c >= 0x2999 && c <= 0x29d7) || - c === 0x29d8 || - c === 0x29d9 || - c === 0x29da || - c === 0x29db || - (c >= 0x29dc && c <= 0x29fb) || - c === 0x29fc || - c === 0x29fd || - (c >= 0x29fe && c <= 0x2aff) || - (c >= 0x2b00 && c <= 0x2b2f) || - (c >= 0x2b30 && c <= 0x2b44) || - (c >= 0x2b45 && c <= 0x2b46) || - (c >= 0x2b47 && c <= 0x2b4c) || - (c >= 0x2b4d && c <= 0x2b73) || - (c >= 0x2b74 && c <= 0x2b75) || - (c >= 0x2b76 && c <= 0x2b95) || - c === 0x2b96 || - (c >= 0x2b97 && c <= 0x2bff) || - (c >= 0x2e00 && c <= 0x2e01) || - c === 0x2e02 || - c === 0x2e03 || - c === 0x2e04 || - c === 0x2e05 || - (c >= 0x2e06 && c <= 0x2e08) || - c === 0x2e09 || - c === 0x2e0a || - c === 0x2e0b || - c === 0x2e0c || - c === 0x2e0d || - (c >= 0x2e0e && c <= 0x2e16) || - c === 0x2e17 || - (c >= 0x2e18 && c <= 0x2e19) || - c === 0x2e1a || - c === 0x2e1b || - c === 0x2e1c || - c === 0x2e1d || - (c >= 0x2e1e && c <= 0x2e1f) || - c === 0x2e20 || - c === 0x2e21 || - c === 0x2e22 || - c === 0x2e23 || - c === 0x2e24 || - c === 0x2e25 || - c === 0x2e26 || - c === 0x2e27 || - c === 0x2e28 || - c === 0x2e29 || - (c >= 0x2e2a && c <= 0x2e2e) || - c === 0x2e2f || - (c >= 0x2e30 && c <= 0x2e39) || - (c >= 0x2e3a && c <= 0x2e3b) || - (c >= 0x2e3c && c <= 0x2e3f) || - c === 0x2e40 || - c === 0x2e41 || - c === 0x2e42 || - (c >= 0x2e43 && c <= 0x2e4f) || - (c >= 0x2e50 && c <= 0x2e51) || - c === 0x2e52 || - (c >= 0x2e53 && c <= 0x2e7f) || - (c >= 0x3001 && c <= 0x3003) || - c === 0x3008 || - c === 0x3009 || - c === 0x300a || - c === 0x300b || - c === 0x300c || - c === 0x300d || - c === 0x300e || - c === 0x300f || - c === 0x3010 || - c === 0x3011 || - (c >= 0x3012 && c <= 0x3013) || - c === 0x3014 || - c === 0x3015 || - c === 0x3016 || - c === 0x3017 || - c === 0x3018 || - c === 0x3019 || - c === 0x301a || - c === 0x301b || - c === 0x301c || - c === 0x301d || - (c >= 0x301e && c <= 0x301f) || - c === 0x3020 || - c === 0x3030 || - c === 0xfd3e || - c === 0xfd3f || - (c >= 0xfe45 && c <= 0xfe46)); -} - -function pruneLocation(els) { - els.forEach(function (el) { - delete el.location; - if (isSelectElement(el) || isPluralElement(el)) { - for (var k in el.options) { - delete el.options[k].location; - pruneLocation(el.options[k].value); - } - } - else if (isNumberElement(el) && isNumberSkeleton(el.style)) { - delete el.style.location; - } - else if ((isDateElement(el) || isTimeElement(el)) && - isDateTimeSkeleton(el.style)) { - delete el.style.location; - } - else if (isTagElement(el)) { - pruneLocation(el.children); - } - }); -} -function parse(message, opts) { - if (opts === void 0) { opts = {}; } - opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts); - var result = new Parser(message, opts).parse(); - if (result.err) { - var error = SyntaxError(ErrorKind[result.err.kind]); - // @ts-expect-error Assign to error object - error.location = result.err.location; - // @ts-expect-error Assign to error object - error.originalMessage = result.err.message; - throw error; - } - if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) { - pruneLocation(result.val); - } - 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 - ErrorCode["MISSING_VALUE"] = "MISSING_VALUE"; - // When value supplied is invalid - ErrorCode["INVALID_VALUE"] = "INVALID_VALUE"; - // When we need specific Intl API but it's not available - ErrorCode["MISSING_INTL_API"] = "MISSING_INTL_API"; -})(ErrorCode || (ErrorCode = {})); -var FormatError = /** @class */ (function (_super) { - __extends(FormatError, _super); - function FormatError(msg, code, originalMessage) { - var _this = _super.call(this, msg) || this; - _this.code = code; - _this.originalMessage = originalMessage; - return _this; - } - FormatError.prototype.toString = function () { - return "[formatjs Error: ".concat(this.code, "] ").concat(this.message); - }; - return FormatError; -}(Error)); -var InvalidValueError = /** @class */ (function (_super) { - __extends(InvalidValueError, _super); - function InvalidValueError(variableId, value, options, originalMessage) { - return _super.call(this, "Invalid values for \"".concat(variableId, "\": \"").concat(value, "\". Options are \"").concat(Object.keys(options).join('", "'), "\""), ErrorCode.INVALID_VALUE, originalMessage) || this; - } - return InvalidValueError; -}(FormatError)); -var InvalidValueTypeError = /** @class */ (function (_super) { - __extends(InvalidValueTypeError, _super); - function InvalidValueTypeError(value, type, originalMessage) { - return _super.call(this, "Value for \"".concat(value, "\" must be of type ").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this; - } - return InvalidValueTypeError; -}(FormatError)); -var MissingValueError = /** @class */ (function (_super) { - __extends(MissingValueError, _super); - function MissingValueError(variableId, originalMessage) { - return _super.call(this, "The intl string context variable \"".concat(variableId, "\" was not provided to the string \"").concat(originalMessage, "\""), ErrorCode.MISSING_VALUE, originalMessage) || this; - } - return MissingValueError; -}(FormatError)); - -var PART_TYPE; -(function (PART_TYPE) { - PART_TYPE[PART_TYPE["literal"] = 0] = "literal"; - PART_TYPE[PART_TYPE["object"] = 1] = "object"; -})(PART_TYPE || (PART_TYPE = {})); -function mergeLiteral(parts) { - if (parts.length < 2) { - return parts; - } - return parts.reduce(function (all, part) { - var lastPart = all[all.length - 1]; - if (!lastPart || - lastPart.type !== PART_TYPE.literal || - part.type !== PART_TYPE.literal) { - all.push(part); - } - else { - lastPart.value += part.value; - } - return all; - }, []); -} -function isFormatXMLElementFn(el) { - return typeof el === 'function'; -} -// TODO(skeleton): add skeleton support -function formatToParts(els, locales, formatters, formats, values, currentPluralValue, -// For debugging -originalMessage) { - // Hot path for straight simple msg translations - if (els.length === 1 && isLiteralElement(els[0])) { - return [ - { - type: PART_TYPE.literal, - value: els[0].value, - }, - ]; - } - var result = []; - for (var _i = 0, els_1 = els; _i < els_1.length; _i++) { - var el = els_1[_i]; - // Exit early for string parts. - if (isLiteralElement(el)) { - result.push({ - type: PART_TYPE.literal, - value: el.value, - }); - continue; - } - // TODO: should this part be literal type? - // Replace `#` in plural rules with the actual numeric value. - if (isPoundElement(el)) { - if (typeof currentPluralValue === 'number') { - result.push({ - type: PART_TYPE.literal, - value: formatters.getNumberFormat(locales).format(currentPluralValue), - }); - } - continue; - } - var varName = el.value; - // Enforce that all required values are provided by the caller. - if (!(values && varName in values)) { - throw new MissingValueError(varName, originalMessage); - } - var value = values[varName]; - if (isArgumentElement(el)) { - if (!value || typeof value === 'string' || typeof value === 'number') { - value = - typeof value === 'string' || typeof value === 'number' - ? String(value) - : ''; - } - result.push({ - type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object, - value: value, - }); - continue; - } - // Recursively format plural and select parts' option — which can be a - // nested pattern structure. The choosing of the option to use is - // abstracted-by and delegated-to the part helper object. - if (isDateElement(el)) { - var style = typeof el.style === 'string' - ? formats.date[el.style] - : isDateTimeSkeleton(el.style) - ? el.style.parsedOptions - : undefined; - result.push({ - type: PART_TYPE.literal, - value: formatters - .getDateTimeFormat(locales, style) - .format(value), - }); - continue; - } - if (isTimeElement(el)) { - var style = typeof el.style === 'string' - ? formats.time[el.style] - : isDateTimeSkeleton(el.style) - ? el.style.parsedOptions - : formats.time.medium; - result.push({ - type: PART_TYPE.literal, - value: formatters - .getDateTimeFormat(locales, style) - .format(value), - }); - continue; - } - if (isNumberElement(el)) { - var style = typeof el.style === 'string' - ? formats.number[el.style] - : isNumberSkeleton(el.style) - ? el.style.parsedOptions - : undefined; - if (style && style.scale) { - value = - value * - (style.scale || 1); - } - result.push({ - type: PART_TYPE.literal, - value: formatters - .getNumberFormat(locales, style) - .format(value), - }); - continue; - } - if (isTagElement(el)) { - var children = el.children, value_1 = el.value; - var formatFn = values[value_1]; - if (!isFormatXMLElementFn(formatFn)) { - throw new InvalidValueTypeError(value_1, 'function', originalMessage); - } - var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue); - var chunks = formatFn(parts.map(function (p) { return p.value; })); - if (!Array.isArray(chunks)) { - chunks = [chunks]; - } - result.push.apply(result, chunks.map(function (c) { - return { - type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object, - value: c, - }; - })); - } - if (isSelectElement(el)) { - var opt = el.options[value] || el.options.other; - if (!opt) { - throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage); - } - result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values)); - continue; - } - if (isPluralElement(el)) { - var opt = el.options["=".concat(value)]; - if (!opt) { - if (!Intl.PluralRules) { - throw new FormatError("Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n", ErrorCode.MISSING_INTL_API, originalMessage); - } - var rule = formatters - .getPluralRules(locales, { type: el.pluralType }) - .select(value - (el.offset || 0)); - opt = el.options[rule] || el.options.other; - } - if (!opt) { - throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage); - } - result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0))); - continue; - } - } - return mergeLiteral(result); -} - -/* -Copyright (c) 2014, Yahoo! Inc. All rights reserved. -Copyrights licensed under the New BSD License. -See the accompanying LICENSE file for terms. -*/ -// -- MessageFormat -------------------------------------------------------- -function mergeConfig(c1, c2) { - if (!c2) { - return c1; - } - return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) { - all[k] = __assign(__assign({}, c1[k]), (c2[k] || {})); - return all; - }, {})); -} -function mergeConfigs(defaultConfig, configs) { - if (!configs) { - return defaultConfig; - } - return Object.keys(defaultConfig).reduce(function (all, k) { - all[k] = mergeConfig(defaultConfig[k], configs[k]); - return all; - }, __assign({}, defaultConfig)); -} -function createFastMemoizeCache(store) { - return { - create: function () { - return { - get: function (key) { - return store[key]; - }, - set: function (key, value) { - store[key] = value; - }, - }; - }, - }; -} -function createDefaultFormatters(cache) { - if (cache === void 0) { cache = { - number: {}, - dateTime: {}, - pluralRules: {}, - }; } - return { - getNumberFormat: memoize(function () { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))(); - }, { - cache: createFastMemoizeCache(cache.number), - strategy: strategies.variadic, - }), - getDateTimeFormat: memoize(function () { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))(); - }, { - cache: createFastMemoizeCache(cache.dateTime), - strategy: strategies.variadic, - }), - getPluralRules: memoize(function () { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))(); - }, { - cache: createFastMemoizeCache(cache.pluralRules), - strategy: strategies.variadic, - }), - }; -} -var IntlMessageFormat$1 = /** @class */ (function () { - function IntlMessageFormat(message, locales, overrideFormats, opts) { - var _this = this; - if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; } - this.formatterCache = { - number: {}, - dateTime: {}, - pluralRules: {}, - }; - this.format = function (values) { - var parts = _this.formatToParts(values); - // Hot path for straight simple msg translations - if (parts.length === 1) { - return parts[0].value; - } - var result = parts.reduce(function (all, part) { - if (!all.length || - part.type !== PART_TYPE.literal || - typeof all[all.length - 1] !== 'string') { - all.push(part.value); - } - else { - all[all.length - 1] += part.value; - } - return all; - }, []); - if (result.length <= 1) { - return result[0] || ''; - } - return result; - }; - this.formatToParts = function (values) { - return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message); - }; - this.resolvedOptions = function () { - var _a; - return ({ - locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) || - Intl.NumberFormat.supportedLocalesOf(_this.locales)[0], - }); - }; - this.getAst = function () { return _this.ast; }; - // Defined first because it's used to build the format pattern. - this.locales = locales; - this.resolvedLocale = IntlMessageFormat.resolveLocale(locales); - if (typeof message === 'string') { - this.message = message; - if (!IntlMessageFormat.__parse) { - throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`'); - } - var _a = opts || {}; _a.formatters; var parseOpts = __rest(_a, ["formatters"]); - // Parse string messages into an AST. - this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale })); - } - else { - this.ast = message; - } - if (!Array.isArray(this.ast)) { - throw new TypeError('A message must be provided as a String or AST.'); - } - // Creates a new object with the specified `formats` merged with the default - // formats. - this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats); - this.formatters = - (opts && opts.formatters) || createDefaultFormatters(this.formatterCache); - } - Object.defineProperty(IntlMessageFormat, "defaultLocale", { - get: function () { - if (!IntlMessageFormat.memoizedDefaultLocale) { - IntlMessageFormat.memoizedDefaultLocale = - new Intl.NumberFormat().resolvedOptions().locale; - } - return IntlMessageFormat.memoizedDefaultLocale; - }, - enumerable: false, - configurable: true - }); - IntlMessageFormat.memoizedDefaultLocale = null; - IntlMessageFormat.resolveLocale = function (locales) { - if (typeof Intl.Locale === 'undefined') { - return; - } - var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales); - if (supportedLocales.length > 0) { - return new Intl.Locale(supportedLocales[0]); - } - return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]); - }; - IntlMessageFormat.__parse = parse; - // Default format options used as the prototype of the `formats` provided to the - // constructor. These are used when constructing the internal Intl.NumberFormat - // and Intl.DateTimeFormat instances. - IntlMessageFormat.formats = { - number: { - integer: { - maximumFractionDigits: 0, - }, - currency: { - style: 'currency', - }, - percent: { - style: 'percent', - }, - }, - date: { - short: { - month: 'numeric', - day: 'numeric', - year: '2-digit', - }, - medium: { - month: 'short', - day: 'numeric', - year: 'numeric', - }, - long: { - month: 'long', - day: 'numeric', - year: 'numeric', - }, - full: { - weekday: 'long', - month: 'long', - day: 'numeric', - year: 'numeric', - }, - }, - time: { - short: { - hour: 'numeric', - minute: 'numeric', - }, - medium: { - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - }, - long: { - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - timeZoneName: 'short', - }, - full: { - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - timeZoneName: 'short', - }, - }, - }; - return IntlMessageFormat; -}()); - -/* -Copyright (c) 2014, Yahoo! Inc. All rights reserved. -Copyrights licensed under the New BSD License. -See the accompanying LICENSE file for terms. -*/ -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]; -// Falk - Adapted the central translator to check if a localStorage key is existing. -var 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); - } - else { - locales = [navigator.language || navigator.userLanguage || defaultLocale]; - } -} -function parseLocale(s) { - var 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 }; - } - 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() }; - } - catch (e) { - log.error("Parse locale:".concat(locale, " failed."), e); - } -} -function parseLocales(list) { - return list.map(parseLocale).filter(function (t) { return t; }); -} -var fallbackLocaleInfos = parseLocales(locales.includes(defaultLocale) ? locales : __spreadArray(__spreadArray([], locales, true), [defaultLocale], false)); -var i18n = __assign({ locales: 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); - if (t !== undefined) { - return t; - } - } - return defaultValue; -} -function getDataByLocale(fileData, suffix, filterLocales, targetLocales) { - var localeInfos = __spreadArray([], fallbackLocaleInfos, true); - var 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 [ - 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]; - if (data !== undefined) { - return { data: data, language: name_1.slice(0, 2) }; - } - } - console.error("Not found ".concat(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; - 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) { - 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); - if (Array.isArray(node)) { - return node.map(function (n, i) { return jsxRuntimeExports.jsx(reactExports.Fragment, { children: n }, i); }); - } - return node; - }; - Translator.prototype.getMessage = function (key) { - var 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); - } - return message; - }; - Translator.prototype.getNestedMessage = function (obj, key) { - for (var _i = 0, _a = key.split("."); _i < _a.length; _i++) { - var k = _a[_i]; - 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; -} - -exports.AbstractComp = AbstractComp; -exports.AbstractNode = AbstractNode; -exports.CachedNode = CachedNode; -exports.CodeNode = CodeNode; -exports.FetchCheckNode = FetchCheckNode; -exports.FunctionNode = FunctionNode; -exports.MultiBaseComp = MultiBaseComp; -exports.RecordNode = RecordNode; -exports.RelaxedJsonParser = RelaxedJsonParser; -exports.SimpleAbstractComp = SimpleAbstractComp; -exports.SimpleComp = SimpleComp; -exports.SimpleNode = SimpleNode; -exports.Translator = Translator; -exports.ValueAndMsg = ValueAndMsg; -exports.WrapContextNodeV2 = WrapContextNodeV2; -exports.WrapNode = WrapNode; -exports.changeChildAction = changeChildAction; -exports.changeDependName = changeDependName; -exports.changeEditDSLAction = changeEditDSLAction; -exports.changeValueAction = changeValueAction; -exports.clearMockWindow = clearMockWindow; -exports.clearStyleEval = clearStyleEval; -exports.customAction = customAction; -exports.deferAction = deferAction; -exports.deleteCompAction = deleteCompAction; -exports.dependingNodeMapEquals = dependingNodeMapEquals; -exports.evalFunc = evalFunc; -exports.evalFunctionResult = evalFunctionResult; -exports.evalNodeOrMinor = evalNodeOrMinor; -exports.evalPerfUtil = evalPerfUtil; -exports.evalScript = evalScript; -exports.evalStyle = evalStyle; -exports.executeQueryAction = executeQueryAction; -exports.fromRecord = fromRecord; -exports.fromUnevaledValue = fromUnevaledValue; -exports.fromValue = fromValue; -exports.fromValueWithCache = fromValueWithCache; -exports.getDynamicStringSegments = getDynamicStringSegments; -exports.getI18nObjects = getI18nObjects; -exports.getValueByLocale = getValueByLocale; -exports.i18n = i18n; -exports.isBroadcastAction = isBroadcastAction; -exports.isChildAction = isChildAction; -exports.isCustomAction = isCustomAction; -exports.isDynamicSegment = isDynamicSegment; -exports.isFetching = isFetching; -exports.isMyCustomAction = isMyCustomAction; -exports.mergeExtra = mergeExtra; -exports.multiChangeAction = multiChangeAction; -exports.nodeIsRecord = nodeIsRecord; -exports.onlyEvalAction = onlyEvalAction; -exports.relaxedJSONToJSON = relaxedJSONToJSON; -exports.renameAction = renameAction; -exports.replaceCompAction = replaceCompAction; -exports.routeByNameAction = routeByNameAction; -exports.transformWrapper = transformWrapper; -exports.triggerModuleEventAction = triggerModuleEventAction; -exports.unwrapChildAction = unwrapChildAction; -exports.updateActionContextAction = updateActionContextAction; -exports.updateNodesV2Action = updateNodesV2Action; -exports.withFunction = withFunction; -exports.wrapActionExtraInfo = wrapActionExtraInfo; -exports.wrapChildAction = wrapChildAction; -exports.wrapContext = wrapContext; -exports.wrapDispatch = wrapDispatch; diff --git a/client/packages/lowcoder-core/lib/index.js b/client/packages/lowcoder-core/lib/index.js index 28dc7a075..cfa929cf1 100644 --- a/client/packages/lowcoder-core/lib/index.js +++ b/client/packages/lowcoder-core/lib/index.js @@ -1,6 +1,7 @@ -import _ from 'lodash'; -import { serialize, compile, middleware, prefixer, stringify } from 'stylis'; - +import _ from 'lodash'; +import { serialize, compile, middleware, prefixer, stringify } from 'stylis'; +import {viewMode} from "lowcoder/src/util/editor"; + /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -113,12060 +114,12060 @@ function __spreadArray(to, from, pack) { 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) { - if (!cacheArgs) { - return false; - } - if (args.length === 0 && cacheArgs.length === 0) { - 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]; })); -} -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]; - if (cache && isEqualArgs(args, cache.args, equals)) { - return cache.result; - } -} -function cache(fn, args, thisObj, fnName, equals) { - var result = getCacheResult(thisObj, fnName, args, equals); - if (result) { - return result.value; - } - var cache = { - id: Symbol("id"), - args: args, - time: Date.now(), - }; - if (!thisObj.__cache) { - thisObj.__cache = {}; - } - thisObj.__cache[fnName] = cache; - var value = fn.apply(thisObj, args); - cache.result = { value: 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]; - } - 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, ""); - } - }); - }; - this.record = this.initRecord(); - } - RecursivePerfUtil.prototype.log = function (info, key, log) { - info[key] = log; - }; - RecursivePerfUtil.prototype.perf = function (obj, name, fn) { - { - return fn(_.noop); - } - }; - return RecursivePerfUtil; -}()); -var 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); - // use cache when equals to the last dependingNodeMap - if (dependingNodeMapEquals(_this.evalCache.dependingNodeMap, dependingNodeMap)) { - return _this.evalCache.value; - } - // initialize cyclic field - _this.evalCache.cyclic = false; - var result = _this.justEval(exposingNodes, methods); - // write cache - _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(); }); - } - return result; - }); - }; - AbstractNode.prototype.hasCycle = function () { - var _a; - return (_a = this.evalCache.cyclic) !== null && _a !== void 0 ? _a : false; - }; - AbstractNode.prototype.dependNames = function () { - return Object.keys(this.dependValues()); - }; - AbstractNode.prototype.isHitEvalCache = function (exposingNodes) { - exposingNodes = exposingNodes !== null && exposingNodes !== void 0 ? exposingNodes : {}; - var 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) { - if (n.type === "wrap") { - nextMap.set(n.delegate, p); - } - else { - nextMap.set(n, p); - } - }); - return nextMap; -} -function setEquals(s1, s2) { - return s2 !== undefined && s1.size === s2.size && Array.from(s2).every(function (v) { return s1.has(v); }); -} -/** - * check whether 2 dependingNodeMaps are equal - * - Node use "===" to check - * - string[] use deep compare to check - * - * @param dependingNodeMap1 first dependingNodeMap - * @param dependingNodeMap2 second dependingNodeMap - * @returns whether equals - */ -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) { - result = result && setEquals(paths, map1.get(node)); - }); - return result; -} - -/** - * 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); - }); - }; - FunctionNode.prototype.justEval = function (exposingNodes, methods) { - return this.func(this.child.evaluate(exposingNodes, methods)); - }; - FunctionNode.prototype.getChildren = function () { - return [this.child]; - }; - FunctionNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - FunctionNode.prototype.fetchInfo = function (exposingNodes, options) { - return this.child.fetchInfo(exposingNodes, options); - }; - __decorate([ - memoized() - ], FunctionNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], FunctionNode.prototype, "fetchInfo", null); - return FunctionNode; -}(AbstractNode)); -function withFunction(child, func) { - return new FunctionNode(child, func); -} - -function addDepend(target, node, paths) { - if (!node) { - return; - } - var 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); }); -} -function addDepends(target, source) { - source === null || source === void 0 ? void 0 : source.forEach(function (paths, node) { return 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) { - 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 () { - return Object.values(this.children); - }; - RecordNode.prototype.dependValues = function () { - var 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]; - 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); - 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)); -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; - } - CachedNode.prototype.filterNodes = function (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 () { - return [this.child]; - }; - CachedNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - CachedNode.prototype.fetchInfo = function (exposingNodes) { - return this.child.fetchInfo(exposingNodes); - }; - __decorate([ - memoized() - ], CachedNode.prototype, "filterNodes", null); - return CachedNode; -}(AbstractNode)); -function withEvalCache(node) { - var newNode = withFunction(node, function (x) { return x; }); - newNode.evalCache = __assign({}, node.evalCache); - return newNode; -} -/** - * return a new node with two input nodes. - * - if mainNode is never evaled, then (new node).evaluate equals to mainNode.evaluate - * - if mainNode is evaled, then (new node).evaluate equals to minorNode.evaluate - * - * @remarks - * encapsulation logic: 2 nodes -> CachedNode(mainNode)+minorNode -> RecordNode({main, minor}) -> FunctionNode - * - * @warn improper use may cause unexpected behaviour, be careful. - * @param mainNode mainNode - * @param minorNode minorNode - * @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; - if (!mainCachedValue.isCached) { - return mainCachedValue.value; - } - return record.minor; - }); -} - -function toReadableString(value) { - if (value instanceof RegExp) { - return value.toString(); - } - // fix undefined NaN Infinity -Infinity - if (value === undefined || typeof value === "number") { - return value + ""; - } - if (typeof value === "string") { - // without escaping char - return '"' + value + '"'; - } - // FIXME: correctly show `undefined NaN Infinity -Infinity` inside Object, they are within quotes currently - return JSON.stringify(value, function (key, val) { - switch (typeof val) { - case "function": - case "bigint": - case "symbol": - case "undefined": - return val + ""; - case "number": - if (!isFinite(val)) { - return val + ""; - } - } - return val; - }); -} - -var ValueAndMsg = /** @class */ (function () { - function ValueAndMsg(value, msg, extra, midValue) { - this.value = value; - this.msg = msg; - this.extra = extra; - this.midValue = midValue; - } - ValueAndMsg.prototype.hasError = function () { - 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; -}()); - -function dependsErrorMessage(node) { - return "DependencyError: \"".concat(node.unevaledValue, "\" caused a cyclic dependency."); -} -function getErrorMessage(err) { - // todo try to use 'err instanceof EvalTypeError' instead - if (err instanceof TypeError && err.hint) { - return err.hint + "\n" + err.name + ": " + err.message; - } - return err instanceof Error - ? err.name + ": " + err.message - : "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); - 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))); -} -// node2 mostly has one path -function mergeNode(node1, node2) { - if (!node1 || node1 === node2) { - return 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; - record[name] = subNode; - }); - return fromRecord(record); -} -function nodeIsRecord(node) { - return node.type === "record"; -} - -var 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("{{"); - while (start >= 0) { - var i = start + 2; - while (i < input.length && input[i] === "{") - i++; - var 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; - for (; i < maxIndex; i++) { - switch (input[i]) { - case "{": - sum++; - break; - case "}": - sum--; - if (input[i - 1] === "}") { - var offset = Math.min(Math.max(sum, 0), maxStartOffset); - var value = Math.abs(sum - offset); - if (value < minValue || (value === minValue && offset < minOffset)) { - minValue = value; - minOffset = offset; - end = i + 1; - } - } - break; - } - } - segments.push(input.slice(position, start + minOffset), input.slice(start + minOffset, end)); - position = end; - start = nextStart; - } - segments.push(input.slice(position)); - return segments.filter(function (t) { return 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]; - if (isDynamicSegment(segment)) { - addDepends(ret, parseDepends(segment.slice(2, -2), exposingNodes, maxDepth)); - } - } - return ret; -} -function hasCycle(segment, exposingNodes) { - if (!isDynamicSegment(segment)) { - return false; - } - var ret = false; - parseDepends(segment.slice(2, -2), exposingNodes).forEach(function (paths, node) { - ret = ret || node.hasCycle(); - }); - return ret; -} -function changeDependName(unevaledValue, oldName, name, isFunction) { - if (!unevaledValue || !oldName || !name) { - return unevaledValue; - } - if (isFunction) { - return rename(unevaledValue, oldName, name); - } - return getDynamicStringSegments(unevaledValue) - .map(function (segment) { - if (!isDynamicSegment(segment)) { - return segment; - } - return rename(segment, oldName, name); - }) - .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) { - 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); - matched = true; - } - for (var _i = 0, accessors_1 = accessors; _i < accessors_1.length; _i++) { - var accessor = accessors_1[_i]; - if (s.startsWith(origin + accessor)) { - matched = true; - target = target + accessor + s.substring(origin.length + accessor.length); - break; - } - } - if (matched) { - return target; - } - return s; - }); - } - return ret; -} -function getIdentifiers(jsSnippet) { - var ret = []; - var commonReg = /[a-zA-Z_$][a-zA-Z_$0-9.[\]]*/g; - var commonIds = jsSnippet.match(commonReg); - if (commonIds) { - ret.push.apply(ret, 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))); - }); - ret.push.apply(ret, 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); - if (depend) { - addDepend(depends, depend[0], [depend[1]]); - } - }); - return depends; -} -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]; - if (!nodes.hasOwnProperty(subPath) || !subNode) { - break; - } - node = subNode; - path.push(subPath); - if (!nodeIsRecord(node)) { - break; - } - nodes = node.children; - } - return node ? [node, path.join(".")] : undefined; -} - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -var loglevelExports = {}; -var loglevel = { - get exports(){ return loglevelExports; }, - set exports(v){ loglevelExports = v; }, -}; - -/* -* loglevel - https://github.com/pimterry/loglevel -* -* Copyright (c) 2013 Tim Perry -* Licensed under the MIT license. -*/ - -(function (module) { - (function (root, definition) { - if (module.exports) { - module.exports = definition(); - } else { - root.log = definition(); - } - }(commonjsGlobal, function () { - - // Slightly dubious tricks to cut down minimized file size - var noop = function() {}; - var undefinedType = "undefined"; - var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && ( - /Trident\/|MSIE /.test(window.navigator.userAgent) - ); - - var logMethods = [ - "trace", - "debug", - "info", - "warn", - "error" - ]; - - var _loggersByName = {}; - var defaultLogger = null; - - // Cross-browser bind equivalent that works at least back to IE6 - function bindMethod(obj, methodName) { - var method = obj[methodName]; - if (typeof method.bind === 'function') { - return method.bind(obj); - } else { - try { - return Function.prototype.bind.call(method, obj); - } catch (e) { - // Missing bind shim or IE8 + Modernizr, fallback to wrapping - return function() { - return Function.prototype.apply.apply(method, [obj, arguments]); - }; - } - } - } - - // Trace() doesn't print the message in IE, so for that case we need to wrap it - function traceForIE() { - if (console.log) { - if (console.log.apply) { - console.log.apply(console, arguments); - } else { - // In old IE, native console methods themselves don't have apply(). - Function.prototype.apply.apply(console.log, [console, arguments]); - } - } - if (console.trace) console.trace(); - } - - // Build the best logging method possible for this env - // Wherever possible we want to bind, not wrap, to preserve stack traces - function realMethod(methodName) { - if (methodName === 'debug') { - methodName = 'log'; - } - - if (typeof console === undefinedType) { - return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives - } else if (methodName === 'trace' && isIE) { - return traceForIE; - } else if (console[methodName] !== undefined) { - return bindMethod(console, methodName); - } else if (console.log !== undefined) { - return bindMethod(console, 'log'); - } else { - return noop; - } - } - - // These private functions always need `this` to be set properly - - function replaceLoggingMethods() { - /*jshint validthis:true */ - var level = this.getLevel(); - - // Replace the actual methods. - for (var i = 0; i < logMethods.length; i++) { - var methodName = logMethods[i]; - this[methodName] = (i < level) ? - noop : - this.methodFactory(methodName, level, this.name); - } - - // Define log.log as an alias for log.debug - this.log = this.debug; - - // Return any important warnings. - if (typeof console === undefinedType && level < this.levels.SILENT) { - return "No console available for logging"; - } - } - - // In old IE versions, the console isn't present until you first open it. - // We build realMethod() replacements here that regenerate logging methods - function enableLoggingWhenConsoleArrives(methodName) { - return function () { - if (typeof console !== undefinedType) { - replaceLoggingMethods.call(this); - this[methodName].apply(this, arguments); - } - }; - } - - // By default, we use closely bound real methods wherever possible, and - // otherwise we wait for a console to appear, and then try again. - function defaultMethodFactory(methodName, _level, _loggerName) { - /*jshint validthis:true */ - return realMethod(methodName) || - enableLoggingWhenConsoleArrives.apply(this, arguments); - } - - function Logger(name, factory) { - // Private instance variables. - var self = this; - /** - * The level inherited from a parent logger (or a global default). We - * cache this here rather than delegating to the parent so that it stays - * in sync with the actual logging methods that we have installed (the - * parent could change levels but we might not have rebuilt the loggers - * in this child yet). - * @type {number} - */ - var inheritedLevel; - /** - * The default level for this logger, if any. If set, this overrides - * `inheritedLevel`. - * @type {number|null} - */ - var defaultLevel; - /** - * A user-specific level for this logger. If set, this overrides - * `defaultLevel`. - * @type {number|null} - */ - var userLevel; - - var storageKey = "loglevel"; - if (typeof name === "string") { - storageKey += ":" + name; - } else if (typeof name === "symbol") { - storageKey = undefined; - } - - function persistLevelIfPossible(levelNum) { - var levelName = (logMethods[levelNum] || 'silent').toUpperCase(); - - if (typeof window === undefinedType || !storageKey) return; - - // Use localStorage if available - try { - window.localStorage[storageKey] = levelName; - return; - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=" + levelName + ";"; - } catch (ignore) {} - } - - function getPersistedLevel() { - var storedLevel; - - if (typeof window === undefinedType || !storageKey) return; - - try { - storedLevel = window.localStorage[storageKey]; - } catch (ignore) {} - - // Fallback to cookies if local storage gives us nothing - if (typeof storedLevel === undefinedType) { - try { - var cookie = window.document.cookie; - var cookieName = encodeURIComponent(storageKey); - var location = cookie.indexOf(cookieName + "="); - if (location !== -1) { - storedLevel = /^([^;]+)/.exec( - cookie.slice(location + cookieName.length + 1) - )[1]; - } - } catch (ignore) {} - } - - // If the stored level is not valid, treat it as if nothing was stored. - if (self.levels[storedLevel] === undefined) { - storedLevel = undefined; - } - - return storedLevel; - } - - function clearPersistedLevel() { - if (typeof window === undefinedType || !storageKey) return; - - // Use localStorage if available - try { - window.localStorage.removeItem(storageKey); - } catch (ignore) {} - - // Use session cookie as fallback - try { - window.document.cookie = - encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC"; - } catch (ignore) {} - } - - function normalizeLevel(input) { - var level = input; - if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) { - level = self.levels[level.toUpperCase()]; - } - if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { - return level; - } else { - throw new TypeError("log.setLevel() called with invalid level: " + input); - } - } - - /* - * - * Public logger API - see https://github.com/pimterry/loglevel for details - * - */ - - self.name = name; - - self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, - "ERROR": 4, "SILENT": 5}; - - self.methodFactory = factory || defaultMethodFactory; - - self.getLevel = function () { - if (userLevel != null) { - return userLevel; - } else if (defaultLevel != null) { - return defaultLevel; - } else { - return inheritedLevel; - } - }; - - self.setLevel = function (level, persist) { - userLevel = normalizeLevel(level); - if (persist !== false) { // defaults to true - persistLevelIfPossible(userLevel); - } - - // NOTE: in v2, this should call rebuild(), which updates children. - return replaceLoggingMethods.call(self); - }; - - self.setDefaultLevel = function (level) { - defaultLevel = normalizeLevel(level); - if (!getPersistedLevel()) { - self.setLevel(level, false); - } - }; - - self.resetLevel = function () { - userLevel = null; - clearPersistedLevel(); - replaceLoggingMethods.call(self); - }; - - self.enableAll = function(persist) { - self.setLevel(self.levels.TRACE, persist); - }; - - self.disableAll = function(persist) { - self.setLevel(self.levels.SILENT, persist); - }; - - self.rebuild = function () { - if (defaultLogger !== self) { - inheritedLevel = normalizeLevel(defaultLogger.getLevel()); - } - replaceLoggingMethods.call(self); - - if (defaultLogger === self) { - for (var childName in _loggersByName) { - _loggersByName[childName].rebuild(); - } - } - }; - - // Initialize all the internal levels. - inheritedLevel = normalizeLevel( - defaultLogger ? defaultLogger.getLevel() : "WARN" - ); - var initialLevel = getPersistedLevel(); - if (initialLevel != null) { - userLevel = normalizeLevel(initialLevel); - } - replaceLoggingMethods.call(self); - } - - /* - * - * Top-level API - * - */ - - defaultLogger = new Logger(); - - defaultLogger.getLogger = function getLogger(name) { - if ((typeof name !== "symbol" && typeof name !== "string") || name === "") { - throw new TypeError("You must supply a name when creating a logger."); - } - - var logger = _loggersByName[name]; - if (!logger) { - logger = _loggersByName[name] = new Logger( - name, - defaultLogger.methodFactory - ); - } - return logger; - }; - - // Grab the current global log variable in case of overwrite - var _log = (typeof window !== undefinedType) ? window.log : undefined; - defaultLogger.noConflict = function() { - if (typeof window !== undefinedType && - window.log === defaultLogger) { - window.log = _log; - } - - return defaultLogger; - }; - - defaultLogger.getLoggers = function getLoggers() { - return _loggersByName; - }; - - // ES6 default export, for compatibility - defaultLogger['default'] = defaultLogger; - - return defaultLogger; - })); -} (loglevel)); - -var log = loglevelExports; - -// global variables black list, forbidden to use in for jsQuery/jsAction -var functionBlacklist = new Set([ - "top", - "parent", - "document", - "location", - "chrome", - "fetch", - "XMLHttpRequest", - "importScripts", - "Navigator", - "MutationObserver", -]); -var expressionBlacklist = new Set(__spreadArray(__spreadArray([], Array.from(functionBlacklist.values()), true), [ - "setTimeout", - "setInterval", - "setImmediate", -], false)); -var globalVarNames = new Set(["window", "globalThis", "self", "global"]); -function createBlackHole() { - return new Proxy(function () { - return createBlackHole(); - }, { - get: function (t, p, r) { - if (p === "toString") { - return function () { - return ""; - }; - } - if (p === Symbol.toPrimitive) { - return function () { - return ""; - }; - } - log.log("[Sandbox] access ".concat(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 () { - return true; - }, - set: function (target, p, newValue) { - if (typeof p === "string") { - onSet === null || onSet === void 0 ? void 0 : onSet(p); - } - return Reflect.set(target, p, newValue); - }, - get: function (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")); - return createBlackHole(); - } - return getPropertyFromNativeWindow(p); - }, - }); - return win; -} -var mockWindow; -var currentDisableLimit = false; -function clearMockWindow() { - mockWindow = createMockWindow(); -} -function isDomElement(obj) { - return obj instanceof Element || obj instanceof HTMLCollection; -} -function getPropertyFromNativeWindow(prop) { - var ret = Reflect.get(window, prop); - if (typeof ret === "function" && !ret.prototype) { - return ret.bind(window); - } - // get DOM element by id, serializing may cause error - if (isDomElement(ret)) { - return undefined; - } - 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) { - return key in context || key in (methods || {}) || globalVarNames.has(key); - }; - var cache = {}; - var 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) { - // proxy all variables - return true; - }, - get: function (target, p, receiver) { - if (p === Symbol.unscopables) { - return undefined; - } - if (p === "toJSON") { - return target; - } - if (globalVarNames.has(p)) { - return target; - } - if (p in context) { - if (p in cache) { - return Reflect.get(cache, p); - } - var 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)); - } - Object.freeze(value); - Object.values(value).forEach(Object.freeze); - } - Reflect.set(cache, p, value); - return value; - } - if (disableLimit) { - return getPropertyFromNativeWindow(p); - } - return Reflect.get(target, p, receiver); - }, - set: function (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) { - if (isProtectedVar(p)) { - throw new Error("can't define property:" + p.toString()); - } - return Reflect.defineProperty(target, p, attributes); - }, - deleteProperty: function (target, p) { - if (isProtectedVar(p)) { - throw new Error("can't delete property:" + p.toString()); - } - return Reflect.deleteProperty(target, p); - }, - setPrototypeOf: function (target, v) { - throw new Error("can't invoke setPrototypeOf"); - }, - }); -} -function evalScript(script, context, methods) { - return evalFunc("return (".concat(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 }"); - // eslint-disable-next-line no-new-func - var vm = new Function(code); - var sandbox = proxySandbox(context, methods, options); - var result = vm.call(sandbox); - return result; -} - -var srcExports = {}; -var src = { - get exports(){ return srcExports; }, - set exports(v){ srcExports = v; }, -}; - -var umd_bundleExports = {}; -var umd_bundle = { - get exports(){ return umd_bundleExports; }, - set exports(v){ umd_bundleExports = v; }, -}; - -/* - * The MIT License (MIT) - * - * Copyright (c) 2018-2022 TwelveTone LLC - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -(function (module, exports) { - !function(t,e){module.exports=e();}(commonjsGlobal,(()=>{return t={421:function(t,e){var n,r;n=function(t){var e=t;t.isBooleanArray=function(t){return (Array.isArray(t)||t instanceof Int8Array)&&"BooleanArray"===t.$type$},t.isByteArray=function(t){return t instanceof Int8Array&&"BooleanArray"!==t.$type$},t.isShortArray=function(t){return t instanceof Int16Array},t.isCharArray=function(t){return t instanceof Uint16Array&&"CharArray"===t.$type$},t.isIntArray=function(t){return t instanceof Int32Array},t.isFloatArray=function(t){return t instanceof Float32Array},t.isDoubleArray=function(t){return t instanceof Float64Array},t.isLongArray=function(t){return Array.isArray(t)&&"LongArray"===t.$type$},t.isArray=function(t){return Array.isArray(t)&&!t.$type$},t.isArrayish=function(t){return Array.isArray(t)||ArrayBuffer.isView(t)},t.arrayToString=function(e){if(null===e)return "null";var n=t.isCharArray(e)?String.fromCharCode:t.toString;return "["+Array.prototype.map.call(e,(function(t){return n(t)})).join(", ")+"]"},t.toByte=function(t){return (255&t)<<24>>24},t.toChar=function(t){return 65535&t},t.toBoxedChar=function(e){return null==e||e instanceof t.BoxedChar?e:new t.BoxedChar(e)},t.unboxChar=function(e){return null==e?e:t.toChar(e)},t.equals=function(t,e){return null==t?null==e:null!=e&&(t!=t?e!=e:"object"==typeof t&&"function"==typeof t.equals?t.equals(e):"number"==typeof t&&"number"==typeof e?t===e&&(0!==t||1/t==1/e):t===e)},t.hashCode=function(e){if(null==e)return 0;var n=typeof e;return "object"===n?"function"==typeof e.hashCode?e.hashCode():c(e):"function"===n?c(e):"number"===n?t.numberHashCode(e):"boolean"===n?Number(e):function(t){for(var e=0,n=0;n=t.Long.TWO_PWR_63_DBL_?t.Long.MAX_VALUE:e<0?t.Long.fromNumber(-e).negate():new t.Long(e%t.Long.TWO_PWR_32_DBL_|0,e/t.Long.TWO_PWR_32_DBL_|0)},t.Long.fromBits=function(e,n){return new t.Long(e,n)},t.Long.fromString=function(e,n){if(0==e.length)throw Error("number format error: empty string");var r=n||10;if(r<2||36=0)throw Error('number format error: interior "-" character: '+e);for(var i=t.Long.fromNumber(Math.pow(r,8)),o=t.Long.ZERO,a=0;a=0?this.low_:t.Long.TWO_PWR_32_DBL_+this.low_},t.Long.prototype.getNumBitsAbs=function(){if(this.isNegative())return this.equalsLong(t.Long.MIN_VALUE)?64:this.negate().getNumBitsAbs();for(var e=0!=this.high_?this.high_:this.low_,n=31;n>0&&0==(e&1<0},t.Long.prototype.greaterThanOrEqual=function(t){return this.compare(t)>=0},t.Long.prototype.compare=function(t){if(this.equalsLong(t))return 0;var e=this.isNegative(),n=t.isNegative();return e&&!n?-1:!e&&n?1:this.subtract(t).isNegative()?-1:1},t.Long.prototype.negate=function(){return this.equalsLong(t.Long.MIN_VALUE)?t.Long.MIN_VALUE:this.not().add(t.Long.ONE)},t.Long.prototype.add=function(e){var n=this.high_>>>16,r=65535&this.high_,i=this.low_>>>16,o=65535&this.low_,a=e.high_>>>16,s=65535&e.high_,u=e.low_>>>16,p=0,c=0,l=0,h=0;return l+=(h+=o+(65535&e.low_))>>>16,h&=65535,c+=(l+=i+u)>>>16,l&=65535,p+=(c+=r+s)>>>16,c&=65535,p+=n+a,p&=65535,t.Long.fromBits(l<<16|h,p<<16|c)},t.Long.prototype.subtract=function(t){return this.add(t.negate())},t.Long.prototype.multiply=function(e){if(this.isZero())return t.Long.ZERO;if(e.isZero())return t.Long.ZERO;if(this.equalsLong(t.Long.MIN_VALUE))return e.isOdd()?t.Long.MIN_VALUE:t.Long.ZERO;if(e.equalsLong(t.Long.MIN_VALUE))return this.isOdd()?t.Long.MIN_VALUE:t.Long.ZERO;if(this.isNegative())return e.isNegative()?this.negate().multiply(e.negate()):this.negate().multiply(e).negate();if(e.isNegative())return this.multiply(e.negate()).negate();if(this.lessThan(t.Long.TWO_PWR_24_)&&e.lessThan(t.Long.TWO_PWR_24_))return t.Long.fromNumber(this.toNumber()*e.toNumber());var n=this.high_>>>16,r=65535&this.high_,i=this.low_>>>16,o=65535&this.low_,a=e.high_>>>16,s=65535&e.high_,u=e.low_>>>16,p=65535&e.low_,c=0,l=0,h=0,f=0;return h+=(f+=o*p)>>>16,f&=65535,l+=(h+=i*p)>>>16,h&=65535,l+=(h+=o*u)>>>16,h&=65535,c+=(l+=r*p)>>>16,l&=65535,c+=(l+=i*u)>>>16,l&=65535,c+=(l+=o*s)>>>16,l&=65535,c+=n*p+r*u+i*s+o*a,c&=65535,t.Long.fromBits(h<<16|f,c<<16|l)},t.Long.prototype.div=function(e){if(e.isZero())throw Error("division by zero");if(this.isZero())return t.Long.ZERO;if(this.equalsLong(t.Long.MIN_VALUE)){if(e.equalsLong(t.Long.ONE)||e.equalsLong(t.Long.NEG_ONE))return t.Long.MIN_VALUE;if(e.equalsLong(t.Long.MIN_VALUE))return t.Long.ONE;if((i=this.shiftRight(1).div(e).shiftLeft(1)).equalsLong(t.Long.ZERO))return e.isNegative()?t.Long.ONE:t.Long.NEG_ONE;var n=this.subtract(e.multiply(i));return i.add(n.div(e))}if(e.equalsLong(t.Long.MIN_VALUE))return t.Long.ZERO;if(this.isNegative())return e.isNegative()?this.negate().div(e.negate()):this.negate().div(e).negate();if(e.isNegative())return this.div(e.negate()).negate();var r=t.Long.ZERO;for(n=this;n.greaterThanOrEqual(e);){for(var i=Math.max(1,Math.floor(n.toNumber()/e.toNumber())),o=Math.ceil(Math.log(i)/Math.LN2),a=o<=48?1:Math.pow(2,o-48),s=t.Long.fromNumber(i),u=s.multiply(e);u.isNegative()||u.greaterThan(n);)i-=a,u=(s=t.Long.fromNumber(i)).multiply(e);s.isZero()&&(s=t.Long.ONE),r=r.add(s),n=n.subtract(u);}return r},t.Long.prototype.modulo=function(t){return this.subtract(this.div(t).multiply(t))},t.Long.prototype.not=function(){return t.Long.fromBits(~this.low_,~this.high_)},t.Long.prototype.and=function(e){return t.Long.fromBits(this.low_&e.low_,this.high_&e.high_)},t.Long.prototype.or=function(e){return t.Long.fromBits(this.low_|e.low_,this.high_|e.high_)},t.Long.prototype.xor=function(e){return t.Long.fromBits(this.low_^e.low_,this.high_^e.high_)},t.Long.prototype.shiftLeft=function(e){if(0==(e&=63))return this;var n=this.low_;if(e<32){var r=this.high_;return t.Long.fromBits(n<>>32-e)}return t.Long.fromBits(0,n<>>e|n<<32-e,n>>e)}return t.Long.fromBits(n>>e-32,n>=0?0:-1)},t.Long.prototype.shiftRightUnsigned=function(e){if(0==(e&=63))return this;var n=this.high_;if(e<32){var r=this.low_;return t.Long.fromBits(r>>>e|n<<32-e,n>>>e)}return 32==e?t.Long.fromBits(n,0):t.Long.fromBits(n>>>e-32,0)},t.Long.prototype.equals=function(e){return e instanceof t.Long&&this.equalsLong(e)},t.Long.prototype.compareTo_11rb$=t.Long.prototype.compare,t.Long.prototype.inc=function(){return this.add(t.Long.ONE)},t.Long.prototype.dec=function(){return this.add(t.Long.NEG_ONE)},t.Long.prototype.valueOf=function(){return this.toNumber()},t.Long.prototype.unaryPlus=function(){return this},t.Long.prototype.unaryMinus=t.Long.prototype.negate,t.Long.prototype.inv=t.Long.prototype.not,t.Long.prototype.rangeTo=function(e){return new t.kotlin.ranges.LongRange(this,e)},t.defineInlineFunction=function(t,e){return e},t.wrapFunction=function(t){var e=function(){return (e=t()).apply(this,arguments)};return function(){return e.apply(this,arguments)}},t.suspendCall=function(t){return t},t.coroutineResult=function(t){l();},t.coroutineReceiver=function(t){l();},t.compareTo=function(e,n){var r=typeof e;return "number"===r?"number"==typeof n?t.doubleCompareTo(e,n):t.primitiveCompareTo(e,n):"string"===r||"boolean"===r?t.primitiveCompareTo(e,n):e.compareTo_11rb$(n)},t.primitiveCompareTo=function(t,e){return te?1:0},t.doubleCompareTo=function(t,e){if(te)return 1;if(t===e){if(0!==t)return 0;var n=1/t;return n===1/e?0:n<0?-1:1}return t!=t?e!=e?0:1:-1},t.imul=Math.imul||h,t.imulEmulated=h,n=new ArrayBuffer(8),r=new Float64Array(n),i=new Int32Array(n),o=0,a=1,r[0]=-1,0!==i[o]&&(o=1,a=0),t.numberHashCode=function(t){return (0|t)===t?0|t:(r[0]=t,(31*i[a]|0)+i[o]|0)},t.ensureNotNull=function(e){return null!=e?e:t.throwNPE()},void 0===String.prototype.startsWith&&Object.defineProperty(String.prototype,"startsWith",{value:function(t,e){return e=e||0,this.lastIndexOf(t,e)===e}}),void 0===String.prototype.endsWith&&Object.defineProperty(String.prototype,"endsWith",{value:function(t,e){var n=this.toString();(void 0===e||e>n.length)&&(e=n.length),e-=t.length;var r=n.indexOf(t,e);return -1!==r&&r===e}}),void 0===Math.sign&&(Math.sign=function(t){return 0==(t=+t)||isNaN(t)?Number(t):t>0?1:-1}),void 0===Math.trunc&&(Math.trunc=function(t){return isNaN(t)?NaN:t>0?Math.floor(t):Math.ceil(t)}),function(){var t=Math.sqrt(2220446049250313e-31),e=Math.sqrt(t),n=1/t,r=1/e;if(void 0===Math.sinh&&(Math.sinh=function(n){if(Math.abs(n)t&&(r+=n*n*n/6),r}var i=Math.exp(n),o=1/i;return isFinite(i)?isFinite(o)?(i-o)/2:-Math.exp(-n-Math.LN2):Math.exp(n-Math.LN2)}),void 0===Math.cosh&&(Math.cosh=function(t){var e=Math.exp(t),n=1/e;return isFinite(e)&&isFinite(n)?(e+n)/2:Math.exp(Math.abs(t)-Math.LN2)}),void 0===Math.tanh&&(Math.tanh=function(n){if(Math.abs(n)t&&(r-=n*n*n/3),r}var i=Math.exp(+n),o=Math.exp(-n);return i===1/0?1:o===1/0?-1:(i-o)/(i+o)}),void 0===Math.asinh){var i=function(o){if(o>=+e)return o>r?o>n?Math.log(o)+Math.LN2:Math.log(2*o+1/(2*o)):Math.log(o+Math.sqrt(o*o+1));if(o<=-e)return -i(-o);var a=o;return Math.abs(o)>=t&&(a-=o*o*o/6),a};Math.asinh=i;}void 0===Math.acosh&&(Math.acosh=function(r){if(r<1)return NaN;if(r-1>=e)return r>n?Math.log(r)+Math.LN2:Math.log(r+Math.sqrt(r*r-1));var i=Math.sqrt(r-1),o=i;return i>=t&&(o-=i*i*i/12),Math.sqrt(2)*o}),void 0===Math.atanh&&(Math.atanh=function(n){if(Math.abs(n)t&&(r+=n*n*n/3),r}return Math.log((1+n)/(1-n))/2}),void 0===Math.log1p&&(Math.log1p=function(t){if(Math.abs(t)>>0;return 0===e?32:31-(s(e)/u|0)|0})),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===Array.prototype.fill&&Object.defineProperty(Array.prototype,"fill",{value:function(t){if(null==this)throw new TypeError("this is null or not defined");for(var e=Object(this),n=e.length>>>0,r=arguments[1]>>0,i=r<0?Math.max(n+r,0):Math.min(r,n),o=arguments[2],a=void 0===o?n:o>>0,s=a<0?Math.max(n+a,0):Math.min(a,n);ie)return 1;if(t===e){if(0!==t)return 0;var n=1/t;return n===1/e?0:n<0?-1:1}return t!=t?e!=e?0:1:-1};for(r=0;r=0}function E(t,e){if(null==e){for(var n=0;n!==t.length;++n)if(null==t[n])return n}else for(var r=0;r!==t.length;++r)if(o(e,t[r]))return r;return -1}function A(t,e){for(var n=0;n!==t.length;++n)if(e===t[n])return n;return -1}function z(t,e){var n,r;if(null==e)for(n=Z(L(t)).iterator();n.hasNext();){var i=n.next();if(null==t[i])return i}else for(r=Z(L(t)).iterator();r.hasNext();){var a=r.next();if(o(e,t[a]))return a}return -1}function j(t){var e;switch(t.length){case 0:throw new Ft("Array is empty.");case 1:e=t[0];break;default:throw zt("Array has more than one element.")}return e}function L(t){return new mo(0,T(t))}function T(t){return t.length-1|0}function M(t,e){var n;for(n=0;n!==t.length;++n){var r=t[n];e.add_11rb$(r);}return e}function R(t){var e;switch(t.length){case 0:e=Ei();break;case 1:e=ee(t[0]);break;default:e=M(t,Ke(t.length));}return e}function P(t){this.closure$iterator=t;}function q(e,n){return t.isType(e,nt)?e.contains_11rb$(n):B(e,n)>=0}function B(e,n){var r;if(t.isType(e,it))return e.indexOf_11rb$(n);var i=0;for(r=e.iterator();r.hasNext();){var a=r.next();if(re(i),o(n,a))return i;i=i+1|0;}return -1}function U(t,e){var n;for(n=t.iterator();n.hasNext();){var r=n.next();e.add_11rb$(r);}return e}function F(e){var n;if(t.isType(e,nt)){switch(e.size){case 0:n=Ei();break;case 1:n=ee(t.isType(e,it)?e.get_za3lpa$(0):e.iterator().next());break;default:n=U(e,Ke(e.size));}return n}return zi(U(e,Ve()))}function D(t,e,n,r,i,o,a,s){var u;void 0===n&&(n=", "),void 0===r&&(r=""),void 0===i&&(i=""),void 0===o&&(o=-1),void 0===a&&(a="..."),void 0===s&&(s=null),e.append_gw00v9$(r);var p=0;for(u=t.iterator();u.hasNext();){var c=u.next();if((p=p+1|0)>1&&e.append_gw00v9$(n),!(o<0||p<=o))break;Wo(e,c,s);}return o>=0&&p>o&&e.append_gw00v9$(a),e.append_gw00v9$(i),e}function V(t,e,n,r,i,o,a){return void 0===e&&(e=", "),void 0===n&&(n=""),void 0===r&&(r=""),void 0===i&&(i=-1),void 0===o&&(o="..."),void 0===a&&(a=null),D(t,Jn(),e,n,r,i,o,a).toString()}function W(t){return new P((e=t,function(){return e.iterator()}));var e;}function K(t,e){return To().fromClosedRange_qt1dr2$(t,e,-1)}function Z(t){return To().fromClosedRange_qt1dr2$(t.last,t.first,0|-t.step)}function H(t,e){return te?e:t}function G(e,n){if(!(n>=0))throw zt(("Requested element count "+n+" is less than zero.").toString());return 0===n?li():t.isType(e,gi)?e.take_za3lpa$(n):new xi(e,n)}function Q(t,e){return new yi(t,e)}function Y(){}function X(){}function tt(){}function et(){}function nt(){}function rt(){}function it(){}function ot(){}function at(){}function st(){}function ut(){}function pt(){}function ct(){}function lt(){}function ht(){}function ft(){}function _t(){}function yt(){}function dt(){mt=this;}new t.Long(1,-2147483648),new t.Long(1908874354,-59652324),new t.Long(1,-1073741824),new t.Long(1108857478,-1074),t.Long.fromInt(-2147483647),new t.Long(2077252342,2147),new t.Long(-2077252342,-2148),new t.Long(1316134911,2328),new t.Long(387905,-1073741824),new t.Long(-387905,1073741823),new t.Long(-1,1073741823),new t.Long(-1108857478,1073),t.Long.fromInt(2047),St.prototype=Object.create(x.prototype),St.prototype.constructor=St,It.prototype=Object.create(St.prototype),It.prototype.constructor=It,Ot.prototype=Object.create(x.prototype),Ot.prototype.constructor=Ot,At.prototype=Object.create(It.prototype),At.prototype.constructor=At,jt.prototype=Object.create(It.prototype),jt.prototype.constructor=jt,Tt.prototype=Object.create(It.prototype),Tt.prototype.constructor=Tt,Mt.prototype=Object.create(It.prototype),Mt.prototype.constructor=Mt,qt.prototype=Object.create(At.prototype),qt.prototype.constructor=qt,Bt.prototype=Object.create(It.prototype),Bt.prototype.constructor=Bt,Ut.prototype=Object.create(It.prototype),Ut.prototype.constructor=Ut,Ft.prototype=Object.create(It.prototype),Ft.prototype.constructor=Ft,Vt.prototype=Object.create(It.prototype),Vt.prototype.constructor=Vt,Cr.prototype=Object.create(kr.prototype),Cr.prototype.constructor=Cr,oe.prototype=Object.create(kr.prototype),oe.prototype.constructor=oe,ue.prototype=Object.create(se.prototype),ue.prototype.constructor=ue,ae.prototype=Object.create(oe.prototype),ae.prototype.constructor=ae,pe.prototype=Object.create(ae.prototype),pe.prototype.constructor=pe,me.prototype=Object.create(oe.prototype),me.prototype.constructor=me,he.prototype=Object.create(me.prototype),he.prototype.constructor=he,fe.prototype=Object.create(me.prototype),fe.prototype.constructor=fe,ye.prototype=Object.create(oe.prototype),ye.prototype.constructor=ye,ce.prototype=Object.create(zr.prototype),ce.prototype.constructor=ce,$e.prototype=Object.create(ae.prototype),$e.prototype.constructor=$e,Ce.prototype=Object.create(he.prototype),Ce.prototype.constructor=Ce,ke.prototype=Object.create(ce.prototype),ke.prototype.constructor=ke,Ie.prototype=Object.create(me.prototype),Ie.prototype.constructor=Ie,Pe.prototype=Object.create(le.prototype),Pe.prototype.constructor=Pe,qe.prototype=Object.create(he.prototype),qe.prototype.constructor=qe,Re.prototype=Object.create(ke.prototype),Re.prototype.constructor=Re,De.prototype=Object.create(Ie.prototype),De.prototype.constructor=De,Je.prototype=Object.create(He.prototype),Je.prototype.constructor=Je,Ge.prototype=Object.create(He.prototype),Ge.prototype.constructor=Ge,Qe.prototype=Object.create(Ge.prototype),Qe.prototype.constructor=Qe,sn.prototype=Object.create(an.prototype),sn.prototype.constructor=sn,un.prototype=Object.create(an.prototype),un.prototype.constructor=un,pn.prototype=Object.create(an.prototype),pn.prototype.constructor=pn,_r.prototype=Object.create(Cr.prototype),_r.prototype.constructor=_r,yr.prototype=Object.create(kr.prototype),yr.prototype.constructor=yr,Or.prototype=Object.create(Cr.prototype),Or.prototype.constructor=Or,Sr.prototype=Object.create(Nr.prototype),Sr.prototype.constructor=Sr,Br.prototype=Object.create(kr.prototype),Br.prototype.constructor=Br,jr.prototype=Object.create(Br.prototype),jr.prototype.constructor=jr,Tr.prototype=Object.create(kr.prototype),Tr.prototype.constructor=Tr,ci.prototype=Object.create(pi.prototype),ci.prototype.constructor=ci,eo.prototype=Object.create($.prototype),eo.prototype.constructor=eo,ho.prototype=Object.create(So.prototype),ho.prototype.constructor=ho,mo.prototype=Object.create(zo.prototype),mo.prototype.constructor=mo,bo.prototype=Object.create(Mo.prototype),bo.prototype.constructor=bo,Co.prototype=Object.create(ni.prototype),Co.prototype.constructor=Co,Oo.prototype=Object.create(ri.prototype),Oo.prototype.constructor=Oo,No.prototype=Object.create(ii.prototype),No.prototype.constructor=No,Yo.prototype=Object.create(ni.prototype),Yo.prototype.constructor=Yo,Ca.prototype=Object.create(Ot.prototype),Ca.prototype.constructor=Ca,P.prototype.iterator=function(){return this.closure$iterator()},P.$metadata$={kind:n,interfaces:[oi]},Y.$metadata$={kind:d,simpleName:"Annotation",interfaces:[]},X.$metadata$={kind:d,simpleName:"CharSequence",interfaces:[]},tt.$metadata$={kind:d,simpleName:"Iterable",interfaces:[]},et.$metadata$={kind:d,simpleName:"MutableIterable",interfaces:[tt]},nt.$metadata$={kind:d,simpleName:"Collection",interfaces:[tt]},rt.$metadata$={kind:d,simpleName:"MutableCollection",interfaces:[et,nt]},it.$metadata$={kind:d,simpleName:"List",interfaces:[nt]},ot.$metadata$={kind:d,simpleName:"MutableList",interfaces:[rt,it]},at.$metadata$={kind:d,simpleName:"Set",interfaces:[nt]},st.$metadata$={kind:d,simpleName:"MutableSet",interfaces:[rt,at]},ut.prototype.getOrDefault_xwzc9p$=function(t,e){throw new Ca},pt.$metadata$={kind:d,simpleName:"Entry",interfaces:[]},ut.$metadata$={kind:d,simpleName:"Map",interfaces:[]},ct.prototype.remove_xwzc9p$=function(t,e){return !0},lt.$metadata$={kind:d,simpleName:"MutableEntry",interfaces:[pt]},ct.$metadata$={kind:d,simpleName:"MutableMap",interfaces:[ut]},ht.$metadata$={kind:d,simpleName:"Iterator",interfaces:[]},ft.$metadata$={kind:d,simpleName:"MutableIterator",interfaces:[ht]},_t.$metadata$={kind:d,simpleName:"ListIterator",interfaces:[ht]},yt.$metadata$={kind:d,simpleName:"MutableListIterator",interfaces:[ft,_t]},dt.prototype.toString=function(){return "kotlin.Unit"},dt.$metadata$={kind:m,simpleName:"Unit",interfaces:[]};var mt=null;function $t(){return null===mt&&new dt,mt}function gt(t){this.c=t;}function vt(t){this.resultContinuation_0=t,this.state_0=0,this.exceptionState_0=0,this.result_0=null,this.exception_0=null,this.finallyPath_0=null,this.context_hxcuhl$_0=this.resultContinuation_0.context,this.intercepted__0=null;}function bt(){xt=this;}gt.prototype.equals=function(e){return t.isType(e,gt)&&this.c===e.c},gt.prototype.hashCode=function(){return this.c},gt.prototype.toString=function(){return String.fromCharCode(s(this.c))},gt.prototype.compareTo_11rb$=function(t){return this.c-t},gt.prototype.valueOf=function(){return this.c},gt.$metadata$={kind:n,simpleName:"BoxedChar",interfaces:[g]},Object.defineProperty(vt.prototype,"context",{configurable:!0,get:function(){return this.context_hxcuhl$_0}}),vt.prototype.intercepted=function(){var t,e,n,r;if(null!=(n=this.intercepted__0))r=n;else {var i=null!=(e=null!=(t=this.context.get_j3r2sn$(Ri()))?t.interceptContinuation_wj8d80$(this):null)?e:this;this.intercepted__0=i,r=i;}return r},vt.prototype.resumeWith_tl1gpc$=function(e){for(var n,r={v:this},i={v:e.isFailure?null:null==(n=e.value)||t.isType(n,b)?n:y()},o={v:e.exceptionOrNull()};;){var a,s,u=r.v,p=u.resultContinuation_0;null==o.v?u.result_0=i.v:(u.state_0=u.exceptionState_0,u.exception_0=o.v);try{var c=u.doResume();if(c===to())return;i.v=c,o.v=null;}catch(t){i.v=null,o.v=t;}if(u.releaseIntercepted_0(),!t.isType(p,vt))return null!=(a=o.v)?(p.resumeWith_tl1gpc$(new $a(wa(a))),s=dt):s=null,void(null==s&&p.resumeWith_tl1gpc$(new $a(i.v)));r.v=p;}},vt.prototype.releaseIntercepted_0=function(){var t=this.intercepted__0;null!=t&&t!==this&&v(this.context.get_j3r2sn$(Ri())).releaseInterceptedContinuation_k98bjh$(t),this.intercepted__0=wt();},vt.$metadata$={kind:n,simpleName:"CoroutineImpl",interfaces:[ji]},Object.defineProperty(bt.prototype,"context",{configurable:!0,get:function(){throw Lt("This continuation is already complete".toString())}}),bt.prototype.resumeWith_tl1gpc$=function(t){throw Lt("This continuation is already complete".toString())},bt.prototype.toString=function(){return "This continuation is already complete"},bt.$metadata$={kind:m,simpleName:"CompletedContinuation",interfaces:[ji]};var xt=null;function wt(){return null===xt&&new bt,xt}function kt(t,e){this.closure$block=t,vt.call(this,e);}function Ct(e,n,r){return 3==e.length?e(n,r,!0):new kt((i=e,o=n,a=r,function(){return i(o,a)}),t.isType(s=r,ji)?s:tn());var i,o,a,s;}function Ot(e,n){var r;x.call(this),r=null!=n?n:null,this.message_q7r8iu$_0=void 0===e&&null!=r?t.toString(r):e,this.cause_us9j0c$_0=r,t.captureStack(x,this),this.name="Error";}function Nt(t,e){return e=e||Object.create(Ot.prototype),Ot.call(e,t,null),e}function St(e,n){var r;x.call(this),r=null!=n?n:null,this.message_8yp7un$_0=void 0===e&&null!=r?t.toString(r):e,this.cause_th0jdv$_0=r,t.captureStack(x,this),this.name="Exception";}function It(t,e){St.call(this,t,e),this.name="RuntimeException";}function Et(t,e){return e=e||Object.create(It.prototype),It.call(e,t,null),e}function At(t,e){It.call(this,t,e),this.name="IllegalArgumentException";}function zt(t,e){return e=e||Object.create(At.prototype),At.call(e,t,null),e}function jt(t,e){It.call(this,t,e),this.name="IllegalStateException";}function Lt(t,e){return e=e||Object.create(jt.prototype),jt.call(e,t,null),e}function Tt(t){Et(t,this),this.name="IndexOutOfBoundsException";}function Mt(t,e){It.call(this,t,e),this.name="UnsupportedOperationException";}function Rt(t){return t=t||Object.create(Mt.prototype),Mt.call(t,null,null),t}function Pt(t,e){return e=e||Object.create(Mt.prototype),Mt.call(e,t,null),e}function qt(t){zt(t,this),this.name="NumberFormatException";}function Bt(t){Et(t,this),this.name="NullPointerException";}function Ut(t){Et(t,this),this.name="ClassCastException";}function Ft(t){Et(t,this),this.name="NoSuchElementException";}function Dt(t){return t=t||Object.create(Ft.prototype),Ft.call(t,null),t}function Vt(t){Et(t,this),this.name="ArithmeticException";}function Wt(t,e,n){return Ar().checkRangeIndexes_cub51b$(e,n,t.length),t.slice(e,n)}function Kt(){Zt=this,this.rangeStart_8be2vx$=new Int32Array([48,1632,1776,1984,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,42528,43216,43264,43472,43504,43600,44016,65296]);}kt.prototype=Object.create(vt.prototype),kt.prototype.constructor=kt,kt.prototype.doResume=function(){var t;if(null!=(t=this.exception_0))throw t;return this.closure$block()},kt.$metadata$={kind:n,interfaces:[vt]},Object.defineProperty(Ot.prototype,"message",{get:function(){return this.message_q7r8iu$_0}}),Object.defineProperty(Ot.prototype,"cause",{get:function(){return this.cause_us9j0c$_0}}),Ot.$metadata$={kind:n,simpleName:"Error",interfaces:[x]},Object.defineProperty(St.prototype,"message",{get:function(){return this.message_8yp7un$_0}}),Object.defineProperty(St.prototype,"cause",{get:function(){return this.cause_th0jdv$_0}}),St.$metadata$={kind:n,simpleName:"Exception",interfaces:[x]},It.$metadata$={kind:n,simpleName:"RuntimeException",interfaces:[St]},At.$metadata$={kind:n,simpleName:"IllegalArgumentException",interfaces:[It]},jt.$metadata$={kind:n,simpleName:"IllegalStateException",interfaces:[It]},Tt.$metadata$={kind:n,simpleName:"IndexOutOfBoundsException",interfaces:[It]},Mt.$metadata$={kind:n,simpleName:"UnsupportedOperationException",interfaces:[It]},qt.$metadata$={kind:n,simpleName:"NumberFormatException",interfaces:[At]},Bt.$metadata$={kind:n,simpleName:"NullPointerException",interfaces:[It]},Ut.$metadata$={kind:n,simpleName:"ClassCastException",interfaces:[It]},Ft.$metadata$={kind:n,simpleName:"NoSuchElementException",interfaces:[It]},Vt.$metadata$={kind:n,simpleName:"ArithmeticException",interfaces:[It]},Kt.$metadata$={kind:m,simpleName:"Digit",interfaces:[]};var Zt=null;function Ht(){return null===Zt&&new Kt,Zt}function Jt(t,e){for(var n=0,r=t.length-1|0,i=-1,o=0;n<=r;)if(e>(o=t[i=(n+r|0)/2|0]))n=i+1|0;else {if(e===o)return i;r=i-1|0;}return i-(e=0;u--)e[n+u|0]=t[r+u|0];}function re(t){return t<0&&Jr(),t}function ie(t){return t}function oe(){kr.call(this);}function ae(){oe.call(this),this.modCount=0;}function se(t){this.$outer=t,this.index_0=0,this.last_0=-1;}function ue(t,e){this.$outer=t,se.call(this,this.$outer),Ar().checkPositionIndex_6xvm5r$(e,this.$outer.size),this.index_0=e;}function pe(t,e,n){ae.call(this),this.list_0=t,this.fromIndex_0=e,this._size_0=0,Ar().checkRangeIndexes_cub51b$(this.fromIndex_0,n,this.list_0.size),this._size_0=n-this.fromIndex_0|0;}function ce(){zr.call(this),this._keys_qe2m0n$_0=null,this._values_kxdlqh$_0=null;}function le(t,e){this.key_5xhq3d$_0=t,this._value_0=e;}function he(){me.call(this);}function fe(t){this.this$AbstractMutableMap=t,me.call(this);}function _e(t){this.closure$entryIterator=t;}function ye(t){this.this$AbstractMutableMap=t,oe.call(this);}function de(t){this.closure$entryIterator=t;}function me(){oe.call(this);}function $e(t){ae.call(this),this.array_hd7ov6$_0=t,this.isReadOnly_dbt2oh$_0=!1;}function ge(t){return t=t||Object.create($e.prototype),$e.call(t,[]),t}function ve(){}function be(){xe=this;}Qt.prototype.compare=function(t,e){return this.function$(t,e)},Qt.$metadata$={kind:d,simpleName:"Comparator",interfaces:[]},oe.prototype.remove_11rb$=function(t){this.checkIsMutable();for(var e=this.iterator();e.hasNext();)if(o(e.next(),t))return e.remove(),!0;return !1},oe.prototype.addAll_brywnq$=function(t){var e;this.checkIsMutable();var n=!1;for(e=t.iterator();e.hasNext();){var r=e.next();this.add_11rb$(r)&&(n=!0);}return n},oe.prototype.removeAll_brywnq$=function(e){var n;return this.checkIsMutable(),Xr(t.isType(this,et)?this:tn(),(n=e,function(t){return n.contains_11rb$(t)}))},oe.prototype.retainAll_brywnq$=function(e){var n;return this.checkIsMutable(),Xr(t.isType(this,et)?this:tn(),(n=e,function(t){return !n.contains_11rb$(t)}))},oe.prototype.clear=function(){this.checkIsMutable();for(var t=this.iterator();t.hasNext();)t.next(),t.remove();},oe.prototype.toJSON=function(){return this.toArray()},oe.prototype.checkIsMutable=function(){},oe.$metadata$={kind:n,simpleName:"AbstractMutableCollection",interfaces:[rt,kr]},ae.prototype.add_11rb$=function(t){return this.checkIsMutable(),this.add_wxm5ur$(this.size,t),!0},ae.prototype.addAll_u57x28$=function(t,e){var n,r;Ar().checkPositionIndex_6xvm5r$(t,this.size),this.checkIsMutable();var i=t,o=!1;for(n=e.iterator();n.hasNext();){var a=n.next();this.add_wxm5ur$((i=(r=i)+1|0,r),a),o=!0;}return o},ae.prototype.clear=function(){this.checkIsMutable(),this.removeRange_vux9f0$(0,this.size);},ae.prototype.removeAll_brywnq$=function(t){return this.checkIsMutable(),ei(this,(e=t,function(t){return e.contains_11rb$(t)}));var e;},ae.prototype.retainAll_brywnq$=function(t){return this.checkIsMutable(),ei(this,(e=t,function(t){return !e.contains_11rb$(t)}));var e;},ae.prototype.iterator=function(){return new se(this)},ae.prototype.contains_11rb$=function(t){return this.indexOf_11rb$(t)>=0},ae.prototype.indexOf_11rb$=function(t){var e;e=Hr(this);for(var n=0;n<=e;n++)if(o(this.get_za3lpa$(n),t))return n;return -1},ae.prototype.lastIndexOf_11rb$=function(t){for(var e=Hr(this);e>=0;e--)if(o(this.get_za3lpa$(e),t))return e;return -1},ae.prototype.listIterator=function(){return this.listIterator_za3lpa$(0)},ae.prototype.listIterator_za3lpa$=function(t){return new ue(this,t)},ae.prototype.subList_vux9f0$=function(t,e){return new pe(this,t,e)},ae.prototype.removeRange_vux9f0$=function(t,e){for(var n=this.listIterator_za3lpa$(t),r=e-t|0,i=0;i0},ue.prototype.nextIndex=function(){return this.index_0},ue.prototype.previous=function(){if(!this.hasPrevious())throw Dt();return this.last_0=(this.index_0=this.index_0-1|0,this.index_0),this.$outer.get_za3lpa$(this.last_0)},ue.prototype.previousIndex=function(){return this.index_0-1|0},ue.prototype.add_11rb$=function(t){this.$outer.add_wxm5ur$(this.index_0,t),this.index_0=this.index_0+1|0,this.last_0=-1;},ue.prototype.set_11rb$=function(t){if(-1===this.last_0)throw Lt("Call next() or previous() before updating element value with the iterator.".toString());this.$outer.set_wxm5ur$(this.last_0,t);},ue.$metadata$={kind:n,simpleName:"ListIteratorImpl",interfaces:[yt,se]},pe.prototype.add_wxm5ur$=function(t,e){Ar().checkPositionIndex_6xvm5r$(t,this._size_0),this.list_0.add_wxm5ur$(this.fromIndex_0+t|0,e),this._size_0=this._size_0+1|0;},pe.prototype.get_za3lpa$=function(t){return Ar().checkElementIndex_6xvm5r$(t,this._size_0),this.list_0.get_za3lpa$(this.fromIndex_0+t|0)},pe.prototype.removeAt_za3lpa$=function(t){Ar().checkElementIndex_6xvm5r$(t,this._size_0);var e=this.list_0.removeAt_za3lpa$(this.fromIndex_0+t|0);return this._size_0=this._size_0-1|0,e},pe.prototype.set_wxm5ur$=function(t,e){return Ar().checkElementIndex_6xvm5r$(t,this._size_0),this.list_0.set_wxm5ur$(this.fromIndex_0+t|0,e)},Object.defineProperty(pe.prototype,"size",{configurable:!0,get:function(){return this._size_0}}),pe.prototype.checkIsMutable=function(){this.list_0.checkIsMutable();},pe.$metadata$={kind:n,simpleName:"SubList",interfaces:[Ze,ae]},ae.$metadata$={kind:n,simpleName:"AbstractMutableList",interfaces:[ot,oe]},Object.defineProperty(le.prototype,"key",{get:function(){return this.key_5xhq3d$_0}}),Object.defineProperty(le.prototype,"value",{configurable:!0,get:function(){return this._value_0}}),le.prototype.setValue_11rc$=function(t){var e=this._value_0;return this._value_0=t,e},le.prototype.hashCode=function(){return qr().entryHashCode_9fthdn$(this)},le.prototype.toString=function(){return qr().entryToString_9fthdn$(this)},le.prototype.equals=function(t){return qr().entryEquals_js7fox$(this,t)},le.$metadata$={kind:n,simpleName:"SimpleEntry",interfaces:[lt]},he.prototype.contains_11rb$=function(t){return this.containsEntry_kw6fkd$(t)},he.prototype.remove_11rb$=function(t){return this.removeEntry_kw6fkd$(t)},he.$metadata$={kind:n,simpleName:"AbstractEntrySet",interfaces:[me]},ce.prototype.clear=function(){this.entries.clear();},fe.prototype.add_11rb$=function(t){throw Pt("Add is not supported on keys")},fe.prototype.clear=function(){this.this$AbstractMutableMap.clear();},fe.prototype.contains_11rb$=function(t){return this.this$AbstractMutableMap.containsKey_11rb$(t)},_e.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},_e.prototype.next=function(){return this.closure$entryIterator.next().key},_e.prototype.remove=function(){this.closure$entryIterator.remove();},_e.$metadata$={kind:n,interfaces:[ft]},fe.prototype.iterator=function(){return new _e(this.this$AbstractMutableMap.entries.iterator())},fe.prototype.remove_11rb$=function(t){return this.checkIsMutable(),!!this.this$AbstractMutableMap.containsKey_11rb$(t)&&(this.this$AbstractMutableMap.remove_11rb$(t),!0)},Object.defineProperty(fe.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMutableMap.size}}),fe.prototype.checkIsMutable=function(){this.this$AbstractMutableMap.checkIsMutable();},fe.$metadata$={kind:n,interfaces:[me]},Object.defineProperty(ce.prototype,"keys",{configurable:!0,get:function(){return null==this._keys_qe2m0n$_0&&(this._keys_qe2m0n$_0=new fe(this)),v(this._keys_qe2m0n$_0)}}),ce.prototype.putAll_a2k3zr$=function(t){var e;for(this.checkIsMutable(),e=t.entries.iterator();e.hasNext();){var n=e.next(),r=n.key,i=n.value;this.put_xwzc9p$(r,i);}},ye.prototype.add_11rb$=function(t){throw Pt("Add is not supported on values")},ye.prototype.clear=function(){this.this$AbstractMutableMap.clear();},ye.prototype.contains_11rb$=function(t){return this.this$AbstractMutableMap.containsValue_11rc$(t)},de.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},de.prototype.next=function(){return this.closure$entryIterator.next().value},de.prototype.remove=function(){this.closure$entryIterator.remove();},de.$metadata$={kind:n,interfaces:[ft]},ye.prototype.iterator=function(){return new de(this.this$AbstractMutableMap.entries.iterator())},Object.defineProperty(ye.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMutableMap.size}}),ye.prototype.checkIsMutable=function(){this.this$AbstractMutableMap.checkIsMutable();},ye.$metadata$={kind:n,interfaces:[oe]},Object.defineProperty(ce.prototype,"values",{configurable:!0,get:function(){return null==this._values_kxdlqh$_0&&(this._values_kxdlqh$_0=new ye(this)),v(this._values_kxdlqh$_0)}}),ce.prototype.remove_11rb$=function(t){this.checkIsMutable();for(var e=this.entries.iterator();e.hasNext();){var n=e.next(),r=n.key;if(o(t,r)){var i=n.value;return e.remove(),i}}return null},ce.prototype.checkIsMutable=function(){},ce.$metadata$={kind:n,simpleName:"AbstractMutableMap",interfaces:[ct,zr]},me.prototype.equals=function(e){return e===this||!!t.isType(e,at)&&Dr().setEquals_y8f7en$(this,e)},me.prototype.hashCode=function(){return Dr().unorderedHashCode_nykoif$(this)},me.$metadata$={kind:n,simpleName:"AbstractMutableSet",interfaces:[st,oe]},$e.prototype.build=function(){return this.checkIsMutable(),this.isReadOnly_dbt2oh$_0=!0,this},$e.prototype.trimToSize=function(){},$e.prototype.ensureCapacity_za3lpa$=function(t){},Object.defineProperty($e.prototype,"size",{configurable:!0,get:function(){return this.array_hd7ov6$_0.length}}),$e.prototype.get_za3lpa$=function(e){var n;return null==(n=this.array_hd7ov6$_0[this.rangeCheck_xcmk5o$_0(e)])||t.isType(n,b)?n:tn()},$e.prototype.set_wxm5ur$=function(e,n){var r;this.checkIsMutable(),this.rangeCheck_xcmk5o$_0(e);var i=this.array_hd7ov6$_0[e];return this.array_hd7ov6$_0[e]=n,null==(r=i)||t.isType(r,b)?r:tn()},$e.prototype.add_11rb$=function(t){return this.checkIsMutable(),this.array_hd7ov6$_0.push(t),this.modCount=this.modCount+1|0,!0},$e.prototype.add_wxm5ur$=function(t,e){this.checkIsMutable(),this.array_hd7ov6$_0.splice(this.insertionRangeCheck_xwivfl$_0(t),0,e),this.modCount=this.modCount+1|0;},$e.prototype.addAll_brywnq$=function(t){return this.checkIsMutable(),!t.isEmpty()&&(this.array_hd7ov6$_0=this.array_hd7ov6$_0.concat(Yt(t)),this.modCount=this.modCount+1|0,!0)},$e.prototype.addAll_u57x28$=function(t,e){return this.checkIsMutable(),this.insertionRangeCheck_xwivfl$_0(t),t===this.size?this.addAll_brywnq$(e):!e.isEmpty()&&(t===this.size?this.addAll_brywnq$(e):(this.array_hd7ov6$_0=0===t?Yt(e).concat(this.array_hd7ov6$_0):Wt(this.array_hd7ov6$_0,0,t).concat(Yt(e),Wt(this.array_hd7ov6$_0,t,this.size)),this.modCount=this.modCount+1|0,!0))},$e.prototype.removeAt_za3lpa$=function(t){return this.checkIsMutable(),this.rangeCheck_xcmk5o$_0(t),this.modCount=this.modCount+1|0,t===Hr(this)?this.array_hd7ov6$_0.pop():this.array_hd7ov6$_0.splice(t,1)[0]},$e.prototype.remove_11rb$=function(t){var e;this.checkIsMutable(),e=this.array_hd7ov6$_0;for(var n=0;n!==e.length;++n)if(o(this.array_hd7ov6$_0[n],t))return this.array_hd7ov6$_0.splice(n,1),this.modCount=this.modCount+1|0,!0;return !1},$e.prototype.removeRange_vux9f0$=function(t,e){this.checkIsMutable(),this.modCount=this.modCount+1|0,this.array_hd7ov6$_0.splice(t,e-t|0);},$e.prototype.clear=function(){this.checkIsMutable(),this.array_hd7ov6$_0=[],this.modCount=this.modCount+1|0;},$e.prototype.indexOf_11rb$=function(t){return E(this.array_hd7ov6$_0,t)},$e.prototype.lastIndexOf_11rb$=function(t){return z(this.array_hd7ov6$_0,t)},$e.prototype.toString=function(){return w(this.array_hd7ov6$_0)},$e.prototype.toArray_ro6dgy$=function(e){var n,r;if(e.lengththis.size&&(e[this.size]=null),e},$e.prototype.toArray=function(){return [].slice.call(this.array_hd7ov6$_0)},$e.prototype.checkIsMutable=function(){if(this.isReadOnly_dbt2oh$_0)throw Rt()},$e.prototype.rangeCheck_xcmk5o$_0=function(t){return Ar().checkElementIndex_6xvm5r$(t,this.size),t},$e.prototype.insertionRangeCheck_xwivfl$_0=function(t){return Ar().checkPositionIndex_6xvm5r$(t,this.size),t},$e.$metadata$={kind:n,simpleName:"ArrayList",interfaces:[Ze,ae,ot]},be.prototype.equals_oaftn8$=function(t,e){return o(t,e)},be.prototype.getHashCode_s8jyv4$=function(t){var e;return null!=(e=null!=t?C(t):null)?e:0},be.$metadata$={kind:m,simpleName:"HashCode",interfaces:[ve]};var xe=null;function we(){return null===xe&&new be,xe}function ke(){this.internalMap_uxhen5$_0=null,this.equality_vgh6cm$_0=null,this._entries_7ih87x$_0=null;}function Ce(t){this.$outer=t,he.call(this);}function Oe(t,e){return e=e||Object.create(ke.prototype),ce.call(e),ke.call(e),e.internalMap_uxhen5$_0=t,e.equality_vgh6cm$_0=t.equality,e}function Ne(t){return t=t||Object.create(ke.prototype),Oe(new je(we()),t),t}function Se(t,e,n){if(Ne(n=n||Object.create(ke.prototype)),!(t>=0))throw zt(("Negative initial capacity: "+t).toString());if(!(e>=0))throw zt(("Non-positive load factor: "+e).toString());return n}function Ie(){this.map_8be2vx$=null;}function Ee(t,e,n){return n=n||Object.create(Ie.prototype),me.call(n),Ie.call(n),n.map_8be2vx$=Se(t,e),n}function Ae(t,e){return Ee(t,0,e=e||Object.create(Ie.prototype)),e}function ze(t,e){return e=e||Object.create(Ie.prototype),me.call(e),Ie.call(e),e.map_8be2vx$=t,e}function je(t){this.equality_mamlu8$_0=t,this.backingMap_0=this.createJsMap(),this.size_x3bm7r$_0=0;}function Le(t){this.this$InternalHashCodeMap=t,this.state=-1,this.keys=Object.keys(t.backingMap_0),this.keyIndex=-1,this.chainOrEntry=null,this.isChain=!1,this.itemIndex=-1,this.lastEntry=null;}function Te(){}function Me(t){this.equality_qma612$_0=t,this.backingMap_0=this.createJsMap(),this.size_6u3ykz$_0=0;}function Re(){this.head_1lr44l$_0=null,this.map_97q5dv$_0=null,this.isReadOnly_uhyvn5$_0=!1;}function Pe(t,e,n){this.$outer=t,le.call(this,e,n),this.next_8be2vx$=null,this.prev_8be2vx$=null;}function qe(t){this.$outer=t,he.call(this);}function Be(t){this.$outer=t,this.last_0=null,this.next_0=null,this.next_0=this.$outer.$outer.head_1lr44l$_0;}function Ue(t){return Ne(t=t||Object.create(Re.prototype)),Re.call(t),t.map_97q5dv$_0=Ne(),t}function Fe(t,e,n){return Se(t,e,n=n||Object.create(Re.prototype)),Re.call(n),n.map_97q5dv$_0=Ne(),n}function De(){}function Ve(t){return t=t||Object.create(De.prototype),ze(Ue(),t),De.call(t),t}function We(t,e,n){return n=n||Object.create(De.prototype),ze(Fe(t,e),n),De.call(n),n}function Ke(t,e){return We(t,0,e=e||Object.create(De.prototype)),e}function Ze(){}function He(){}function Je(t){He.call(this),this.outputStream=t;}function Ge(){He.call(this),this.buffer="";}function Qe(){Ge.call(this);}function Ye(t,e){this.delegate_0=t,this.result_0=e;}function Xe(t,e){this.closure$context=t,this.closure$resumeWith=e;}function tn(){throw new Ut("Illegal cast")}function en(t){throw Lt(t)}function nn(){}function rn(){}function on(){}function an(t){this.jClass_1ppatx$_0=t;}function sn(t){var e;an.call(this,t),this.simpleName_m7mxi0$_0=null!=(e=t.$metadata$)?e.simpleName:null;}function un(t,e,n){an.call(this,t),this.givenSimpleName_0=e,this.isInstanceFunction_0=n;}function pn(){cn=this,an.call(this,Object),this.simpleName_lnzy73$_0="Nothing";}ve.$metadata$={kind:d,simpleName:"EqualityComparator",interfaces:[]},Ce.prototype.add_11rb$=function(t){throw Pt("Add is not supported on entries")},Ce.prototype.clear=function(){this.$outer.clear();},Ce.prototype.containsEntry_kw6fkd$=function(t){return this.$outer.containsEntry_8hxqw4$(t)},Ce.prototype.iterator=function(){return this.$outer.internalMap_uxhen5$_0.iterator()},Ce.prototype.removeEntry_kw6fkd$=function(t){return !!q(this,t)&&(this.$outer.remove_11rb$(t.key),!0)},Object.defineProperty(Ce.prototype,"size",{configurable:!0,get:function(){return this.$outer.size}}),Ce.$metadata$={kind:n,simpleName:"EntrySet",interfaces:[he]},ke.prototype.clear=function(){this.internalMap_uxhen5$_0.clear();},ke.prototype.containsKey_11rb$=function(t){return this.internalMap_uxhen5$_0.contains_11rb$(t)},ke.prototype.containsValue_11rc$=function(e){var n,r=this.internalMap_uxhen5$_0;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!1;break t}for(i=r.iterator();i.hasNext();){var o=i.next();if(this.equality_vgh6cm$_0.equals_oaftn8$(o.value,e)){n=!0;break t}}n=!1;}while(0);return n},Object.defineProperty(ke.prototype,"entries",{configurable:!0,get:function(){return null==this._entries_7ih87x$_0&&(this._entries_7ih87x$_0=this.createEntrySet()),v(this._entries_7ih87x$_0)}}),ke.prototype.createEntrySet=function(){return new Ce(this)},ke.prototype.get_11rb$=function(t){return this.internalMap_uxhen5$_0.get_11rb$(t)},ke.prototype.put_xwzc9p$=function(t,e){return this.internalMap_uxhen5$_0.put_xwzc9p$(t,e)},ke.prototype.remove_11rb$=function(t){return this.internalMap_uxhen5$_0.remove_11rb$(t)},Object.defineProperty(ke.prototype,"size",{configurable:!0,get:function(){return this.internalMap_uxhen5$_0.size}}),ke.$metadata$={kind:n,simpleName:"HashMap",interfaces:[ce,ct]},Ie.prototype.add_11rb$=function(t){return null==this.map_8be2vx$.put_xwzc9p$(t,this)},Ie.prototype.clear=function(){this.map_8be2vx$.clear();},Ie.prototype.contains_11rb$=function(t){return this.map_8be2vx$.containsKey_11rb$(t)},Ie.prototype.isEmpty=function(){return this.map_8be2vx$.isEmpty()},Ie.prototype.iterator=function(){return this.map_8be2vx$.keys.iterator()},Ie.prototype.remove_11rb$=function(t){return null!=this.map_8be2vx$.remove_11rb$(t)},Object.defineProperty(Ie.prototype,"size",{configurable:!0,get:function(){return this.map_8be2vx$.size}}),Ie.$metadata$={kind:n,simpleName:"HashSet",interfaces:[me,st]},Object.defineProperty(je.prototype,"equality",{get:function(){return this.equality_mamlu8$_0}}),Object.defineProperty(je.prototype,"size",{configurable:!0,get:function(){return this.size_x3bm7r$_0},set:function(t){this.size_x3bm7r$_0=t;}}),je.prototype.put_xwzc9p$=function(e,n){var r=this.equality.getHashCode_s8jyv4$(e),i=this.getChainOrEntryOrNull_0(r);if(null==i)this.backingMap_0[r]=new le(e,n);else {if(!t.isArray(i)){var o=i;return this.equality.equals_oaftn8$(o.key,e)?o.setValue_11rc$(n):(this.backingMap_0[r]=[o,new le(e,n)],this.size=this.size+1|0,null)}var a=i,s=this.findEntryInChain_0(a,e);if(null!=s)return s.setValue_11rc$(n);a.push(new le(e,n));}return this.size=this.size+1|0,null},je.prototype.remove_11rb$=function(e){var n,r=this.equality.getHashCode_s8jyv4$(e);if(null==(n=this.getChainOrEntryOrNull_0(r)))return null;var i=n;if(!t.isArray(i)){var o=i;return this.equality.equals_oaftn8$(o.key,e)?(delete this.backingMap_0[r],this.size=this.size-1|0,o.value):null}for(var a=i,s=0;s!==a.length;++s){var u=a[s];if(this.equality.equals_oaftn8$(e,u.key))return 1===a.length?(a.length=0,delete this.backingMap_0[r]):a.splice(s,1),this.size=this.size-1|0,u.value}return null},je.prototype.clear=function(){this.backingMap_0=this.createJsMap(),this.size=0;},je.prototype.contains_11rb$=function(t){return null!=this.getEntry_0(t)},je.prototype.get_11rb$=function(t){var e;return null!=(e=this.getEntry_0(t))?e.value:null},je.prototype.getEntry_0=function(e){var n;if(null==(n=this.getChainOrEntryOrNull_0(this.equality.getHashCode_s8jyv4$(e))))return null;var r=n;if(t.isArray(r)){var i=r;return this.findEntryInChain_0(i,e)}var o=r;return this.equality.equals_oaftn8$(o.key,e)?o:null},je.prototype.findEntryInChain_0=function(t,e){var n;t:do{var r;for(r=0;r!==t.length;++r){var i=t[r];if(this.equality.equals_oaftn8$(i.key,e)){n=i;break t}}n=null;}while(0);return n},Le.prototype.computeNext_0=function(){if(null!=this.chainOrEntry&&this.isChain){var e=this.chainOrEntry.length;if(this.itemIndex=this.itemIndex+1|0,this.itemIndex=0&&(this.buffer=this.buffer+e.substring(0,n),this.flush(),e=e.substring(n+1|0)),this.buffer=this.buffer+e;},Qe.prototype.flush=function(){console.log(this.buffer),this.buffer="";},Qe.$metadata$={kind:n,simpleName:"BufferedOutputToConsoleLog",interfaces:[Ge]},Object.defineProperty(Ye.prototype,"context",{configurable:!0,get:function(){return this.delegate_0.context}}),Ye.prototype.resumeWith_tl1gpc$=function(t){var e=this.result_0;if(e===io())this.result_0=t.value;else {if(e!==to())throw Lt("Already resumed");this.result_0=oo(),this.delegate_0.resumeWith_tl1gpc$(t);}},Ye.prototype.getOrThrow=function(){var e;if(this.result_0===io())return this.result_0=to(),to();var n=this.result_0;if(n===oo())e=to();else {if(t.isType(n,xa))throw n.exception;e=n;}return e},Ye.$metadata$={kind:n,simpleName:"SafeContinuation",interfaces:[ji]},Object.defineProperty(Xe.prototype,"context",{configurable:!0,get:function(){return this.closure$context}}),Xe.prototype.resumeWith_tl1gpc$=function(t){this.closure$resumeWith(t);},Xe.$metadata$={kind:n,interfaces:[ji]},nn.$metadata$={kind:d,simpleName:"Serializable",interfaces:[]},rn.$metadata$={kind:d,simpleName:"KCallable",interfaces:[]},on.$metadata$={kind:d,simpleName:"KClass",interfaces:[Vo]},Object.defineProperty(an.prototype,"jClass",{get:function(){return this.jClass_1ppatx$_0}}),Object.defineProperty(an.prototype,"qualifiedName",{configurable:!0,get:function(){throw new Ca}}),an.prototype.equals=function(e){return t.isType(e,an)&&o(this.jClass,e.jClass)},an.prototype.hashCode=function(){var t,e;return null!=(e=null!=(t=this.simpleName)?C(t):null)?e:0},an.prototype.toString=function(){return "class "+_(this.simpleName)},an.$metadata$={kind:n,simpleName:"KClassImpl",interfaces:[on]},Object.defineProperty(sn.prototype,"simpleName",{configurable:!0,get:function(){return this.simpleName_m7mxi0$_0}}),sn.prototype.isInstance_s8jyv4$=function(e){var n=this.jClass;return t.isType(e,n)},sn.$metadata$={kind:n,simpleName:"SimpleKClassImpl",interfaces:[an]},un.prototype.equals=function(e){return !!t.isType(e,un)&&an.prototype.equals.call(this,e)&&o(this.givenSimpleName_0,e.givenSimpleName_0)},Object.defineProperty(un.prototype,"simpleName",{configurable:!0,get:function(){return this.givenSimpleName_0}}),un.prototype.isInstance_s8jyv4$=function(t){return this.isInstanceFunction_0(t)},un.$metadata$={kind:n,simpleName:"PrimitiveKClassImpl",interfaces:[an]},Object.defineProperty(pn.prototype,"simpleName",{configurable:!0,get:function(){return this.simpleName_lnzy73$_0}}),pn.prototype.isInstance_s8jyv4$=function(t){return !1},Object.defineProperty(pn.prototype,"jClass",{configurable:!0,get:function(){throw Pt("There's no native JS class for Nothing type")}}),pn.prototype.equals=function(t){return t===this},pn.prototype.hashCode=function(){return 0},pn.$metadata$={kind:m,simpleName:"NothingKClassImpl",interfaces:[an]};var cn=null;function ln(){return null===cn&&new pn,cn}function hn(){}function fn(){}function _n(){}function yn(){}function dn(){}function mn(){}function $n(){}function gn(){Bn=this,this.anyClass=new un(Object,"Any",vn),this.numberClass=new un(Number,"Number",bn),this.nothingClass=ln(),this.booleanClass=new un(Boolean,"Boolean",xn),this.byteClass=new un(Number,"Byte",wn),this.shortClass=new un(Number,"Short",kn),this.intClass=new un(Number,"Int",Cn),this.floatClass=new un(Number,"Float",On),this.doubleClass=new un(Number,"Double",Nn),this.arrayClass=new un(Array,"Array",Sn),this.stringClass=new un(String,"String",In),this.throwableClass=new un(Error,"Throwable",En),this.booleanArrayClass=new un(Array,"BooleanArray",An),this.charArrayClass=new un(Uint16Array,"CharArray",zn),this.byteArrayClass=new un(Int8Array,"ByteArray",jn),this.shortArrayClass=new un(Int16Array,"ShortArray",Ln),this.intArrayClass=new un(Int32Array,"IntArray",Tn),this.longArrayClass=new un(Array,"LongArray",Mn),this.floatArrayClass=new un(Float32Array,"FloatArray",Rn),this.doubleArrayClass=new un(Float64Array,"DoubleArray",Pn);}function vn(e){return t.isType(e,b)}function bn(e){return t.isNumber(e)}function xn(t){return "boolean"==typeof t}function wn(t){return "number"==typeof t}function kn(t){return "number"==typeof t}function Cn(t){return "number"==typeof t}function On(t){return "number"==typeof t}function Nn(t){return "number"==typeof t}function Sn(e){return t.isArray(e)}function In(t){return "string"==typeof t}function En(e){return t.isType(e,x)}function An(e){return t.isBooleanArray(e)}function zn(e){return t.isCharArray(e)}function jn(e){return t.isByteArray(e)}function Ln(e){return t.isShortArray(e)}function Tn(e){return t.isIntArray(e)}function Mn(e){return t.isLongArray(e)}function Rn(e){return t.isFloatArray(e)}function Pn(e){return t.isDoubleArray(e)}Object.defineProperty(hn.prototype,"simpleName",{configurable:!0,get:function(){throw Lt("Unknown simpleName for ErrorKClass".toString())}}),Object.defineProperty(hn.prototype,"qualifiedName",{configurable:!0,get:function(){throw Lt("Unknown qualifiedName for ErrorKClass".toString())}}),hn.prototype.isInstance_s8jyv4$=function(t){throw Lt("Can's check isInstance on ErrorKClass".toString())},hn.prototype.equals=function(t){return t===this},hn.prototype.hashCode=function(){return 0},hn.$metadata$={kind:n,simpleName:"ErrorKClass",interfaces:[on]},fn.$metadata$={kind:d,simpleName:"KProperty",interfaces:[rn]},_n.$metadata$={kind:d,simpleName:"KMutableProperty",interfaces:[fn]},yn.$metadata$={kind:d,simpleName:"KProperty0",interfaces:[fn]},dn.$metadata$={kind:d,simpleName:"KMutableProperty0",interfaces:[_n,yn]},mn.$metadata$={kind:d,simpleName:"KProperty1",interfaces:[fn]},$n.$metadata$={kind:d,simpleName:"KMutableProperty1",interfaces:[_n,mn]},gn.prototype.functionClass=function(t){var e,n,r;if(null!=(e=qn[t]))n=e;else {var i=new un(Function,"Function"+t,(r=t,function(t){return "function"==typeof t&&t.length===r}));qn[t]=i,n=i;}return n},gn.$metadata$={kind:m,simpleName:"PrimitiveClasses",interfaces:[]};var qn,Bn=null;function Un(){return null===Bn&&new gn,Bn}function Fn(t){return Array.isArray(t)?Dn(t):Vn(t)}function Dn(t){switch(t.length){case 1:return Vn(t[0]);case 0:return ln();default:return new hn}}function Vn(t){var e;if(t===String)return Un().stringClass;var n=t.$metadata$;if(null!=n)if(null==n.$kClass$){var r=new sn(t);n.$kClass$=r,e=r;}else e=n.$kClass$;else e=new sn(t);return e}function Wn(t){t.lastIndex=0;}function Kn(){}function Zn(t){this.string_0=void 0!==t?t:"";}function Hn(t,e){return Jn(e=e||Object.create(Zn.prototype)),e}function Jn(t){return t=t||Object.create(Zn.prototype),Zn.call(t,""),t}function Gn(t){var e=String.fromCharCode(t).toUpperCase();return e.length>1?t:e.charCodeAt(0)}function Qn(t){return new ho(O.MIN_HIGH_SURROGATE,O.MAX_HIGH_SURROGATE).contains_mef7kx$(t)}function Yn(t){return new ho(O.MIN_LOW_SURROGATE,O.MAX_LOW_SURROGATE).contains_mef7kx$(t)}function Xn(t){var e;return null!=(e=Zo(t))?e:Jo(t)}function tr(t){if(!(2<=t&&t<=36))throw zt("radix "+t+" was not in valid range 2..36");return t}function er(t,e){var n;return (n=t>=48&&t<=57?t-48:t>=65&&t<=90?t-65+10|0:t>=97&&t<=122?t-97+10|0:t<128?-1:t>=65313&&t<=65338?t-65313+10|0:t>=65345&&t<=65370?t-65345+10|0:Gt(t))>=e?-1:n}function nr(t){return t.value}function rr(t,e){return V(t,"",e,void 0,void 0,void 0,nr)}function ir(t){this.value=t;}function or(e,n){var r,i;if(null==(i=t.isType(r=e,pa)?r:null))throw Pt("Retrieving groups by name is not supported on this platform.");return i.get_61zpoe$(n)}function ar(t,e){lr(),this.pattern=t,this.options=F(e),this.nativePattern_0=new RegExp(t,rr(e,"gu")),this.nativeStickyPattern_0=null,this.nativeMatchesEntirePattern_0=null;}function sr(t){return t.next()}function ur(t,e,n,r,i,o){vt.call(this,o),this.$controller=i,this.exceptionState_0=1,this.local$closure$input=t,this.local$this$Regex=e,this.local$closure$limit=n,this.local$match=void 0,this.local$nextStart=void 0,this.local$splitCount=void 0,this.local$foundMatch=void 0,this.local$$receiver=r;}function pr(){cr=this,this.patternEscape_0=new RegExp("[\\\\^$*+?.()|[\\]{}]","g"),this.replacementEscape_0=new RegExp("[\\\\$]","g"),this.nativeReplacementEscape_0=new RegExp("\\$","g");}Kn.$metadata$={kind:d,simpleName:"Appendable",interfaces:[]},Object.defineProperty(Zn.prototype,"length",{configurable:!0,get:function(){return this.string_0.length}}),Zn.prototype.charCodeAt=function(t){var e=this.string_0;if(!(t>=0&&t<=ta(e)))throw new Tt("index: "+t+", length: "+this.length+"}");return e.charCodeAt(t)},Zn.prototype.subSequence_vux9f0$=function(t,e){return this.string_0.substring(t,e)},Zn.prototype.append_s8itvh$=function(t){return this.string_0+=String.fromCharCode(t),this},Zn.prototype.append_gw00v9$=function(t){return this.string_0+=_(t),this},Zn.prototype.append_ezbsdh$=function(t,e,n){return this.appendRange_3peag4$(null!=t?t:"null",e,n)},Zn.prototype.reverse=function(){for(var t,e,n="",r=this.string_0.length-1|0;r>=0;){var i=this.string_0.charCodeAt((r=(t=r)-1|0,t));if(Yn(i)&&r>=0){var o=this.string_0.charCodeAt((r=(e=r)-1|0,e));n=Qn(o)?n+String.fromCharCode(a(o))+String.fromCharCode(a(i)):n+String.fromCharCode(a(i))+String.fromCharCode(a(o));}else n+=String.fromCharCode(i);}return this.string_0=n,this},Zn.prototype.append_s8jyv4$=function(t){return this.string_0+=_(t),this},Zn.prototype.append_6taknv$=function(t){return this.string_0+=t,this},Zn.prototype.append_4hbowm$=function(t){return this.string_0+=vr(t),this},Zn.prototype.append_61zpoe$=function(t){return this.append_pdl1vj$(t)},Zn.prototype.append_pdl1vj$=function(t){return this.string_0=this.string_0+(null!=t?t:"null"),this},Zn.prototype.capacity=function(){return this.length},Zn.prototype.ensureCapacity_za3lpa$=function(t){},Zn.prototype.indexOf_61zpoe$=function(t){return this.string_0.indexOf(t)},Zn.prototype.indexOf_bm4lxs$=function(t,e){return this.string_0.indexOf(t,e)},Zn.prototype.lastIndexOf_61zpoe$=function(t){return this.string_0.lastIndexOf(t)},Zn.prototype.lastIndexOf_bm4lxs$=function(t,e){return 0===t.length&&e<0?-1:this.string_0.lastIndexOf(t,e)},Zn.prototype.insert_fzusl$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_6t1mh3$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+String.fromCharCode(a(e))+this.string_0.substring(t),this},Zn.prototype.insert_7u455s$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+vr(e)+this.string_0.substring(t),this},Zn.prototype.insert_1u9bqd$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_6t2rgq$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_19mbxw$=function(t,e){return this.insert_vqvrqt$(t,e)},Zn.prototype.insert_vqvrqt$=function(t,e){Ar().checkPositionIndex_6xvm5r$(t,this.length);var n=null!=e?e:"null";return this.string_0=this.string_0.substring(0,t)+n+this.string_0.substring(t),this},Zn.prototype.setLength_za3lpa$=function(t){if(t<0)throw zt("Negative new length: "+t+".");if(t<=this.length)this.string_0=this.string_0.substring(0,t);else for(var e=this.length;en)throw new Tt("startIndex: "+t+", length: "+n);if(t>e)throw zt("startIndex("+t+") > endIndex("+e+")")},Zn.prototype.deleteAt_za3lpa$=function(t){return Ar().checkElementIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+this.string_0.substring(t+1|0),this},Zn.prototype.deleteRange_vux9f0$=function(t,e){return this.checkReplaceRange_0(t,e,this.length),this.string_0=this.string_0.substring(0,t)+this.string_0.substring(e),this},Zn.prototype.toCharArray_pqkatk$=function(t,e,n,r){var i;void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=this.length),Ar().checkBoundsIndexes_cub51b$(n,r,this.length),Ar().checkBoundsIndexes_cub51b$(e,e+r-n|0,t.length);for(var o=e,a=n;at.length)throw new Tt("index out of bounds: "+e+", input length: "+t.length);var n=this.initStickyPattern_0();return n.lastIndex=e,n.test(t.toString())},ar.prototype.find_905azu$=function(t,e){if(void 0===e&&(e=0),e<0||e>t.length)throw new Tt("Start index out of bounds: "+e+", input length: "+t.length);return dr(this.nativePattern_0,t.toString(),e,this.nativePattern_0)},ar.prototype.findAll_905azu$=function(t,e){if(void 0===e&&(e=0),e<0||e>t.length)throw new Tt("Start index out of bounds: "+e+", input length: "+t.length);return Oi((n=t,r=e,i=this,function(){return i.find_905azu$(n,r)}),sr);var n,r,i;},ar.prototype.matchEntire_6bul2c$=function(t){return dr(this.initMatchesEntirePattern_0(),t.toString(),0,this.nativePattern_0)},ar.prototype.matchAt_905azu$=function(t,e){if(e<0||e>t.length)throw new Tt("index out of bounds: "+e+", input length: "+t.length);return dr(this.initStickyPattern_0(),t.toString(),e,this.nativePattern_0)},ar.prototype.replace_x2uqeu$=function(t,e){return aa(e,92)||aa(e,36)?this.replace_20wsma$(t,(n=e,function(t){return mr(t,n)})):t.toString().replace(this.nativePattern_0,e);var n;},ar.prototype.replace_20wsma$=function(t,e){var n=this.find_905azu$(t);if(null==n)return t.toString();var r=0,i=t.length,o=Hn();do{var a=v(n);o.append_ezbsdh$(t,r,a.range.start),o.append_gw00v9$(e(a)),r=a.range.endInclusive+1|0,n=a.next();}while(r=f.size)throw new Tt("Group with index "+y+" does not exist");p.append_pdl1vj$(null!=(s=null!=(a=f.get_za3lpa$(y))?a.value:null)?s:""),u=_;}}else p.append_s8itvh$(c);}return p.toString()}function $r(t,e){for(var n=e;n0},Sr.prototype.nextIndex=function(){return this.index_0},Sr.prototype.previous=function(){if(!this.hasPrevious())throw Dt();return this.$outer.get_za3lpa$((this.index_0=this.index_0-1|0,this.index_0))},Sr.prototype.previousIndex=function(){return this.index_0-1|0},Sr.$metadata$={kind:n,simpleName:"ListIteratorImpl",interfaces:[_t,Nr]},Ir.prototype.checkElementIndex_6xvm5r$=function(t,e){if(t<0||t>=e)throw new Tt("index: "+t+", size: "+e)},Ir.prototype.checkPositionIndex_6xvm5r$=function(t,e){if(t<0||t>e)throw new Tt("index: "+t+", size: "+e)},Ir.prototype.checkRangeIndexes_cub51b$=function(t,e,n){if(t<0||e>n)throw new Tt("fromIndex: "+t+", toIndex: "+e+", size: "+n);if(t>e)throw zt("fromIndex: "+t+" > toIndex: "+e)},Ir.prototype.checkBoundsIndexes_cub51b$=function(t,e,n){if(t<0||e>n)throw new Tt("startIndex: "+t+", endIndex: "+e+", size: "+n);if(t>e)throw zt("startIndex: "+t+" > endIndex: "+e)},Ir.prototype.orderedHashCode_nykoif$=function(t){var e,n,r=1;for(e=t.iterator();e.hasNext();){var i=e.next();r=(31*r|0)+(null!=(n=null!=i?C(i):null)?n:0)|0;}return r},Ir.prototype.orderedEquals_e92ka7$=function(t,e){var n;if(t.size!==e.size)return !1;var r=e.iterator();for(n=t.iterator();n.hasNext();){var i=n.next(),a=r.next();if(!o(i,a))return !1}return !0},Ir.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Er=null;function Ar(){return null===Er&&new Ir,Er}function zr(){qr(),this._keys_up5z3z$_0=null,this._values_6nw1f1$_0=null;}function jr(t){this.this$AbstractMap=t,Br.call(this);}function Lr(t){this.closure$entryIterator=t;}function Tr(t){this.this$AbstractMap=t,kr.call(this);}function Mr(t){this.closure$entryIterator=t;}function Rr(){Pr=this;}Cr.$metadata$={kind:n,simpleName:"AbstractList",interfaces:[it,kr]},zr.prototype.containsKey_11rb$=function(t){return null!=this.implFindEntry_8k1i24$_0(t)},zr.prototype.containsValue_11rc$=function(e){var n,r=this.entries;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!1;break t}for(i=r.iterator();i.hasNext();){var a=i.next();if(o(a.value,e)){n=!0;break t}}n=!1;}while(0);return n},zr.prototype.containsEntry_8hxqw4$=function(e){if(!t.isType(e,pt))return !1;var n=e.key,r=e.value,i=(t.isType(this,ut)?this:y()).get_11rb$(n);if(!o(r,i))return !1;var a=null==i;return a&&(a=!(t.isType(this,ut)?this:y()).containsKey_11rb$(n)),!a},zr.prototype.equals=function(e){if(e===this)return !0;if(!t.isType(e,ut))return !1;if(this.size!==e.size)return !1;var n,r=e.entries;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!0;break t}for(i=r.iterator();i.hasNext();){var o=i.next();if(!this.containsEntry_8hxqw4$(o)){n=!1;break t}}n=!0;}while(0);return n},zr.prototype.get_11rb$=function(t){var e;return null!=(e=this.implFindEntry_8k1i24$_0(t))?e.value:null},zr.prototype.hashCode=function(){return C(this.entries)},zr.prototype.isEmpty=function(){return 0===this.size},Object.defineProperty(zr.prototype,"size",{configurable:!0,get:function(){return this.entries.size}}),jr.prototype.contains_11rb$=function(t){return this.this$AbstractMap.containsKey_11rb$(t)},Lr.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},Lr.prototype.next=function(){return this.closure$entryIterator.next().key},Lr.$metadata$={kind:n,interfaces:[ht]},jr.prototype.iterator=function(){return new Lr(this.this$AbstractMap.entries.iterator())},Object.defineProperty(jr.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMap.size}}),jr.$metadata$={kind:n,interfaces:[Br]},Object.defineProperty(zr.prototype,"keys",{configurable:!0,get:function(){return null==this._keys_up5z3z$_0&&(this._keys_up5z3z$_0=new jr(this)),v(this._keys_up5z3z$_0)}}),zr.prototype.toString=function(){return V(this.entries,", ","{","}",void 0,void 0,(t=this,function(e){return t.toString_55he67$_0(e)}));var t;},zr.prototype.toString_55he67$_0=function(t){return this.toString_kthv8s$_0(t.key)+"="+this.toString_kthv8s$_0(t.value)},zr.prototype.toString_kthv8s$_0=function(t){return t===this?"(this Map)":_(t)},Tr.prototype.contains_11rb$=function(t){return this.this$AbstractMap.containsValue_11rc$(t)},Mr.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},Mr.prototype.next=function(){return this.closure$entryIterator.next().value},Mr.$metadata$={kind:n,interfaces:[ht]},Tr.prototype.iterator=function(){return new Mr(this.this$AbstractMap.entries.iterator())},Object.defineProperty(Tr.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMap.size}}),Tr.$metadata$={kind:n,interfaces:[kr]},Object.defineProperty(zr.prototype,"values",{configurable:!0,get:function(){return null==this._values_6nw1f1$_0&&(this._values_6nw1f1$_0=new Tr(this)),v(this._values_6nw1f1$_0)}}),zr.prototype.implFindEntry_8k1i24$_0=function(t){var e,n=this.entries;t:do{var r;for(r=n.iterator();r.hasNext();){var i=r.next();if(o(i.key,t)){e=i;break t}}e=null;}while(0);return e},Rr.prototype.entryHashCode_9fthdn$=function(t){var e,n,r,i;return (null!=(n=null!=(e=t.key)?C(e):null)?n:0)^(null!=(i=null!=(r=t.value)?C(r):null)?i:0)},Rr.prototype.entryToString_9fthdn$=function(t){return _(t.key)+"="+_(t.value)},Rr.prototype.entryEquals_js7fox$=function(e,n){return !!t.isType(n,pt)&&o(e.key,n.key)&&o(e.value,n.value)},Rr.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Pr=null;function qr(){return null===Pr&&new Rr,Pr}function Br(){Dr(),kr.call(this);}function Ur(){Fr=this;}zr.$metadata$={kind:n,simpleName:"AbstractMap",interfaces:[ut]},Br.prototype.equals=function(e){return e===this||!!t.isType(e,at)&&Dr().setEquals_y8f7en$(this,e)},Br.prototype.hashCode=function(){return Dr().unorderedHashCode_nykoif$(this)},Ur.prototype.unorderedHashCode_nykoif$=function(t){var e,n=0;for(e=t.iterator();e.hasNext();){var r,i=e.next();n=n+(null!=(r=null!=i?C(i):null)?r:0)|0;}return n},Ur.prototype.setEquals_y8f7en$=function(t,e){return t.size===e.size&&t.containsAll_brywnq$(e)},Ur.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Fr=null;function Dr(){return null===Fr&&new Ur,Fr}function Vr(){Wr=this;}Br.$metadata$={kind:n,simpleName:"AbstractSet",interfaces:[at,kr]},Vr.prototype.hasNext=function(){return !1},Vr.prototype.hasPrevious=function(){return !1},Vr.prototype.nextIndex=function(){return 0},Vr.prototype.previousIndex=function(){return -1},Vr.prototype.next=function(){throw Dt()},Vr.prototype.previous=function(){throw Dt()},Vr.$metadata$={kind:m,simpleName:"EmptyIterator",interfaces:[_t]};var Wr=null;function Kr(){return null===Wr&&new Vr,Wr}function Zr(t){return new mo(0,t.size-1|0)}function Hr(t){return t.size-1|0}function Jr(){throw new Vt("Index overflow has happened.")}function Xr(t,e){return ti(t,e,!0)}function ti(t,e,n){for(var r={v:!1},i=t.iterator();i.hasNext();)e(i.next())===n&&(i.remove(),r.v=!0);return r.v}function ei(e,n){return function(e,n,r){var i,o,a;if(!t.isType(e,Ze))return ti(t.isType(i=e,et)?i:tn(),n,r);var s=0;o=Hr(e);for(var u=0;u<=o;u++){var p=e.get_za3lpa$(u);n(p)!==r&&(s!==u&&e.set_wxm5ur$(s,p),s=s+1|0);}if(s=a;c--)e.removeAt_za3lpa$(c);return !0}return !1}(e,n,!0)}function ni(){}function ri(){}function ii(){}function oi(){}function ai(t){this.closure$iterator=t;}function si(t){return new ai((e=t,function(){return ui(e)}));var e;}function ui(t){var e=new ci;return e.nextStep=Ct(t,e,e),e}function pi(){}function ci(){pi.call(this),this.state_0=0,this.nextValue_0=null,this.nextIterator_0=null,this.nextStep=null;}function li(){return _i()}function hi(){fi=this;}ni.prototype.next=function(){return a(this.nextChar())},ni.$metadata$={kind:n,simpleName:"CharIterator",interfaces:[ht]},ri.prototype.next=function(){return this.nextInt()},ri.$metadata$={kind:n,simpleName:"IntIterator",interfaces:[ht]},ii.prototype.next=function(){return this.nextLong()},ii.$metadata$={kind:n,simpleName:"LongIterator",interfaces:[ht]},oi.$metadata$={kind:d,simpleName:"Sequence",interfaces:[]},ai.prototype.iterator=function(){return this.closure$iterator()},ai.$metadata$={kind:n,interfaces:[oi]},pi.prototype.yieldAll_p1ys8y$=function(e,n){if(!t.isType(e,nt)||!e.isEmpty())return this.yieldAll_1phuh2$(e.iterator(),n)},pi.prototype.yieldAll_swo9gw$=function(t,e){return this.yieldAll_1phuh2$(t.iterator(),e)},pi.$metadata$={kind:n,simpleName:"SequenceScope",interfaces:[]},ci.prototype.hasNext=function(){for(;;){switch(this.state_0){case 0:break;case 1:if(v(this.nextIterator_0).hasNext())return this.state_0=2,!0;this.nextIterator_0=null;break;case 4:return !1;case 3:case 2:return !0;default:throw this.exceptionalState_0()}this.state_0=5;var t=v(this.nextStep);this.nextStep=null,t.resumeWith_tl1gpc$(new $a($t()));}},ci.prototype.next=function(){var e;switch(this.state_0){case 0:case 1:return this.nextNotReady_0();case 2:return this.state_0=1,v(this.nextIterator_0).next();case 3:this.state_0=0;var n=null==(e=this.nextValue_0)||t.isType(e,b)?e:tn();return this.nextValue_0=null,n;default:throw this.exceptionalState_0()}},ci.prototype.nextNotReady_0=function(){if(this.hasNext())return this.next();throw Dt()},ci.prototype.exceptionalState_0=function(){switch(this.state_0){case 4:return Dt();case 5:return Lt("Iterator has failed.");default:return Lt("Unexpected state of the iterator: "+this.state_0)}},ci.prototype.yield_11rb$=function(t,e){return this.nextValue_0=t,this.state_0=3,(n=this,function(t){return n.nextStep=t,to()})(e);var n;},ci.prototype.yieldAll_1phuh2$=function(t,e){if(t.hasNext())return this.nextIterator_0=t,this.state_0=2,(n=this,function(t){return n.nextStep=t,to()})(e);var n;},ci.prototype.resumeWith_tl1gpc$=function(e){var n;ka(e),null==(n=e.value)||t.isType(n,b)||y(),this.state_0=4;},Object.defineProperty(ci.prototype,"context",{configurable:!0,get:function(){return Wi()}}),ci.$metadata$={kind:n,simpleName:"SequenceBuilderIterator",interfaces:[ji,ht,pi]},hi.prototype.iterator=function(){return Kr()},hi.prototype.drop_za3lpa$=function(t){return _i()},hi.prototype.take_za3lpa$=function(t){return _i()},hi.$metadata$={kind:m,simpleName:"EmptySequence",interfaces:[gi,oi]};var fi=null;function _i(){return null===fi&&new hi,fi}function yi(t,e){this.sequence_0=t,this.transformer_0=e;}function di(t){this.this$TransformingSequence=t,this.iterator=t.sequence_0.iterator();}function mi(t,e,n){this.sequence_0=t,this.transformer_0=e,this.iterator_0=n;}function $i(t){this.this$FlatteningSequence=t,this.iterator=t.sequence_0.iterator(),this.itemIterator=null;}function gi(){}function vi(t,e,n){if(this.sequence_0=t,this.startIndex_0=e,this.endIndex_0=n,!(this.startIndex_0>=0))throw zt(("startIndex should be non-negative, but is "+this.startIndex_0).toString());if(!(this.endIndex_0>=0))throw zt(("endIndex should be non-negative, but is "+this.endIndex_0).toString());if(!(this.endIndex_0>=this.startIndex_0))throw zt(("endIndex should be not less than startIndex, but was "+this.endIndex_0+" < "+this.startIndex_0).toString())}function bi(t){this.this$SubSequence=t,this.iterator=t.sequence_0.iterator(),this.position=0;}function xi(t,e){if(this.sequence_0=t,this.count_0=e,!(this.count_0>=0))throw zt(("count must be non-negative, but was "+this.count_0+".").toString())}function wi(t){this.left=t.count_0,this.iterator=t.sequence_0.iterator();}function ki(t,e){this.getInitialValue_0=t,this.getNextValue_0=e;}function Ci(t){this.this$GeneratorSequence=t,this.nextItem=null,this.nextState=-2;}function Oi(t,e){return new ki(t,e)}function Ni(){Si=this,this.serialVersionUID_0=N;}di.prototype.next=function(){return this.this$TransformingSequence.transformer_0(this.iterator.next())},di.prototype.hasNext=function(){return this.iterator.hasNext()},di.$metadata$={kind:n,interfaces:[ht]},yi.prototype.iterator=function(){return new di(this)},yi.prototype.flatten_1tglza$=function(t){return new mi(this.sequence_0,this.transformer_0,t)},yi.$metadata$={kind:n,simpleName:"TransformingSequence",interfaces:[oi]},$i.prototype.next=function(){if(!this.ensureItemIterator_0())throw Dt();return v(this.itemIterator).next()},$i.prototype.hasNext=function(){return this.ensureItemIterator_0()},$i.prototype.ensureItemIterator_0=function(){var t;for(!1===(null!=(t=this.itemIterator)?t.hasNext():null)&&(this.itemIterator=null);null==this.itemIterator;){if(!this.iterator.hasNext())return !1;var e=this.iterator.next(),n=this.this$FlatteningSequence.iterator_0(this.this$FlatteningSequence.transformer_0(e));if(n.hasNext())return this.itemIterator=n,!0}return !0},$i.$metadata$={kind:n,interfaces:[ht]},mi.prototype.iterator=function(){return new $i(this)},mi.$metadata$={kind:n,simpleName:"FlatteningSequence",interfaces:[oi]},gi.$metadata$={kind:d,simpleName:"DropTakeSequence",interfaces:[oi]},Object.defineProperty(vi.prototype,"count_0",{configurable:!0,get:function(){return this.endIndex_0-this.startIndex_0|0}}),vi.prototype.drop_za3lpa$=function(t){return t>=this.count_0?li():new vi(this.sequence_0,this.startIndex_0+t|0,this.endIndex_0)},vi.prototype.take_za3lpa$=function(t){return t>=this.count_0?this:new vi(this.sequence_0,this.startIndex_0,this.startIndex_0+t|0)},bi.prototype.drop_0=function(){for(;this.position=this.this$SubSequence.endIndex_0)throw Dt();return this.position=this.position+1|0,this.iterator.next()},bi.$metadata$={kind:n,interfaces:[ht]},vi.prototype.iterator=function(){return new bi(this)},vi.$metadata$={kind:n,simpleName:"SubSequence",interfaces:[gi,oi]},xi.prototype.drop_za3lpa$=function(t){return t>=this.count_0?li():new vi(this.sequence_0,t,this.count_0)},xi.prototype.take_za3lpa$=function(t){return t>=this.count_0?this:new xi(this.sequence_0,t)},wi.prototype.next=function(){if(0===this.left)throw Dt();return this.left=this.left-1|0,this.iterator.next()},wi.prototype.hasNext=function(){return this.left>0&&this.iterator.hasNext()},wi.$metadata$={kind:n,interfaces:[ht]},xi.prototype.iterator=function(){return new wi(this)},xi.$metadata$={kind:n,simpleName:"TakeSequence",interfaces:[gi,oi]},Ci.prototype.calcNext_0=function(){this.nextItem=-2===this.nextState?this.this$GeneratorSequence.getInitialValue_0():this.this$GeneratorSequence.getNextValue_0(v(this.nextItem)),this.nextState=null==this.nextItem?0:1;},Ci.prototype.next=function(){var e;if(this.nextState<0&&this.calcNext_0(),0===this.nextState)throw Dt();var n=t.isType(e=this.nextItem,b)?e:tn();return this.nextState=-1,n},Ci.prototype.hasNext=function(){return this.nextState<0&&this.calcNext_0(),1===this.nextState},Ci.$metadata$={kind:n,interfaces:[ht]},ki.prototype.iterator=function(){return new Ci(this)},ki.$metadata$={kind:n,simpleName:"GeneratorSequence",interfaces:[oi]},Ni.prototype.equals=function(e){return t.isType(e,at)&&e.isEmpty()},Ni.prototype.hashCode=function(){return 0},Ni.prototype.toString=function(){return "[]"},Object.defineProperty(Ni.prototype,"size",{configurable:!0,get:function(){return 0}}),Ni.prototype.isEmpty=function(){return !0},Ni.prototype.contains_11rb$=function(t){return !1},Ni.prototype.containsAll_brywnq$=function(t){return t.isEmpty()},Ni.prototype.iterator=function(){return Kr()},Ni.prototype.readResolve_0=function(){return Ii()},Ni.$metadata$={kind:m,simpleName:"EmptySet",interfaces:[nn,at]};var Si=null;function Ii(){return null===Si&&new Ni,Si}function Ei(){return Ii()}function Ai(t){return M(t,Ae(t.length))}function zi(t){switch(t.size){case 0:return Ei();case 1:return ee(t.iterator().next());default:return t}}function ji(){}function Li(){Ri();}function Ti(){Mi=this;}ji.$metadata$={kind:d,simpleName:"Continuation",interfaces:[]},r("kotlin.kotlin.coroutines.suspendCoroutine_922awp$",i((function(){var n=e.kotlin.coroutines.intrinsics.intercepted_f9mg25$,r=e.kotlin.coroutines.SafeContinuation_init_wj8d80$;return function(e,i){return t.suspendCall((o=e,function(t){var e=r(n(t));return o(e),e.getOrThrow()})(t.coroutineReceiver())),t.coroutineResult(t.coroutineReceiver());var o;}}))),Ti.$metadata$={kind:m,simpleName:"Key",interfaces:[Bi]};var Mi=null;function Ri(){return null===Mi&&new Ti,Mi}function Pi(){}function qi(t,e){var n=t.minusKey_yeqjby$(e.key);if(n===Wi())return e;var r=n.get_j3r2sn$(Ri());if(null==r)return new Ki(n,e);var i=n.minusKey_yeqjby$(Ri());return i===Wi()?new Ki(e,r):new Ki(new Ki(i,e),r)}function Bi(){}function Ui(){}function Fi(t){this.key_no4tas$_0=t;}function Di(){Vi=this,this.serialVersionUID_0=u;}Pi.prototype.plus_1fupul$=function(t){return t===Wi()?this:t.fold_3cc69b$(this,qi)},Bi.$metadata$={kind:d,simpleName:"Key",interfaces:[]},Ui.prototype.get_j3r2sn$=function(e){return o(this.key,e)?t.isType(this,Ui)?this:tn():null},Ui.prototype.fold_3cc69b$=function(t,e){return e(t,this)},Ui.prototype.minusKey_yeqjby$=function(t){return o(this.key,t)?Wi():this},Ui.$metadata$={kind:d,simpleName:"Element",interfaces:[Pi]},Pi.$metadata$={kind:d,simpleName:"CoroutineContext",interfaces:[]},Di.prototype.readResolve_0=function(){return Wi()},Di.prototype.get_j3r2sn$=function(t){return null},Di.prototype.fold_3cc69b$=function(t,e){return t},Di.prototype.plus_1fupul$=function(t){return t},Di.prototype.minusKey_yeqjby$=function(t){return this},Di.prototype.hashCode=function(){return 0},Di.prototype.toString=function(){return "EmptyCoroutineContext"},Di.$metadata$={kind:m,simpleName:"EmptyCoroutineContext",interfaces:[nn,Pi]};var Vi=null;function Wi(){return null===Vi&&new Di,Vi}function Ki(t,e){this.left_0=t,this.element_0=e;}function Zi(t,e){return 0===t.length?e.toString():t+", "+e}function Hi(t){this.elements=t;}Ki.prototype.get_j3r2sn$=function(e){for(var n,r=this;;){if(null!=(n=r.element_0.get_j3r2sn$(e)))return n;var i=r.left_0;if(!t.isType(i,Ki))return i.get_j3r2sn$(e);r=i;}},Ki.prototype.fold_3cc69b$=function(t,e){return e(this.left_0.fold_3cc69b$(t,e),this.element_0)},Ki.prototype.minusKey_yeqjby$=function(t){if(null!=this.element_0.get_j3r2sn$(t))return this.left_0;var e=this.left_0.minusKey_yeqjby$(t);return e===this.left_0?this:e===Wi()?this.element_0:new Ki(e,this.element_0)},Ki.prototype.size_0=function(){for(var e,n,r=this,i=2;;){if(null==(n=t.isType(e=r.left_0,Ki)?e:null))return i;r=n,i=i+1|0;}},Ki.prototype.contains_0=function(t){return o(this.get_j3r2sn$(t.key),t)},Ki.prototype.containsAll_0=function(e){for(var n,r=e;;){if(!this.contains_0(r.element_0))return !1;var i=r.left_0;if(!t.isType(i,Ki))return this.contains_0(t.isType(n=i,Ui)?n:tn());r=i;}},Ki.prototype.equals=function(e){return this===e||t.isType(e,Ki)&&e.size_0()===this.size_0()&&e.containsAll_0(this)},Ki.prototype.hashCode=function(){return C(this.left_0)+C(this.element_0)|0},Ki.prototype.toString=function(){return "["+this.fold_3cc69b$("",Zi)+"]"},Ki.prototype.writeReplace_0=function(){var e,n,r,i=this.size_0(),o=t.newArray(i,null),a={v:0};if(this.fold_3cc69b$($t(),(n=o,r=a,function(t,e){var i;return n[(i=r.v,r.v=i+1|0,i)]=e,dt})),a.v!==i)throw Lt("Check failed.".toString());return new Hi(t.isArray(e=o)?e:tn())};var Gi,Qi,Yi;function to(){return ro()}function eo(t,e){$.call(this),this.name$=t,this.ordinal$=e;}function no(){no=function(){},Gi=new eo("COROUTINE_SUSPENDED",0),Qi=new eo("UNDECIDED",1),Yi=new eo("RESUMED",2);}function ro(){return no(),Gi}function io(){return no(),Qi}function oo(){return no(),Yi}function ao(t,e){var n=t%e|0;return n>=0?n:n+e|0}function so(t,e){var n=t.modulo(e);return n.toNumber()>=0?n:n.add(e)}function uo(t,e,n){return ao(ao(t,n)-ao(e,n)|0,n)}function po(t,e,n){return so(so(t,n).subtract(so(e,n)),n)}function co(t,e,n){if(n>0)return t>=e?e:e-uo(e,t,n)|0;if(n<0)return t<=e?e:e+uo(t,e,0|-n)|0;throw zt("Step is zero.")}function lo(t,e,n){if(n.toNumber()>0)return t.compareTo_11rb$(e)>=0?e:e.subtract(po(e,t,n));if(n.toNumber()<0)return t.compareTo_11rb$(e)<=0?e:e.add(po(t,e,n.unaryMinus()));throw zt("Step is zero.")}function ho(t,e){yo(),So.call(this,t,e,1);}function fo(){_o=this,this.EMPTY=new ho(c(1),c(0));}Hi.prototype.readResolve_0=function(){var t,e=this.elements,n=Wi();for(t=0;t!==e.length;++t){var r=e[t];n=n.plus_1fupul$(r);}return n},Hi.$metadata$={kind:n,simpleName:"Serialized",interfaces:[nn]},Ki.$metadata$={kind:n,simpleName:"CombinedContext",interfaces:[nn,Pi]},r("kotlin.kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn_zb0pmy$",i((function(){var t=e.kotlin.NotImplementedError;return function(e,n){throw new t("Implementation of suspendCoroutineUninterceptedOrReturn is intrinsic")}}))),eo.$metadata$={kind:n,simpleName:"CoroutineSingletons",interfaces:[$]},eo.values=function(){return [ro(),io(),oo()]},eo.valueOf_61zpoe$=function(t){switch(t){case"COROUTINE_SUSPENDED":return ro();case"UNDECIDED":return io();case"RESUMED":return oo();default:en("No enum constant kotlin.coroutines.intrinsics.CoroutineSingletons."+t);}},Object.defineProperty(ho.prototype,"start",{configurable:!0,get:function(){return a(this.first)}}),Object.defineProperty(ho.prototype,"endInclusive",{configurable:!0,get:function(){return a(this.last)}}),Object.defineProperty(ho.prototype,"endExclusive",{configurable:!0,get:function(){if(this.last===O.MAX_VALUE)throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return a(c(this.last+1))}}),ho.prototype.contains_mef7kx$=function(t){return this.first<=t&&t<=this.last},ho.prototype.isEmpty=function(){return this.first>this.last},ho.prototype.equals=function(e){return t.isType(e,ho)&&(this.isEmpty()&&e.isEmpty()||this.first===e.first&&this.last===e.last)},ho.prototype.hashCode=function(){return this.isEmpty()?-1:(31*(0|this.first)|0)+(0|this.last)|0},ho.prototype.toString=function(){return String.fromCharCode(this.first)+".."+String.fromCharCode(this.last)},fo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var _o=null;function yo(){return null===_o&&new fo,_o}function mo(t,e){vo(),zo.call(this,t,e,1);}function $o(){go=this,this.EMPTY=new mo(1,0);}ho.$metadata$={kind:n,simpleName:"CharRange",interfaces:[Uo,Bo,So]},Object.defineProperty(mo.prototype,"start",{configurable:!0,get:function(){return this.first}}),Object.defineProperty(mo.prototype,"endInclusive",{configurable:!0,get:function(){return this.last}}),Object.defineProperty(mo.prototype,"endExclusive",{configurable:!0,get:function(){if(2147483647===this.last)throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return this.last+1|0}}),mo.prototype.contains_mef7kx$=function(t){return this.first<=t&&t<=this.last},mo.prototype.isEmpty=function(){return this.first>this.last},mo.prototype.equals=function(e){return t.isType(e,mo)&&(this.isEmpty()&&e.isEmpty()||this.first===e.first&&this.last===e.last)},mo.prototype.hashCode=function(){return this.isEmpty()?-1:(31*this.first|0)+this.last|0},mo.prototype.toString=function(){return this.first.toString()+".."+this.last},$o.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var go=null;function vo(){return null===go&&new $o,go}function bo(t,e){ko(),Mo.call(this,t,e,S);}function xo(){wo=this,this.EMPTY=new bo(S,u);}mo.$metadata$={kind:n,simpleName:"IntRange",interfaces:[Uo,Bo,zo]},Object.defineProperty(bo.prototype,"start",{configurable:!0,get:function(){return this.first}}),Object.defineProperty(bo.prototype,"endInclusive",{configurable:!0,get:function(){return this.last}}),Object.defineProperty(bo.prototype,"endExclusive",{configurable:!0,get:function(){if(o(this.last,f))throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return this.last.add(t.Long.fromInt(1))}}),bo.prototype.contains_mef7kx$=function(t){return this.first.compareTo_11rb$(t)<=0&&t.compareTo_11rb$(this.last)<=0},bo.prototype.isEmpty=function(){return this.first.compareTo_11rb$(this.last)>0},bo.prototype.equals=function(e){return t.isType(e,bo)&&(this.isEmpty()&&e.isEmpty()||o(this.first,e.first)&&o(this.last,e.last))},bo.prototype.hashCode=function(){return this.isEmpty()?-1:t.Long.fromInt(31).multiply(this.first.xor(this.first.shiftRightUnsigned(32))).add(this.last.xor(this.last.shiftRightUnsigned(32))).toInt()},bo.prototype.toString=function(){return this.first.toString()+".."+this.last.toString()},xo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var wo=null;function ko(){return null===wo&&new xo,wo}function Co(t,e,n){ni.call(this),this.step=n,this.finalElement_0=0|e,this.hasNext_0=this.step>0?t<=e:t>=e,this.next_0=this.hasNext_0?0|t:this.finalElement_0;}function Oo(t,e,n){ri.call(this),this.step=n,this.finalElement_0=e,this.hasNext_0=this.step>0?t<=e:t>=e,this.next_0=this.hasNext_0?t:this.finalElement_0;}function No(t,e,n){ii.call(this),this.step=n,this.finalElement_0=e,this.hasNext_0=this.step.toNumber()>0?t.compareTo_11rb$(e)<=0:t.compareTo_11rb$(e)>=0,this.next_0=this.hasNext_0?t:this.finalElement_0;}function So(t,e,n){if(Ao(),0===n)throw zt("Step must be non-zero.");if(-2147483648===n)throw zt("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=c(co(0|t,0|e,n)),this.step=n;}function Io(){Eo=this;}bo.$metadata$={kind:n,simpleName:"LongRange",interfaces:[Uo,Bo,Mo]},Co.prototype.hasNext=function(){return this.hasNext_0},Co.prototype.nextChar=function(){var t=this.next_0;if(t===this.finalElement_0){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0+this.step|0;return c(t)},Co.$metadata$={kind:n,simpleName:"CharProgressionIterator",interfaces:[ni]},Oo.prototype.hasNext=function(){return this.hasNext_0},Oo.prototype.nextInt=function(){var t=this.next_0;if(t===this.finalElement_0){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0+this.step|0;return t},Oo.$metadata$={kind:n,simpleName:"IntProgressionIterator",interfaces:[ri]},No.prototype.hasNext=function(){return this.hasNext_0},No.prototype.nextLong=function(){var t=this.next_0;if(o(t,this.finalElement_0)){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0.add(this.step);return t},No.$metadata$={kind:n,simpleName:"LongProgressionIterator",interfaces:[ii]},So.prototype.iterator=function(){return new Co(this.first,this.last,this.step)},So.prototype.isEmpty=function(){return this.step>0?this.first>this.last:this.first0?String.fromCharCode(this.first)+".."+String.fromCharCode(this.last)+" step "+this.step:String.fromCharCode(this.first)+" downTo "+String.fromCharCode(this.last)+" step "+(0|-this.step)},Io.prototype.fromClosedRange_ayra44$=function(t,e,n){return new So(t,e,n)},Io.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Eo=null;function Ao(){return null===Eo&&new Io,Eo}function zo(t,e,n){if(To(),0===n)throw zt("Step must be non-zero.");if(-2147483648===n)throw zt("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=co(t,e,n),this.step=n;}function jo(){Lo=this;}So.$metadata$={kind:n,simpleName:"CharProgression",interfaces:[tt]},zo.prototype.iterator=function(){return new Oo(this.first,this.last,this.step)},zo.prototype.isEmpty=function(){return this.step>0?this.first>this.last:this.first0?this.first.toString()+".."+this.last+" step "+this.step:this.first.toString()+" downTo "+this.last+" step "+(0|-this.step)},jo.prototype.fromClosedRange_qt1dr2$=function(t,e,n){return new zo(t,e,n)},jo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Lo=null;function To(){return null===Lo&&new jo,Lo}function Mo(t,e,n){if(qo(),o(n,u))throw zt("Step must be non-zero.");if(o(n,h))throw zt("Step must be greater than Long.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=lo(t,e,n),this.step=n;}function Ro(){Po=this;}zo.$metadata$={kind:n,simpleName:"IntProgression",interfaces:[tt]},Mo.prototype.iterator=function(){return new No(this.first,this.last,this.step)},Mo.prototype.isEmpty=function(){return this.step.toNumber()>0?this.first.compareTo_11rb$(this.last)>0:this.first.compareTo_11rb$(this.last)<0},Mo.prototype.equals=function(e){return t.isType(e,Mo)&&(this.isEmpty()&&e.isEmpty()||o(this.first,e.first)&&o(this.last,e.last)&&o(this.step,e.step))},Mo.prototype.hashCode=function(){return this.isEmpty()?-1:t.Long.fromInt(31).multiply(t.Long.fromInt(31).multiply(this.first.xor(this.first.shiftRightUnsigned(32))).add(this.last.xor(this.last.shiftRightUnsigned(32)))).add(this.step.xor(this.step.shiftRightUnsigned(32))).toInt()},Mo.prototype.toString=function(){return this.step.toNumber()>0?this.first.toString()+".."+this.last.toString()+" step "+this.step.toString():this.first.toString()+" downTo "+this.last.toString()+" step "+this.step.unaryMinus().toString()},Ro.prototype.fromClosedRange_b9bd0d$=function(t,e,n){return new Mo(t,e,n)},Ro.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Po=null;function qo(){return null===Po&&new Ro,Po}function Bo(){}function Uo(){}function Vo(){}function Wo(e,n,r){null!=r?e.append_gw00v9$(r(n)):null==n||t.isCharSequence(n)?e.append_gw00v9$(n):t.isChar(n)?e.append_s8itvh$(s(n)):e.append_gw00v9$(_(n));}function Ko(t,e,n){if(void 0===n&&(n=!1),t===e)return !0;if(!n)return !1;var r=Gn(t),i=Gn(e),o=r===i;return o||(o=String.fromCharCode(r).toLowerCase().charCodeAt(0)===String.fromCharCode(i).toLowerCase().charCodeAt(0)),o}function Zo(t){return Ho(t,10)}function Ho(e,n){tr(n);var r,i,o,a=e.length;if(0===a)return null;var s=e.charCodeAt(0);if(s<48){if(1===a)return null;if(r=1,45===s)i=!0,o=-2147483648;else {if(43!==s)return null;i=!1,o=-2147483647;}}else r=0,i=!1,o=-2147483647;for(var u=-59652323,p=u,c=0,l=r;l(t.length-i|0)||r>(n.length-i|0))return !1;for(var a=0;a0&&Ko(t.charCodeAt(0),e,n)}function ra(t,e,n){return void 0===n&&(n=!1),t.length>0&&Ko(t.charCodeAt(ta(t)),e,n)}function ia(t,e,n,r){var i,o;if(void 0===n&&(n=0),void 0===r&&(r=!1),!r&&1===e.length&&"string"==typeof t){var u=j(e);return t.indexOf(String.fromCharCode(u),n)}i=H(n,0),o=ta(t);for(var p=i;p<=o;p++){var c,l=t.charCodeAt(p);t:do{var h;for(h=0;h!==e.length;++h){var f=s(e[h]);if(Ko(s(a(f)),l,r)){c=!0;break t}}c=!1;}while(0);if(c)return p}return -1}function oa(e,n,r,i){return void 0===r&&(r=0),void 0===i&&(i=!1),i||"string"!=typeof e?ia(e,t.charArrayOf(n),r,i):e.indexOf(String.fromCharCode(n),r)}function aa(t,e,n){return void 0===n&&(n=!1),oa(t,e,void 0,n)>=0}function sa(t){if(!(t>=0))throw zt(("Limit must be non-negative, but was "+t).toString())}function ua(){}function pa(){}function ca(){}function la(t){this.match=t;}function ha(){}function fa(){_a=this;}Mo.$metadata$={kind:n,simpleName:"LongProgression",interfaces:[tt]},Bo.prototype.contains_mef7kx$=function(e){return t.compareTo(e,this.start)>=0&&t.compareTo(e,this.endInclusive)<=0},Bo.prototype.isEmpty=function(){return t.compareTo(this.start,this.endInclusive)>0},Bo.$metadata$={kind:d,simpleName:"ClosedRange",interfaces:[]},Uo.prototype.contains_mef7kx$=function(e){return t.compareTo(e,this.start)>=0&&t.compareTo(e,this.endExclusive)<0},Uo.prototype.isEmpty=function(){return t.compareTo(this.start,this.endExclusive)>=0},Uo.$metadata$={kind:d,simpleName:"OpenEndRange",interfaces:[]},Vo.$metadata$={kind:d,simpleName:"KClassifier",interfaces:[]},Yo.prototype.nextChar=function(){var t,e;return t=this.index_0,this.index_0=t+1|0,e=t,this.this$iterator.charCodeAt(e)},Yo.prototype.hasNext=function(){return this.index_00?R(t):Ei()},Sa.hashSetOf_i5x0yv$=Ai,Sa.optimizeReadOnlySet_94kdbt$=zi,La.Continuation=ji,Oa.Result=$a,Ta.get_COROUTINE_SUSPENDED=to,Object.defineProperty(Li,"Key",{get:Ri}),La.ContinuationInterceptor=Li,Pi.Key=Bi,Pi.Element=Ui,La.CoroutineContext=Pi,La.AbstractCoroutineContextElement=Fi,Object.defineProperty(La,"EmptyCoroutineContext",{get:Wi}),La.CombinedContext=Ki,Object.defineProperty(Ta,"COROUTINE_SUSPENDED",{get:to}),Object.defineProperty(eo,"COROUTINE_SUSPENDED",{get:ro}),Object.defineProperty(eo,"UNDECIDED",{get:io}),Object.defineProperty(eo,"RESUMED",{get:oo}),Ta.CoroutineSingletons=eo,Na.getProgressionLastElement_qt1dr2$=co,Na.getProgressionLastElement_b9bd0d$=lo,Object.defineProperty(ho,"Companion",{get:yo}),Ia.CharRange=ho,Object.defineProperty(mo,"Companion",{get:vo}),Ia.IntRange=mo,Object.defineProperty(bo,"Companion",{get:ko}),Ia.LongRange=bo,Ia.CharProgressionIterator=Co,Ia.IntProgressionIterator=Oo,Ia.LongProgressionIterator=No,Object.defineProperty(So,"Companion",{get:Ao}),Ia.CharProgression=So,Object.defineProperty(zo,"Companion",{get:To}),Ia.IntProgression=zo,Object.defineProperty(Mo,"Companion",{get:qo}),Ia.LongProgression=Mo,Ia.OpenEndRange=Uo,Ma.KClassifier=Vo,Ea.appendElement_k2zgzt$=Wo,Ea.equals_4lte5s$=Ko,Ea.toIntOrNull_pdl1vz$=Zo,Ea.toIntOrNull_6ic1pp$=Ho,Ea.numberFormatError_y4putb$=Jo,Ea.trimStart_wqw3xr$=Go,Ea.trimEnd_wqw3xr$=Qo,Ea.regionMatchesImpl_4c7s8r$=ea,Ea.startsWith_sgbm27$=na,Ea.endsWith_sgbm27$=ra,Ea.indexOfAny_junqau$=ia,Ea.indexOf_8eortd$=oa,Ea.indexOf_l5u8uk$=function(t,e,n,r){return void 0===n&&(n=0),void 0===r&&(r=!1),r||"string"!=typeof t?function(t,e,n,r,i,o){var a,s;void 0===o&&(o=!1);var u=o?K(J(n,ta(t)),H(r,0)):new mo(H(n,0),J(r,t.length));if("string"==typeof t&&"string"==typeof e)for(a=u.iterator();a.hasNext();){var p=a.next();if(wr(e,0,t,p,e.length,i))return p}else for(s=u.iterator();s.hasNext();){var c=s.next();if(ea(e,0,t,c,e.length,i))return c}return -1}(t,e,n,t.length,r):t.indexOf(e,n)},Ea.contains_sgbm27$=aa,Ea.requireNonNegativeLimit_kcn2v3$=sa,Ea.MatchGroupCollection=ua,Ea.MatchNamedGroupCollection=pa,ca.Destructured=la,Ea.MatchResult=ca,Oa.Lazy=ha,Object.defineProperty(Oa,"UNINITIALIZED_VALUE",{get:ya}),Oa.UnsafeLazyImpl=da,Oa.InitializedLazyImpl=ma,Oa.createFailure_tcv7n7$=wa,Object.defineProperty($a,"Companion",{get:ba}),$a.Failure=xa,Oa.throwOnFailure_iacion$=ka,Oa.NotImplementedError=Ca,ct.prototype.getOrDefault_xwzc9p$=ut.prototype.getOrDefault_xwzc9p$,zr.prototype.getOrDefault_xwzc9p$=ut.prototype.getOrDefault_xwzc9p$,ce.prototype.remove_xwzc9p$=ct.prototype.remove_xwzc9p$,je.prototype.createJsMap=Te.prototype.createJsMap,Me.prototype.createJsMap=Te.prototype.createJsMap,Object.defineProperty(fr.prototype,"destructured",Object.getOwnPropertyDescriptor(ca.prototype,"destructured")),ut.prototype.getOrDefault_xwzc9p$,ct.prototype.remove_xwzc9p$,ct.prototype.getOrDefault_xwzc9p$,ut.prototype.getOrDefault_xwzc9p$,Ui.prototype.plus_1fupul$=Pi.prototype.plus_1fupul$,Li.prototype.fold_3cc69b$=Ui.prototype.fold_3cc69b$,Li.prototype.plus_1fupul$=Ui.prototype.plus_1fupul$,Fi.prototype.get_j3r2sn$=Ui.prototype.get_j3r2sn$,Fi.prototype.fold_3cc69b$=Ui.prototype.fold_3cc69b$,Fi.prototype.minusKey_yeqjby$=Ui.prototype.minusKey_yeqjby$,Fi.prototype.plus_1fupul$=Ui.prototype.plus_1fupul$,Ki.prototype.plus_1fupul$=Pi.prototype.plus_1fupul$,Bo.prototype.contains_mef7kx$,Bo.prototype.isEmpty,Uo.prototype.contains_mef7kx$,Uo.prototype.isEmpty,"undefined"!=typeof process&&process.versions&&process.versions.node?new Je(process.stdout):new Qe,new Xe(Wi(),(function(e){var n;return ka(e),null==(n=e.value)||t.isType(n,b)||y(),dt})),qn=t.newArray(0,null),new Qt((function(t,e){return xr(t,e,!0)})),new Int8Array([l(239),l(191),l(189)]),new $a(to());}();},void 0===(r=n.apply(e,[e]))||(t.exports=r);},42:function(t,e,n){var r,i,o;i=[e,n(421)],void 0===(o="function"==typeof(r=function(t,e){var n=e.Kind.OBJECT,r=e.Kind.CLASS,i=(e.kotlin.js.internal.StringCompanionObject,Error),o=e.Kind.INTERFACE,a=e.toChar,s=e.ensureNotNull,u=e.kotlin.Unit,p=(e.kotlin.js.internal.IntCompanionObject,e.kotlin.js.internal.LongCompanionObject,e.kotlin.js.internal.FloatCompanionObject,e.kotlin.js.internal.DoubleCompanionObject,e.kotlin.collections.MutableIterator),c=e.hashCode,l=e.throwCCE,h=e.equals,f=e.kotlin.collections.MutableIterable,_=e.kotlin.collections.ArrayList_init_mqih57$,y=e.getKClass,d=e.kotlin.collections.Iterator,m=e.toByte,$=e.kotlin.collections.Iterable,g=e.toString,v=e.unboxChar,b=e.kotlin.collections.joinToString_fmv235$,x=e.kotlin.collections.setOf_i5x0yv$,w=e.kotlin.collections.ArrayList_init_ww73n8$,k=e.kotlin.text.iterator_gw00vp$,C=e.toBoxedChar,O=Math,N=e.kotlin.text.Regex_init_61zpoe$,S=e.kotlin.lazy_klfg04$,I=e.kotlin.text.replace_680rmw$,E=e.kotlin.Annotation,A=String,z=e.kotlin.text.indexOf_l5u8uk$,j=e.kotlin.NumberFormatException,L=e.kotlin.Exception,T=Object,M=e.kotlin.collections.MutableList;function R(){P=this;}J.prototype=Object.create(i.prototype),J.prototype.constructor=J,G.prototype=Object.create(i.prototype),G.prototype.constructor=G,Y.prototype=Object.create(i.prototype),Y.prototype.constructor=Y,X.prototype=Object.create(i.prototype),X.prototype.constructor=X,nt.prototype=Object.create(i.prototype),nt.prototype.constructor=nt,at.prototype=Object.create(xt.prototype),at.prototype.constructor=at,bt.prototype=Object.create(i.prototype),bt.prototype.constructor=bt,St.prototype=Object.create(Pt.prototype),St.prototype.constructor=St,At.prototype=Object.create(Yt.prototype),At.prototype.constructor=At,qt.prototype=Object.create(Yt.prototype),qt.prototype.constructor=qt,Bt.prototype=Object.create(Yt.prototype),Bt.prototype.constructor=Bt,Ut.prototype=Object.create(Yt.prototype),Ut.prototype.constructor=Ut,Qt.prototype=Object.create(Yt.prototype),Qt.prototype.constructor=Qt,ue.prototype=Object.create(i.prototype),ue.prototype.constructor=ue,ce.prototype=Object.create(ne.prototype),ce.prototype.constructor=ce,pe.prototype=Object.create(_e.prototype),pe.prototype.constructor=pe,de.prototype=Object.create(_e.prototype),de.prototype.constructor=de,ge.prototype=Object.create(xt.prototype),ge.prototype.constructor=ge,ve.prototype=Object.create(i.prototype),ve.prototype.constructor=ve,be.prototype=Object.create(i.prototype),be.prototype.constructor=be,Te.prototype=Object.create(Le.prototype),Te.prototype.constructor=Te,Me.prototype=Object.create(Le.prototype),Me.prototype.constructor=Me,Re.prototype=Object.create(Le.prototype),Re.prototype.constructor=Re,qe.prototype=Object.create(i.prototype),qe.prototype.constructor=qe,Be.prototype=Object.create(i.prototype),Be.prototype.constructor=Be,We.prototype=Object.create(i.prototype),We.prototype.constructor=We,Ze.prototype=Object.create(Re.prototype),Ze.prototype.constructor=Ze,He.prototype=Object.create(Re.prototype),He.prototype.constructor=He,Je.prototype=Object.create(Re.prototype),Je.prototype.constructor=Je,Ge.prototype=Object.create(Re.prototype),Ge.prototype.constructor=Ge,Qe.prototype=Object.create(Re.prototype),Qe.prototype.constructor=Qe,Ye.prototype=Object.create(Re.prototype),Ye.prototype.constructor=Ye,Xe.prototype=Object.create(Re.prototype),Xe.prototype.constructor=Xe,tn.prototype=Object.create(Re.prototype),tn.prototype.constructor=tn,en.prototype=Object.create(Re.prototype),en.prototype.constructor=en,nn.prototype=Object.create(Re.prototype),nn.prototype.constructor=nn,R.prototype.fill_ugzc7n$=function(t,e){var n;n=t.length-1|0;for(var r=0;r<=n;r++)t[r]=e;},R.$metadata$={kind:n,simpleName:"Arrays",interfaces:[]};var P=null;function q(){return null===P&&new R,P}function B(t){void 0===t&&(t=""),this.src=t;}function U(t){this.this$ByteInputStream=t,this.next=0;}function F(){D=this;}U.prototype.read_8chfmy$=function(t,e,n){var r,i,o=0;r=e+n-1|0;for(var a=e;a<=r&&!(this.next>=this.this$ByteInputStream.src.length);a++)t[a]=this.this$ByteInputStream.src.charCodeAt((i=this.next,this.next=i+1|0,i)),o=o+1|0;return 0===o?-1:o},U.$metadata$={kind:r,interfaces:[et]},B.prototype.bufferedReader=function(){return new U(this)},B.prototype.reader=function(){return this.bufferedReader()},B.$metadata$={kind:r,simpleName:"ByteInputStream",interfaces:[Q]},F.prototype.isWhitespace_s8itvh$=function(t){var e;switch(t){case 32:case 9:case 10:case 13:e=!0;break;default:e=!1;}return e},F.$metadata$={kind:n,simpleName:"Character",interfaces:[]};var D=null;function V(){W=this;}V.prototype.unmodifiableList_zfnyf4$=function(t){yt("not implemented");},V.$metadata$={kind:n,simpleName:"Collections",interfaces:[]};var W=null;function K(){return null===W&&new V,W}function Z(t,e,n,r,i){var o,a,s=n;o=r+i-1|0;for(var u=r;u<=o;u++)e[(a=s,s=a+1|0,a)]=t.charCodeAt(u);}function H(t,e,n,r){return zn().create_8chfmy$(e,n,r)}function J(t){void 0===t&&(t=null),i.call(this),this.message_opjsbb$_0=t,this.cause_18nhvr$_0=null,e.captureStack(i,this),this.name="IOException";}function G(t){void 0===t&&(t=null),i.call(this),this.message_nykor0$_0=t,this.cause_n038z2$_0=null,e.captureStack(i,this),this.name="IllegalArgumentException";}function Q(){}function Y(t){void 0===t&&(t=null),i.call(this),this.message_77za5l$_0=t,this.cause_jiegcr$_0=null,e.captureStack(i,this),this.name="NullPointerException";}function X(){i.call(this),this.message_l78tod$_0=void 0,this.cause_y27uld$_0=null,e.captureStack(i,this),this.name="NumberFormatException";}function tt(){}function et(){}function nt(t){void 0===t&&(t=null),i.call(this),this.message_2hhrll$_0=t,this.cause_blbmi1$_0=null,e.captureStack(i,this),this.name="RuntimeException";}function rt(t,e){return e=e||Object.create(nt.prototype),nt.call(e,t.message),e}function it(){this.value="";}function ot(t){this.string=t,this.nextPos_0=0;}function at(){Ot(this),this.value="";}function st(t,e){e();}function ut(t){return new B(t)}function pt(t,e,n){yt("implement");}function ct(t,e){yt("implement");}function lt(t,e,n){yt("implement");}function ht(t,e,n){yt("implement");}function ft(t,e){yt("implement");}function _t(t,e){yt("implement");}function yt(t){throw e.newThrowable(t)}function dt(t,e){yt("implement");}function mt(t,e){yt("implement");}function $t(t,e){yt("implement");}function gt(t,e){yt("implement");}function vt(t,e){yt("implement");}function bt(t){void 0===t&&(t=null),i.call(this),this.message_3rkdyj$_0=t,this.cause_2kxft9$_0=null,e.captureStack(i,this),this.name="UnsupportedOperationException";}function xt(){Ct(),this.writeBuffer_9jar4r$_0=null,this.lock=null;}function wt(){kt=this,this.WRITE_BUFFER_SIZE_0=1024;}Object.defineProperty(J.prototype,"message",{get:function(){return this.message_opjsbb$_0}}),Object.defineProperty(J.prototype,"cause",{get:function(){return this.cause_18nhvr$_0}}),J.$metadata$={kind:r,simpleName:"IOException",interfaces:[i]},Object.defineProperty(G.prototype,"message",{get:function(){return this.message_nykor0$_0}}),Object.defineProperty(G.prototype,"cause",{get:function(){return this.cause_n038z2$_0}}),G.$metadata$={kind:r,simpleName:"IllegalArgumentException",interfaces:[i]},Q.$metadata$={kind:o,simpleName:"InputStream",interfaces:[]},Object.defineProperty(Y.prototype,"message",{get:function(){return this.message_77za5l$_0}}),Object.defineProperty(Y.prototype,"cause",{get:function(){return this.cause_jiegcr$_0}}),Y.$metadata$={kind:r,simpleName:"NullPointerException",interfaces:[i]},Object.defineProperty(X.prototype,"message",{get:function(){return this.message_l78tod$_0}}),Object.defineProperty(X.prototype,"cause",{get:function(){return this.cause_y27uld$_0}}),X.$metadata$={kind:r,simpleName:"NumberFormatException",interfaces:[i]},tt.prototype.defaultReadObject=function(){yt("not implemented");},tt.$metadata$={kind:o,simpleName:"ObjectInputStream",interfaces:[]},et.$metadata$={kind:o,simpleName:"Reader",interfaces:[]},Object.defineProperty(nt.prototype,"message",{get:function(){return this.message_2hhrll$_0}}),Object.defineProperty(nt.prototype,"cause",{get:function(){return this.cause_blbmi1$_0}}),nt.$metadata$={kind:r,simpleName:"RuntimeException",interfaces:[i]},Object.defineProperty(it.prototype,"length",{configurable:!0,get:function(){return this.value.length},set:function(t){this.value=this.value.substring(0,t);}}),it.prototype.append_8chfmy$=function(t,e,n){var r;r=e+n-1|0;for(var i=e;i<=r;i++)this.value+=String.fromCharCode(t[i]);},it.prototype.append_s8itvh$=function(t){this.value+=String.fromCharCode(t);},it.prototype.append_61zpoe$=function(t){var e;e=t.length-1|0;for(var n=0;n<=e;n++)this.value+=String.fromCharCode(t.charCodeAt(n));},it.prototype.isEmpty=function(){return 0===this.length},it.prototype.toString=function(){return this.value},it.prototype.byteInputStream=function(){return new B(this.value)},it.$metadata$={kind:r,simpleName:"StringBuilder",interfaces:[]},ot.prototype.read_8chfmy$=function(t,e,n){var r,i,o=0;r=e+n-1|0;for(var a=e;a<=r&&!(this.nextPos_0>=this.string.length);a++)t[a]=this.string.charCodeAt((i=this.nextPos_0,this.nextPos_0=i+1|0,i)),o=o+1|0;return o>0?o:-1},ot.$metadata$={kind:r,simpleName:"StringReader",interfaces:[et]},at.prototype.write_8chfmy$=function(t,e,n){var r;r=e+n-1|0;for(var i=e;i<=r;i++)this.value+=String.fromCharCode(t[i]);},at.prototype.flush=function(){this.value="";},at.prototype.close=function(){},at.prototype.toString=function(){return this.value},at.$metadata$={kind:r,simpleName:"StringWriter",interfaces:[xt]},Object.defineProperty(bt.prototype,"message",{get:function(){return this.message_3rkdyj$_0}}),Object.defineProperty(bt.prototype,"cause",{get:function(){return this.cause_2kxft9$_0}}),bt.$metadata$={kind:r,simpleName:"UnsupportedOperationException",interfaces:[i]},xt.prototype.write_za3lpa$=function(t){var n,r;st(this.lock,(n=this,r=t,function(){return null==n.writeBuffer_9jar4r$_0&&(n.writeBuffer_9jar4r$_0=e.charArray(Ct().WRITE_BUFFER_SIZE_0)),s(n.writeBuffer_9jar4r$_0)[0]=a(r),n.write_8chfmy$(s(n.writeBuffer_9jar4r$_0),0,1),u}));},xt.prototype.write_4hbowm$=function(t){this.write_8chfmy$(t,0,t.length);},xt.prototype.write_61zpoe$=function(t){this.write_3m52m6$(t,0,t.length);},xt.prototype.write_3m52m6$=function(t,n,r){var i,o,a,p;st(this.lock,(i=r,o=this,a=t,p=n,function(){var t;return i<=Ct().WRITE_BUFFER_SIZE_0?(null==o.writeBuffer_9jar4r$_0&&(o.writeBuffer_9jar4r$_0=e.charArray(Ct().WRITE_BUFFER_SIZE_0)),t=s(o.writeBuffer_9jar4r$_0)):t=e.charArray(i),Z(a,t,0,p,p+i|0),o.write_8chfmy$(t,0,i),u}));},xt.prototype.append_gw00v9$=function(t){return null==t?this.write_61zpoe$("null"):this.write_61zpoe$(t.toString()),this},xt.prototype.append_ezbsdh$=function(t,n,r){var i=null!=t?t:"null";return this.write_61zpoe$(e.subSequence(i,n,r).toString()),this},xt.prototype.append_s8itvh$=function(t){return this.write_za3lpa$(0|t),this},wt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var kt=null;function Ct(){return null===kt&&new wt,kt}function Ot(t){return t=t||Object.create(xt.prototype),xt.call(t),t.lock=t,t}function Nt(){It=this,this.NULL=new qt("null"),this.TRUE=new qt("true"),this.FALSE=new qt("false");}function St(){Pt.call(this),this.value_wcgww9$_0=null;}xt.$metadata$={kind:r,simpleName:"Writer",interfaces:[]},Nt.prototype.value_za3lpa$=function(t){return new Bt(ht())},Nt.prototype.value_s8cxhz$=function(t){return new Bt(lt())},Nt.prototype.value_mx4ult$=function(t){if($t()||mt())throw new G("Infinite and NaN values not permitted in JSON");return new Bt(this.cutOffPointZero_0(ft()))},Nt.prototype.value_14dthe$=function(t){if(vt()||gt())throw new G("Infinite and NaN values not permitted in JSON");return new Bt(this.cutOffPointZero_0(_t()))},Nt.prototype.value_pdl1vj$=function(t){return null==t?this.NULL:new Qt(t)},Nt.prototype.value_6taknv$=function(t){return t?this.TRUE:this.FALSE},Nt.prototype.array=function(){return Mt()},Nt.prototype.array_pmhfmb$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_za3lpa$(r);}return n},Nt.prototype.array_2muz52$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_s8cxhz$(r);}return n},Nt.prototype.array_8cqhcw$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_mx4ult$(r);}return n},Nt.prototype.array_yqxtqz$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_14dthe$(r);}return n},Nt.prototype.array_wwrst0$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_6taknv$(r);}return n},Nt.prototype.array_vqirvp$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_61zpoe$(r);}return n},Nt.prototype.object=function(){return Jt()},Nt.prototype.parse_61zpoe$=function(t){return (new yn).parse_61zpoe$(t)},Nt.prototype.parse_6nb378$=function(t){return (new yn).streamToValue(new Cn(t))},Nt.prototype.cutOffPointZero_0=function(t){var e;if(dt()){var n=t.length-2|0;e=t.substring(0,n);}else e=t;return e},Object.defineProperty(St.prototype,"value",{configurable:!0,get:function(){return this.value_wcgww9$_0},set:function(t){this.value_wcgww9$_0=t;}}),St.prototype.startArray=function(){return Mt()},St.prototype.startObject=function(){return Jt()},St.prototype.endNull=function(){this.value=Et().NULL;},St.prototype.endBoolean_6taknv$=function(t){this.value=t?Et().TRUE:Et().FALSE;},St.prototype.endString_61zpoe$=function(t){this.value=new Qt(t);},St.prototype.endNumber_61zpoe$=function(t){this.value=new Bt(t);},St.prototype.endArray_11rb$=function(t){this.value=t;},St.prototype.endObject_11rc$=function(t){this.value=t;},St.prototype.endArrayValue_11rb$=function(t){null!=t&&t.add_luq74r$(this.value);},St.prototype.endObjectValue_otyqx2$=function(t,e){null!=t&&t.add_8kvr2e$(e,this.value);},St.$metadata$={kind:r,simpleName:"DefaultHandler",interfaces:[Pt]},Nt.$metadata$={kind:n,simpleName:"Json",interfaces:[]};var It=null;function Et(){return null===It&&new Nt,It}function At(){Tt(),this.values_0=null;}function zt(t){this.closure$iterator=t;}function jt(){Lt=this;}Object.defineProperty(At.prototype,"isEmpty",{configurable:!0,get:function(){return this.values_0.isEmpty()}}),At.prototype.add_za3lpa$=function(t){return this.values_0.add_11rb$(Et().value_za3lpa$(t)),this},At.prototype.add_s8cxhz$=function(t){return this.values_0.add_11rb$(Et().value_s8cxhz$(t)),this},At.prototype.add_mx4ult$=function(t){return this.values_0.add_11rb$(Et().value_mx4ult$(t)),this},At.prototype.add_14dthe$=function(t){return this.values_0.add_11rb$(Et().value_14dthe$(t)),this},At.prototype.add_6taknv$=function(t){return this.values_0.add_11rb$(Et().value_6taknv$(t)),this},At.prototype.add_61zpoe$=function(t){return this.values_0.add_11rb$(Et().value_pdl1vj$(t)),this},At.prototype.add_luq74r$=function(t){if(null==t)throw new Y("value is null");return this.values_0.add_11rb$(t),this},At.prototype.set_vux9f0$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_za3lpa$(e)),this},At.prototype.set_6svq3l$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_s8cxhz$(e)),this},At.prototype.set_24o109$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_mx4ult$(e)),this},At.prototype.set_5wr77w$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_14dthe$(e)),this},At.prototype.set_fzusl$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_6taknv$(e)),this},At.prototype.set_19mbxw$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_pdl1vj$(e)),this},At.prototype.set_zefct7$=function(t,e){if(null==e)throw new Y("value is null");return this.values_0.set_wxm5ur$(t,e),this},At.prototype.remove_za3lpa$=function(t){return this.values_0.removeAt_za3lpa$(t),this},At.prototype.size=function(){return this.values_0.size},At.prototype.get_za3lpa$=function(t){return this.values_0.get_za3lpa$(t)},At.prototype.values=function(){return K().unmodifiableList_zfnyf4$(this.values_0)},zt.prototype.hasNext=function(){return this.closure$iterator.hasNext()},zt.prototype.next=function(){return this.closure$iterator.next()},zt.prototype.remove=function(){throw new bt},zt.$metadata$={kind:r,interfaces:[p]},At.prototype.iterator=function(){return new zt(this.values_0.iterator())},At.prototype.write_l4e0ba$=function(t){t.writeArrayOpen();var e=this.iterator();if(e.hasNext())for(e.next().write_l4e0ba$(t);e.hasNext();)t.writeArraySeparator(),e.next().write_l4e0ba$(t);t.writeArrayClose();},Object.defineProperty(At.prototype,"isArray",{configurable:!0,get:function(){return !0}}),At.prototype.asArray=function(){return this},At.prototype.hashCode=function(){return c(this.values_0)},At.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,At)?r:l();return h(this.values_0,s(i).values_0)},jt.prototype.readFrom_6nb378$=function(t){return ee().readFromReader_6nb378$(t).asArray()},jt.prototype.readFrom_61zpoe$=function(t){return ee().readFrom_61zpoe$(t).asArray()},jt.prototype.unmodifiableArray_v27daa$=function(t){return Rt(t,!0)},jt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Lt=null;function Tt(){return null===Lt&&new jt,Lt}function Mt(t){return t=t||Object.create(At.prototype),Yt.call(t),At.call(t),t.values_0=new Rn,t}function Rt(t,e,n){if(n=n||Object.create(At.prototype),Yt.call(n),At.call(n),null==t)throw new Y("array is null");return n.values_0=e?K().unmodifiableList_zfnyf4$(t.values_0):_(t.values_0),n}function Pt(){this.parser_3qxlfk$_0=null;}function qt(t){Yt.call(this),this.value=t,this.isNull_35npp$_0=h("null",this.value),this.isTrue_3de4$_0=h("true",this.value),this.isFalse_6t83vt$_0=h("false",this.value);}function Bt(t){Yt.call(this),this.string_0=t;}function Ut(){Ht(),this.names_0=null,this.values_0=null,this.table_0=null;}function Ft(t,e){this.closure$namesIterator=t,this.closure$valuesIterator=e;}function Dt(t,e){this.name=t,this.value=e;}function Vt(){this.hashTable_0=new Int8Array(32);}function Wt(t){return t=t||Object.create(Vt.prototype),Vt.call(t),t}function Kt(){Zt=this;}At.$metadata$={kind:r,simpleName:"JsonArray",interfaces:[f,Yt]},Object.defineProperty(Pt.prototype,"parser",{configurable:!0,get:function(){return this.parser_3qxlfk$_0},set:function(t){this.parser_3qxlfk$_0=t;}}),Object.defineProperty(Pt.prototype,"location",{configurable:!0,get:function(){return s(this.parser).location}}),Pt.prototype.startNull=function(){},Pt.prototype.endNull=function(){},Pt.prototype.startBoolean=function(){},Pt.prototype.endBoolean_6taknv$=function(t){},Pt.prototype.startString=function(){},Pt.prototype.endString_61zpoe$=function(t){},Pt.prototype.startNumber=function(){},Pt.prototype.endNumber_61zpoe$=function(t){},Pt.prototype.startArray=function(){return null},Pt.prototype.endArray_11rb$=function(t){},Pt.prototype.startArrayValue_11rb$=function(t){},Pt.prototype.endArrayValue_11rb$=function(t){},Pt.prototype.startObject=function(){return null},Pt.prototype.endObject_11rc$=function(t){},Pt.prototype.startObjectName_11rc$=function(t){},Pt.prototype.endObjectName_otyqx2$=function(t,e){},Pt.prototype.startObjectValue_otyqx2$=function(t,e){},Pt.prototype.endObjectValue_otyqx2$=function(t,e){},Pt.$metadata$={kind:r,simpleName:"JsonHandler",interfaces:[]},Object.defineProperty(qt.prototype,"isNull",{configurable:!0,get:function(){return this.isNull_35npp$_0}}),Object.defineProperty(qt.prototype,"isTrue",{configurable:!0,get:function(){return this.isTrue_3de4$_0}}),Object.defineProperty(qt.prototype,"isFalse",{configurable:!0,get:function(){return this.isFalse_6t83vt$_0}}),Object.defineProperty(qt.prototype,"isBoolean",{configurable:!0,get:function(){return this.isTrue||this.isFalse}}),qt.prototype.write_l4e0ba$=function(t){t.writeLiteral_y4putb$(this.value);},qt.prototype.toString=function(){return this.value},qt.prototype.hashCode=function(){return c(this.value)},qt.prototype.asBoolean=function(){return this.isNull?Yt.prototype.asBoolean.call(this):this.isTrue},qt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=y(qt))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,qt)?r:l();return h(this.value,s(i).value)},qt.$metadata$={kind:r,simpleName:"JsonLiteral",interfaces:[Yt]},Object.defineProperty(Bt.prototype,"isNumber",{configurable:!0,get:function(){return !0}}),Bt.prototype.toString=function(){return this.string_0},Bt.prototype.write_l4e0ba$=function(t){t.writeNumber_y4putb$(this.string_0);},Bt.prototype.asInt=function(){return Fn(0,this.string_0,10)},Bt.prototype.asLong=function(){return pt(0,this.string_0)},Bt.prototype.asFloat=function(){return ct(0,this.string_0)},Bt.prototype.asDouble=function(){return Mn(0,this.string_0)},Bt.prototype.hashCode=function(){return c(this.string_0)},Bt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Bt)?r:l();return h(this.string_0,s(i).string_0)},Bt.$metadata$={kind:r,simpleName:"JsonNumber",interfaces:[Yt]},Object.defineProperty(Ut.prototype,"isEmpty",{configurable:!0,get:function(){return this.names_0.isEmpty()}}),Object.defineProperty(Ut.prototype,"isObject",{configurable:!0,get:function(){return !0}}),Ut.prototype.add_bm4lxs$=function(t,e){return this.add_8kvr2e$(t,Et().value_za3lpa$(e)),this},Ut.prototype.add_4wgjuj$=function(t,e){return this.add_8kvr2e$(t,Et().value_s8cxhz$(e)),this},Ut.prototype.add_9sobi5$=function(t,e){return this.add_8kvr2e$(t,Et().value_mx4ult$(e)),this},Ut.prototype.add_io5o9c$=function(t,e){return this.add_8kvr2e$(t,Et().value_14dthe$(e)),this},Ut.prototype.add_ivxn3r$=function(t,e){return this.add_8kvr2e$(t,Et().value_6taknv$(e)),this},Ut.prototype.add_puj7f4$=function(t,e){return this.add_8kvr2e$(t,Et().value_pdl1vj$(e)),this},Ut.prototype.add_8kvr2e$=function(t,e){if(null==t)throw new Y("name is null");if(null==e)throw new Y("value is null");return s(this.table_0).add_bm4lxs$(t,this.names_0.size),this.names_0.add_11rb$(t),this.values_0.add_11rb$(e),this},Ut.prototype.set_bm4lxs$=function(t,e){return this.set_8kvr2e$(t,Et().value_za3lpa$(e)),this},Ut.prototype.set_4wgjuj$=function(t,e){return this.set_8kvr2e$(t,Et().value_s8cxhz$(e)),this},Ut.prototype.set_9sobi5$=function(t,e){return this.set_8kvr2e$(t,Et().value_mx4ult$(e)),this},Ut.prototype.set_io5o9c$=function(t,e){return this.set_8kvr2e$(t,Et().value_14dthe$(e)),this},Ut.prototype.set_ivxn3r$=function(t,e){return this.set_8kvr2e$(t,Et().value_6taknv$(e)),this},Ut.prototype.set_puj7f4$=function(t,e){return this.set_8kvr2e$(t,Et().value_pdl1vj$(e)),this},Ut.prototype.set_8kvr2e$=function(t,e){if(null==t)throw new Y("name is null");if(null==e)throw new Y("value is null");var n=this.indexOf_y4putb$(t);return -1!==n?this.values_0.set_wxm5ur$(n,e):(s(this.table_0).add_bm4lxs$(t,this.names_0.size),this.names_0.add_11rb$(t),this.values_0.add_11rb$(e)),this},Ut.prototype.remove_pdl1vj$=function(t){if(null==t)throw new Y("name is null");var e=this.indexOf_y4putb$(t);return -1!==e&&(s(this.table_0).remove_za3lpa$(e),this.names_0.removeAt_za3lpa$(e),this.values_0.removeAt_za3lpa$(e)),this},Ut.prototype.merge_1kkabt$=function(t){var e;if(null==t)throw new Y("object is null");for(e=t.iterator();e.hasNext();){var n=e.next();this.set_8kvr2e$(n.name,n.value);}return this},Ut.prototype.get_pdl1vj$=function(t){if(null==t)throw new Y("name is null");var e=this.indexOf_y4putb$(t);return -1!==e?this.values_0.get_za3lpa$(e):null},Ut.prototype.getInt_bm4lxs$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asInt():null)?n:e},Ut.prototype.getLong_4wgjuj$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asLong():null)?n:e},Ut.prototype.getFloat_9sobi5$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asFloat():null)?n:e},Ut.prototype.getDouble_io5o9c$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asDouble():null)?n:e},Ut.prototype.getBoolean_ivxn3r$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asBoolean():null)?n:e},Ut.prototype.getString_puj7f4$=function(t,e){var n=this.get_pdl1vj$(t);return null!=n?n.asString():e},Ut.prototype.size=function(){return this.names_0.size},Ut.prototype.names=function(){return K().unmodifiableList_zfnyf4$(this.names_0)},Ft.prototype.hasNext=function(){return this.closure$namesIterator.hasNext()},Ft.prototype.next=function(){return new Dt(this.closure$namesIterator.next(),this.closure$valuesIterator.next())},Ft.$metadata$={kind:r,interfaces:[d]},Ut.prototype.iterator=function(){return new Ft(this.names_0.iterator(),this.values_0.iterator())},Ut.prototype.write_l4e0ba$=function(t){t.writeObjectOpen();var e=this.names_0.iterator(),n=this.values_0.iterator();if(e.hasNext())for(t.writeMemberName_y4putb$(e.next()),t.writeMemberSeparator(),n.next().write_l4e0ba$(t);e.hasNext();)t.writeObjectSeparator(),t.writeMemberName_y4putb$(e.next()),t.writeMemberSeparator(),n.next().write_l4e0ba$(t);t.writeObjectClose();},Ut.prototype.asObject=function(){return this},Ut.prototype.hashCode=function(){var t=1;return (31*(t=(31*t|0)+c(this.names_0)|0)|0)+c(this.values_0)|0},Ut.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Ut)?r:l();return h(this.names_0,s(i).names_0)&&h(this.values_0,i.values_0)},Ut.prototype.indexOf_y4putb$=function(t){var e=s(this.table_0).get_za3rmp$(t);return -1!==e&&h(t,this.names_0.get_za3lpa$(e))?e:this.names_0.lastIndexOf_11rb$(t)},Ut.prototype.readObject_0=function(t){t.defaultReadObject(),this.table_0=Wt(),this.updateHashIndex_0();},Ut.prototype.updateHashIndex_0=function(){var t;t=this.names_0.size-1|0;for(var e=0;e<=t;e++)s(this.table_0).add_bm4lxs$(this.names_0.get_za3lpa$(e),e);},Dt.prototype.hashCode=function(){var t=1;return (31*(t=(31*t|0)+c(this.name)|0)|0)+c(this.value)|0},Dt.prototype.equals=function(t){var n,r,i;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var o=null==(r=t)||e.isType(r,Dt)?r:l();return h(this.name,s(o).name)&&(null!=(i=this.value)?i.equals(o.value):null)},Dt.$metadata$={kind:r,simpleName:"Member",interfaces:[]},Vt.prototype.add_bm4lxs$=function(t,e){var n=this.hashSlotFor_0(t);this.hashTable_0[n]=e<255?m(e+1|0):0;},Vt.prototype.remove_za3lpa$=function(t){var e;e=this.hashTable_0.length-1|0;for(var n=0;n<=e;n++)if(this.hashTable_0[n]===(t+1|0))this.hashTable_0[n]=0;else if(this.hashTable_0[n]>(t+1|0)){var r;(r=this.hashTable_0)[n]=m(r[n]-1);}},Vt.prototype.get_za3rmp$=function(t){var e=this.hashSlotFor_0(t);return (255&this.hashTable_0[e])-1|0},Vt.prototype.hashSlotFor_0=function(t){return c(t)&this.hashTable_0.length-1},Vt.$metadata$={kind:r,simpleName:"HashIndexTable",interfaces:[]},Kt.prototype.readFrom_6nb378$=function(t){return ee().readFromReader_6nb378$(t).asObject()},Kt.prototype.readFrom_61zpoe$=function(t){return ee().readFrom_61zpoe$(t).asObject()},Kt.prototype.unmodifiableObject_p5jd56$=function(t){return Gt(t,!0)},Kt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Zt=null;function Ht(){return null===Zt&&new Kt,Zt}function Jt(t){return t=t||Object.create(Ut.prototype),Yt.call(t),Ut.call(t),t.names_0=new Rn,t.values_0=new Rn,t.table_0=Wt(),t}function Gt(t,e,n){if(n=n||Object.create(Ut.prototype),Yt.call(n),Ut.call(n),null==t)throw new Y("object is null");return e?(n.names_0=K().unmodifiableList_zfnyf4$(t.names_0),n.values_0=K().unmodifiableList_zfnyf4$(t.values_0)):(n.names_0=_(t.names_0),n.values_0=_(t.values_0)),n.table_0=Wt(),n.updateHashIndex_0(),n}function Qt(t){Yt.call(this),this.string_0=t;}function Yt(){ee();}function Xt(){te=this,this.TRUE=new qt("true"),this.FALSE=new qt("false"),this.NULL=new qt("null");}Ut.$metadata$={kind:r,simpleName:"JsonObject",interfaces:[$,Yt]},Qt.prototype.write_l4e0ba$=function(t){t.writeString_y4putb$(this.string_0);},Object.defineProperty(Qt.prototype,"isString",{configurable:!0,get:function(){return !0}}),Qt.prototype.asString=function(){return this.string_0},Qt.prototype.hashCode=function(){return c(this.string_0)},Qt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Qt)?r:l();return h(this.string_0,s(i).string_0)},Qt.$metadata$={kind:r,simpleName:"JsonString",interfaces:[Yt]},Object.defineProperty(Yt.prototype,"isObject",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isArray",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isNumber",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isString",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isBoolean",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isTrue",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isFalse",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isNull",{configurable:!0,get:function(){return !1}}),Yt.prototype.asObject=function(){throw new bt("Not an object: "+this.toString())},Yt.prototype.asArray=function(){throw new bt("Not an array: "+this.toString())},Yt.prototype.asInt=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asLong=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asFloat=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asDouble=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asString=function(){throw new bt("Not a string: "+this.toString())},Yt.prototype.asBoolean=function(){throw new bt("Not a boolean: "+this.toString())},Yt.prototype.writeTo_j6tqms$=function(t,e){if(void 0===e&&(e=$e().MINIMAL),null==t)throw new Y("writer is null");if(null==e)throw new Y("config is null");var n=new ge(t,128);this.write_l4e0ba$(e.createWriter_97tyn8$(n)),n.flush();},Yt.prototype.toString=function(){return this.toString_fmi98k$($e().MINIMAL)},Yt.prototype.toString_fmi98k$=function(t){var n=new at;try{this.writeTo_j6tqms$(n,t);}catch(t){throw e.isType(t,J)?rt(t):t}return n.toString()},Yt.prototype.equals=function(t){return this===t},Xt.prototype.readFromReader_6nb378$=function(t){return Et().parse_6nb378$(t)},Xt.prototype.readFrom_61zpoe$=function(t){return Et().parse_61zpoe$(t)},Xt.prototype.valueOf_za3lpa$=function(t){return Et().value_za3lpa$(t)},Xt.prototype.valueOf_s8cxhz$=function(t){return Et().value_s8cxhz$(t)},Xt.prototype.valueOf_mx4ult$=function(t){return Et().value_mx4ult$(t)},Xt.prototype.valueOf_14dthe$=function(t){return Et().value_14dthe$(t)},Xt.prototype.valueOf_61zpoe$=function(t){return Et().value_pdl1vj$(t)},Xt.prototype.valueOf_6taknv$=function(t){return Et().value_6taknv$(t)},Xt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var te=null;function ee(){return null===te&&new Xt,te}function ne(t){oe(),this.writer=t;}function re(){ie=this,this.CONTROL_CHARACTERS_END_0=31,this.QUOT_CHARS_0=e.charArrayOf(92,34),this.BS_CHARS_0=e.charArrayOf(92,92),this.LF_CHARS_0=e.charArrayOf(92,110),this.CR_CHARS_0=e.charArrayOf(92,114),this.TAB_CHARS_0=e.charArrayOf(92,116),this.UNICODE_2028_CHARS_0=e.charArrayOf(92,117,50,48,50,56),this.UNICODE_2029_CHARS_0=e.charArrayOf(92,117,50,48,50,57),this.HEX_DIGITS_0=e.charArrayOf(48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102);}Yt.$metadata$={kind:r,simpleName:"JsonValue",interfaces:[]},ne.prototype.writeLiteral_y4putb$=function(t){this.writer.write_61zpoe$(t);},ne.prototype.writeNumber_y4putb$=function(t){this.writer.write_61zpoe$(t);},ne.prototype.writeString_y4putb$=function(t){ae(this.writer,34),this.writeJsonString_y4putb$(t),ae(this.writer,34);},ne.prototype.writeArrayOpen=function(){ae(this.writer,91);},ne.prototype.writeArrayClose=function(){ae(this.writer,93);},ne.prototype.writeArraySeparator=function(){ae(this.writer,44);},ne.prototype.writeObjectOpen=function(){ae(this.writer,123);},ne.prototype.writeObjectClose=function(){ae(this.writer,125);},ne.prototype.writeMemberName_y4putb$=function(t){ae(this.writer,34),this.writeJsonString_y4putb$(t),ae(this.writer,34);},ne.prototype.writeMemberSeparator=function(){ae(this.writer,58);},ne.prototype.writeObjectSeparator=function(){ae(this.writer,44);},ne.prototype.writeJsonString_y4putb$=function(t){var e,n=t.length,r=0;e=n-1|0;for(var i=0;i<=e;i++){var o=oe().getReplacementChars_0(t.charCodeAt(i));null!=o&&(this.writer.write_3m52m6$(t,r,i-r|0),this.writer.write_4hbowm$(o),r=i+1|0);}this.writer.write_3m52m6$(t,r,n-r|0);},re.prototype.getReplacementChars_0=function(t){return t>92?t<8232||t>8233?null:8232===t?this.UNICODE_2028_CHARS_0:this.UNICODE_2029_CHARS_0:92===t?this.BS_CHARS_0:t>34?null:34===t?this.QUOT_CHARS_0:(0|t)>this.CONTROL_CHARACTERS_END_0?null:10===t?this.LF_CHARS_0:13===t?this.CR_CHARS_0:9===t?this.TAB_CHARS_0:e.charArrayOf(92,117,48,48,this.HEX_DIGITS_0[(0|t)>>4&15],this.HEX_DIGITS_0[15&(0|t)])},re.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var ie=null;function oe(){return null===ie&&new re,ie}function ae(t,e){t.write_za3lpa$(0|e);}function se(t,e,n){this.offset=t,this.line=e,this.column=n;}function ue(t,n){i.call(this),this.message_72rz6e$_0=t+" at "+g(n),this.cause_95carw$_0=null,this.location=n,e.captureStack(i,this),this.name="ParseException";}function pe(t){fe(),_e.call(this),this.indentChars_0=t;}function ce(t,e){ne.call(this,t),this.indentChars_0=e,this.indent_0=0;}function le(){he=this;}ne.$metadata$={kind:r,simpleName:"JsonWriter",interfaces:[]},se.prototype.toString=function(){return this.line.toString()+":"+g(this.column)},se.prototype.hashCode=function(){return this.offset},se.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,se)?r:l();return this.offset===s(i).offset&&this.column===i.column&&this.line===i.line},se.$metadata$={kind:r,simpleName:"Location",interfaces:[]},Object.defineProperty(ue.prototype,"offset",{configurable:!0,get:function(){return this.location.offset}}),Object.defineProperty(ue.prototype,"line",{configurable:!0,get:function(){return this.location.line}}),Object.defineProperty(ue.prototype,"column",{configurable:!0,get:function(){return this.location.column}}),Object.defineProperty(ue.prototype,"message",{get:function(){return this.message_72rz6e$_0}}),Object.defineProperty(ue.prototype,"cause",{get:function(){return this.cause_95carw$_0}}),ue.$metadata$={kind:r,simpleName:"ParseException",interfaces:[i]},pe.prototype.createWriter_97tyn8$=function(t){return new ce(t,this.indentChars_0)},ce.prototype.writeArrayOpen=function(){this.indent_0=this.indent_0+1|0,this.writer.write_za3lpa$(91),this.writeNewLine_0();},ce.prototype.writeArrayClose=function(){this.indent_0=this.indent_0-1|0,this.writeNewLine_0(),this.writer.write_za3lpa$(93);},ce.prototype.writeArraySeparator=function(){this.writer.write_za3lpa$(44),this.writeNewLine_0()||this.writer.write_za3lpa$(32);},ce.prototype.writeObjectOpen=function(){this.indent_0=this.indent_0+1|0,this.writer.write_za3lpa$(123),this.writeNewLine_0();},ce.prototype.writeObjectClose=function(){this.indent_0=this.indent_0-1|0,this.writeNewLine_0(),this.writer.write_za3lpa$(125);},ce.prototype.writeMemberSeparator=function(){this.writer.write_za3lpa$(58),this.writer.write_za3lpa$(32);},ce.prototype.writeObjectSeparator=function(){this.writer.write_za3lpa$(44),this.writeNewLine_0()||this.writer.write_za3lpa$(32);},ce.prototype.writeNewLine_0=function(){var t;if(null==this.indentChars_0)return !1;this.writer.write_za3lpa$(10),t=this.indent_0-1|0;for(var e=0;e<=t;e++)this.writer.write_4hbowm$(this.indentChars_0);return !0},ce.$metadata$={kind:r,simpleName:"PrettyPrintWriter",interfaces:[ne]},le.prototype.singleLine=function(){return new pe(e.charArray(0))},le.prototype.indentWithSpaces_za3lpa$=function(t){if(t<0)throw new G("number is negative");var n=e.charArray(t);return q().fill_ugzc7n$(n,32),new pe(n)},le.prototype.indentWithTabs=function(){return new pe(e.charArrayOf(9))},le.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var he=null;function fe(){return null===he&&new le,he}function _e(){$e();}function ye(){me=this,this.MINIMAL=new de,this.PRETTY_PRINT=fe().indentWithSpaces_za3lpa$(2);}function de(){_e.call(this);}pe.$metadata$={kind:r,simpleName:"PrettyPrint",interfaces:[_e]},de.prototype.createWriter_97tyn8$=function(t){return new ne(t)},de.$metadata$={kind:r,interfaces:[_e]},ye.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var me=null;function $e(){return null===me&&new ye,me}function ge(t,n){void 0===n&&(n=16),Ot(this),this.writer_0=t,this.buffer_0=null,this.fill_0=0,this.buffer_0=e.charArray(n);}function ve(t){void 0===t&&(t=null),i.call(this),this.message_y7nasg$_0=t,this.cause_26vz5q$_0=null,e.captureStack(i,this),this.name="SyntaxException";}function be(t){void 0===t&&(t=null),i.call(this),this.message_kt89er$_0=t,this.cause_c2uidd$_0=null,e.captureStack(i,this),this.name="IoException";}function xe(t){Ce(),this.flex=t,this.myTokenType_0=null,this.bufferSequence_i8enee$_0=null,this.myTokenStart_0=0,this.myTokenEnd_0=0,this.bufferEnd_7ee91e$_0=0,this.myState_0=0,this.myFailed_0=!1;}function we(){ke=this;}_e.$metadata$={kind:r,simpleName:"WriterConfig",interfaces:[]},ge.prototype.write_za3lpa$=function(t){var e;this.fill_0>(this.buffer_0.length-1|0)&&this.flush(),this.buffer_0[(e=this.fill_0,this.fill_0=e+1|0,e)]=a(t);},ge.prototype.write_8chfmy$=function(t,e,n){this.fill_0>(this.buffer_0.length-n|0)&&(this.flush(),n>this.buffer_0.length)?this.writer_0.write_8chfmy$(t,e,n):(Un().arraycopy_yp22ie$(t,e,this.buffer_0,this.fill_0,n),this.fill_0=this.fill_0+n|0);},ge.prototype.write_3m52m6$=function(t,e,n){this.fill_0>(this.buffer_0.length-n|0)&&(this.flush(),n>this.buffer_0.length)?this.writer_0.write_3m52m6$(t,e,n):(Z(t,this.buffer_0,this.fill_0,e,n),this.fill_0=this.fill_0+n|0);},ge.prototype.flush=function(){this.writer_0.write_8chfmy$(this.buffer_0,0,this.fill_0),this.fill_0=0;},ge.prototype.close=function(){},ge.$metadata$={kind:r,simpleName:"WritingBuffer",interfaces:[xt]},Object.defineProperty(ve.prototype,"message",{get:function(){return this.message_y7nasg$_0}}),Object.defineProperty(ve.prototype,"cause",{get:function(){return this.cause_26vz5q$_0}}),ve.$metadata$={kind:r,simpleName:"SyntaxException",interfaces:[i]},Object.defineProperty(be.prototype,"message",{get:function(){return this.message_kt89er$_0}}),Object.defineProperty(be.prototype,"cause",{get:function(){return this.cause_c2uidd$_0}}),be.$metadata$={kind:r,simpleName:"IoException",interfaces:[i]},Object.defineProperty(xe.prototype,"bufferSequence",{configurable:!0,get:function(){return this.bufferSequence_i8enee$_0},set:function(t){this.bufferSequence_i8enee$_0=t;}}),Object.defineProperty(xe.prototype,"bufferEnd",{configurable:!0,get:function(){return this.bufferEnd_7ee91e$_0},set:function(t){this.bufferEnd_7ee91e$_0=t;}}),Object.defineProperty(xe.prototype,"state",{configurable:!0,get:function(){return this.locateToken_0(),this.myState_0}}),Object.defineProperty(xe.prototype,"tokenType",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenType_0}}),Object.defineProperty(xe.prototype,"tokenStart",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenStart_0}}),Object.defineProperty(xe.prototype,"tokenEnd",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenEnd_0}}),xe.prototype.start_6na8x6$=function(t,e,n,r){this.bufferSequence=t,this.myTokenEnd_0=e,this.myTokenStart_0=this.myTokenEnd_0,this.bufferEnd=n,this.flex.reset_6na8x6$(s(this.bufferSequence),e,n,r),this.myTokenType_0=null;},xe.prototype.advance=function(){this.locateToken_0(),this.myTokenType_0=null;},xe.prototype.locateToken_0=function(){if(null==this.myTokenType_0&&(this.myTokenStart_0=this.myTokenEnd_0,!this.myFailed_0))try{this.myState_0=this.flex.yystate(),this.myTokenType_0=this.flex.advance();}catch(t){if(e.isType(t,We))throw t;if(!e.isType(t,i))throw t;this.myFailed_0=!0,this.myTokenType_0=kn().BAD_CHARACTER,this.myTokenEnd_0=this.bufferEnd;}},we.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var ke=null;function Ce(){return null===ke&&new we,ke}function Oe(t){void 0===t&&(t=new Ne),this.options_0=t,this.buffer_0=new it,this.level_0=0;}function Ne(){Ae(),this.target="json",this.quoteFallback="double",this.useQuotes=!0,this.usePropertyNameQuotes=!0,this.useArrayCommas=!0,this.useObjectCommas=!0,this.indentLevel=2,this.objectItemNewline=!1,this.arrayItemNewline=!1,this.isSpaceAfterComma=!0,this.isSpaceAfterColon=!0,this.escapeUnicode=!1;}function Se(){Ee=this;}xe.$metadata$={kind:r,simpleName:"FlexAdapter",interfaces:[]},Object.defineProperty(Se.prototype,"RJsonCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="rjson",t.useQuotes=!1,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!1,t.useObjectCommas=!1,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"RJsonPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="rjson",t.useQuotes=!1,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!1,t.useObjectCommas=!1,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Object.defineProperty(Se.prototype,"JsonCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="json",t.useQuotes=!0,t.usePropertyNameQuotes=!0,t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"JsonPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="json",t.useQuotes=!0,t.usePropertyNameQuotes=!0,t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Object.defineProperty(Se.prototype,"JsCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="js",t.useQuotes=!0,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"JsPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="js",t.useQuotes=!0,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Se.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Ie,Ee=null;function Ae(){return null===Ee&&new Se,Ee}function ze(t){return !!Ie.contains_11rb$(t)||!N("[a-zA-Z_][a-zA-Z_0-9]*").matches_6bul2c$(t)}function je(t){this.elementType=t;}function Le(t){this.id=t;}function Te(t){Le.call(this,t);}function Me(t){Le.call(this,t);}function Re(t){Le.call(this,t.elementType.id),this.node=t;}function Pe(t){this.string=t;}function qe(){i.call(this),this.message_5xs4d4$_0=void 0,this.cause_f0a41y$_0=null,e.captureStack(i,this),this.name="ArrayIndexOutOfBoundsException";}function Be(t){i.call(this),this.message_v24yh0$_0=t,this.cause_rj05em$_0=null,e.captureStack(i,this),this.name="Error";}function Ue(){Ve();}function Fe(){De=this;}Ne.$metadata$={kind:r,simpleName:"Options",interfaces:[]},Oe.prototype.valueToStream=function(t){return this.buffer_0.length=0,this.printValue_0(t),this.buffer_0.byteInputStream()},Oe.prototype.valueToString=function(t){return this.buffer_0.length=0,this.printValue_0(t),this.buffer_0.toString()},Oe.prototype.stringToString=function(t){var e=_n().getDefault().createParser().streamToValue(ut(t));return this.buffer_0.length=0,this.printValue_0(e),this.buffer_0.toString()},Oe.prototype.streamToStream=function(t){var e=_n().getDefault().createParser().streamToValue(t);return this.buffer_0.length=0,this.printValue_0(e),this.buffer_0.byteInputStream()},Oe.prototype.streamToString=function(t){var e=_n().getDefault().createParser().streamToValue(t);return this.printValue_0(e),this.buffer_0.toString()},Oe.prototype.printValue_0=function(t,n){if(void 0===n&&(n=!1),e.isType(t,qt))this.append_0(t.value,void 0,n);else if(e.isType(t,Qt)){var r=this.tryEscapeUnicode_0(t.asString());this.append_0(Ln(r,this.options_0,!1),void 0,n);}else if(e.isType(t,Bt))this.append_0(this.toIntOrDecimalString_0(t),void 0,n);else if(e.isType(t,Ut))this.printObject_0(t,n);else {if(!e.isType(t,At))throw new ve("Unexpected type: "+e.getKClassFromExpression(t).toString());this.printArray_0(t,n);}},Oe.prototype.tryEscapeUnicode_0=function(t){var e;if(this.options_0.escapeUnicode){var n,r=w(t.length);for(n=k(t);n.hasNext();){var i,o=v(n.next()),a=r.add_11rb$,s=C(o);if((0|v(s))>2047){for(var u="\\u"+jn(0|v(s));u.length<4;)u="0"+u;i=u;}else i=String.fromCharCode(v(s));a.call(r,i);}e=b(r,"");}else e=t;return e},Oe.prototype.printObject_0=function(t,e){this.append_0("{",void 0,e),this.level_0=this.level_0+1|0;for(var n=!!this.options_0.objectItemNewline&&this.options_0.arrayItemNewline,r=0,i=t.iterator();i.hasNext();++r){var o=i.next();this.options_0.objectItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.printPair_0(o.name,o.value,n),r<(t.size()-1|0)&&(this.options_0.useObjectCommas?(this.append_0(",",void 0,!1),this.options_0.isSpaceAfterComma&&!this.options_0.objectItemNewline&&this.append_0(" ",void 0,!1)):this.options_0.objectItemNewline||this.append_0(" ",void 0,!1));}this.level_0=this.level_0-1|0,this.options_0.objectItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.append_0("}",void 0,this.options_0.objectItemNewline);},Oe.prototype.printArray_0=function(t,e){var n;void 0===e&&(e=!0),this.append_0("[",void 0,e),this.level_0=this.level_0+1|0;var r=0;for(n=t.iterator();n.hasNext();){var i=n.next(),o=this.options_0.arrayItemNewline;this.options_0.arrayItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.printValue_0(i,o),r<(t.size()-1|0)&&(this.options_0.useArrayCommas?(this.append_0(",",void 0,!1),this.options_0.isSpaceAfterComma&&!this.options_0.arrayItemNewline&&this.append_0(" ",void 0,!1)):this.options_0.arrayItemNewline||this.append_0(" ",void 0,!1)),r=r+1|0;}this.level_0=this.level_0-1|0,this.options_0.arrayItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.append_0("]",void 0,this.options_0.arrayItemNewline);},Oe.prototype.printPair_0=function(t,e,n){void 0===n&&(n=!0),this.printKey_0(t,n),this.append_0(":",void 0,!1),this.options_0.isSpaceAfterColon&&this.append_0(" ",void 0,!1),this.printValue_0(e,!1);},Oe.prototype.printKey_0=function(t,e){if(void 0===e&&(e=!0),!this.options_0.usePropertyNameQuotes&&Tn(t))this.append_0(t,void 0,e);else {var n=this.tryEscapeUnicode_0(t);this.append_0(Ln(n,this.options_0,!0),void 0,e);}},Oe.prototype.append_0=function(t,e,n){var r,i;if(void 0===e&&(e=!1),void 0===n&&(n=!0),e&&this.buffer_0.append_61zpoe$("\n"),n){r=this.level_0;for(var o=0;o\0\0\0\0?\0\0\0\0@\0\0\0A\0\0\0\0\0B\0\0\0\tC\0\0\0\0\nD\0\0\0\0\v8\0',this.ZZ_TRANS_0=this.zzUnpackTrans_1(),this.ZZ_UNKNOWN_ERROR_0=0,this.ZZ_NO_MATCH_0=1,this.ZZ_PUSHBACK_2BIG_0=2,this.ZZ_ERROR_MSG_0=["Unknown internal scanner error","Error: could not match input","Error: pushback value was too large"],this.ZZ_ATTRIBUTE_PACKED_0_0="\0\t\r\t\0\0\t\0\t\0\t\b\0\t\0\b",this.ZZ_ATTRIBUTE_0=this.zzUnpackAttribute_1();}Ue.$metadata$={kind:r,simpleName:"Character",interfaces:[]},Object.defineProperty(We.prototype,"message",{get:function(){return this.message_us6fov$_0}}),Object.defineProperty(We.prototype,"cause",{get:function(){return this.cause_i5ew99$_0}}),We.$metadata$={kind:r,simpleName:"ProcessCanceledException",interfaces:[i]},Ke.$metadata$={kind:r,simpleName:"StringBuffer",interfaces:[]},Ze.$metadata$={kind:r,simpleName:"RJsonIdImpl",interfaces:[Re]},He.$metadata$={kind:r,simpleName:"RJsonBooleanImpl",interfaces:[Re]},Je.$metadata$={kind:r,simpleName:"RJsonCommentImpl",interfaces:[Re]},Ge.$metadata$={kind:r,simpleName:"RJsonListImpl",interfaces:[Re]},Qe.$metadata$={kind:r,simpleName:"RJsonObjectImpl",interfaces:[Re]},Ye.$metadata$={kind:r,simpleName:"RJsonPairImpl",interfaces:[Re]},Xe.$metadata$={kind:r,simpleName:"RJsonStringImpl",interfaces:[Re]},tn.$metadata$={kind:r,simpleName:"RJsonValueImpl",interfaces:[Re]},en.$metadata$={kind:r,simpleName:"RJsonWhiteSpaceImpl",interfaces:[Re]},nn.$metadata$={kind:r,simpleName:"RJsonBadCharacterImpl",interfaces:[Re]},Object.defineProperty(rn.prototype,"zzStartRead",{configurable:!0,get:function(){return this.zzStartRead_amyg19$_0},set:function(t){this.zzStartRead_amyg19$_0=t;}}),rn.prototype.getTokenStart=function(){return this.zzStartRead},rn.prototype.getTokenEnd=function(){return this.getTokenStart()+this.yylength()|0},rn.prototype.reset_6na8x6$=function(t,e,n,r){this.zzBuffer_0=t,this.zzStartRead=e,this.zzMarkedPos_0=this.zzStartRead,this.zzCurrentPos_0=this.zzMarkedPos_0,this.zzAtEOF_0=!1,this.zzAtBOL_0=!0,this.zzEndRead_0=n,this.yybegin_za3lpa$(r);},rn.prototype.zzRefill_0=function(){return !0},rn.prototype.yystate=function(){return this.zzLexicalState_0},rn.prototype.yybegin_za3lpa$=function(t){this.zzLexicalState_0=t;},rn.prototype.yytext=function(){return e.subSequence(this.zzBuffer_0,this.zzStartRead,this.zzMarkedPos_0)},rn.prototype.yycharat_za3lpa$=function(t){return C(this.zzBuffer_0.charCodeAt(this.zzStartRead+t|0))},rn.prototype.yylength=function(){return this.zzMarkedPos_0-this.zzStartRead|0},rn.prototype.zzScanError_0=function(t){var n;try{n=sn().ZZ_ERROR_MSG_0[t];}catch(t){if(!e.isType(t,qe))throw t;n=sn().ZZ_ERROR_MSG_0[0];}throw new Be(n)},rn.prototype.yypushback_za3lpa$=function(t){t>this.yylength()&&this.zzScanError_0(2),this.zzMarkedPos_0=this.zzMarkedPos_0-t|0;},rn.prototype.zzDoEOF_0=function(){this.zzEOFDone_0||(this.zzEOFDone_0=!0);},rn.prototype.advance=function(){for(var t={v:0},e={v:null},n={v:null},r={v:null},i={v:this.zzEndRead_0},o={v:this.zzBuffer_0},a=sn().ZZ_TRANS_0,s=sn().ZZ_ROWMAP_0,u=sn().ZZ_ATTRIBUTE_0;;){r.v=this.zzMarkedPos_0,this.yychar=this.yychar+(r.v-this.zzStartRead)|0;var p,c,l=!1;for(n.v=this.zzStartRead;n.v>14]|t>>7&127])<<7|127&t]},on.prototype.zzUnpackActionx_0=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackAction_0(this.ZZ_ACTION_PACKED_0_0,e,t),t},on.prototype.zzUnpackAction_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackRowMap_1=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackRowMap_0(this.ZZ_ROWMAP_PACKED_0_0,e,t),t},on.prototype.zzUnpackRowMap_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackAttribute_1=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackAttribute_0(this.ZZ_ATTRIBUTE_PACKED_0_0,e,t),t},on.prototype.zzUnpackAttribute_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackCMap_0=function(t){for(var n,r,i,o={v:0},a=0,s=t.length;a0)}return u},on.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var an=null;function sn(){return null===an&&new on,an}function un(){}function pn(){}function cn(){_n();}function ln(){fn=this,this.factory_2h3e2k$_0=S(hn);}function hn(){return new cn}rn.$metadata$={kind:r,simpleName:"RJsonLexer",interfaces:[]},un.$metadata$={kind:o,simpleName:"RJsonParser",interfaces:[]},pn.prototype.stringToJson=function(t){return Et().parse_61zpoe$(t).toString()},pn.prototype.stringToValue=function(t){return Et().parse_61zpoe$(t)},pn.prototype.streamToValue=function(t){return Et().parse_6nb378$(t.reader())},pn.prototype.streamToJsonStream=function(t){return new B(Et().parse_6nb378$(t.reader()).toString())},pn.prototype.streamToRJsonStream=function(t){var e=Et().parse_6nb378$(t.bufferedReader());return new Oe(Ae().RJsonCompact).valueToStream(e)},pn.$metadata$={kind:r,simpleName:"RJsonParserImpl",interfaces:[un]},Object.defineProperty(ln.prototype,"factory_0",{configurable:!0,get:function(){return this.factory_2h3e2k$_0.value}}),ln.prototype.getDefault=function(){return this.factory_0},ln.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var fn=null;function _n(){return null===fn&&new ln,fn}function yn(){this.lexer=new rn(null),this.type=null,this.location_i61z51$_0=new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn),this.rxUnicode_0=N("\\\\u([a-fA-F0-9]{4})"),this.rxBareEscape_0=N("\\\\.");}function dn(t){return ""+String.fromCharCode(C(a(Fn(0,s(t.groups.get_za3lpa$(1)).value,16))))}function mn(t){return ""+String.fromCharCode(C(a(Fn(0,s(t.groups.get_za3lpa$(1)).value,16))))}function $n(t){return t.value.substring(1)}function gn(){kn();}function vn(){bn=this;}cn.prototype.createParser=function(){return new yn},cn.$metadata$={kind:r,simpleName:"RJsonParserFactory",interfaces:[]},Object.defineProperty(yn.prototype,"location",{configurable:!0,get:function(){return new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn)},set:function(t){this.location_i61z51$_0=t;}}),yn.prototype.parse_61zpoe$=function(t){var n;this.lexer.reset_6na8x6$(t,0,t.length,0),this.advance_0(),this.skipWhitespaceAndComments_0();try{n=this.readValue_0();}catch(t){throw e.isType(t,ue)?t:e.isType(t,i)?new ue("Expected value",this.location):t}if(this.skipWhitespaceAndComments_0(),null!=this.type)throw new ue("Expected EOF but received "+this.currentTokenString_0(),this.location);return n},yn.prototype.stringToValue=function(t){return this.parse_61zpoe$(t)},yn.prototype.stringToJson=function(t){return this.stringToValue(t).toString()},yn.prototype.streamToValue=function(t){return e.isType(t,B)?this.parse_61zpoe$(t.src):this.parse_61zpoe$(t.bufferedReader().toString())},yn.prototype.streamToJsonStream=function(t){return new Oe(Ae().JsonCompact).streamToStream(t)},yn.prototype.streamToRJsonStream=function(t){return new Oe(Ae().RJsonCompact).streamToStream(t)},yn.prototype.advance_0=function(){this.type=this.lexer.advance();},yn.prototype.readValue_0=function(){var t;if(this.skipWhitespaceAndComments_0(),s(this.type),t=this.type,h(t,kn().L_BRACKET))return this.advance_0(),this.readList_0();if(h(t,kn().L_CURLY))return this.advance_0(),this.readObject_0();if(h(t,kn().BARE_STRING)){var e=new Qt(this.unescapeBare_0(this.lexer.yytext().toString()));return this.advance_0(),e}if(h(t,kn().DOUBLE_QUOTED_STRING)||h(t,kn().SINGLE_QUOTED_STRING)||h(t,kn().TICK_QUOTED_STRING)){var n=this.lexer.yytext().toString(),r=n.length-1|0,i=new Qt(this.unescape_0(n.substring(1,r)));return this.advance_0(),i}if(h(t,kn().TRUE)){var o=new qt(this.lexer.yytext().toString());return this.advance_0(),o}if(h(t,kn().FALSE)){var a=new qt(this.lexer.yytext().toString());return this.advance_0(),a}if(h(t,kn().NULL)){var u=new qt(this.lexer.yytext().toString());return this.advance_0(),u}if(h(t,kn().NUMBER)){var p=new Bt(this.lexer.yytext().toString());return this.advance_0(),p}throw new ue("Did not expect "+this.currentTokenString_0(),this.location)},yn.prototype.currentTokenString_0=function(){return h(this.type,kn().BAD_CHARACTER)?"("+this.lexer.yytext()+")":s(this.type).id},yn.prototype.skipWhitespaceAndComments_0=function(){for(var t;;){if(t=this.type,!(h(t,kn().WHITE_SPACE)||h(t,kn().BLOCK_COMMENT)||h(t,kn().LINE_COMMENT)))return;this.advance_0();}},yn.prototype.skipComma_0=function(){for(var t;;){if(t=this.type,!(h(t,kn().WHITE_SPACE)||h(t,kn().BLOCK_COMMENT)||h(t,kn().LINE_COMMENT)||h(t,kn().COMMA)))return;this.advance_0();}},yn.prototype.readList_0=function(){for(var t=Mt();;){if(this.skipWhitespaceAndComments_0(),h(this.type,kn().R_BRACKET))return this.advance_0(),t;try{t.add_luq74r$(this.readValue_0());}catch(t){throw e.isType(t,i)?new ue("Expected value or R_BRACKET",this.location):t}this.skipComma_0();}},yn.prototype.readObject_0=function(){for(var t=Jt();;){if(this.skipWhitespaceAndComments_0(),h(this.type,kn().R_CURLY))return this.advance_0(),t;var n,r;try{n=this.readName_0();}catch(t){throw e.isType(t,i)?new ue("Expected object property name or R_CURLY",this.location):t}this.skipWhitespaceAndComments_0(),this.consume_0(kn().COLON),this.skipWhitespaceAndComments_0();try{r=this.readValue_0();}catch(t){throw e.isType(t,i)?new ue("Expected value or R_CURLY",this.location):t}this.skipComma_0(),t.add_8kvr2e$(n,r);}},yn.prototype.consume_0=function(t){if(this.skipWhitespaceAndComments_0(),!h(this.type,t))throw new ue("Expected "+t.id,new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn));this.advance_0();},yn.prototype.readName_0=function(){var t;if(this.skipWhitespaceAndComments_0(),t=this.type,h(t,kn().NUMBER)||h(t,kn().TRUE)||h(t,kn().FALSE)||h(t,kn().NULL)){var e=this.lexer.yytext().toString();return this.advance_0(),e}if(h(t,kn().BARE_STRING)){var n=this.lexer.yytext().toString();return this.advance_0(),this.unescapeBare_0(n)}if(h(t,kn().DOUBLE_QUOTED_STRING)||h(t,kn().SINGLE_QUOTED_STRING)||h(t,kn().TICK_QUOTED_STRING)){var r=this.lexer.yytext().toString(),i=r.length-1|0,o=r.substring(1,i);return this.advance_0(),this.unescape_0(o)}throw new ue("Expected property name or R_CURLY, not "+this.currentTokenString_0(),new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn))},yn.prototype.unescape_0=function(t){var e=this.rxUnicode_0.replace_20wsma$(t,dn);return e=I(e,"\\'","'"),e=I(e,"\\`","`"),e=I(e,'\\"','"'),e=I(e,"\\ "," "),I(e,"\\\n","")},yn.prototype.unescapeBare_0=function(t){var e=this.rxUnicode_0.replace_20wsma$(t,mn),n=e;return this.rxBareEscape_0.replace_20wsma$(n,$n)},yn.$metadata$={kind:r,simpleName:"RJsonParser2",interfaces:[un]},vn.prototype.createElement_a4qy0p$=function(t){var n=t.elementType;if(n===kn().BOOLEAN)return new He(t);if(n===kn().COMMENT)return new Je(t);if(n===kn().ID)return new Ze(t);if(n===kn().LIST)return new Ge(t);if(n===kn().OBJECT)return new Qe(t);if(n===kn().PAIR)return new Ye(t);if(n===kn().STRING)return new Xe(t);if(n===kn().VALUE)return new tn(t);if(n===kn().WHITE_SPACE)return new en(t);if(n===kn().BAD_CHARACTER)return new nn(t);throw e.newThrowable("Unknown element type: "+n)},vn.$metadata$={kind:n,simpleName:"Factory",interfaces:[]};var bn=null;function xn(){wn=this,this.BOOLEAN=new Te("BOOLEAN"),this.COMMENT=new Te("COMMENT"),this.ID=new Te("ID"),this.LIST=new Te("LIST"),this.OBJECT=new Te("OBJECT"),this.PAIR=new Te("PAIR"),this.STRING=new Te("STRING"),this.VALUE=new Te("VALUE"),this.BARE_STRING=new Me("BARE_STRING"),this.BLOCK_COMMENT=new Me("BLOCK_COMMENT"),this.COLON=new Me("COLON"),this.COMMA=new Me("COMMA"),this.DOUBLE_QUOTED_STRING=new Me("DOUBLE_QUOTED_STRING"),this.FALSE=new Me("FALSE"),this.LINE_COMMENT=new Me("LINE_COMMENT"),this.L_BRACKET=new Me("L_BRACKET"),this.L_CURLY=new Me("L_CURLY"),this.NULL=new Me("NULL"),this.NUMBER=new Me("NUMBER"),this.R_BRACKET=new Me("R_BRACKET"),this.R_CURLY=new Me("R_CURLY"),this.SINGLE_QUOTED_STRING=new Me("SINGLE_QUOTED_STRING"),this.TICK_QUOTED_STRING=new Me("TICK_QUOTED_STRING"),this.TRUE=new Me("TRUE"),this.WHITE_SPACE=new Me("WHITE_SPACE"),this.BAD_CHARACTER=new Me("BAD_CHARACTER");}xn.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var wn=null;function kn(){return null===wn&&new xn,wn}function Cn(t){this.theReader_0=t;}function On(){}function Nn(){zn();}function Sn(){An=this;}gn.$metadata$={kind:o,simpleName:"RJsonTypes",interfaces:[]},Cn.prototype.reader=function(){return this.theReader_0},Cn.prototype.bufferedReader=function(){return this.reader()},Cn.$metadata$={kind:r,simpleName:"ReaderInputStream",interfaces:[Q]},On.$metadata$={kind:r,simpleName:"JsDummy",interfaces:[E]},Sn.prototype.create_8chfmy$=function(t,e,n){var r,i=new A;r=e+n-1|0;for(var o=e;o<=r;o++)i+=String.fromCharCode(C(t[o]));return i},Sn.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var In,En,An=null;function zn(){return null===An&&new Sn,An}function jn(t){return t.toString(16)}function Ln(t,e,n){var r;if(!isNaN(parseFloat(t)))return h(e.quoteFallback,"single")?"'"+t+"'":h(e.quoteFallback,"backtick")?"`"+t+"`":'"'+t+'"';var i=n?e.usePropertyNameQuotes:e.useQuotes;if(!i&&In.test(t)&&(i=!0),!i&&h(t,"")&&(i=!0),!i&&n&&h(e.target,"js")&&(i=ze(t)),i){var o=t;r=h(e.quoteFallback,"single")&&-1===z(t,"'")?"'"+(o=I(o,"'","\\'"))+"'":h(e.quoteFallback,"backtick")&&-1===z(t,"`")?"`"+(o=I(o,"`","\\`"))+"`":'"'+(o=I(o,'"','\\"'))+'"';}else r=t;return r}function Tn(t){return En.test(t)}function Mn(t,n){try{if(!En.test(n))throw new j("not a float");var r=parseFloat(n);if(!isFinite(r))throw new j("not finite");return r}catch(t){throw e.isType(t,L)?new j(t.message):t}}function Rn(){this.a=[];}function Pn(t){this.this$ArrayList=t,this._n=0;}function qn(){Bn=this;}Nn.$metadata$={kind:r,simpleName:"XString",interfaces:[]},Rn.prototype.add_11rb$=function(t){return this.a.push(t),!0},Rn.prototype.add_wxm5ur$=function(t,e){yt("not implemented");},Rn.prototype.addAll_u57x28$=function(t,e){yt("not implemented");},Rn.prototype.addAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.clear=function(){yt("not implemented");},Rn.prototype.listIterator=function(){yt("not implemented");},Rn.prototype.listIterator_za3lpa$=function(t){yt("not implemented");},Rn.prototype.remove_11rb$=function(t){yt("not implemented");},Rn.prototype.removeAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.removeAt_za3lpa$=function(t){yt("not implemented");},Rn.prototype.retainAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.subList_vux9f0$=function(t,e){yt("not implemented");},Object.defineProperty(Rn.prototype,"size",{configurable:!0,get:function(){return this.a.length}}),Rn.prototype.contains_11rb$=function(t){yt("not implemented");},Rn.prototype.containsAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.get_za3lpa$=function(t){return this.a[t]},Rn.prototype.indexOf_11rb$=function(t){yt("not implemented");},Rn.prototype.isEmpty=function(){yt("not implemented");},Pn.prototype.hasNext=function(){var t;return this._n<("number"==typeof(t=this.this$ArrayList.a.length)?t:l())},Pn.prototype.next=function(){var t,n;return null==(n=this.this$ArrayList.a[(t=this._n,this._n=t+1|0,t)])||e.isType(n,T)?n:l()},Pn.prototype.remove=function(){yt("not implemented");},Pn.$metadata$={kind:r,interfaces:[p]},Rn.prototype.iterator=function(){return new Pn(this)},Rn.prototype.set_wxm5ur$=function(t,e){yt("not implemented");},Rn.prototype.lastIndexOf_11rb$=function(t){yt("not implemented");},Rn.$metadata$={kind:r,simpleName:"ArrayList",interfaces:[M]},qn.prototype.arraycopy_yp22ie$=function(t,e,n,r,i){var o,a,s=r;o=e+i|0;for(var u=e;u thePackage.RJsonParserFactory.Companion.getDefault().createParser(), - createParserFactory: () => thePackage.RJsonParserFactory.Companion.getDefault(), - - PrettyPrinter: thePackage.PrettyPrinter, - /** - * @deprecated since 0.1.0. Use toJson() instead. - * @param rjsonString {String} - * @returns {String} - */ - convert: function (rjsonString) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - return parser.stringToJson(rjsonString); - }, - /** - * - * @param rjsonString {String} - * @param compact {Boolean} - * @returns {String} - */ - toJson: function (rjsonString, compact = true) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - const value = parser.stringToValue(rjsonString); - let opts; - if (compact) { - opts = thePackage.PrettyPrinter.Options.Companion.JsonCompact; - } else { - opts = thePackage.PrettyPrinter.Options.Companion.JsonPretty; - } - const printer = new thePackage.PrettyPrinter(opts); - return printer.valueToString(value); - }, - /** - * - * @param rjsonString {String} - * @param compact {Boolean} - * @returns {String} - */ - toRJson: function (jsonString, compact = true) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - const value = parser.stringToValue(jsonString); - let opts; - if (compact) { - opts = thePackage.PrettyPrinter.Options.Companion.RJsonCompact; - } else { - opts = thePackage.PrettyPrinter.Options.Companion.RJsonPretty; - } - const printer = new thePackage.PrettyPrinter(opts); - return printer.valueToString(value); - }, - /** - * - * @param rjsonString {String} - * @param compact {Boolean} - * @returns {String} - */ - toJs: function (rjsonString, compact = true) { - const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); - const value = parser.stringToValue(rjsonString); - let opts; - if (compact) { - opts = thePackage.PrettyPrinter.Options.Companion.JsCompact; - } else { - opts = thePackage.PrettyPrinter.Options.Companion.JsPretty; - } - const printer = new thePackage.PrettyPrinter(opts); - return printer.valueToString(value); - }, - - /** - * - * @param options {Options} PrettyPrinter options - * @param stringOrValue {string|object} a JsonLike string or JsonValue - * @returns {string} - */ - prettyPrint: function (options, stringOrValue) { - const prettyPrinter = new thePackage.PrettyPrinter(options); - if (typeof stringOrValue === 'string') { - return prettyPrinter.stringToString(stringOrValue); - } else { - return prettyPrinter.valueToString(stringOrValue); - } - }, - - api: theModule, - PrettyPrinter: thePackage.PrettyPrinter, - Options, - - }; - - module.exports.default = module.exports; -} (src)); - -function relaxedJSONToJSON(text, compact) { - if (text.trim().length === 0) { - return ""; - } - return srcExports.toJson(text, compact); -} - -function call(content, context, segment) { - if (!content) { - return new ValueAndMsg("", undefined, { segments: [{ value: segment, success: true }] }); - } - try { - var value = evalScript(content, context); - return new ValueAndMsg(value, undefined, { segments: [{ value: segment, success: true }] }); - } - catch (err) { - return new ValueAndMsg("", getErrorMessage(err), { - segments: [{ value: segment, success: false }], - }); - } -} -function evalDefault(unevaledValue, context) { - return new DefaultParser(unevaledValue, context).parse(); -} -var DefaultParser = /** @class */ (function () { - function DefaultParser(unevaledValue, context) { - this.context = context; - this.valueAndMsgs = []; - this.segments = getDynamicStringSegments(unevaledValue.trim()); - } - DefaultParser.prototype.parse = function () { - var _a; - try { - var 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 : []; }), - }); - } - 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; - }); - return values.length === 1 ? values[0] : values.join(""); - }; - DefaultParser.prototype.evalDynamicSegment = function (segment) { - var 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; - } - RelaxedJsonParser.prototype.parseObject = function () { - try { - return this.parseRelaxedJson(); - } - catch (e) { - return _super.prototype.parseObject.call(this); - } - }; - RelaxedJsonParser.prototype.parseRelaxedJson = function () { - // replace the original {{...}} as relaxed-json adaptive \{\{ + ${index} + \}\} - var indexedRelaxedJsonString = this.segments - .map(function (s, i) { return (isDynamicSegment(s) ? "\\{\\{" + i + "\\}\\}" : s); }) - .join(""); - if (indexedRelaxedJsonString.length === 0) { - // return empty, let the later transform determines the default value - return ""; - } - // 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); - // 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) + "\\\\}\\\\}"; }), {}); - return this.evalIndexedObject(indexedJsonObject); - }; - RelaxedJsonParser.prototype.evalIndexedObject = function (obj) { - if (typeof obj === "string") { - return this.evalIndexedStringToObject(obj); - } - if (typeof obj !== "object" || obj === null) { - return obj; - } - 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]; - ret[this.evalIndexedStringToString(key)] = this.evalIndexedObject(value); - } - return ret; - }; - RelaxedJsonParser.prototype.evalIndexedStringToObject = function (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; - // replace all {{ + ${index} + }} and \{\{ + ${index} \}\} - return indexedString.replace(/({{\d+}})|(\\{\\{\d+\\}\\})/g, function (s) { return _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)); - if (index >= 0 && index < this.segments.length) { - var 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); - }); - } - 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*/]; - } - }); - }); -} -function string2Fn(unevaledValue, type, methods) { - if (type) { - switch (type) { - case "JSON": - return function (context) { return evalJson(unevaledValue, context); }; - case "Function": - return function (context) { return evalFunction(unevaledValue, context, methods); }; - } - } - return function (context) { return evalDefault(unevaledValue, context); }; -} - -var IS_FETCHING_FIELD = "isFetching"; -var LATEST_END_TIME_FIELD = "latestEndTime"; -var TRIGGER_TYPE_FIELD = "triggerType"; -/** - * user input node - * - * @remarks - * CodeNode should resolve the cyclic dependency problem - * we may assume cyclic dependency only imported by CodeNode - * - * 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; - } - // FIXME: optimize later - CodeNode.prototype.convertedValue = function () { - if (this.codeType === "Function") { - return "{{function(){".concat(this.unevaledValue, "}}}"); - } - return this.unevaledValue; - }; - CodeNode.prototype.filterNodes = function (exposingNodes) { - if (!!this.evalCache.inFilterNodes) { - return new Map(); - } - this.evalCache.inFilterNodes = true; - try { - var 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)); - }); - // Add isFetching & latestEndTime node for FetchCheck - var topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); - topDepends.forEach(function (paths, depend) { - if (nodeIsRecord(depend)) { - var _loop_1 = function (field) { - var node = depend.children[field]; - if (node) { - addDepend(result_1, node, Array.from(paths).map(function (p) { return 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; - } - finally { - this.evalCache.inFilterNodes = false; - } - }; - // only includes direct depends, exlucdes depends of dependencies - CodeNode.prototype.filterDirectDepends = function (exposingNodes) { - return filterDepends(this.convertedValue(), exposingNodes); - }; - CodeNode.prototype.justEval = function (exposingNodes, methods) { - // log.log("justEval: ", this, "\nexposingNodes: ", exposingNodes); - if (!!this.evalCache.inEval) { - // found cyclic eval - this.evalCache.cyclic = true; - return new ValueAndMsg(""); - } - this.evalCache.inEval = true; - try { - var 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); - // 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)); - } - return valueAndMsg; - } - finally { - this.evalCache.inEval = false; - } - }; - CodeNode.prototype.getChildren = function () { - if (this.directDepends) { - return Array.from(this.directDepends.keys()); - } - return []; - }; - CodeNode.prototype.dependValues = function () { - var ret = {}; - this.directDepends.forEach(function (paths, node) { - if (node instanceof AbstractNode) { - paths.forEach(function (path) { - ret[path] = node.evalCache.value; - }); - } - }); - return ret; - }; - CodeNode.prototype.fetchInfo = function (exposingNodes, options) { - if (!!this.evalCache.inIsFetching) { - return { - isFetching: false, - ready: true, - }; - } - 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) && - _.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)) - return; - // wait for lazy loaded comps to load before executing query on page load - if (!Object.keys(value).length && paths.size) { - isFetching_1 = true; - ready_1 = false; - } - if (_.has(value, IS_FETCHING_FIELD)) { - isFetching_1 = isFetching_1 || value.isFetching === true; - } - if (_.has(value, LATEST_END_TIME_FIELD)) { - ready_1 = ready_1 && 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; - }); - return { - isFetching: isFetching_1, - ready: ready_1, - }; - } - 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)); -/** - * generate node for unevaledValue - */ -function fromUnevaledValue(unevaledValue) { - return new FunctionNode(new CodeNode(unevaledValue), function (valueAndMsg) { return 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) { - if (segment.success) { - segment.success = !hasCycle(segment.value, exposingNodes); - } - }); - return extra; -} - -/** - * 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) { - return this.child.filterNodes(exposingNodes); - }; - FetchCheckNode.prototype.justEval = function (exposingNodes) { - return this.fetchInfo(exposingNodes); - }; - FetchCheckNode.prototype.getChildren = function () { - return [this.child]; - }; - FetchCheckNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - FetchCheckNode.prototype.fetchInfo = function (exposingNodes) { - return this.child.fetchInfo(exposingNodes, this.options); - }; - __decorate([ - memoized() - ], FetchCheckNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], FetchCheckNode.prototype, "fetchInfo", null); - return FetchCheckNode; -}(AbstractNode)); -function isFetching(node) { - return new FetchCheckNode(node); -} - -const perf = - typeof performance === 'object' && - performance && - typeof performance.now === 'function' - ? performance - : Date; - -const hasAbortController = typeof AbortController === 'function'; - -// minimal backwards-compatibility polyfill -// this doesn't have nearly all the checks and whatnot that -// actual AbortController/Signal has, but it's enough for -// our purposes, and if used properly, behaves the same. -const AC = hasAbortController - ? AbortController - : class AbortController { - constructor() { - this.signal = new AS(); - } - abort(reason = new Error('This operation was aborted')) { - this.signal.reason = this.signal.reason || reason; - this.signal.aborted = true; - this.signal.dispatchEvent({ - type: 'abort', - target: this.signal, - }); - } - }; - -const hasAbortSignal = typeof AbortSignal === 'function'; -// Some polyfills put this on the AC class, not global -const hasACAbortSignal = typeof AC.AbortSignal === 'function'; -const AS = hasAbortSignal - ? AbortSignal - : hasACAbortSignal - ? AC.AbortController - : class AbortSignal { - constructor() { - this.reason = undefined; - this.aborted = false; - this._listeners = []; - } - dispatchEvent(e) { - if (e.type === 'abort') { - this.aborted = true; - this.onabort(e); - this._listeners.forEach(f => f(e), this); - } - } - onabort() {} - addEventListener(ev, fn) { - if (ev === 'abort') { - this._listeners.push(fn); - } - } - removeEventListener(ev, fn) { - if (ev === 'abort') { - this._listeners = this._listeners.filter(f => f !== fn); - } - } - }; - -const warned = new Set(); -const deprecatedOption = (opt, instead) => { - const code = `LRU_CACHE_OPTION_${opt}`; - if (shouldWarn(code)) { - warn(code, `${opt} option`, `options.${instead}`, LRUCache); - } -}; -const deprecatedMethod = (method, instead) => { - const code = `LRU_CACHE_METHOD_${method}`; - if (shouldWarn(code)) { - const { prototype } = LRUCache; - const { get } = Object.getOwnPropertyDescriptor(prototype, method); - warn(code, `${method} method`, `cache.${instead}()`, get); - } -}; -const deprecatedProperty = (field, instead) => { - const code = `LRU_CACHE_PROPERTY_${field}`; - if (shouldWarn(code)) { - const { prototype } = LRUCache; - const { get } = Object.getOwnPropertyDescriptor(prototype, field); - warn(code, `${field} property`, `cache.${instead}`, get); - } -}; - -const emitWarning = (...a) => { - typeof process === 'object' && - process && - typeof process.emitWarning === 'function' - ? process.emitWarning(...a) - : console.error(...a); -}; - -const shouldWarn = code => !warned.has(code); - -const warn = (code, what, instead, fn) => { - warned.add(code); - const msg = `The ${what} is deprecated. Please use ${instead} instead.`; - emitWarning(msg, 'DeprecationWarning', code, fn); -}; - -const isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n); - -/* istanbul ignore next - This is a little bit ridiculous, tbh. - * The maximum array length is 2^32-1 or thereabouts on most JS impls. - * And well before that point, you're caching the entire world, I mean, - * that's ~32GB of just integers for the next/prev links, plus whatever - * else to hold that many keys and values. Just filling the memory with - * zeroes at init time is brutal when you get that big. - * But why not be complete? - * Maybe in the future, these limits will have expanded. */ -const getUintArray = max => - !isPosInt(max) - ? null - : max <= Math.pow(2, 8) - ? Uint8Array - : max <= Math.pow(2, 16) - ? Uint16Array - : max <= Math.pow(2, 32) - ? Uint32Array - : max <= Number.MAX_SAFE_INTEGER - ? ZeroArray - : null; - -class ZeroArray extends Array { - constructor(size) { - super(size); - this.fill(0); - } -} - -class Stack { - constructor(max) { - if (max === 0) { - return [] - } - const UintArray = getUintArray(max); - this.heap = new UintArray(max); - this.length = 0; - } - push(n) { - this.heap[this.length++] = n; - } - pop() { - return this.heap[--this.length] - } -} - -class LRUCache { - constructor(options = {}) { - const { - max = 0, - ttl, - ttlResolution = 1, - ttlAutopurge, - updateAgeOnGet, - updateAgeOnHas, - allowStale, - dispose, - disposeAfter, - noDisposeOnSet, - noUpdateTTL, - maxSize = 0, - maxEntrySize = 0, - sizeCalculation, - fetchMethod, - fetchContext, - noDeleteOnFetchRejection, - noDeleteOnStaleGet, - allowStaleOnFetchRejection, - allowStaleOnFetchAbort, - ignoreFetchAbort, - } = options; - - // deprecated options, don't trigger a warning for getting them if - // the thing being passed in is another LRUCache we're copying. - const { length, maxAge, stale } = - options instanceof LRUCache ? {} : options; - - if (max !== 0 && !isPosInt(max)) { - throw new TypeError('max option must be a nonnegative integer') - } - - const UintArray = max ? getUintArray(max) : Array; - if (!UintArray) { - throw new Error('invalid max value: ' + max) - } - - this.max = max; - this.maxSize = maxSize; - this.maxEntrySize = maxEntrySize || this.maxSize; - this.sizeCalculation = sizeCalculation || length; - if (this.sizeCalculation) { - if (!this.maxSize && !this.maxEntrySize) { - throw new TypeError( - 'cannot set sizeCalculation without setting maxSize or maxEntrySize' - ) - } - if (typeof this.sizeCalculation !== 'function') { - throw new TypeError('sizeCalculation set to non-function') - } - } - - this.fetchMethod = fetchMethod || null; - if (this.fetchMethod && typeof this.fetchMethod !== 'function') { - throw new TypeError( - 'fetchMethod must be a function if specified' - ) - } - - this.fetchContext = fetchContext; - if (!this.fetchMethod && fetchContext !== undefined) { - throw new TypeError( - 'cannot set fetchContext without fetchMethod' - ) - } - - this.keyMap = new Map(); - this.keyList = new Array(max).fill(null); - this.valList = new Array(max).fill(null); - this.next = new UintArray(max); - this.prev = new UintArray(max); - this.head = 0; - this.tail = 0; - this.free = new Stack(max); - this.initialFill = 1; - this.size = 0; - - if (typeof dispose === 'function') { - this.dispose = dispose; - } - if (typeof disposeAfter === 'function') { - this.disposeAfter = disposeAfter; - this.disposed = []; - } else { - this.disposeAfter = null; - this.disposed = null; - } - this.noDisposeOnSet = !!noDisposeOnSet; - this.noUpdateTTL = !!noUpdateTTL; - this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; - this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; - this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; - this.ignoreFetchAbort = !!ignoreFetchAbort; - - // NB: maxEntrySize is set to maxSize if it's set - if (this.maxEntrySize !== 0) { - if (this.maxSize !== 0) { - if (!isPosInt(this.maxSize)) { - throw new TypeError( - 'maxSize must be a positive integer if specified' - ) - } - } - if (!isPosInt(this.maxEntrySize)) { - throw new TypeError( - 'maxEntrySize must be a positive integer if specified' - ) - } - this.initializeSizeTracking(); - } - - this.allowStale = !!allowStale || !!stale; - this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; - this.updateAgeOnGet = !!updateAgeOnGet; - this.updateAgeOnHas = !!updateAgeOnHas; - this.ttlResolution = - isPosInt(ttlResolution) || ttlResolution === 0 - ? ttlResolution - : 1; - this.ttlAutopurge = !!ttlAutopurge; - this.ttl = ttl || maxAge || 0; - if (this.ttl) { - if (!isPosInt(this.ttl)) { - throw new TypeError( - 'ttl must be a positive integer if specified' - ) - } - this.initializeTTLTracking(); - } - - // do not allow completely unbounded caches - if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) { - throw new TypeError( - 'At least one of max, maxSize, or ttl is required' - ) - } - if (!this.ttlAutopurge && !this.max && !this.maxSize) { - const code = 'LRU_CACHE_UNBOUNDED'; - if (shouldWarn(code)) { - warned.add(code); - const msg = - 'TTL caching without ttlAutopurge, max, or maxSize can ' + - 'result in unbounded memory consumption.'; - emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache); - } - } - - if (stale) { - deprecatedOption('stale', 'allowStale'); - } - if (maxAge) { - deprecatedOption('maxAge', 'ttl'); - } - if (length) { - deprecatedOption('length', 'sizeCalculation'); - } - } - - getRemainingTTL(key) { - return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0 - } - - initializeTTLTracking() { - this.ttls = new ZeroArray(this.max); - this.starts = new ZeroArray(this.max); - - this.setItemTTL = (index, ttl, start = perf.now()) => { - this.starts[index] = ttl !== 0 ? start : 0; - this.ttls[index] = ttl; - if (ttl !== 0 && this.ttlAutopurge) { - const t = setTimeout(() => { - if (this.isStale(index)) { - this.delete(this.keyList[index]); - } - }, ttl + 1); - /* istanbul ignore else - unref() not supported on all platforms */ - if (t.unref) { - t.unref(); - } - } - }; - - this.updateItemAge = index => { - this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0; - }; - - this.statusTTL = (status, index) => { - if (status) { - status.ttl = this.ttls[index]; - status.start = this.starts[index]; - status.now = cachedNow || getNow(); - status.remainingTTL = status.now + status.ttl - status.start; - } - }; - - // debounce calls to perf.now() to 1s so we're not hitting - // that costly call repeatedly. - let cachedNow = 0; - const getNow = () => { - const n = perf.now(); - if (this.ttlResolution > 0) { - cachedNow = n; - const t = setTimeout( - () => (cachedNow = 0), - this.ttlResolution - ); - /* istanbul ignore else - not available on all platforms */ - if (t.unref) { - t.unref(); - } - } - return n - }; - - this.getRemainingTTL = key => { - const index = this.keyMap.get(key); - if (index === undefined) { - return 0 - } - return this.ttls[index] === 0 || this.starts[index] === 0 - ? Infinity - : this.starts[index] + - this.ttls[index] - - (cachedNow || getNow()) - }; - - this.isStale = index => { - return ( - this.ttls[index] !== 0 && - this.starts[index] !== 0 && - (cachedNow || getNow()) - this.starts[index] > - this.ttls[index] - ) - }; - } - updateItemAge(_index) {} - statusTTL(_status, _index) {} - setItemTTL(_index, _ttl, _start) {} - isStale(_index) { - return false - } - - initializeSizeTracking() { - this.calculatedSize = 0; - this.sizes = new ZeroArray(this.max); - this.removeItemSize = index => { - this.calculatedSize -= this.sizes[index]; - this.sizes[index] = 0; - }; - this.requireSize = (k, v, size, sizeCalculation) => { - // provisionally accept background fetches. - // actual value size will be checked when they return. - if (this.isBackgroundFetch(v)) { - return 0 - } - if (!isPosInt(size)) { - if (sizeCalculation) { - if (typeof sizeCalculation !== 'function') { - throw new TypeError('sizeCalculation must be a function') - } - size = sizeCalculation(v, k); - if (!isPosInt(size)) { - throw new TypeError( - 'sizeCalculation return invalid (expect positive integer)' - ) - } - } else { - throw new TypeError( - 'invalid size value (must be positive integer). ' + - 'When maxSize or maxEntrySize is used, sizeCalculation or size ' + - 'must be set.' - ) - } - } - return size - }; - this.addItemSize = (index, size, status) => { - this.sizes[index] = size; - if (this.maxSize) { - const maxSize = this.maxSize - this.sizes[index]; - while (this.calculatedSize > maxSize) { - this.evict(true); - } - } - this.calculatedSize += this.sizes[index]; - if (status) { - status.entrySize = size; - status.totalCalculatedSize = this.calculatedSize; - } - }; - } - removeItemSize(_index) {} - addItemSize(_index, _size) {} - requireSize(_k, _v, size, sizeCalculation) { - if (size || sizeCalculation) { - throw new TypeError( - 'cannot set size without setting maxSize or maxEntrySize on cache' - ) - } - } - - *indexes({ allowStale = this.allowStale } = {}) { - if (this.size) { - for (let i = this.tail; true; ) { - if (!this.isValidIndex(i)) { - break - } - if (allowStale || !this.isStale(i)) { - yield i; - } - if (i === this.head) { - break - } else { - i = this.prev[i]; - } - } - } - } - - *rindexes({ allowStale = this.allowStale } = {}) { - if (this.size) { - for (let i = this.head; true; ) { - if (!this.isValidIndex(i)) { - break - } - if (allowStale || !this.isStale(i)) { - yield i; - } - if (i === this.tail) { - break - } else { - i = this.next[i]; - } - } - } - } - - isValidIndex(index) { - return ( - index !== undefined && - this.keyMap.get(this.keyList[index]) === index - ) - } - - *entries() { - for (const i of this.indexes()) { - if ( - this.valList[i] !== undefined && - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield [this.keyList[i], this.valList[i]]; - } - } - } - *rentries() { - for (const i of this.rindexes()) { - if ( - this.valList[i] !== undefined && - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield [this.keyList[i], this.valList[i]]; - } - } - } - - *keys() { - for (const i of this.indexes()) { - if ( - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.keyList[i]; - } - } - } - *rkeys() { - for (const i of this.rindexes()) { - if ( - this.keyList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.keyList[i]; - } - } - } - - *values() { - for (const i of this.indexes()) { - if ( - this.valList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.valList[i]; - } - } - } - *rvalues() { - for (const i of this.rindexes()) { - if ( - this.valList[i] !== undefined && - !this.isBackgroundFetch(this.valList[i]) - ) { - yield this.valList[i]; - } - } - } - - [Symbol.iterator]() { - return this.entries() - } - - find(fn, getOptions) { - for (const i of this.indexes()) { - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - if (fn(value, this.keyList[i], this)) { - return this.get(this.keyList[i], getOptions) - } - } - } - - forEach(fn, thisp = this) { - for (const i of this.indexes()) { - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - fn.call(thisp, value, this.keyList[i], this); - } - } - - rforEach(fn, thisp = this) { - for (const i of this.rindexes()) { - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - fn.call(thisp, value, this.keyList[i], this); - } - } - - get prune() { - deprecatedMethod('prune', 'purgeStale'); - return this.purgeStale - } - - purgeStale() { - let deleted = false; - for (const i of this.rindexes({ allowStale: true })) { - if (this.isStale(i)) { - this.delete(this.keyList[i]); - deleted = true; - } - } - return deleted - } - - dump() { - const arr = []; - for (const i of this.indexes({ allowStale: true })) { - const key = this.keyList[i]; - const v = this.valList[i]; - const value = this.isBackgroundFetch(v) - ? v.__staleWhileFetching - : v; - if (value === undefined) continue - const entry = { value }; - if (this.ttls) { - entry.ttl = this.ttls[i]; - // always dump the start relative to a portable timestamp - // it's ok for this to be a bit slow, it's a rare operation. - const age = perf.now() - this.starts[i]; - entry.start = Math.floor(Date.now() - age); - } - if (this.sizes) { - entry.size = this.sizes[i]; - } - arr.unshift([key, entry]); - } - return arr - } - - load(arr) { - this.clear(); - for (const [key, entry] of arr) { - if (entry.start) { - // entry.start is a portable timestamp, but we may be using - // node's performance.now(), so calculate the offset. - // it's ok for this to be a bit slow, it's a rare operation. - const age = Date.now() - entry.start; - entry.start = perf.now() - age; - } - this.set(key, entry.value, entry); - } - } - - dispose(_v, _k, _reason) {} - - set( - k, - v, - { - ttl = this.ttl, - start, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - status, - } = {} - ) { - size = this.requireSize(k, v, size, sizeCalculation); - // if the item doesn't fit, don't do anything - // NB: maxEntrySize set to maxSize by default - if (this.maxEntrySize && size > this.maxEntrySize) { - if (status) { - status.set = 'miss'; - status.maxEntrySizeExceeded = true; - } - // have to delete, in case a background fetch is there already. - // in non-async cases, this is a no-op - this.delete(k); - return this - } - let index = this.size === 0 ? undefined : this.keyMap.get(k); - if (index === undefined) { - // addition - index = this.newIndex(); - this.keyList[index] = k; - this.valList[index] = v; - this.keyMap.set(k, index); - this.next[this.tail] = index; - this.prev[index] = this.tail; - this.tail = index; - this.size++; - this.addItemSize(index, size, status); - if (status) { - status.set = 'add'; - } - noUpdateTTL = false; - } else { - // update - this.moveToTail(index); - const oldVal = this.valList[index]; - if (v !== oldVal) { - if (this.isBackgroundFetch(oldVal)) { - oldVal.__abortController.abort(new Error('replaced')); - } else { - if (!noDisposeOnSet) { - this.dispose(oldVal, k, 'set'); - if (this.disposeAfter) { - this.disposed.push([oldVal, k, 'set']); - } - } - } - this.removeItemSize(index); - this.valList[index] = v; - this.addItemSize(index, size, status); - if (status) { - status.set = 'replace'; - const oldValue = - oldVal && this.isBackgroundFetch(oldVal) - ? oldVal.__staleWhileFetching - : oldVal; - if (oldValue !== undefined) status.oldValue = oldValue; - } - } else if (status) { - status.set = 'update'; - } - } - if (ttl !== 0 && this.ttl === 0 && !this.ttls) { - this.initializeTTLTracking(); - } - if (!noUpdateTTL) { - this.setItemTTL(index, ttl, start); - } - this.statusTTL(status, index); - if (this.disposeAfter) { - while (this.disposed.length) { - this.disposeAfter(...this.disposed.shift()); - } - } - return this - } - - newIndex() { - if (this.size === 0) { - return this.tail - } - if (this.size === this.max && this.max !== 0) { - return this.evict(false) - } - if (this.free.length !== 0) { - return this.free.pop() - } - // initial fill, just keep writing down the list - return this.initialFill++ - } - - pop() { - if (this.size) { - const val = this.valList[this.head]; - this.evict(true); - return val - } - } - - evict(free) { - const head = this.head; - const k = this.keyList[head]; - const v = this.valList[head]; - if (this.isBackgroundFetch(v)) { - v.__abortController.abort(new Error('evicted')); - } else { - this.dispose(v, k, 'evict'); - if (this.disposeAfter) { - this.disposed.push([v, k, 'evict']); - } - } - this.removeItemSize(head); - // if we aren't about to use the index, then null these out - if (free) { - this.keyList[head] = null; - this.valList[head] = null; - this.free.push(head); - } - this.head = this.next[head]; - this.keyMap.delete(k); - this.size--; - return head - } - - has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) { - const index = this.keyMap.get(k); - if (index !== undefined) { - if (!this.isStale(index)) { - if (updateAgeOnHas) { - this.updateItemAge(index); - } - if (status) status.has = 'hit'; - this.statusTTL(status, index); - return true - } else if (status) { - status.has = 'stale'; - this.statusTTL(status, index); - } - } else if (status) { - status.has = 'miss'; - } - return false - } - - // like get(), but without any LRU updating or TTL expiration - peek(k, { allowStale = this.allowStale } = {}) { - const index = this.keyMap.get(k); - if (index !== undefined && (allowStale || !this.isStale(index))) { - const v = this.valList[index]; - // either stale and allowed, or forcing a refresh of non-stale value - return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v - } - } - - backgroundFetch(k, index, options, context) { - const v = index === undefined ? undefined : this.valList[index]; - if (this.isBackgroundFetch(v)) { - return v - } - const ac = new AC(); - if (options.signal) { - options.signal.addEventListener('abort', () => - ac.abort(options.signal.reason) - ); - } - const fetchOpts = { - signal: ac.signal, - options, - context, - }; - const cb = (v, updateCache = false) => { - const { aborted } = ac.signal; - const ignoreAbort = options.ignoreFetchAbort && v !== undefined; - if (options.status) { - if (aborted && !updateCache) { - options.status.fetchAborted = true; - options.status.fetchError = ac.signal.reason; - if (ignoreAbort) options.status.fetchAbortIgnored = true; - } else { - options.status.fetchResolved = true; - } - } - if (aborted && !ignoreAbort && !updateCache) { - return fetchFail(ac.signal.reason) - } - // either we didn't abort, and are still here, or we did, and ignored - if (this.valList[index] === p) { - if (v === undefined) { - if (p.__staleWhileFetching) { - this.valList[index] = p.__staleWhileFetching; - } else { - this.delete(k); - } - } else { - if (options.status) options.status.fetchUpdated = true; - this.set(k, v, fetchOpts.options); - } - } - return v - }; - const eb = er => { - if (options.status) { - options.status.fetchRejected = true; - options.status.fetchError = er; - } - return fetchFail(er) - }; - const fetchFail = er => { - const { aborted } = ac.signal; - const allowStaleAborted = - aborted && options.allowStaleOnFetchAbort; - const allowStale = - allowStaleAborted || options.allowStaleOnFetchRejection; - const noDelete = allowStale || options.noDeleteOnFetchRejection; - if (this.valList[index] === p) { - // if we allow stale on fetch rejections, then we need to ensure that - // the stale value is not removed from the cache when the fetch fails. - const del = !noDelete || p.__staleWhileFetching === undefined; - if (del) { - this.delete(k); - } else if (!allowStaleAborted) { - // still replace the *promise* with the stale value, - // since we are done with the promise at this point. - // leave it untouched if we're still waiting for an - // aborted background fetch that hasn't yet returned. - this.valList[index] = p.__staleWhileFetching; - } - } - if (allowStale) { - if (options.status && p.__staleWhileFetching !== undefined) { - options.status.returnedStale = true; - } - return p.__staleWhileFetching - } else if (p.__returned === p) { - throw er - } - }; - const pcall = (res, rej) => { - this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej); - // ignored, we go until we finish, regardless. - // defer check until we are actually aborting, - // so fetchMethod can override. - ac.signal.addEventListener('abort', () => { - if ( - !options.ignoreFetchAbort || - options.allowStaleOnFetchAbort - ) { - res(); - // when it eventually resolves, update the cache. - if (options.allowStaleOnFetchAbort) { - res = v => cb(v, true); - } - } - }); - }; - if (options.status) options.status.fetchDispatched = true; - const p = new Promise(pcall).then(cb, eb); - p.__abortController = ac; - p.__staleWhileFetching = v; - p.__returned = null; - if (index === undefined) { - // internal, don't expose status. - this.set(k, p, { ...fetchOpts.options, status: undefined }); - index = this.keyMap.get(k); - } else { - this.valList[index] = p; - } - return p - } - - isBackgroundFetch(p) { - return ( - p && - typeof p === 'object' && - typeof p.then === 'function' && - Object.prototype.hasOwnProperty.call( - p, - '__staleWhileFetching' - ) && - Object.prototype.hasOwnProperty.call(p, '__returned') && - (p.__returned === p || p.__returned === null) - ) - } - - // this takes the union of get() and set() opts, because it does both - async fetch( - k, - { - // get options - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - noDeleteOnStaleGet = this.noDeleteOnStaleGet, - // set options - ttl = this.ttl, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - // fetch exclusive options - noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, - allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, - ignoreFetchAbort = this.ignoreFetchAbort, - allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, - fetchContext = this.fetchContext, - forceRefresh = false, - status, - signal, - } = {} - ) { - if (!this.fetchMethod) { - if (status) status.fetch = 'get'; - return this.get(k, { - allowStale, - updateAgeOnGet, - noDeleteOnStaleGet, - status, - }) - } - - const options = { - allowStale, - updateAgeOnGet, - noDeleteOnStaleGet, - ttl, - noDisposeOnSet, - size, - sizeCalculation, - noUpdateTTL, - noDeleteOnFetchRejection, - allowStaleOnFetchRejection, - allowStaleOnFetchAbort, - ignoreFetchAbort, - status, - signal, - }; - - let index = this.keyMap.get(k); - if (index === undefined) { - if (status) status.fetch = 'miss'; - const p = this.backgroundFetch(k, index, options, fetchContext); - return (p.__returned = p) - } else { - // in cache, maybe already fetching - const v = this.valList[index]; - if (this.isBackgroundFetch(v)) { - const stale = - allowStale && v.__staleWhileFetching !== undefined; - if (status) { - status.fetch = 'inflight'; - if (stale) status.returnedStale = true; - } - return stale ? v.__staleWhileFetching : (v.__returned = v) - } - - // if we force a refresh, that means do NOT serve the cached value, - // unless we are already in the process of refreshing the cache. - const isStale = this.isStale(index); - if (!forceRefresh && !isStale) { - if (status) status.fetch = 'hit'; - this.moveToTail(index); - if (updateAgeOnGet) { - this.updateItemAge(index); - } - this.statusTTL(status, index); - return v - } - - // ok, it is stale or a forced refresh, and not already fetching. - // refresh the cache. - const p = this.backgroundFetch(k, index, options, fetchContext); - const hasStale = p.__staleWhileFetching !== undefined; - const staleVal = hasStale && allowStale; - if (status) { - status.fetch = hasStale && isStale ? 'stale' : 'refresh'; - if (staleVal && isStale) status.returnedStale = true; - } - return staleVal ? p.__staleWhileFetching : (p.__returned = p) - } - } - - get( - k, - { - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - noDeleteOnStaleGet = this.noDeleteOnStaleGet, - status, - } = {} - ) { - const index = this.keyMap.get(k); - if (index !== undefined) { - const value = this.valList[index]; - const fetching = this.isBackgroundFetch(value); - this.statusTTL(status, index); - if (this.isStale(index)) { - if (status) status.get = 'stale'; - // delete only if not an in-flight background fetch - if (!fetching) { - if (!noDeleteOnStaleGet) { - this.delete(k); - } - if (status) status.returnedStale = allowStale; - return allowStale ? value : undefined - } else { - if (status) { - status.returnedStale = - allowStale && value.__staleWhileFetching !== undefined; - } - return allowStale ? value.__staleWhileFetching : undefined - } - } else { - if (status) status.get = 'hit'; - // if we're currently fetching it, we don't actually have it yet - // it's not stale, which means this isn't a staleWhileRefetching. - // If it's not stale, and fetching, AND has a __staleWhileFetching - // value, then that means the user fetched with {forceRefresh:true}, - // so it's safe to return that value. - if (fetching) { - return value.__staleWhileFetching - } - this.moveToTail(index); - if (updateAgeOnGet) { - this.updateItemAge(index); - } - return value - } - } else if (status) { - status.get = 'miss'; - } - } - - connect(p, n) { - this.prev[n] = p; - this.next[p] = n; - } - - moveToTail(index) { - // if tail already, nothing to do - // if head, move head to next[index] - // else - // move next[prev[index]] to next[index] (head has no prev) - // move prev[next[index]] to prev[index] - // prev[index] = tail - // next[tail] = index - // tail = index - if (index !== this.tail) { - if (index === this.head) { - this.head = this.next[index]; - } else { - this.connect(this.prev[index], this.next[index]); - } - this.connect(this.tail, index); - this.tail = index; - } - } - - get del() { - deprecatedMethod('del', 'delete'); - return this.delete - } - - delete(k) { - let deleted = false; - if (this.size !== 0) { - const index = this.keyMap.get(k); - if (index !== undefined) { - deleted = true; - if (this.size === 1) { - this.clear(); - } else { - this.removeItemSize(index); - const v = this.valList[index]; - if (this.isBackgroundFetch(v)) { - v.__abortController.abort(new Error('deleted')); - } else { - this.dispose(v, k, 'delete'); - if (this.disposeAfter) { - this.disposed.push([v, k, 'delete']); - } - } - this.keyMap.delete(k); - this.keyList[index] = null; - this.valList[index] = null; - if (index === this.tail) { - this.tail = this.prev[index]; - } else if (index === this.head) { - this.head = this.next[index]; - } else { - this.next[this.prev[index]] = this.next[index]; - this.prev[this.next[index]] = this.prev[index]; - } - this.size--; - this.free.push(index); - } - } - } - if (this.disposed) { - while (this.disposed.length) { - this.disposeAfter(...this.disposed.shift()); - } - } - return deleted - } - - clear() { - for (const index of this.rindexes({ allowStale: true })) { - const v = this.valList[index]; - if (this.isBackgroundFetch(v)) { - v.__abortController.abort(new Error('deleted')); - } else { - const k = this.keyList[index]; - this.dispose(v, k, 'delete'); - if (this.disposeAfter) { - this.disposed.push([v, k, 'delete']); - } - } - } - - this.keyMap.clear(); - this.valList.fill(null); - this.keyList.fill(null); - if (this.ttls) { - this.ttls.fill(0); - this.starts.fill(0); - } - if (this.sizes) { - this.sizes.fill(0); - } - this.head = 0; - this.tail = 0; - this.initialFill = 1; - this.free.length = 0; - this.calculatedSize = 0; - this.size = 0; - if (this.disposed) { - while (this.disposed.length) { - this.disposeAfter(...this.disposed.shift()); - } - } - } - - get reset() { - deprecatedMethod('reset', 'clear'); - return this.clear - } - - get length() { - deprecatedProperty('length', 'size'); - return this.size - } - - static get AbortController() { - return AC - } - static get AbortSignal() { - return AS - } -} - -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; - } - SimpleNode.prototype.filterNodes = function (exposingNodes) { - return evalPerfUtil.perf(this, "filterNodes", function () { - return new Map(); - }); - }; - SimpleNode.prototype.justEval = function (exposingNodes) { - return this.value; - }; - SimpleNode.prototype.getChildren = function () { - return []; - }; - SimpleNode.prototype.dependValues = function () { - return {}; - }; - SimpleNode.prototype.fetchInfo = function (exposingNodes) { - return { - isFetching: false, - ready: true, - }; - }; - __decorate([ - memoized() - ], SimpleNode.prototype, "filterNodes", null); - return SimpleNode; -}(AbstractNode)); -/** - * provide simple value, don't need to eval - */ -function fromValue(value) { - return new SimpleNode(value); -} -var lru = new LRU({ max: 16384 }); -function fromValueWithCache(value) { - var res = lru.get(value); - if (res === undefined) { - res = fromValue(value); - lru.set(value, res); - } - return res; -} - -// 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) { - if (!this.inputNodes) { - return this.moduleExposingNodes; - } - var 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; - if (!targetNode) { - return; - } - inputNodes[name] = new WrapNode(targetNode, exposingNodes, exposingMethods); - }); - return __assign(__assign({}, this.moduleExposingNodes), inputNodes); - }; - WrapNode.prototype.filterNodes = function (exposingNodes) { - return this.delegate.filterNodes(this.wrap(exposingNodes, {})); - }; - WrapNode.prototype.justEval = function (exposingNodes, methods) { - return this.delegate.evaluate(this.wrap(exposingNodes, methods), this.moduleExposingMethods); - }; - WrapNode.prototype.fetchInfo = function (exposingNodes) { - return this.delegate.fetchInfo(this.wrap(exposingNodes, {})); - }; - WrapNode.prototype.getChildren = function () { - return [this.delegate]; - }; - WrapNode.prototype.dependValues = function () { - 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) { - return this.child.filterNodes(exposingNodes); - }; - WrapContextNode.prototype.justEval = function (exposingNodes, methods) { - var _this = this; - return function (params) { - var nodes; - if (params) { - nodes = __assign({}, exposingNodes); - Object.entries(params).forEach(function (_a) { - var key = _a[0], value = _a[1]; - nodes[key] = fromValueWithCache(value); - }); - } - else { - nodes = exposingNodes; - } - return _this.child.evaluate(nodes, methods); - }; - }; - WrapContextNode.prototype.getChildren = function () { - return [this.child]; - }; - WrapContextNode.prototype.dependValues = function () { - return this.child.dependValues(); - }; - WrapContextNode.prototype.fetchInfo = function (exposingNodes) { - return this.child.fetchInfo(exposingNodes); - }; - __decorate([ - memoized() - ], WrapContextNode.prototype, "filterNodes", null); - return WrapContextNode; -}(AbstractNode)); -function wrapContext(node) { - return new WrapContextNode(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) { - return this.child.filterNodes(exposingNodes); - }; - WrapContextNodeV2.prototype.justEval = function (exposingNodes, methods) { - return this.child.evaluate(this.wrap(exposingNodes), methods); - }; - WrapContextNodeV2.prototype.getChildren = function () { - return [this.child]; - }; - WrapContextNodeV2.prototype.dependValues = function () { - return this.child.dependValues(); - }; - WrapContextNodeV2.prototype.fetchInfo = function (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)); - -function transformWrapper(transformFn, defaultValue) { - function transformWithMsg(valueAndMsg) { - var _a; - var result; - try { - var value = transformFn(valueAndMsg.value); - result = new ValueAndMsg(value, valueAndMsg.msg, valueAndMsg.extra, valueAndMsg.value); - } - catch (err) { - var value = void 0; - try { - value = defaultValue !== null && defaultValue !== void 0 ? defaultValue : transformFn(""); - } - catch (err2) { - value = undefined; - } - var errorMsg = (_a = valueAndMsg.msg) !== null && _a !== void 0 ? _a : getErrorMessage(err); - result = new ValueAndMsg(value, errorMsg, valueAndMsg.extra, valueAndMsg.value); - } - // log.trace( - // "transformWithMsg. func: ", - // transformFn.name, - // "\nsource: ", - // valueAndMsg, - // "\nresult: ", - // result - // ); - return result; - } - return transformWithMsg; -} - -function styleNamespace(id) { - return "style-for-".concat(id); -} -function evalStyle(id, css, globalStyle) { - var _a; - var styleId = styleNamespace(id); - var prefixId = globalStyle ? id : "#".concat(id); - var compiledCSS = ""; - css.forEach(function (i) { - if (!i.trim()) { - return; - } - compiledCSS += serialize(compile("".concat(prefixId, "{").concat(i, "}")), middleware([prefixer, stringify])); - }); - var styleNode = document.querySelector("#".concat(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); - } - styleNode.textContent = compiledCSS; -} -function clearStyleEval(id) { - var styleId = id && styleNamespace(id); - var styleNode = document.querySelectorAll("style[data-style-src=eval]"); - if (styleNode) { - styleNode.forEach(function (i) { - if (!styleId || styleId === i.id) { - i.remove(); - } - }); - } -} - -var CompActionTypes; -(function (CompActionTypes) { - CompActionTypes["CHANGE_VALUE"] = "CHANGE_VALUE"; - CompActionTypes["RENAME"] = "RENAME"; - CompActionTypes["MULTI_CHANGE"] = "MULTI_CHANGE"; - CompActionTypes["DELETE_COMP"] = "DELETE_COMP"; - CompActionTypes["REPLACE_COMP"] = "REPLACE_COMP"; - CompActionTypes["ONLY_EVAL"] = "NEED_EVAL"; - // UPDATE_NODES = "UPDATE_NODES", - CompActionTypes["UPDATE_NODES_V2"] = "UPDATE_NODES_V2"; - CompActionTypes["EXECUTE_QUERY"] = "EXECUTE_QUERY"; - CompActionTypes["TRIGGER_MODULE_EVENT"] = "TRIGGER_MODULE_EVENT"; - /** - * this action can pass data to the comp by name - */ - CompActionTypes["ROUTE_BY_NAME"] = "ROUTE_BY_NAME"; - /** - * execute action with context. for example, buttons in table's column should has currentRow as context - * FIXME: this is a broadcast message, better to be improved by a heritage mechanism. - */ - CompActionTypes["UPDATE_ACTION_CONTEXT"] = "UPDATE_ACTION_CONTEXT"; - /** - * comp-specific action can be placed not globally. - * use CUSTOM uniformly. - */ - CompActionTypes["CUSTOM"] = "CUSTOM"; - /** - * broadcast other actions in comp tree structure. - * used for encapsulate MultiBaseComp - */ - CompActionTypes["BROADCAST"] = "BROADCAST"; -})(CompActionTypes || (CompActionTypes = {})); - -function customAction(value, editDSL) { - return { - type: CompActionTypes.CUSTOM, - path: [], - value: value, - editDSL: editDSL, - }; -} -function updateActionContextAction(context) { - var value = { - type: CompActionTypes.UPDATE_ACTION_CONTEXT, - path: [], - editDSL: false, - context: context, - }; - return { - type: CompActionTypes.BROADCAST, - path: [], - editDSL: false, - action: value, - }; -} -/** - * check if it's current custom action. - * keep type safe via generics, users should keep type the same as T, otherwise may cause bug. - */ -function isMyCustomAction(action, type) { - return !isChildAction(action) && isCustomAction(action, type); -} -function isCustomAction(action, type) { - return action.type === CompActionTypes.CUSTOM && _.get(action.value, "type") === type; -} -/** - * The action of execute query. - * path route to the query exactly. - * RootComp will change the path correctly when queryName is passed. - */ -function executeQueryAction(props) { - return __assign({ type: CompActionTypes.EXECUTE_QUERY, path: [], editDSL: false }, props); -} -function triggerModuleEventAction(name) { - return { - type: CompActionTypes.TRIGGER_MODULE_EVENT, - path: [], - editDSL: false, - name: name, - }; -} -/** - * better to use comp.dispatchChangeValueAction to keep type safe - */ -function changeValueAction(value, editDSL) { - return { - type: CompActionTypes.CHANGE_VALUE, - path: [], - editDSL: editDSL, - value: value, - }; -} -function isBroadcastAction(action, type) { - return action.type === CompActionTypes.BROADCAST && _.get(action.action, "type") === type; -} -function renameAction(oldName, name) { - var value = { - type: CompActionTypes.RENAME, - path: [], - editDSL: true, - oldName: oldName, - name: name, - }; - return { - type: CompActionTypes.BROADCAST, - path: [], - editDSL: true, - action: value, - }; -} -function routeByNameAction(name, action) { - return { - type: CompActionTypes.ROUTE_BY_NAME, - path: [], - name: name, - editDSL: action.editDSL, - action: 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); - return { - type: CompActionTypes.MULTI_CHANGE, - path: [], - editDSL: editDSL, - changes: changes, - }; -} -function deleteCompAction() { - return { - type: CompActionTypes.DELETE_COMP, - path: [], - editDSL: true, - }; -} -function replaceCompAction(compFactory) { - return { - type: CompActionTypes.REPLACE_COMP, - path: [], - editDSL: false, - compFactory: compFactory, - }; -} -function onlyEvalAction() { - return { - type: CompActionTypes.ONLY_EVAL, - path: [], - editDSL: false, - }; -} -function wrapChildAction(childName, action) { - return __assign(__assign({}, action), { path: __spreadArray([childName], action.path, true) }); -} -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; -} -function unwrapChildAction(action) { - return [action.path[0], __assign(__assign({}, action), { path: action.path.slice(1) })]; -} -function changeChildAction(childName, value, editDSL) { - return wrapChildAction(childName, changeValueAction(value, editDSL)); -} -function updateNodesV2Action(value) { - return { - type: CompActionTypes.UPDATE_NODES_V2, - path: [], - editDSL: false, - value: value, - }; -} -function wrapActionExtraInfo(action, extraInfos) { - return __assign(__assign({}, action), { extraInfo: __assign(__assign({}, action.extraInfo), extraInfos) }); -} -function deferAction(action) { - return __assign(__assign({}, action), { priority: "defer" }); -} -function changeEditDSLAction(action, editDSL) { - return __assign(__assign({}, action), { editDSL: editDSL }); -} - -var CACHE_PREFIX = "__cache__"; -/** - * a decorator for caching function's result ignoring params. - * - * @remarks - * caches are stored in `__cache__xxx` fields. - * `ObjectUtils.setFields` will not save this 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; - if (!thisObj[cachePropertyKey]) { - // put the result into array, for representing `undefined` - thisObj[cachePropertyKey] = [originalMethod.apply(this, args)]; - } - return thisObj[cachePropertyKey][0]; - }; -} - -/** - * compare keys and values - */ -function shallowEqual(obj1, obj2) { - if (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]; })); -} -function containFields(obj, fields) { - if (fields === undefined) { - return true; - } - var notEqualIndex = Object.keys(fields).findIndex(function (key) { - return obj[key] !== fields[key]; - }); - return notEqualIndex === -1; -} -/** - * type unsafe, users should keep safe by self. - * 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) { - 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))) { - delete res[key]; - } - } - }); - 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) { }); - } - AbstractComp.prototype.changeDispatch = function (dispatch) { - return setFieldsNoTypeCheck(this, { dispatch: dispatch }, { keepCacheKeys: ["node"] }); - }; - /** - * trigger changeValueAction, type safe - */ - AbstractComp.prototype.dispatchChangeValueAction = function (value) { - this.dispatch(this.changeValueAction(value)); - }; - AbstractComp.prototype.changeValueAction = function (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 () { - return this.nodeWithoutCache(); - }; - __decorate([ - memo - ], AbstractComp.prototype, "node", null); - return AbstractComp; -}()); - -/** - * wrap a dispatch as a child dispatch - * - * @param dispatch input dispatch - * @param childName the key of the child dispatch - * @returns a wrapped dispatch with the child dispatch - */ -function wrapDispatch(dispatch, childName) { - return function (action) { - if (dispatch) { - dispatch(wrapChildAction(childName, action)); - } - }; -} -/** - * the core class of multi function - * build the tree structure of comps - * @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); - 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; - // 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; - if (!NextComp) { - return this; - } - var compName = action.path[0]; - var currentComp = this.children[compName]; - var value = currentComp.toJsonValue(); - var nextComp = new NextComp({ - value: value, - dispatch: wrapDispatch(this.dispatch, compName), - }); - return this.setChildren(__assign(__assign({}, this.children), (_a = {}, _a[compName] = nextComp, _a))); - } - if (isChildAction(action)) { - var _d = unwrapChildAction(action), childName = _d[0], childAction = _d[1]; - var child = this.children[childName]; - if (!child) { - log.error("found bad action path ", childName); - return this; - } - var newChild = child.reduce(childAction); - return this.setChild(childName, newChild); - } - // key, value - switch (action.type) { - case CompActionTypes.MULTI_CHANGE: { - var changes_1 = action.changes; - // handle DELETE in the parent level - var mcChildren = _.omitBy(this.children, function (comp, childName) { - var innerAction = changes_1[childName]; - return (innerAction && - innerAction.type === CompActionTypes.DELETE_COMP && - innerAction.path.length === 0); - }); - // CHANGE - mcChildren = _.mapValues(mcChildren, function (comp, childName) { - var innerAction = changes_1[childName]; - if (innerAction) { - return comp.reduce(innerAction); - } - return comp; - }); - return this.setChildren(mcChildren); - } - case CompActionTypes.UPDATE_NODES_V2: { - var value_1 = action.value; - if (value_1 === undefined) { - return this; - } - var cacheKey = CACHE_PREFIX + "REDUCE_UPDATE_NODE"; - // if constructed by the value, just return - if (this[cacheKey] === value_1) { - // 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])); - } - return comp; - }); - var extraFields = (_c = this.extraNode()) === null || _c === void 0 ? void 0 : _c.updateNodeFields(value_1); - 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"] }); - } - case CompActionTypes.CHANGE_VALUE: { - return this.setChildren(this.parseChildrenFromValue({ - dispatch: this.dispatch, - value: action.value, - })); - } - case CompActionTypes.BROADCAST: { - return this.setChildren(_.mapValues(this.children, function (comp) { - return comp.reduce(action); - })); - } - case CompActionTypes.ONLY_EVAL: { - return this; - } - } - }; - MultiBaseComp.prototype.setChild = function (childName, newChild) { - var _a; - 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) { - 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 () { - return undefined; - }; - MultiBaseComp.prototype.childrenNode = function () { - var _this = this; - var result = {}; - Object.keys(this.children).forEach(function (key) { - var 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) { - return comp.changeDispatch(wrapDispatch(dispatch, childName)); - }); - return _super.prototype.changeDispatch.call(this, dispatch).setChildren(newChildren, { keepCacheKeys: ["node"] }); - }; - MultiBaseComp.prototype.ignoreChildDefaultValue = function () { - 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]; - // FIXME: this implementation is a little tricky, better choose a encapsulated implementation - if (comp.hasOwnProperty("NO_PERSISTENCE")) { - return; - } - var 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 () { - return true; - }; - MultiBaseComp.prototype.changeChildAction = function (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)); - }, - }; -} - -/** - * 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; - } - /** - * may override this to implement compatibility - */ - SimpleAbstractComp.prototype.oldValueToNew = function (value) { - return value; - }; - SimpleAbstractComp.prototype.reduce = function (action) { - if (action.type === CompActionTypes.CHANGE_VALUE) { - if (this.value === action.value) { - return this; - } - return setFieldsNoTypeCheck(this, { value: action.value }); - } - return this; - }; - SimpleAbstractComp.prototype.nodeWithoutCache = function () { - return fromValue(this.value); - }; - SimpleAbstractComp.prototype.exposingNode = function () { - return this.node(); - }; - // may be used in defaultValue - SimpleAbstractComp.prototype.toJsonValue = function () { - 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 () { - return this.value; - }; - return SimpleComp; -}(SimpleAbstractComp)); - -var jsxRuntimeExports = {}; -var jsxRuntime = { - get exports(){ return jsxRuntimeExports; }, - set exports(v){ jsxRuntimeExports = v; }, -}; - -var reactJsxRuntime_production_min = {}; - -var reactExports = {}; -var react = { - get exports(){ return reactExports; }, - set exports(v){ reactExports = v; }, -}; - -var react_production_min = {}; - -/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -var hasRequiredReact_production_min; - -function requireReact_production_min () { - if (hasRequiredReact_production_min) return react_production_min; - hasRequiredReact_production_min = 1; -var l=Symbol.for("react.element"),n=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),q=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),t=Symbol.for("react.provider"),u=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),z=Symbol.iterator;function A(a){if(null===a||"object"!==typeof a)return null;a=z&&a[z]||a["@@iterator"];return "function"===typeof a?a:null} - var B={isMounted:function(){return !1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B;}E.prototype.isReactComponent={}; - E.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,a,b,"setState");};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate");};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B;}var H=G.prototype=new F; - H.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0}; - function M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=""+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - printWarning('warn', format, args); - } - } - } - function error(format) { - { - { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - printWarning('error', format, args); - } - } - } - - function printWarning(level, format, args) { - // When changing this logic, you might want to also - // update consoleWithStackDev.www.js as well. - { - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - var stack = ReactDebugCurrentFrame.getStackAddendum(); - - if (stack !== '') { - format += '%s'; - args = args.concat([stack]); - } // eslint-disable-next-line react-internal/safe-string-coercion - - - var argsWithFormat = args.map(function (item) { - return String(item); - }); // Careful: RN currently depends on this prefix - - argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it - // breaks IE9: https://github.com/facebook/react/issues/13610 - // eslint-disable-next-line react-internal/no-production-logging - - Function.prototype.apply.call(console[level], console, argsWithFormat); - } - } - - var didWarnStateUpdateForUnmountedComponent = {}; - - function warnNoop(publicInstance, callerName) { - { - var _constructor = publicInstance.constructor; - var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; - var warningKey = componentName + "." + callerName; - - if (didWarnStateUpdateForUnmountedComponent[warningKey]) { - return; - } - - error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); - - didWarnStateUpdateForUnmountedComponent[warningKey] = true; - } - } - /** - * This is the abstract API for an update queue. - */ - - - var ReactNoopUpdateQueue = { - /** - * Checks whether or not this composite component is mounted. - * @param {ReactClass} publicInstance The instance we want to test. - * @return {boolean} True if mounted, false otherwise. - * @protected - * @final - */ - isMounted: function (publicInstance) { - return false; - }, - - /** - * Forces an update. This should only be invoked when it is known with - * certainty that we are **not** in a DOM transaction. - * - * You may want to call this when you know that some deeper aspect of the - * component's state has changed but `setState` was not called. - * - * This will not invoke `shouldComponentUpdate`, but it will invoke - * `componentWillUpdate` and `componentDidUpdate`. - * - * @param {ReactClass} publicInstance The instance that should rerender. - * @param {?function} callback Called after component is updated. - * @param {?string} callerName name of the calling function in the public API. - * @internal - */ - enqueueForceUpdate: function (publicInstance, callback, callerName) { - warnNoop(publicInstance, 'forceUpdate'); - }, - - /** - * Replaces all of the state. Always use this or `setState` to mutate state. - * You should treat `this.state` as immutable. - * - * There is no guarantee that `this.state` will be immediately updated, so - * accessing `this.state` after calling this method may return the old value. - * - * @param {ReactClass} publicInstance The instance that should rerender. - * @param {object} completeState Next state. - * @param {?function} callback Called after component is updated. - * @param {?string} callerName name of the calling function in the public API. - * @internal - */ - enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { - warnNoop(publicInstance, 'replaceState'); - }, - - /** - * Sets a subset of the state. This only exists because _pendingState is - * internal. This provides a merging strategy that is not available to deep - * properties which is confusing. TODO: Expose pendingState or don't use it - * during the merge. - * - * @param {ReactClass} publicInstance The instance that should rerender. - * @param {object} partialState Next partial state to be merged with state. - * @param {?function} callback Called after component is updated. - * @param {?string} Name of the calling function in the public API. - * @internal - */ - enqueueSetState: function (publicInstance, partialState, callback, callerName) { - warnNoop(publicInstance, 'setState'); - } - }; - - var assign = Object.assign; - - var emptyObject = {}; - - { - Object.freeze(emptyObject); - } - /** - * Base class helpers for the updating state of a component. - */ - - - function Component(props, context, updater) { - this.props = props; - this.context = context; // If a component has string refs, we will assign a different object later. - - this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the - // renderer. - - this.updater = updater || ReactNoopUpdateQueue; - } - - Component.prototype.isReactComponent = {}; - /** - * Sets a subset of the state. Always use this to mutate - * state. You should treat `this.state` as immutable. - * - * There is no guarantee that `this.state` will be immediately updated, so - * accessing `this.state` after calling this method may return the old value. - * - * There is no guarantee that calls to `setState` will run synchronously, - * as they may eventually be batched together. You can provide an optional - * callback that will be executed when the call to setState is actually - * completed. - * - * When a function is provided to setState, it will be called at some point in - * the future (not synchronously). It will be called with the up to date - * component arguments (state, props, context). These values can be different - * from this.* because your function may be called after receiveProps but before - * shouldComponentUpdate, and this new state, props, and context will not yet be - * assigned to this. - * - * @param {object|function} partialState Next partial state or function to - * produce next partial state to be merged with current state. - * @param {?function} callback Called after state is updated. - * @final - * @protected - */ - - Component.prototype.setState = function (partialState, callback) { - if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) { - throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.'); - } - - this.updater.enqueueSetState(this, partialState, callback, 'setState'); - }; - /** - * Forces an update. This should only be invoked when it is known with - * certainty that we are **not** in a DOM transaction. - * - * You may want to call this when you know that some deeper aspect of the - * component's state has changed but `setState` was not called. - * - * This will not invoke `shouldComponentUpdate`, but it will invoke - * `componentWillUpdate` and `componentDidUpdate`. - * - * @param {?function} callback Called after update is complete. - * @final - * @protected - */ - - - Component.prototype.forceUpdate = function (callback) { - this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); - }; - /** - * Deprecated APIs. These APIs used to exist on classic React classes but since - * we would like to deprecate them, we're not going to move them over to this - * modern base class. Instead, we define a getter that warns if it's accessed. - */ - - - { - var deprecatedAPIs = { - isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], - replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] - }; - - var defineDeprecationWarning = function (methodName, info) { - Object.defineProperty(Component.prototype, methodName, { - get: function () { - warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); - - return undefined; - } - }); - }; - - for (var fnName in deprecatedAPIs) { - if (deprecatedAPIs.hasOwnProperty(fnName)) { - defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); - } - } - } - - function ComponentDummy() {} - - ComponentDummy.prototype = Component.prototype; - /** - * Convenience component with default shallow equality check for sCU. - */ - - function PureComponent(props, context, updater) { - this.props = props; - this.context = context; // If a component has string refs, we will assign a different object later. - - this.refs = emptyObject; - this.updater = updater || ReactNoopUpdateQueue; - } - - var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); - pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. - - assign(pureComponentPrototype, Component.prototype); - pureComponentPrototype.isPureReactComponent = true; - - // an immutable object with a single mutable value - function createRef() { - var refObject = { - current: null - }; - - { - Object.seal(refObject); - } - - return refObject; - } - - var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare - - function isArray(a) { - return isArrayImpl(a); - } - - /* - * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol - * and Temporal.* types. See https://github.com/facebook/react/pull/22064. - * - * The functions in this module will throw an easier-to-understand, - * easier-to-debug exception with a clear errors message message explaining the - * problem. (Instead of a confusing exception thrown inside the implementation - * of the `value` object). - */ - // $FlowFixMe only called in DEV, so void return is not possible. - function typeName(value) { - { - // toStringTag is needed for namespaced types like Temporal.Instant - var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; - var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; - return type; - } - } // $FlowFixMe only called in DEV, so void return is not possible. - - - function willCoercionThrow(value) { - { - try { - testStringCoercion(value); - return false; - } catch (e) { - return true; - } - } - } - - function testStringCoercion(value) { - // If you ended up here by following an exception call stack, here's what's - // happened: you supplied an object or symbol value to React (as a prop, key, - // DOM attribute, CSS property, string ref, etc.) and when React tried to - // coerce it to a string using `'' + value`, an exception was thrown. - // - // The most common types that will cause this exception are `Symbol` instances - // and Temporal objects like `Temporal.Instant`. But any object that has a - // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this - // exception. (Library authors do this to prevent users from using built-in - // numeric operators like `+` or comparison operators like `>=` because custom - // methods are needed to perform accurate arithmetic or comparison.) - // - // To fix the problem, coerce this object or symbol value to a string before - // passing it to React. The most reliable way is usually `String(value)`. - // - // To find which value is throwing, check the browser or debugger console. - // Before this exception was thrown, there should be `console.error` output - // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the - // problem and how that type was used: key, atrribute, input value prop, etc. - // In most cases, this console output also shows the component and its - // ancestor components where the exception happened. - // - // eslint-disable-next-line react-internal/safe-string-coercion - return '' + value; - } - function checkKeyStringCoercion(value) { - { - if (willCoercionThrow(value)) { - error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); - - return testStringCoercion(value); // throw (to help callers find troubleshooting comments) - } - } - } - - function getWrappedName(outerType, innerType, wrapperName) { - var displayName = outerType.displayName; - - if (displayName) { - return displayName; - } - - var functionName = innerType.displayName || innerType.name || ''; - return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; - } // Keep in sync with react-reconciler/getComponentNameFromFiber - - - function getContextName(type) { - return type.displayName || 'Context'; - } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. - - - function getComponentNameFromType(type) { - if (type == null) { - // Host root, text node or just invalid type. - return null; - } - - { - if (typeof type.tag === 'number') { - error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); - } - } - - if (typeof type === 'function') { - return type.displayName || type.name || null; - } - - if (typeof type === 'string') { - return type; - } - - switch (type) { - case REACT_FRAGMENT_TYPE: - return 'Fragment'; - - case REACT_PORTAL_TYPE: - return 'Portal'; - - case REACT_PROFILER_TYPE: - return 'Profiler'; - - case REACT_STRICT_MODE_TYPE: - return 'StrictMode'; - - case REACT_SUSPENSE_TYPE: - return 'Suspense'; - - case REACT_SUSPENSE_LIST_TYPE: - return 'SuspenseList'; - - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_CONTEXT_TYPE: - var context = type; - return getContextName(context) + '.Consumer'; - - case REACT_PROVIDER_TYPE: - var provider = type; - return getContextName(provider._context) + '.Provider'; - - case REACT_FORWARD_REF_TYPE: - return getWrappedName(type, type.render, 'ForwardRef'); - - case REACT_MEMO_TYPE: - var outerName = type.displayName || null; - - if (outerName !== null) { - return outerName; - } - - return getComponentNameFromType(type.type) || 'Memo'; - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - return getComponentNameFromType(init(payload)); - } catch (x) { - return null; - } - } - - // eslint-disable-next-line no-fallthrough - } - } - - return null; - } - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - var RESERVED_PROPS = { - key: true, - ref: true, - __self: true, - __source: true - }; - var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; - - { - didWarnAboutStringRefs = {}; - } - - function hasValidRef(config) { - { - if (hasOwnProperty.call(config, 'ref')) { - var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.ref !== undefined; - } - - function hasValidKey(config) { - { - if (hasOwnProperty.call(config, 'key')) { - var getter = Object.getOwnPropertyDescriptor(config, 'key').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.key !== undefined; - } - - function defineKeyPropWarningGetter(props, displayName) { - var warnAboutAccessingKey = function () { - { - if (!specialPropKeyWarningShown) { - specialPropKeyWarningShown = true; - - error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - } - }; - - warnAboutAccessingKey.isReactWarning = true; - Object.defineProperty(props, 'key', { - get: warnAboutAccessingKey, - configurable: true - }); - } - - function defineRefPropWarningGetter(props, displayName) { - var warnAboutAccessingRef = function () { - { - if (!specialPropRefWarningShown) { - specialPropRefWarningShown = true; - - error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - } - }; - - warnAboutAccessingRef.isReactWarning = true; - Object.defineProperty(props, 'ref', { - get: warnAboutAccessingRef, - configurable: true - }); - } - - function warnIfStringRefCannotBeAutoConverted(config) { - { - if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { - var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); - - if (!didWarnAboutStringRefs[componentName]) { - error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); - - didWarnAboutStringRefs[componentName] = true; - } - } - } - } - /** - * Factory method to create a new React element. This no longer adheres to - * the class pattern, so do not use new to call it. Also, instanceof check - * will not work. Instead test $$typeof field against Symbol.for('react.element') to check - * if something is a React Element. - * - * @param {*} type - * @param {*} props - * @param {*} key - * @param {string|object} ref - * @param {*} owner - * @param {*} self A *temporary* helper to detect places where `this` is - * different from the `owner` when React.createElement is called, so that we - * can warn. We want to get rid of owner and replace string `ref`s with arrow - * functions, and as long as `this` and owner are the same, there will be no - * change in behavior. - * @param {*} source An annotation object (added by a transpiler or otherwise) - * indicating filename, line number, and/or other information. - * @internal - */ - - - var ReactElement = function (type, key, ref, self, source, owner, props) { - var element = { - // This tag allows us to uniquely identify this as a React Element - $$typeof: REACT_ELEMENT_TYPE, - // Built-in properties that belong on the element - type: type, - key: key, - ref: ref, - props: props, - // Record the component responsible for creating this element. - _owner: owner - }; - - { - // The validation flag is currently mutative. We put it on - // an external backing store so that we can freeze the whole object. - // This can be replaced with a WeakMap once they are implemented in - // commonly used development environments. - element._store = {}; // To make comparing ReactElements easier for testing purposes, we make - // the validation flag non-enumerable (where possible, which should - // include every environment we run tests in), so the test framework - // ignores it. - - Object.defineProperty(element._store, 'validated', { - configurable: false, - enumerable: false, - writable: true, - value: false - }); // self and source are DEV only properties. - - Object.defineProperty(element, '_self', { - configurable: false, - enumerable: false, - writable: false, - value: self - }); // Two elements created in two different places should be considered - // equal for testing purposes and therefore we hide it from enumeration. - - Object.defineProperty(element, '_source', { - configurable: false, - enumerable: false, - writable: false, - value: source - }); - - if (Object.freeze) { - Object.freeze(element.props); - Object.freeze(element); - } - } - - return element; - }; - /** - * Create and return a new ReactElement of the given type. - * See https://reactjs.org/docs/react-api.html#createelement - */ - - function createElement(type, config, children) { - var propName; // Reserved names are extracted - - var props = {}; - var key = null; - var ref = null; - var self = null; - var source = null; - - if (config != null) { - if (hasValidRef(config)) { - ref = config.ref; - - { - warnIfStringRefCannotBeAutoConverted(config); - } - } - - if (hasValidKey(config)) { - { - checkKeyStringCoercion(config.key); - } - - key = '' + config.key; - } - - self = config.__self === undefined ? null : config.__self; - source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object - - for (propName in config) { - if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { - props[propName] = config[propName]; - } - } - } // Children can be more than one argument, and those are transferred onto - // the newly allocated props object. - - - var childrenLength = arguments.length - 2; - - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 2]; - } - - { - if (Object.freeze) { - Object.freeze(childArray); - } - } - - props.children = childArray; - } // Resolve default props - - - if (type && type.defaultProps) { - var defaultProps = type.defaultProps; - - for (propName in defaultProps) { - if (props[propName] === undefined) { - props[propName] = defaultProps[propName]; - } - } - } - - { - if (key || ref) { - var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; - - if (key) { - defineKeyPropWarningGetter(props, displayName); - } - - if (ref) { - defineRefPropWarningGetter(props, displayName); - } - } - } - - return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); - } - function cloneAndReplaceKey(oldElement, newKey) { - var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); - return newElement; - } - /** - * Clone and return a new ReactElement using element as the starting point. - * See https://reactjs.org/docs/react-api.html#cloneelement - */ - - function cloneElement(element, config, children) { - if (element === null || element === undefined) { - throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + "."); - } - - var propName; // Original props are copied - - var props = assign({}, element.props); // Reserved names are extracted - - var key = element.key; - var ref = element.ref; // Self is preserved since the owner is preserved. - - var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a - // transpiler, and the original source is probably a better indicator of the - // true owner. - - var source = element._source; // Owner will be preserved, unless ref is overridden - - var owner = element._owner; - - if (config != null) { - if (hasValidRef(config)) { - // Silently steal the ref from the parent. - ref = config.ref; - owner = ReactCurrentOwner.current; - } - - if (hasValidKey(config)) { - { - checkKeyStringCoercion(config.key); - } - - key = '' + config.key; - } // Remaining properties override existing props - - - var defaultProps; - - if (element.type && element.type.defaultProps) { - defaultProps = element.type.defaultProps; - } - - for (propName in config) { - if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { - if (config[propName] === undefined && defaultProps !== undefined) { - // Resolve default props - props[propName] = defaultProps[propName]; - } else { - props[propName] = config[propName]; - } - } - } - } // Children can be more than one argument, and those are transferred onto - // the newly allocated props object. - - - var childrenLength = arguments.length - 2; - - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 2]; - } - - props.children = childArray; - } - - return ReactElement(element.type, key, ref, self, source, owner, props); - } - /** - * Verifies the object is a ReactElement. - * See https://reactjs.org/docs/react-api.html#isvalidelement - * @param {?object} object - * @return {boolean} True if `object` is a ReactElement. - * @final - */ - - function isValidElement(object) { - return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; - } - - var SEPARATOR = '.'; - var SUBSEPARATOR = ':'; - /** - * Escape and wrap key so it is safe to use as a reactid - * - * @param {string} key to be escaped. - * @return {string} the escaped key. - */ - - function escape(key) { - var escapeRegex = /[=:]/g; - var escaperLookup = { - '=': '=0', - ':': '=2' - }; - var escapedString = key.replace(escapeRegex, function (match) { - return escaperLookup[match]; - }); - return '$' + escapedString; - } - /** - * TODO: Test that a single child and an array with one item have the same key - * pattern. - */ - - - var didWarnAboutMaps = false; - var userProvidedKeyEscapeRegex = /\/+/g; - - function escapeUserProvidedKey(text) { - return text.replace(userProvidedKeyEscapeRegex, '$&/'); - } - /** - * Generate a key string that identifies a element within a set. - * - * @param {*} element A element that could contain a manual key. - * @param {number} index Index that is used if a manual key is not provided. - * @return {string} - */ - - - function getElementKey(element, index) { - // Do some typechecking here since we call this blindly. We want to ensure - // that we don't block potential future ES APIs. - if (typeof element === 'object' && element !== null && element.key != null) { - // Explicit key - { - checkKeyStringCoercion(element.key); - } - - return escape('' + element.key); - } // Implicit key determined by the index in the set - - - return index.toString(36); - } - - function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { - var type = typeof children; - - if (type === 'undefined' || type === 'boolean') { - // All of the above are perceived as null. - children = null; - } - - var invokeCallback = false; - - if (children === null) { - invokeCallback = true; - } else { - switch (type) { - case 'string': - case 'number': - invokeCallback = true; - break; - - case 'object': - switch (children.$$typeof) { - case REACT_ELEMENT_TYPE: - case REACT_PORTAL_TYPE: - invokeCallback = true; - } - - } - } - - if (invokeCallback) { - var _child = children; - var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array - // so that it's consistent if the number of children grows: - - var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; - - if (isArray(mappedChild)) { - var escapedChildKey = ''; - - if (childKey != null) { - escapedChildKey = escapeUserProvidedKey(childKey) + '/'; - } - - mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { - return c; - }); - } else if (mappedChild != null) { - if (isValidElement(mappedChild)) { - { - // The `if` statement here prevents auto-disabling of the safe - // coercion ESLint rule, so we must manually disable it below. - // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key - if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) { - checkKeyStringCoercion(mappedChild.key); - } - } - - mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as - // traverseAllChildren used to do for objects as children - escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key - mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number - // eslint-disable-next-line react-internal/safe-string-coercion - escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); - } - - array.push(mappedChild); - } - - return 1; - } - - var child; - var nextName; - var subtreeCount = 0; // Count of children found in the current subtree. - - var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; - - if (isArray(children)) { - for (var i = 0; i < children.length; i++) { - child = children[i]; - nextName = nextNamePrefix + getElementKey(child, i); - subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); - } - } else { - var iteratorFn = getIteratorFn(children); - - if (typeof iteratorFn === 'function') { - var iterableChildren = children; - - { - // Warn about using Maps as children - if (iteratorFn === iterableChildren.entries) { - if (!didWarnAboutMaps) { - warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); - } - - didWarnAboutMaps = true; - } - } - - var iterator = iteratorFn.call(iterableChildren); - var step; - var ii = 0; - - while (!(step = iterator.next()).done) { - child = step.value; - nextName = nextNamePrefix + getElementKey(child, ii++); - subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); - } - } else if (type === 'object') { - // eslint-disable-next-line react-internal/safe-string-coercion - var childrenString = String(children); - throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.'); - } - } - - return subtreeCount; - } - - /** - * Maps children that are typically specified as `props.children`. - * - * See https://reactjs.org/docs/react-api.html#reactchildrenmap - * - * The provided mapFunction(child, index) will be called for each - * leaf child. - * - * @param {?*} children Children tree container. - * @param {function(*, int)} func The map function. - * @param {*} context Context for mapFunction. - * @return {object} Object containing the ordered map of results. - */ - function mapChildren(children, func, context) { - if (children == null) { - return children; - } - - var result = []; - var count = 0; - mapIntoArray(children, result, '', '', function (child) { - return func.call(context, child, count++); - }); - return result; - } - /** - * Count the number of children that are typically specified as - * `props.children`. - * - * See https://reactjs.org/docs/react-api.html#reactchildrencount - * - * @param {?*} children Children tree container. - * @return {number} The number of children. - */ - - - function countChildren(children) { - var n = 0; - mapChildren(children, function () { - n++; // Don't return anything - }); - return n; - } - - /** - * Iterates through children that are typically specified as `props.children`. - * - * See https://reactjs.org/docs/react-api.html#reactchildrenforeach - * - * The provided forEachFunc(child, index) will be called for each - * leaf child. - * - * @param {?*} children Children tree container. - * @param {function(*, int)} forEachFunc - * @param {*} forEachContext Context for forEachContext. - */ - function forEachChildren(children, forEachFunc, forEachContext) { - mapChildren(children, function () { - forEachFunc.apply(this, arguments); // Don't return anything. - }, forEachContext); - } - /** - * Flatten a children object (typically specified as `props.children`) and - * return an array with appropriately re-keyed children. - * - * See https://reactjs.org/docs/react-api.html#reactchildrentoarray - */ - - - function toArray(children) { - return mapChildren(children, function (child) { - return child; - }) || []; - } - /** - * Returns the first child in a collection of children and verifies that there - * is only one child in the collection. - * - * See https://reactjs.org/docs/react-api.html#reactchildrenonly - * - * The current implementation of this function assumes that a single child gets - * passed without a wrapper, but the purpose of this helper function is to - * abstract away the particular structure of children. - * - * @param {?object} children Child collection structure. - * @return {ReactElement} The first and only `ReactElement` contained in the - * structure. - */ - - - function onlyChild(children) { - if (!isValidElement(children)) { - throw new Error('React.Children.only expected to receive a single React element child.'); - } - - return children; - } - - function createContext(defaultValue) { - // TODO: Second argument used to be an optional `calculateChangedBits` - // function. Warn to reserve for future use? - var context = { - $$typeof: REACT_CONTEXT_TYPE, - // As a workaround to support multiple concurrent renderers, we categorize - // some renderers as primary and others as secondary. We only expect - // there to be two concurrent renderers at most: React Native (primary) and - // Fabric (secondary); React DOM (primary) and React ART (secondary). - // Secondary renderers store their context values on separate fields. - _currentValue: defaultValue, - _currentValue2: defaultValue, - // Used to track how many concurrent renderers this context currently - // supports within in a single renderer. Such as parallel server rendering. - _threadCount: 0, - // These are circular - Provider: null, - Consumer: null, - // Add these to use same hidden class in VM as ServerContext - _defaultValue: null, - _globalName: null - }; - context.Provider = { - $$typeof: REACT_PROVIDER_TYPE, - _context: context - }; - var hasWarnedAboutUsingNestedContextConsumers = false; - var hasWarnedAboutUsingConsumerProvider = false; - var hasWarnedAboutDisplayNameOnConsumer = false; - - { - // A separate object, but proxies back to the original context object for - // backwards compatibility. It has a different $$typeof, so we can properly - // warn for the incorrect usage of Context as a Consumer. - var Consumer = { - $$typeof: REACT_CONTEXT_TYPE, - _context: context - }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here - - Object.defineProperties(Consumer, { - Provider: { - get: function () { - if (!hasWarnedAboutUsingConsumerProvider) { - hasWarnedAboutUsingConsumerProvider = true; - - error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); - } - - return context.Provider; - }, - set: function (_Provider) { - context.Provider = _Provider; - } - }, - _currentValue: { - get: function () { - return context._currentValue; - }, - set: function (_currentValue) { - context._currentValue = _currentValue; - } - }, - _currentValue2: { - get: function () { - return context._currentValue2; - }, - set: function (_currentValue2) { - context._currentValue2 = _currentValue2; - } - }, - _threadCount: { - get: function () { - return context._threadCount; - }, - set: function (_threadCount) { - context._threadCount = _threadCount; - } - }, - Consumer: { - get: function () { - if (!hasWarnedAboutUsingNestedContextConsumers) { - hasWarnedAboutUsingNestedContextConsumers = true; - - error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); - } - - return context.Consumer; - } - }, - displayName: { - get: function () { - return context.displayName; - }, - set: function (displayName) { - if (!hasWarnedAboutDisplayNameOnConsumer) { - warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); - - hasWarnedAboutDisplayNameOnConsumer = true; - } - } - } - }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty - - context.Consumer = Consumer; - } - - { - context._currentRenderer = null; - context._currentRenderer2 = null; - } - - return context; - } - - var Uninitialized = -1; - var Pending = 0; - var Resolved = 1; - var Rejected = 2; - - function lazyInitializer(payload) { - if (payload._status === Uninitialized) { - var ctor = payload._result; - var thenable = ctor(); // Transition to the next state. - // This might throw either because it's missing or throws. If so, we treat it - // as still uninitialized and try again next time. Which is the same as what - // happens if the ctor or any wrappers processing the ctor throws. This might - // end up fixing it if the resolution was a concurrency bug. - - thenable.then(function (moduleObject) { - if (payload._status === Pending || payload._status === Uninitialized) { - // Transition to the next state. - var resolved = payload; - resolved._status = Resolved; - resolved._result = moduleObject; - } - }, function (error) { - if (payload._status === Pending || payload._status === Uninitialized) { - // Transition to the next state. - var rejected = payload; - rejected._status = Rejected; - rejected._result = error; - } - }); - - if (payload._status === Uninitialized) { - // In case, we're still uninitialized, then we're waiting for the thenable - // to resolve. Set it as pending in the meantime. - var pending = payload; - pending._status = Pending; - pending._result = thenable; - } - } - - if (payload._status === Resolved) { - var moduleObject = payload._result; - - { - if (moduleObject === undefined) { - error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. - 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject); - } - } - - { - if (!('default' in moduleObject)) { - error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. - 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); - } - } - - return moduleObject.default; - } else { - throw payload._result; - } - } - - function lazy(ctor) { - var payload = { - // We use these fields to store the result. - _status: Uninitialized, - _result: ctor - }; - var lazyType = { - $$typeof: REACT_LAZY_TYPE, - _payload: payload, - _init: lazyInitializer - }; - - { - // In production, this would just set it on the object. - var defaultProps; - var propTypes; // $FlowFixMe - - Object.defineProperties(lazyType, { - defaultProps: { - configurable: true, - get: function () { - return defaultProps; - }, - set: function (newDefaultProps) { - error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); - - defaultProps = newDefaultProps; // Match production behavior more closely: - // $FlowFixMe - - Object.defineProperty(lazyType, 'defaultProps', { - enumerable: true - }); - } - }, - propTypes: { - configurable: true, - get: function () { - return propTypes; - }, - set: function (newPropTypes) { - error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); - - propTypes = newPropTypes; // Match production behavior more closely: - // $FlowFixMe - - Object.defineProperty(lazyType, 'propTypes', { - enumerable: true - }); - } - } - }); - } - - return lazyType; - } - - function forwardRef(render) { - { - if (render != null && render.$$typeof === REACT_MEMO_TYPE) { - error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); - } else if (typeof render !== 'function') { - error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); - } else { - if (render.length !== 0 && render.length !== 2) { - error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); - } - } - - if (render != null) { - if (render.defaultProps != null || render.propTypes != null) { - error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); - } - } - } - - var elementType = { - $$typeof: REACT_FORWARD_REF_TYPE, - render: render - }; - - { - var ownName; - Object.defineProperty(elementType, 'displayName', { - enumerable: false, - configurable: true, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; // The inner component shouldn't inherit this display name in most cases, - // because the component may be used elsewhere. - // But it's nice for anonymous functions to inherit the name, - // so that our component-stack generation logic will display their frames. - // An anonymous function generally suggests a pattern like: - // React.forwardRef((props, ref) => {...}); - // This kind of inner function is not used elsewhere so the side effect is okay. - - if (!render.name && !render.displayName) { - render.displayName = name; - } - } - }); - } - - return elementType; - } - - var REACT_MODULE_REFERENCE; - - { - REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); - } - - function isValidElementType(type) { - if (typeof type === 'string' || typeof type === 'function') { - return true; - } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). - - - if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { - return true; - } - - if (typeof type === 'object' && type !== null) { - if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object - // types supported by any Flight configuration anywhere since - // we don't know which Flight build this will end up being used - // with. - type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { - return true; - } - } - - return false; - } - - function memo(type, compare) { - { - if (!isValidElementType(type)) { - error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); - } - } - - var elementType = { - $$typeof: REACT_MEMO_TYPE, - type: type, - compare: compare === undefined ? null : compare - }; - - { - var ownName; - Object.defineProperty(elementType, 'displayName', { - enumerable: false, - configurable: true, - get: function () { - return ownName; - }, - set: function (name) { - ownName = name; // The inner component shouldn't inherit this display name in most cases, - // because the component may be used elsewhere. - // But it's nice for anonymous functions to inherit the name, - // so that our component-stack generation logic will display their frames. - // An anonymous function generally suggests a pattern like: - // React.memo((props) => {...}); - // This kind of inner function is not used elsewhere so the side effect is okay. - - if (!type.name && !type.displayName) { - type.displayName = name; - } - } - }); - } - - return elementType; - } - - function resolveDispatcher() { - var dispatcher = ReactCurrentDispatcher.current; - - { - if (dispatcher === null) { - error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.'); - } - } // Will result in a null access error if accessed outside render phase. We - // intentionally don't throw our own error because this is in a hot path. - // Also helps ensure this is inlined. - - - return dispatcher; - } - function useContext(Context) { - var dispatcher = resolveDispatcher(); - - { - // TODO: add a more generic warning for invalid values. - if (Context._context !== undefined) { - var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs - // and nobody should be using this in existing code. - - if (realContext.Consumer === Context) { - error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); - } else if (realContext.Provider === Context) { - error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); - } - } - } - - return dispatcher.useContext(Context); - } - function useState(initialState) { - var dispatcher = resolveDispatcher(); - return dispatcher.useState(initialState); - } - function useReducer(reducer, initialArg, init) { - var dispatcher = resolveDispatcher(); - return dispatcher.useReducer(reducer, initialArg, init); - } - function useRef(initialValue) { - var dispatcher = resolveDispatcher(); - return dispatcher.useRef(initialValue); - } - function useEffect(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useEffect(create, deps); - } - function useInsertionEffect(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useInsertionEffect(create, deps); - } - function useLayoutEffect(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useLayoutEffect(create, deps); - } - function useCallback(callback, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useCallback(callback, deps); - } - function useMemo(create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useMemo(create, deps); - } - function useImperativeHandle(ref, create, deps) { - var dispatcher = resolveDispatcher(); - return dispatcher.useImperativeHandle(ref, create, deps); - } - function useDebugValue(value, formatterFn) { - { - var dispatcher = resolveDispatcher(); - return dispatcher.useDebugValue(value, formatterFn); - } - } - function useTransition() { - var dispatcher = resolveDispatcher(); - return dispatcher.useTransition(); - } - function useDeferredValue(value) { - var dispatcher = resolveDispatcher(); - return dispatcher.useDeferredValue(value); - } - function useId() { - var dispatcher = resolveDispatcher(); - return dispatcher.useId(); - } - function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { - var dispatcher = resolveDispatcher(); - return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); - } - - // Helpers to patch console.logs to avoid logging during side-effect free - // replaying on render function. This currently only patches the object - // lazily which won't cover if the log function was extracted eagerly. - // We could also eagerly patch the method. - var disabledDepth = 0; - var prevLog; - var prevInfo; - var prevWarn; - var prevError; - var prevGroup; - var prevGroupCollapsed; - var prevGroupEnd; - - function disabledLog() {} - - disabledLog.__reactDisabledLog = true; - function disableLogs() { - { - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - prevLog = console.log; - prevInfo = console.info; - prevWarn = console.warn; - prevError = console.error; - prevGroup = console.group; - prevGroupCollapsed = console.groupCollapsed; - prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 - - var props = { - configurable: true, - enumerable: true, - value: disabledLog, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - info: props, - log: props, - warn: props, - error: props, - group: props, - groupCollapsed: props, - groupEnd: props - }); - /* eslint-enable react-internal/no-production-logging */ - } - - disabledDepth++; - } - } - function reenableLogs() { - { - disabledDepth--; - - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - var props = { - configurable: true, - enumerable: true, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - log: assign({}, props, { - value: prevLog - }), - info: assign({}, props, { - value: prevInfo - }), - warn: assign({}, props, { - value: prevWarn - }), - error: assign({}, props, { - value: prevError - }), - group: assign({}, props, { - value: prevGroup - }), - groupCollapsed: assign({}, props, { - value: prevGroupCollapsed - }), - groupEnd: assign({}, props, { - value: prevGroupEnd - }) - }); - /* eslint-enable react-internal/no-production-logging */ - } - - if (disabledDepth < 0) { - error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); - } - } - } - - var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; - var prefix; - function describeBuiltInComponentFrame(name, source, ownerFn) { - { - if (prefix === undefined) { - // Extract the VM specific prefix used by each line. - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = match && match[1] || ''; - } - } // We use the prefix to ensure our stacks line up with native stack frames. - - - return '\n' + prefix + name; - } - } - var reentry = false; - var componentFrameCache; - - { - var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; - componentFrameCache = new PossiblyWeakMap(); - } - - function describeNativeComponentFrame(fn, construct) { - // If something asked for a stack inside a fake render, it should get ignored. - if ( !fn || reentry) { - return ''; - } - - { - var frame = componentFrameCache.get(fn); - - if (frame !== undefined) { - return frame; - } - } - - var control; - reentry = true; - var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. - - Error.prepareStackTrace = undefined; - var previousDispatcher; - - { - previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function - // for warnings. - - ReactCurrentDispatcher$1.current = null; - disableLogs(); - } - - try { - // This should throw. - if (construct) { - // Something should be setting the props in the constructor. - var Fake = function () { - throw Error(); - }; // $FlowFixMe - - - Object.defineProperty(Fake.prototype, 'props', { - set: function () { - // We use a throwing setter instead of frozen or non-writable props - // because that won't throw in a non-strict mode function. - throw Error(); - } - }); - - if (typeof Reflect === 'object' && Reflect.construct) { - // We construct a different control for this case to include any extra - // frames added by the construct call. - try { - Reflect.construct(Fake, []); - } catch (x) { - control = x; - } - - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x) { - control = x; - } - - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x) { - control = x; - } - - fn(); - } - } catch (sample) { - // This is inlined manually because closure doesn't do it for us. - if (sample && control && typeof sample.stack === 'string') { - // This extracts the first frame from the sample that isn't also in the control. - // Skipping one frame that we assume is the frame that calls the two. - var sampleLines = sample.stack.split('\n'); - var controlLines = control.stack.split('\n'); - var s = sampleLines.length - 1; - var c = controlLines.length - 1; - - while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { - // We expect at least one stack frame to be shared. - // Typically this will be the root most one. However, stack frames may be - // cut off due to maximum stack limits. In this case, one maybe cut off - // earlier than the other. We assume that the sample is longer or the same - // and there for cut off earlier. So we should find the root most frame in - // the sample somewhere in the control. - c--; - } - - for (; s >= 1 && c >= 0; s--, c--) { - // Next we find the first one that isn't the same which should be the - // frame that called our sample function and the control. - if (sampleLines[s] !== controlLines[c]) { - // In V8, the first line is describing the message but other VMs don't. - // If we're about to return the first line, and the control is also on the same - // line, that's a pretty good indicator that our sample threw at same line as - // the control. I.e. before we entered the sample frame. So we ignore this result. - // This can happen if you passed a class to function component, or non-function. - if (s !== 1 || c !== 1) { - do { - s--; - c--; // We may still have similar intermediate frames from the construct call. - // The next one that isn't the same should be our match though. - - if (c < 0 || sampleLines[s] !== controlLines[c]) { - // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. - var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" - // but we have a user-provided "displayName" - // splice it in to make the stack more readable. - - - if (fn.displayName && _frame.includes('')) { - _frame = _frame.replace('', fn.displayName); - } - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, _frame); - } - } // Return the line we found. - - - return _frame; - } - } while (s >= 1 && c >= 0); - } - - break; - } - } - } - } finally { - reentry = false; - - { - ReactCurrentDispatcher$1.current = previousDispatcher; - reenableLogs(); - } - - Error.prepareStackTrace = previousPrepareStackTrace; - } // Fallback to just using the name if we couldn't make it throw. - - - var name = fn ? fn.displayName || fn.name : ''; - var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, syntheticFrame); - } - } - - return syntheticFrame; - } - function describeFunctionComponentFrame(fn, source, ownerFn) { - { - return describeNativeComponentFrame(fn, false); - } - } - - function shouldConstruct(Component) { - var prototype = Component.prototype; - return !!(prototype && prototype.isReactComponent); - } - - function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { - - if (type == null) { - return ''; - } - - if (typeof type === 'function') { - { - return describeNativeComponentFrame(type, shouldConstruct(type)); - } - } - - if (typeof type === 'string') { - return describeBuiltInComponentFrame(type); - } - - switch (type) { - case REACT_SUSPENSE_TYPE: - return describeBuiltInComponentFrame('Suspense'); - - case REACT_SUSPENSE_LIST_TYPE: - return describeBuiltInComponentFrame('SuspenseList'); - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - return describeFunctionComponentFrame(type.render); - - case REACT_MEMO_TYPE: - // Memo may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - // Lazy may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); - } catch (x) {} - } - } - } - - return ''; - } - - var loggedTypeFailures = {}; - var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; - - function setCurrentlyValidatingElement(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - ReactDebugCurrentFrame$1.setExtraStackFrame(stack); - } else { - ReactDebugCurrentFrame$1.setExtraStackFrame(null); - } - } - } - - function checkPropTypes(typeSpecs, values, location, componentName, element) { - { - // $FlowFixMe This is okay but Flow doesn't know it. - var has = Function.call.bind(hasOwnProperty); - - for (var typeSpecName in typeSpecs) { - if (has(typeSpecs, typeSpecName)) { - var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - if (typeof typeSpecs[typeSpecName] !== 'function') { - // eslint-disable-next-line react-internal/prod-error-codes - var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); - err.name = 'Invariant Violation'; - throw err; - } - - error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); - } catch (ex) { - error$1 = ex; - } - - if (error$1 && !(error$1 instanceof Error)) { - setCurrentlyValidatingElement(element); - - error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); - - setCurrentlyValidatingElement(null); - } - - if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error$1.message] = true; - setCurrentlyValidatingElement(element); - - error('Failed %s type: %s', location, error$1.message); - - setCurrentlyValidatingElement(null); - } - } - } - } - } - - function setCurrentlyValidatingElement$1(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - setExtraStackFrame(stack); - } else { - setExtraStackFrame(null); - } - } - } - - var propTypesMisspellWarningShown; - - { - propTypesMisspellWarningShown = false; - } - - function getDeclarationErrorAddendum() { - if (ReactCurrentOwner.current) { - var name = getComponentNameFromType(ReactCurrentOwner.current.type); - - if (name) { - return '\n\nCheck the render method of `' + name + '`.'; - } - } - - return ''; - } - - function getSourceInfoErrorAddendum(source) { - if (source !== undefined) { - var fileName = source.fileName.replace(/^.*[\\\/]/, ''); - var lineNumber = source.lineNumber; - return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; - } - - return ''; - } - - function getSourceInfoErrorAddendumForProps(elementProps) { - if (elementProps !== null && elementProps !== undefined) { - return getSourceInfoErrorAddendum(elementProps.__source); - } - - return ''; - } - /** - * Warn if there's no key explicitly set on dynamic arrays of children or - * object keys are not valid. This allows us to keep track of children between - * updates. - */ - - - var ownerHasKeyUseWarning = {}; - - function getCurrentComponentErrorInfo(parentType) { - var info = getDeclarationErrorAddendum(); - - if (!info) { - var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; - - if (parentName) { - info = "\n\nCheck the top-level render call using <" + parentName + ">."; - } - } - - return info; - } - /** - * Warn if the element doesn't have an explicit key assigned to it. - * This element is in an array. The array could grow and shrink or be - * reordered. All children that haven't already been validated are required to - * have a "key" property assigned to it. Error statuses are cached so a warning - * will only be shown once. - * - * @internal - * @param {ReactElement} element Element that requires a key. - * @param {*} parentType element's parent's type. - */ - - - function validateExplicitKey(element, parentType) { - if (!element._store || element._store.validated || element.key != null) { - return; - } - - element._store.validated = true; - var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); - - if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { - return; - } - - ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a - // property, it may be the creator of the child that's responsible for - // assigning it a key. - - var childOwner = ''; - - if (element && element._owner && element._owner !== ReactCurrentOwner.current) { - // Give the component that originally created this child. - childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; - } - - { - setCurrentlyValidatingElement$1(element); - - error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); - - setCurrentlyValidatingElement$1(null); - } - } - /** - * Ensure that every element either is passed in a static location, in an - * array with an explicit keys property defined, or in an object literal - * with valid key property. - * - * @internal - * @param {ReactNode} node Statically passed child of any type. - * @param {*} parentType node's parent's type. - */ - - - function validateChildKeys(node, parentType) { - if (typeof node !== 'object') { - return; - } - - if (isArray(node)) { - for (var i = 0; i < node.length; i++) { - var child = node[i]; - - if (isValidElement(child)) { - validateExplicitKey(child, parentType); - } - } - } else if (isValidElement(node)) { - // This element was passed in a valid location. - if (node._store) { - node._store.validated = true; - } - } else if (node) { - var iteratorFn = getIteratorFn(node); - - if (typeof iteratorFn === 'function') { - // Entry iterators used to provide implicit keys, - // but now we print a separate warning for them later. - if (iteratorFn !== node.entries) { - var iterator = iteratorFn.call(node); - var step; - - while (!(step = iterator.next()).done) { - if (isValidElement(step.value)) { - validateExplicitKey(step.value, parentType); - } - } - } - } - } - } - /** - * Given an element, validate that its props follow the propTypes definition, - * provided by the type. - * - * @param {ReactElement} element - */ - - - function validatePropTypes(element) { - { - var type = element.type; - - if (type === null || type === undefined || typeof type === 'string') { - return; - } - - var propTypes; - - if (typeof type === 'function') { - propTypes = type.propTypes; - } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. - // Inner props are checked in the reconciler. - type.$$typeof === REACT_MEMO_TYPE)) { - propTypes = type.propTypes; - } else { - return; - } - - if (propTypes) { - // Intentionally inside to avoid triggering lazy initializers: - var name = getComponentNameFromType(type); - checkPropTypes(propTypes, element.props, 'prop', name, element); - } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { - propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: - - var _name = getComponentNameFromType(type); - - error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); - } - - if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { - error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); - } - } - } - /** - * Given a fragment, validate that it can only be provided with fragment props - * @param {ReactElement} fragment - */ - - - function validateFragmentProps(fragment) { - { - var keys = Object.keys(fragment.props); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - - if (key !== 'children' && key !== 'key') { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); - - setCurrentlyValidatingElement$1(null); - break; - } - } - - if (fragment.ref !== null) { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid attribute `ref` supplied to `React.Fragment`.'); - - setCurrentlyValidatingElement$1(null); - } - } - } - function createElementWithValidation(type, props, children) { - var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to - // succeed and there will likely be errors in render. - - if (!validType) { - var info = ''; - - if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { - info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; - } - - var sourceInfo = getSourceInfoErrorAddendumForProps(props); - - if (sourceInfo) { - info += sourceInfo; - } else { - info += getDeclarationErrorAddendum(); - } - - var typeString; - - if (type === null) { - typeString = 'null'; - } else if (isArray(type)) { - typeString = 'array'; - } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { - typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; - info = ' Did you accidentally export a JSX literal instead of a component?'; - } else { - typeString = typeof type; - } - - { - error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); - } - } - - var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. - // TODO: Drop this when these are no longer allowed as the type argument. - - if (element == null) { - return element; - } // Skip key warning if the type isn't valid since our key validation logic - // doesn't expect a non-string/function type and can throw confusing errors. - // We don't want exception behavior to differ between dev and prod. - // (Rendering will throw with a helpful message and as soon as the type is - // fixed, the key warnings will appear.) - - - if (validType) { - for (var i = 2; i < arguments.length; i++) { - validateChildKeys(arguments[i], type); - } - } - - if (type === REACT_FRAGMENT_TYPE) { - validateFragmentProps(element); - } else { - validatePropTypes(element); - } - - return element; - } - var didWarnAboutDeprecatedCreateFactory = false; - function createFactoryWithValidation(type) { - var validatedFactory = createElementWithValidation.bind(null, type); - validatedFactory.type = type; - - { - if (!didWarnAboutDeprecatedCreateFactory) { - didWarnAboutDeprecatedCreateFactory = true; - - warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); - } // Legacy hook: remove it - - - Object.defineProperty(validatedFactory, 'type', { - enumerable: false, - get: function () { - warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); - - Object.defineProperty(this, 'type', { - value: type - }); - return type; - } - }); - } - - return validatedFactory; - } - function cloneElementWithValidation(element, props, children) { - var newElement = cloneElement.apply(this, arguments); - - for (var i = 2; i < arguments.length; i++) { - validateChildKeys(arguments[i], newElement.type); - } - - validatePropTypes(newElement); - return newElement; - } - - function startTransition(scope, options) { - var prevTransition = ReactCurrentBatchConfig.transition; - ReactCurrentBatchConfig.transition = {}; - var currentTransition = ReactCurrentBatchConfig.transition; - - { - ReactCurrentBatchConfig.transition._updatedFibers = new Set(); - } - - try { - scope(); - } finally { - ReactCurrentBatchConfig.transition = prevTransition; - - { - if (prevTransition === null && currentTransition._updatedFibers) { - var updatedFibersCount = currentTransition._updatedFibers.size; - - if (updatedFibersCount > 10) { - warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.'); - } - - currentTransition._updatedFibers.clear(); - } - } - } - } - - var didWarnAboutMessageChannel = false; - var enqueueTaskImpl = null; - function enqueueTask(task) { - if (enqueueTaskImpl === null) { - try { - // read require off the module object to get around the bundlers. - // we don't want them to detect a require and bundle a Node polyfill. - var requireString = ('require' + Math.random()).slice(0, 7); - var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's - // version of setImmediate, bypassing fake timers if any. - - enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate; - } catch (_err) { - // we're in a browser - // we can't use regular timers because they may still be faked - // so we try MessageChannel+postMessage instead - enqueueTaskImpl = function (callback) { - { - if (didWarnAboutMessageChannel === false) { - didWarnAboutMessageChannel = true; - - if (typeof MessageChannel === 'undefined') { - error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.'); - } - } - } - - var channel = new MessageChannel(); - channel.port1.onmessage = callback; - channel.port2.postMessage(undefined); - }; - } - } - - return enqueueTaskImpl(task); - } - - var actScopeDepth = 0; - var didWarnNoAwaitAct = false; - function act(callback) { - { - // `act` calls can be nested, so we track the depth. This represents the - // number of `act` scopes on the stack. - var prevActScopeDepth = actScopeDepth; - actScopeDepth++; - - if (ReactCurrentActQueue.current === null) { - // This is the outermost `act` scope. Initialize the queue. The reconciler - // will detect the queue and use it instead of Scheduler. - ReactCurrentActQueue.current = []; - } - - var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy; - var result; - - try { - // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only - // set to `true` while the given callback is executed, not for updates - // triggered during an async event, because this is how the legacy - // implementation of `act` behaved. - ReactCurrentActQueue.isBatchingLegacy = true; - result = callback(); // Replicate behavior of original `act` implementation in legacy mode, - // which flushed updates immediately after the scope function exits, even - // if it's an async function. - - if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) { - var queue = ReactCurrentActQueue.current; - - if (queue !== null) { - ReactCurrentActQueue.didScheduleLegacyUpdate = false; - flushActQueue(queue); - } - } - } catch (error) { - popActScope(prevActScopeDepth); - throw error; - } finally { - ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy; - } - - if (result !== null && typeof result === 'object' && typeof result.then === 'function') { - var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait - // for it to resolve before exiting the current scope. - - var wasAwaited = false; - var thenable = { - then: function (resolve, reject) { - wasAwaited = true; - thenableResult.then(function (returnValue) { - popActScope(prevActScopeDepth); - - if (actScopeDepth === 0) { - // We've exited the outermost act scope. Recursively flush the - // queue until there's no remaining work. - recursivelyFlushAsyncActWork(returnValue, resolve, reject); - } else { - resolve(returnValue); - } - }, function (error) { - // The callback threw an error. - popActScope(prevActScopeDepth); - reject(error); - }); - } - }; - - { - if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') { - // eslint-disable-next-line no-undef - Promise.resolve().then(function () {}).then(function () { - if (!wasAwaited) { - didWarnNoAwaitAct = true; - - error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);'); - } - }); - } - } - - return thenable; - } else { - var returnValue = result; // The callback is not an async function. Exit the current scope - // immediately, without awaiting. - - popActScope(prevActScopeDepth); - - if (actScopeDepth === 0) { - // Exiting the outermost act scope. Flush the queue. - var _queue = ReactCurrentActQueue.current; - - if (_queue !== null) { - flushActQueue(_queue); - ReactCurrentActQueue.current = null; - } // Return a thenable. If the user awaits it, we'll flush again in - // case additional work was scheduled by a microtask. - - - var _thenable = { - then: function (resolve, reject) { - // Confirm we haven't re-entered another `act` scope, in case - // the user does something weird like await the thenable - // multiple times. - if (ReactCurrentActQueue.current === null) { - // Recursively flush the queue until there's no remaining work. - ReactCurrentActQueue.current = []; - recursivelyFlushAsyncActWork(returnValue, resolve, reject); - } else { - resolve(returnValue); - } - } - }; - return _thenable; - } else { - // Since we're inside a nested `act` scope, the returned thenable - // immediately resolves. The outer scope will flush the queue. - var _thenable2 = { - then: function (resolve, reject) { - resolve(returnValue); - } - }; - return _thenable2; - } - } - } - } - - function popActScope(prevActScopeDepth) { - { - if (prevActScopeDepth !== actScopeDepth - 1) { - error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. '); - } - - actScopeDepth = prevActScopeDepth; - } - } - - function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { - { - var queue = ReactCurrentActQueue.current; - - if (queue !== null) { - try { - flushActQueue(queue); - enqueueTask(function () { - if (queue.length === 0) { - // No additional work was scheduled. Finish. - ReactCurrentActQueue.current = null; - resolve(returnValue); - } else { - // Keep flushing work until there's none left. - recursivelyFlushAsyncActWork(returnValue, resolve, reject); - } - }); - } catch (error) { - reject(error); - } - } else { - resolve(returnValue); - } - } - } - - var isFlushing = false; - - function flushActQueue(queue) { - { - if (!isFlushing) { - // Prevent re-entrance. - isFlushing = true; - var i = 0; - - try { - for (; i < queue.length; i++) { - var callback = queue[i]; - - do { - callback = callback(true); - } while (callback !== null); - } - - queue.length = 0; - } catch (error) { - // If something throws, leave the remaining callbacks on the queue. - queue = queue.slice(i + 1); - throw error; - } finally { - isFlushing = false; - } - } - } - } - - var createElement$1 = createElementWithValidation ; - var cloneElement$1 = cloneElementWithValidation ; - var createFactory = createFactoryWithValidation ; - var Children = { - map: mapChildren, - forEach: forEachChildren, - count: countChildren, - toArray: toArray, - only: onlyChild - }; - - exports.Children = Children; - exports.Component = Component; - exports.Fragment = REACT_FRAGMENT_TYPE; - exports.Profiler = REACT_PROFILER_TYPE; - exports.PureComponent = PureComponent; - 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; - exports.createFactory = createFactory; - exports.createRef = createRef; - exports.forwardRef = forwardRef; - exports.isValidElement = isValidElement; - exports.lazy = lazy; - exports.memo = memo; - exports.startTransition = startTransition; - exports.unstable_act = act; - exports.useCallback = useCallback; - exports.useContext = useContext; - exports.useDebugValue = useDebugValue; - exports.useDeferredValue = useDeferredValue; - exports.useEffect = useEffect; - exports.useId = useId; - exports.useImperativeHandle = useImperativeHandle; - exports.useInsertionEffect = useInsertionEffect; - exports.useLayoutEffect = useLayoutEffect; - exports.useMemo = useMemo; - exports.useReducer = useReducer; - exports.useRef = useRef; - exports.useState = useState; - exports.useSyncExternalStore = useSyncExternalStore; - exports.useTransition = useTransition; - exports.version = ReactVersion; - /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ - if ( - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === - 'function' - ) { - __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); - } - - })(); - } -} (react_development, react_developmentExports)); - return react_developmentExports; -} - -(function (module) { - - if (process.env.NODE_ENV === 'production') { - module.exports = requireReact_production_min(); - } else { - module.exports = requireReact_development(); - } -} (react)); - -/** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -var hasRequiredReactJsxRuntime_production_min; - -function requireReactJsxRuntime_production_min () { - if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min; - hasRequiredReactJsxRuntime_production_min = 1; -var f=reactExports,k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0}; - function q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return {$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}reactJsxRuntime_production_min.Fragment=l;reactJsxRuntime_production_min.jsx=q;reactJsxRuntime_production_min.jsxs=q; - return reactJsxRuntime_production_min; -} - -var reactJsxRuntime_development = {}; - -/** - * @license React - * react-jsx-runtime.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -var hasRequiredReactJsxRuntime_development; - -function requireReactJsxRuntime_development () { - if (hasRequiredReactJsxRuntime_development) return reactJsxRuntime_development; - hasRequiredReactJsxRuntime_development = 1; - - if (process.env.NODE_ENV !== "production") { - (function() { - - var React = reactExports; - - // ATTENTION - // When adding new symbols to this file, - // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' - // The Symbol used to tag the ReactElement-like types. - var REACT_ELEMENT_TYPE = Symbol.for('react.element'); - var REACT_PORTAL_TYPE = Symbol.for('react.portal'); - var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); - var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); - var REACT_PROFILER_TYPE = Symbol.for('react.profiler'); - var REACT_PROVIDER_TYPE = Symbol.for('react.provider'); - var REACT_CONTEXT_TYPE = Symbol.for('react.context'); - var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); - var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); - var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list'); - var REACT_MEMO_TYPE = Symbol.for('react.memo'); - var REACT_LAZY_TYPE = Symbol.for('react.lazy'); - var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen'); - var MAYBE_ITERATOR_SYMBOL = Symbol.iterator; - var FAUX_ITERATOR_SYMBOL = '@@iterator'; - function getIteratorFn(maybeIterable) { - if (maybeIterable === null || typeof maybeIterable !== 'object') { - return null; - } - - var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; - - if (typeof maybeIterator === 'function') { - return maybeIterator; - } - - return null; - } - - var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; - - function error(format) { - { - { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - printWarning('error', format, args); - } - } - } - - function printWarning(level, format, args) { - // When changing this logic, you might want to also - // update consoleWithStackDev.www.js as well. - { - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - var stack = ReactDebugCurrentFrame.getStackAddendum(); - - if (stack !== '') { - format += '%s'; - args = args.concat([stack]); - } // eslint-disable-next-line react-internal/safe-string-coercion - - - var argsWithFormat = args.map(function (item) { - return String(item); - }); // Careful: RN currently depends on this prefix - - argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it - // breaks IE9: https://github.com/facebook/react/issues/13610 - // eslint-disable-next-line react-internal/no-production-logging - - Function.prototype.apply.call(console[level], console, argsWithFormat); - } - } - - // ----------------------------------------------------------------------------- - - var enableScopeAPI = false; // Experimental Create Event Handle API. - var enableCacheElement = false; - var enableTransitionTracing = false; // No known bugs, but needs performance testing - - var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber - // stuff. Intended to enable React core members to more easily debug scheduling - // issues in DEV builds. - - var enableDebugTracing = false; // Track which Fiber(s) schedule render work. - - var REACT_MODULE_REFERENCE; - - { - REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); - } - - function isValidElementType(type) { - if (typeof type === 'string' || typeof type === 'function') { - return true; - } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). - - - if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { - return true; - } - - if (typeof type === 'object' && type !== null) { - if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object - // types supported by any Flight configuration anywhere since - // we don't know which Flight build this will end up being used - // with. - type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { - return true; - } - } - - return false; - } - - function getWrappedName(outerType, innerType, wrapperName) { - var displayName = outerType.displayName; - - if (displayName) { - return displayName; - } - - var functionName = innerType.displayName || innerType.name || ''; - return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; - } // Keep in sync with react-reconciler/getComponentNameFromFiber - - - function getContextName(type) { - return type.displayName || 'Context'; - } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. - - - function getComponentNameFromType(type) { - if (type == null) { - // Host root, text node or just invalid type. - return null; - } - - { - if (typeof type.tag === 'number') { - error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); - } - } - - if (typeof type === 'function') { - return type.displayName || type.name || null; - } - - if (typeof type === 'string') { - return type; - } - - switch (type) { - case REACT_FRAGMENT_TYPE: - return 'Fragment'; - - case REACT_PORTAL_TYPE: - return 'Portal'; - - case REACT_PROFILER_TYPE: - return 'Profiler'; - - case REACT_STRICT_MODE_TYPE: - return 'StrictMode'; - - case REACT_SUSPENSE_TYPE: - return 'Suspense'; - - case REACT_SUSPENSE_LIST_TYPE: - return 'SuspenseList'; - - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_CONTEXT_TYPE: - var context = type; - return getContextName(context) + '.Consumer'; - - case REACT_PROVIDER_TYPE: - var provider = type; - return getContextName(provider._context) + '.Provider'; - - case REACT_FORWARD_REF_TYPE: - return getWrappedName(type, type.render, 'ForwardRef'); - - case REACT_MEMO_TYPE: - var outerName = type.displayName || null; - - if (outerName !== null) { - return outerName; - } - - return getComponentNameFromType(type.type) || 'Memo'; - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - return getComponentNameFromType(init(payload)); - } catch (x) { - return null; - } - } - - // eslint-disable-next-line no-fallthrough - } - } - - return null; - } - - var assign = Object.assign; - - // Helpers to patch console.logs to avoid logging during side-effect free - // replaying on render function. This currently only patches the object - // lazily which won't cover if the log function was extracted eagerly. - // We could also eagerly patch the method. - var disabledDepth = 0; - var prevLog; - var prevInfo; - var prevWarn; - var prevError; - var prevGroup; - var prevGroupCollapsed; - var prevGroupEnd; - - function disabledLog() {} - - disabledLog.__reactDisabledLog = true; - function disableLogs() { - { - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - prevLog = console.log; - prevInfo = console.info; - prevWarn = console.warn; - prevError = console.error; - prevGroup = console.group; - prevGroupCollapsed = console.groupCollapsed; - prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 - - var props = { - configurable: true, - enumerable: true, - value: disabledLog, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - info: props, - log: props, - warn: props, - error: props, - group: props, - groupCollapsed: props, - groupEnd: props - }); - /* eslint-enable react-internal/no-production-logging */ - } - - disabledDepth++; - } - } - function reenableLogs() { - { - disabledDepth--; - - if (disabledDepth === 0) { - /* eslint-disable react-internal/no-production-logging */ - var props = { - configurable: true, - enumerable: true, - writable: true - }; // $FlowFixMe Flow thinks console is immutable. - - Object.defineProperties(console, { - log: assign({}, props, { - value: prevLog - }), - info: assign({}, props, { - value: prevInfo - }), - warn: assign({}, props, { - value: prevWarn - }), - error: assign({}, props, { - value: prevError - }), - group: assign({}, props, { - value: prevGroup - }), - groupCollapsed: assign({}, props, { - value: prevGroupCollapsed - }), - groupEnd: assign({}, props, { - value: prevGroupEnd - }) - }); - /* eslint-enable react-internal/no-production-logging */ - } - - if (disabledDepth < 0) { - error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); - } - } - } - - var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; - var prefix; - function describeBuiltInComponentFrame(name, source, ownerFn) { - { - if (prefix === undefined) { - // Extract the VM specific prefix used by each line. - try { - throw Error(); - } catch (x) { - var match = x.stack.trim().match(/\n( *(at )?)/); - prefix = match && match[1] || ''; - } - } // We use the prefix to ensure our stacks line up with native stack frames. - - - return '\n' + prefix + name; - } - } - var reentry = false; - var componentFrameCache; - - { - var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; - componentFrameCache = new PossiblyWeakMap(); - } - - function describeNativeComponentFrame(fn, construct) { - // If something asked for a stack inside a fake render, it should get ignored. - if ( !fn || reentry) { - return ''; - } - - { - var frame = componentFrameCache.get(fn); - - if (frame !== undefined) { - return frame; - } - } - - var control; - reentry = true; - var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. - - Error.prepareStackTrace = undefined; - var previousDispatcher; - - { - previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function - // for warnings. - - ReactCurrentDispatcher.current = null; - disableLogs(); - } - - try { - // This should throw. - if (construct) { - // Something should be setting the props in the constructor. - var Fake = function () { - throw Error(); - }; // $FlowFixMe - - - Object.defineProperty(Fake.prototype, 'props', { - set: function () { - // We use a throwing setter instead of frozen or non-writable props - // because that won't throw in a non-strict mode function. - throw Error(); - } - }); - - if (typeof Reflect === 'object' && Reflect.construct) { - // We construct a different control for this case to include any extra - // frames added by the construct call. - try { - Reflect.construct(Fake, []); - } catch (x) { - control = x; - } - - Reflect.construct(fn, [], Fake); - } else { - try { - Fake.call(); - } catch (x) { - control = x; - } - - fn.call(Fake.prototype); - } - } else { - try { - throw Error(); - } catch (x) { - control = x; - } - - fn(); - } - } catch (sample) { - // This is inlined manually because closure doesn't do it for us. - if (sample && control && typeof sample.stack === 'string') { - // This extracts the first frame from the sample that isn't also in the control. - // Skipping one frame that we assume is the frame that calls the two. - var sampleLines = sample.stack.split('\n'); - var controlLines = control.stack.split('\n'); - var s = sampleLines.length - 1; - var c = controlLines.length - 1; - - while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { - // We expect at least one stack frame to be shared. - // Typically this will be the root most one. However, stack frames may be - // cut off due to maximum stack limits. In this case, one maybe cut off - // earlier than the other. We assume that the sample is longer or the same - // and there for cut off earlier. So we should find the root most frame in - // the sample somewhere in the control. - c--; - } - - for (; s >= 1 && c >= 0; s--, c--) { - // Next we find the first one that isn't the same which should be the - // frame that called our sample function and the control. - if (sampleLines[s] !== controlLines[c]) { - // In V8, the first line is describing the message but other VMs don't. - // If we're about to return the first line, and the control is also on the same - // line, that's a pretty good indicator that our sample threw at same line as - // the control. I.e. before we entered the sample frame. So we ignore this result. - // This can happen if you passed a class to function component, or non-function. - if (s !== 1 || c !== 1) { - do { - s--; - c--; // We may still have similar intermediate frames from the construct call. - // The next one that isn't the same should be our match though. - - if (c < 0 || sampleLines[s] !== controlLines[c]) { - // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. - var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" - // but we have a user-provided "displayName" - // splice it in to make the stack more readable. - - - if (fn.displayName && _frame.includes('')) { - _frame = _frame.replace('', fn.displayName); - } - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, _frame); - } - } // Return the line we found. - - - return _frame; - } - } while (s >= 1 && c >= 0); - } - - break; - } - } - } - } finally { - reentry = false; - - { - ReactCurrentDispatcher.current = previousDispatcher; - reenableLogs(); - } - - Error.prepareStackTrace = previousPrepareStackTrace; - } // Fallback to just using the name if we couldn't make it throw. - - - var name = fn ? fn.displayName || fn.name : ''; - var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; - - { - if (typeof fn === 'function') { - componentFrameCache.set(fn, syntheticFrame); - } - } - - return syntheticFrame; - } - function describeFunctionComponentFrame(fn, source, ownerFn) { - { - return describeNativeComponentFrame(fn, false); - } - } - - function shouldConstruct(Component) { - var prototype = Component.prototype; - return !!(prototype && prototype.isReactComponent); - } - - function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { - - if (type == null) { - return ''; - } - - if (typeof type === 'function') { - { - return describeNativeComponentFrame(type, shouldConstruct(type)); - } - } - - if (typeof type === 'string') { - return describeBuiltInComponentFrame(type); - } - - switch (type) { - case REACT_SUSPENSE_TYPE: - return describeBuiltInComponentFrame('Suspense'); - - case REACT_SUSPENSE_LIST_TYPE: - return describeBuiltInComponentFrame('SuspenseList'); - } - - if (typeof type === 'object') { - switch (type.$$typeof) { - case REACT_FORWARD_REF_TYPE: - return describeFunctionComponentFrame(type.render); - - case REACT_MEMO_TYPE: - // Memo may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); - - case REACT_LAZY_TYPE: - { - var lazyComponent = type; - var payload = lazyComponent._payload; - var init = lazyComponent._init; - - try { - // Lazy may contain any component type so we recursively resolve it. - return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); - } catch (x) {} - } - } - } - - return ''; - } - - var hasOwnProperty = Object.prototype.hasOwnProperty; - - var loggedTypeFailures = {}; - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - - function setCurrentlyValidatingElement(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - ReactDebugCurrentFrame.setExtraStackFrame(stack); - } else { - ReactDebugCurrentFrame.setExtraStackFrame(null); - } - } - } - - function checkPropTypes(typeSpecs, values, location, componentName, element) { - { - // $FlowFixMe This is okay but Flow doesn't know it. - var has = Function.call.bind(hasOwnProperty); - - for (var typeSpecName in typeSpecs) { - if (has(typeSpecs, typeSpecName)) { - var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - if (typeof typeSpecs[typeSpecName] !== 'function') { - // eslint-disable-next-line react-internal/prod-error-codes - var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); - err.name = 'Invariant Violation'; - throw err; - } - - error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); - } catch (ex) { - error$1 = ex; - } - - if (error$1 && !(error$1 instanceof Error)) { - setCurrentlyValidatingElement(element); - - error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); - - setCurrentlyValidatingElement(null); - } - - if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error$1.message] = true; - setCurrentlyValidatingElement(element); - - error('Failed %s type: %s', location, error$1.message); - - setCurrentlyValidatingElement(null); - } - } - } - } - } - - var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare - - function isArray(a) { - return isArrayImpl(a); - } - - /* - * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol - * and Temporal.* types. See https://github.com/facebook/react/pull/22064. - * - * The functions in this module will throw an easier-to-understand, - * easier-to-debug exception with a clear errors message message explaining the - * problem. (Instead of a confusing exception thrown inside the implementation - * of the `value` object). - */ - // $FlowFixMe only called in DEV, so void return is not possible. - function typeName(value) { - { - // toStringTag is needed for namespaced types like Temporal.Instant - var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; - var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; - return type; - } - } // $FlowFixMe only called in DEV, so void return is not possible. - - - function willCoercionThrow(value) { - { - try { - testStringCoercion(value); - return false; - } catch (e) { - return true; - } - } - } - - function testStringCoercion(value) { - // If you ended up here by following an exception call stack, here's what's - // happened: you supplied an object or symbol value to React (as a prop, key, - // DOM attribute, CSS property, string ref, etc.) and when React tried to - // coerce it to a string using `'' + value`, an exception was thrown. - // - // The most common types that will cause this exception are `Symbol` instances - // and Temporal objects like `Temporal.Instant`. But any object that has a - // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this - // exception. (Library authors do this to prevent users from using built-in - // numeric operators like `+` or comparison operators like `>=` because custom - // methods are needed to perform accurate arithmetic or comparison.) - // - // To fix the problem, coerce this object or symbol value to a string before - // passing it to React. The most reliable way is usually `String(value)`. - // - // To find which value is throwing, check the browser or debugger console. - // Before this exception was thrown, there should be `console.error` output - // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the - // problem and how that type was used: key, atrribute, input value prop, etc. - // In most cases, this console output also shows the component and its - // ancestor components where the exception happened. - // - // eslint-disable-next-line react-internal/safe-string-coercion - return '' + value; - } - function checkKeyStringCoercion(value) { - { - if (willCoercionThrow(value)) { - error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); - - return testStringCoercion(value); // throw (to help callers find troubleshooting comments) - } - } - } - - var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; - var RESERVED_PROPS = { - key: true, - ref: true, - __self: true, - __source: true - }; - var specialPropKeyWarningShown; - var specialPropRefWarningShown; - var didWarnAboutStringRefs; - - { - didWarnAboutStringRefs = {}; - } - - function hasValidRef(config) { - { - if (hasOwnProperty.call(config, 'ref')) { - var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.ref !== undefined; - } - - function hasValidKey(config) { - { - if (hasOwnProperty.call(config, 'key')) { - var getter = Object.getOwnPropertyDescriptor(config, 'key').get; - - if (getter && getter.isReactWarning) { - return false; - } - } - } - - return config.key !== undefined; - } - - function warnIfStringRefCannotBeAutoConverted(config, self) { - { - if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) { - var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); - - if (!didWarnAboutStringRefs[componentName]) { - error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref); - - didWarnAboutStringRefs[componentName] = true; - } - } - } - } - - function defineKeyPropWarningGetter(props, displayName) { - { - var warnAboutAccessingKey = function () { - if (!specialPropKeyWarningShown) { - specialPropKeyWarningShown = true; - - error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - }; - - warnAboutAccessingKey.isReactWarning = true; - Object.defineProperty(props, 'key', { - get: warnAboutAccessingKey, - configurable: true - }); - } - } - - function defineRefPropWarningGetter(props, displayName) { - { - var warnAboutAccessingRef = function () { - if (!specialPropRefWarningShown) { - specialPropRefWarningShown = true; - - error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); - } - }; - - warnAboutAccessingRef.isReactWarning = true; - Object.defineProperty(props, 'ref', { - get: warnAboutAccessingRef, - configurable: true - }); - } - } - /** - * Factory method to create a new React element. This no longer adheres to - * the class pattern, so do not use new to call it. Also, instanceof check - * will not work. Instead test $$typeof field against Symbol.for('react.element') to check - * if something is a React Element. - * - * @param {*} type - * @param {*} props - * @param {*} key - * @param {string|object} ref - * @param {*} owner - * @param {*} self A *temporary* helper to detect places where `this` is - * different from the `owner` when React.createElement is called, so that we - * can warn. We want to get rid of owner and replace string `ref`s with arrow - * functions, and as long as `this` and owner are the same, there will be no - * change in behavior. - * @param {*} source An annotation object (added by a transpiler or otherwise) - * indicating filename, line number, and/or other information. - * @internal - */ - - - var ReactElement = function (type, key, ref, self, source, owner, props) { - var element = { - // This tag allows us to uniquely identify this as a React Element - $$typeof: REACT_ELEMENT_TYPE, - // Built-in properties that belong on the element - type: type, - key: key, - ref: ref, - props: props, - // Record the component responsible for creating this element. - _owner: owner - }; - - { - // The validation flag is currently mutative. We put it on - // an external backing store so that we can freeze the whole object. - // This can be replaced with a WeakMap once they are implemented in - // commonly used development environments. - element._store = {}; // To make comparing ReactElements easier for testing purposes, we make - // the validation flag non-enumerable (where possible, which should - // include every environment we run tests in), so the test framework - // ignores it. - - Object.defineProperty(element._store, 'validated', { - configurable: false, - enumerable: false, - writable: true, - value: false - }); // self and source are DEV only properties. - - Object.defineProperty(element, '_self', { - configurable: false, - enumerable: false, - writable: false, - value: self - }); // Two elements created in two different places should be considered - // equal for testing purposes and therefore we hide it from enumeration. - - Object.defineProperty(element, '_source', { - configurable: false, - enumerable: false, - writable: false, - value: source - }); - - if (Object.freeze) { - Object.freeze(element.props); - Object.freeze(element); - } - } - - return element; - }; - /** - * https://github.com/reactjs/rfcs/pull/107 - * @param {*} type - * @param {object} props - * @param {string} key - */ - - function jsxDEV(type, config, maybeKey, source, self) { - { - var propName; // Reserved names are extracted - - var props = {}; - var key = null; - var ref = null; // Currently, key can be spread in as a prop. This causes a potential - // issue if key is also explicitly declared (ie.
- // or
). We want to deprecate key spread, - // but as an intermediary step, we will use jsxDEV for everything except - //
, because we aren't currently able to tell if - // key is explicitly declared to be undefined or not. - - if (maybeKey !== undefined) { - { - checkKeyStringCoercion(maybeKey); - } - - key = '' + maybeKey; - } - - if (hasValidKey(config)) { - { - checkKeyStringCoercion(config.key); - } - - key = '' + config.key; - } - - if (hasValidRef(config)) { - ref = config.ref; - warnIfStringRefCannotBeAutoConverted(config, self); - } // Remaining properties are added to a new props object - - - for (propName in config) { - if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { - props[propName] = config[propName]; - } - } // Resolve default props - - - if (type && type.defaultProps) { - var defaultProps = type.defaultProps; - - for (propName in defaultProps) { - if (props[propName] === undefined) { - props[propName] = defaultProps[propName]; - } - } - } - - if (key || ref) { - var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; - - if (key) { - defineKeyPropWarningGetter(props, displayName); - } - - if (ref) { - defineRefPropWarningGetter(props, displayName); - } - } - - return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); - } - } - - var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; - var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; - - function setCurrentlyValidatingElement$1(element) { - { - if (element) { - var owner = element._owner; - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); - ReactDebugCurrentFrame$1.setExtraStackFrame(stack); - } else { - ReactDebugCurrentFrame$1.setExtraStackFrame(null); - } - } - } - - var propTypesMisspellWarningShown; - - { - propTypesMisspellWarningShown = false; - } - /** - * Verifies the object is a ReactElement. - * See https://reactjs.org/docs/react-api.html#isvalidelement - * @param {?object} object - * @return {boolean} True if `object` is a ReactElement. - * @final - */ - - - function isValidElement(object) { - { - return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; - } - } - - function getDeclarationErrorAddendum() { - { - if (ReactCurrentOwner$1.current) { - var name = getComponentNameFromType(ReactCurrentOwner$1.current.type); - - if (name) { - return '\n\nCheck the render method of `' + name + '`.'; - } - } - - return ''; - } - } - - function getSourceInfoErrorAddendum(source) { - { - if (source !== undefined) { - var fileName = source.fileName.replace(/^.*[\\\/]/, ''); - var lineNumber = source.lineNumber; - return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; - } - - return ''; - } - } - /** - * Warn if there's no key explicitly set on dynamic arrays of children or - * object keys are not valid. This allows us to keep track of children between - * updates. - */ - - - var ownerHasKeyUseWarning = {}; - - function getCurrentComponentErrorInfo(parentType) { - { - var info = getDeclarationErrorAddendum(); - - if (!info) { - var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; - - if (parentName) { - info = "\n\nCheck the top-level render call using <" + parentName + ">."; - } - } - - return info; - } - } - /** - * Warn if the element doesn't have an explicit key assigned to it. - * This element is in an array. The array could grow and shrink or be - * reordered. All children that haven't already been validated are required to - * have a "key" property assigned to it. Error statuses are cached so a warning - * will only be shown once. - * - * @internal - * @param {ReactElement} element Element that requires a key. - * @param {*} parentType element's parent's type. - */ - - - function validateExplicitKey(element, parentType) { - { - if (!element._store || element._store.validated || element.key != null) { - return; - } - - element._store.validated = true; - var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); - - if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { - return; - } - - ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a - // property, it may be the creator of the child that's responsible for - // assigning it a key. - - var childOwner = ''; - - if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { - // Give the component that originally created this child. - childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; - } - - setCurrentlyValidatingElement$1(element); - - error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); - - setCurrentlyValidatingElement$1(null); - } - } - /** - * Ensure that every element either is passed in a static location, in an - * array with an explicit keys property defined, or in an object literal - * with valid key property. - * - * @internal - * @param {ReactNode} node Statically passed child of any type. - * @param {*} parentType node's parent's type. - */ - - - function validateChildKeys(node, parentType) { - { - if (typeof node !== 'object') { - return; - } - - if (isArray(node)) { - for (var i = 0; i < node.length; i++) { - var child = node[i]; - - if (isValidElement(child)) { - validateExplicitKey(child, parentType); - } - } - } else if (isValidElement(node)) { - // This element was passed in a valid location. - if (node._store) { - node._store.validated = true; - } - } else if (node) { - var iteratorFn = getIteratorFn(node); - - if (typeof iteratorFn === 'function') { - // Entry iterators used to provide implicit keys, - // but now we print a separate warning for them later. - if (iteratorFn !== node.entries) { - var iterator = iteratorFn.call(node); - var step; - - while (!(step = iterator.next()).done) { - if (isValidElement(step.value)) { - validateExplicitKey(step.value, parentType); - } - } - } - } - } - } - } - /** - * Given an element, validate that its props follow the propTypes definition, - * provided by the type. - * - * @param {ReactElement} element - */ - - - function validatePropTypes(element) { - { - var type = element.type; - - if (type === null || type === undefined || typeof type === 'string') { - return; - } - - var propTypes; - - if (typeof type === 'function') { - propTypes = type.propTypes; - } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. - // Inner props are checked in the reconciler. - type.$$typeof === REACT_MEMO_TYPE)) { - propTypes = type.propTypes; - } else { - return; - } - - if (propTypes) { - // Intentionally inside to avoid triggering lazy initializers: - var name = getComponentNameFromType(type); - checkPropTypes(propTypes, element.props, 'prop', name, element); - } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { - propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: - - var _name = getComponentNameFromType(type); - - error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); - } - - if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { - error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); - } - } - } - /** - * Given a fragment, validate that it can only be provided with fragment props - * @param {ReactElement} fragment - */ - - - function validateFragmentProps(fragment) { - { - var keys = Object.keys(fragment.props); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - - if (key !== 'children' && key !== 'key') { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); - - setCurrentlyValidatingElement$1(null); - break; - } - } - - if (fragment.ref !== null) { - setCurrentlyValidatingElement$1(fragment); - - error('Invalid attribute `ref` supplied to `React.Fragment`.'); - - setCurrentlyValidatingElement$1(null); - } - } - } - - var didWarnAboutKeySpread = {}; - function jsxWithValidation(type, props, key, isStaticChildren, source, self) { - { - var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to - // succeed and there will likely be errors in render. - - if (!validType) { - var info = ''; - - if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { - info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; - } - - var sourceInfo = getSourceInfoErrorAddendum(source); - - if (sourceInfo) { - info += sourceInfo; - } else { - info += getDeclarationErrorAddendum(); - } - - var typeString; - - if (type === null) { - typeString = 'null'; - } else if (isArray(type)) { - typeString = 'array'; - } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { - typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; - info = ' Did you accidentally export a JSX literal instead of a component?'; - } else { - typeString = typeof type; - } - - error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); - } - - var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used. - // TODO: Drop this when these are no longer allowed as the type argument. - - if (element == null) { - return element; - } // Skip key warning if the type isn't valid since our key validation logic - // doesn't expect a non-string/function type and can throw confusing errors. - // We don't want exception behavior to differ between dev and prod. - // (Rendering will throw with a helpful message and as soon as the type is - // fixed, the key warnings will appear.) - - - if (validType) { - var children = props.children; - - if (children !== undefined) { - if (isStaticChildren) { - if (isArray(children)) { - for (var i = 0; i < children.length; i++) { - validateChildKeys(children[i], type); - } - - if (Object.freeze) { - Object.freeze(children); - } - } else { - error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); - } - } else { - validateChildKeys(children, type); - } - } - } - - { - if (hasOwnProperty.call(props, 'key')) { - var componentName = getComponentNameFromType(type); - var keys = Object.keys(props).filter(function (k) { - return k !== 'key'; - }); - var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}'; - - if (!didWarnAboutKeySpread[componentName + beforeExample]) { - var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}'; - - error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName); - - didWarnAboutKeySpread[componentName + beforeExample] = true; - } - } - } - - if (type === REACT_FRAGMENT_TYPE) { - validateFragmentProps(element); - } else { - validatePropTypes(element); - } - - return element; - } - } // These two functions exist to still get child warnings in dev - // even with the prod transform. This means that jsxDEV is purely - // opt-in behavior for better messages but that we won't stop - // giving you warnings if you use production apis. - - function jsxWithValidationStatic(type, props, key) { - { - return jsxWithValidation(type, props, key, true); - } - } - function jsxWithValidationDynamic(type, props, key) { - { - return jsxWithValidation(type, props, key, false); - } - } - - var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children. - // for now we can ship identical prod functions - - var jsxs = jsxWithValidationStatic ; - - reactJsxRuntime_development.Fragment = REACT_FRAGMENT_TYPE; - reactJsxRuntime_development.jsx = jsx; - reactJsxRuntime_development.jsxs = jsxs; - })(); - } - return reactJsxRuntime_development; -} - -(function (module) { - - if (process.env.NODE_ENV === 'production') { - module.exports = requireReactJsxRuntime_production_min(); - } else { - module.exports = requireReactJsxRuntime_development(); - } -} (jsxRuntime)); - -var en = {}; - -var zh = {}; - -var de = {}; - -var pt = {}; - -// file examples: en, enGB, zh, zhHK - -var localeData = /*#__PURE__*/Object.freeze({ - __proto__: null, - en: en, - zh: zh, - de: de, - pt: pt -}); - -var ErrorKind; -(function (ErrorKind) { - /** Argument is unclosed (e.g. `{0`) */ - ErrorKind[ErrorKind["EXPECT_ARGUMENT_CLOSING_BRACE"] = 1] = "EXPECT_ARGUMENT_CLOSING_BRACE"; - /** Argument is empty (e.g. `{}`). */ - ErrorKind[ErrorKind["EMPTY_ARGUMENT"] = 2] = "EMPTY_ARGUMENT"; - /** Argument is malformed (e.g. `{foo!}``) */ - ErrorKind[ErrorKind["MALFORMED_ARGUMENT"] = 3] = "MALFORMED_ARGUMENT"; - /** Expect an argument type (e.g. `{foo,}`) */ - ErrorKind[ErrorKind["EXPECT_ARGUMENT_TYPE"] = 4] = "EXPECT_ARGUMENT_TYPE"; - /** Unsupported argument type (e.g. `{foo,foo}`) */ - ErrorKind[ErrorKind["INVALID_ARGUMENT_TYPE"] = 5] = "INVALID_ARGUMENT_TYPE"; - /** Expect an argument style (e.g. `{foo, number, }`) */ - ErrorKind[ErrorKind["EXPECT_ARGUMENT_STYLE"] = 6] = "EXPECT_ARGUMENT_STYLE"; - /** The number skeleton is invalid. */ - ErrorKind[ErrorKind["INVALID_NUMBER_SKELETON"] = 7] = "INVALID_NUMBER_SKELETON"; - /** The date time skeleton is invalid. */ - ErrorKind[ErrorKind["INVALID_DATE_TIME_SKELETON"] = 8] = "INVALID_DATE_TIME_SKELETON"; - /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */ - ErrorKind[ErrorKind["EXPECT_NUMBER_SKELETON"] = 9] = "EXPECT_NUMBER_SKELETON"; - /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */ - ErrorKind[ErrorKind["EXPECT_DATE_TIME_SKELETON"] = 10] = "EXPECT_DATE_TIME_SKELETON"; - /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */ - ErrorKind[ErrorKind["UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"] = 11] = "UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"; - /** Missing select argument options (e.g. `{foo, select}`) */ - ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_OPTIONS"] = 12] = "EXPECT_SELECT_ARGUMENT_OPTIONS"; - /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */ - ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"] = 13] = "EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"; - /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */ - ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"] = 14] = "INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"; - /** Expecting a selector in `select` argument (e.g `{foo, select}`) */ - ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR"] = 15] = "EXPECT_SELECT_ARGUMENT_SELECTOR"; - /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */ - ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR"] = 16] = "EXPECT_PLURAL_ARGUMENT_SELECTOR"; - /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */ - ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"] = 17] = "EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"; - /** - * Expecting a message fragment after the `plural` or `selectordinal` selector - * (e.g. `{foo, plural, one}`) - */ - ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"] = 18] = "EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"; - /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */ - ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_SELECTOR"] = 19] = "INVALID_PLURAL_ARGUMENT_SELECTOR"; - /** - * Duplicate selectors in `plural` or `selectordinal` argument. - * (e.g. {foo, plural, one {#} one {#}}) - */ - ErrorKind[ErrorKind["DUPLICATE_PLURAL_ARGUMENT_SELECTOR"] = 20] = "DUPLICATE_PLURAL_ARGUMENT_SELECTOR"; - /** Duplicate selectors in `select` argument. - * (e.g. {foo, select, apple {apple} apple {apple}}) - */ - ErrorKind[ErrorKind["DUPLICATE_SELECT_ARGUMENT_SELECTOR"] = 21] = "DUPLICATE_SELECT_ARGUMENT_SELECTOR"; - /** Plural or select argument option must have `other` clause. */ - ErrorKind[ErrorKind["MISSING_OTHER_CLAUSE"] = 22] = "MISSING_OTHER_CLAUSE"; - /** The tag is malformed. (e.g. `foo) */ - ErrorKind[ErrorKind["INVALID_TAG"] = 23] = "INVALID_TAG"; - /** The tag name is invalid. (e.g. `<123>foo`) */ - ErrorKind[ErrorKind["INVALID_TAG_NAME"] = 25] = "INVALID_TAG_NAME"; - /** The closing tag does not match the opening tag. (e.g. `foo`) */ - ErrorKind[ErrorKind["UNMATCHED_CLOSING_TAG"] = 26] = "UNMATCHED_CLOSING_TAG"; - /** The opening tag has unmatched closing tag. (e.g. `foo`) */ - ErrorKind[ErrorKind["UNCLOSED_TAG"] = 27] = "UNCLOSED_TAG"; -})(ErrorKind || (ErrorKind = {})); - -var TYPE; -(function (TYPE) { - /** - * Raw text - */ - TYPE[TYPE["literal"] = 0] = "literal"; - /** - * Variable w/o any format, e.g `var` in `this is a {var}` - */ - TYPE[TYPE["argument"] = 1] = "argument"; - /** - * Variable w/ number format - */ - TYPE[TYPE["number"] = 2] = "number"; - /** - * Variable w/ date format - */ - TYPE[TYPE["date"] = 3] = "date"; - /** - * Variable w/ time format - */ - TYPE[TYPE["time"] = 4] = "time"; - /** - * Variable w/ select format - */ - TYPE[TYPE["select"] = 5] = "select"; - /** - * Variable w/ plural format - */ - TYPE[TYPE["plural"] = 6] = "plural"; - /** - * Only possible within plural argument. - * This is the `#` symbol that will be substituted with the count. - */ - TYPE[TYPE["pound"] = 7] = "pound"; - /** - * XML-like tag - */ - TYPE[TYPE["tag"] = 8] = "tag"; -})(TYPE || (TYPE = {})); -var SKELETON_TYPE; -(function (SKELETON_TYPE) { - SKELETON_TYPE[SKELETON_TYPE["number"] = 0] = "number"; - SKELETON_TYPE[SKELETON_TYPE["dateTime"] = 1] = "dateTime"; -})(SKELETON_TYPE || (SKELETON_TYPE = {})); -/** - * Type Guards - */ -function isLiteralElement(el) { - return el.type === TYPE.literal; -} -function isArgumentElement(el) { - return el.type === TYPE.argument; -} -function isNumberElement(el) { - return el.type === TYPE.number; -} -function isDateElement(el) { - return el.type === TYPE.date; -} -function isTimeElement(el) { - return el.type === TYPE.time; -} -function isSelectElement(el) { - return el.type === TYPE.select; -} -function isPluralElement(el) { - return el.type === TYPE.plural; -} -function isPoundElement(el) { - return el.type === TYPE.pound; -} -function isTagElement(el) { - return el.type === TYPE.tag; -} -function isNumberSkeleton(el) { - return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number); -} -function isDateTimeSkeleton(el) { - return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime); -} - -// @generated from regex-gen.ts -var SPACE_SEPARATOR_REGEX = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/; - -/** - * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js - * with some tweaks - */ -var DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g; -/** - * Parse Date time skeleton into Intl.DateTimeFormatOptions - * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - * @public - * @param skeleton skeleton string - */ -function parseDateTimeSkeleton(skeleton) { - var result = {}; - skeleton.replace(DATE_TIME_REGEX, function (match) { - var len = match.length; - switch (match[0]) { - // Era - case 'G': - result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'; - break; - // Year - case 'y': - result.year = len === 2 ? '2-digit' : 'numeric'; - break; - case 'Y': - case 'u': - case 'U': - case 'r': - throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead'); - // Quarter - case 'q': - case 'Q': - throw new RangeError('`q/Q` (quarter) patterns are not supported'); - // Month - case 'M': - case 'L': - result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1]; - break; - // Week - case 'w': - case 'W': - throw new RangeError('`w/W` (week) patterns are not supported'); - case 'd': - result.day = ['numeric', '2-digit'][len - 1]; - break; - case 'D': - case 'F': - case 'g': - throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead'); - // Weekday - case 'E': - result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'; - break; - case 'e': - if (len < 4) { - throw new RangeError('`e..eee` (weekday) patterns are not supported'); - } - result.weekday = ['short', 'long', 'narrow', 'short'][len - 4]; - break; - case 'c': - if (len < 4) { - throw new RangeError('`c..ccc` (weekday) patterns are not supported'); - } - result.weekday = ['short', 'long', 'narrow', 'short'][len - 4]; - break; - // Period - case 'a': // AM, PM - result.hour12 = true; - break; - case 'b': // am, pm, noon, midnight - case 'B': // flexible day periods - throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead'); - // Hour - case 'h': - result.hourCycle = 'h12'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'H': - result.hourCycle = 'h23'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'K': - result.hourCycle = 'h11'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'k': - result.hourCycle = 'h24'; - result.hour = ['numeric', '2-digit'][len - 1]; - break; - case 'j': - case 'J': - case 'C': - throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead'); - // Minute - case 'm': - result.minute = ['numeric', '2-digit'][len - 1]; - break; - // Second - case 's': - result.second = ['numeric', '2-digit'][len - 1]; - break; - case 'S': - case 'A': - throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead'); - // Zone - case 'z': // 1..3, 4: specific non-location format - result.timeZoneName = len < 4 ? 'short' : 'long'; - break; - case 'Z': // 1..3, 4, 5: The ISO8601 varios formats - case 'O': // 1, 4: milliseconds in day short, long - case 'v': // 1, 4: generic non-location format - case 'V': // 1, 2, 3, 4: time zone ID or city - case 'X': // 1, 2, 3, 4: The ISO8601 varios formats - case 'x': // 1, 2, 3, 4: The ISO8601 varios formats - throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead'); - } - return ''; - }); - return result; -} - -// @generated from regex-gen.ts -var WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/i; - -function parseNumberSkeletonFromString(skeleton) { - if (skeleton.length === 0) { - throw new Error('Number skeleton cannot be empty'); - } - // Parse the skeleton - var stringTokens = skeleton - .split(WHITE_SPACE_REGEX) - .filter(function (x) { return x.length > 0; }); - var tokens = []; - for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) { - var stringToken = stringTokens_1[_i]; - var stemAndOptions = stringToken.split('/'); - if (stemAndOptions.length === 0) { - throw new Error('Invalid number skeleton'); - } - var stem = stemAndOptions[0], options = stemAndOptions.slice(1); - for (var _a = 0, options_1 = options; _a < options_1.length; _a++) { - var option = options_1[_a]; - if (option.length === 0) { - throw new Error('Invalid number skeleton'); - } - } - tokens.push({ stem: stem, options: options }); - } - return tokens; -} -function icuUnitToEcma(unit) { - return unit.replace(/^(.*?)-/, ''); -} -var FRACTION_PRECISION_REGEX = /^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g; -var SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\+|#+)?[rs]?$/g; -var INTEGER_WIDTH_REGEX = /(\*)(0+)|(#+)(0+)|(0+)/g; -var CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/; -function parseSignificantPrecision(str) { - var result = {}; - if (str[str.length - 1] === 'r') { - result.roundingPriority = 'morePrecision'; - } - else if (str[str.length - 1] === 's') { - result.roundingPriority = 'lessPrecision'; - } - str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) { - // @@@ case - if (typeof g2 !== 'string') { - result.minimumSignificantDigits = g1.length; - result.maximumSignificantDigits = g1.length; - } - // @@@+ case - else if (g2 === '+') { - result.minimumSignificantDigits = g1.length; - } - // .### case - else if (g1[0] === '#') { - result.maximumSignificantDigits = g1.length; - } - // .@@## or .@@@ case - else { - result.minimumSignificantDigits = g1.length; - result.maximumSignificantDigits = - g1.length + (typeof g2 === 'string' ? g2.length : 0); - } - return ''; - }); - return result; -} -function parseSign(str) { - switch (str) { - case 'sign-auto': - return { - signDisplay: 'auto', - }; - case 'sign-accounting': - case '()': - return { - currencySign: 'accounting', - }; - case 'sign-always': - case '+!': - return { - signDisplay: 'always', - }; - case 'sign-accounting-always': - case '()!': - return { - signDisplay: 'always', - currencySign: 'accounting', - }; - case 'sign-except-zero': - case '+?': - return { - signDisplay: 'exceptZero', - }; - case 'sign-accounting-except-zero': - case '()?': - return { - signDisplay: 'exceptZero', - currencySign: 'accounting', - }; - case 'sign-never': - case '+_': - return { - signDisplay: 'never', - }; - } -} -function parseConciseScientificAndEngineeringStem(stem) { - // Engineering - var result; - if (stem[0] === 'E' && stem[1] === 'E') { - result = { - notation: 'engineering', - }; - stem = stem.slice(2); - } - else if (stem[0] === 'E') { - result = { - notation: 'scientific', - }; - stem = stem.slice(1); - } - if (result) { - var signDisplay = stem.slice(0, 2); - if (signDisplay === '+!') { - result.signDisplay = 'always'; - stem = stem.slice(2); - } - else if (signDisplay === '+?') { - result.signDisplay = 'exceptZero'; - stem = stem.slice(2); - } - if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) { - throw new Error('Malformed concise eng/scientific notation'); - } - result.minimumIntegerDigits = stem.length; - } - return result; -} -function parseNotationOptions(opt) { - var result = {}; - var signOpts = parseSign(opt); - if (signOpts) { - return signOpts; - } - return result; -} -/** - * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options - */ -function parseNumberSkeleton(tokens) { - var result = {}; - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - switch (token.stem) { - case 'percent': - case '%': - result.style = 'percent'; - continue; - case '%x100': - result.style = 'percent'; - result.scale = 100; - continue; - case 'currency': - result.style = 'currency'; - result.currency = token.options[0]; - continue; - case 'group-off': - case ',_': - result.useGrouping = false; - continue; - case 'precision-integer': - case '.': - result.maximumFractionDigits = 0; - continue; - case 'measure-unit': - case 'unit': - result.style = 'unit'; - result.unit = icuUnitToEcma(token.options[0]); - continue; - case 'compact-short': - case 'K': - result.notation = 'compact'; - result.compactDisplay = 'short'; - continue; - case 'compact-long': - case 'KK': - result.notation = 'compact'; - result.compactDisplay = 'long'; - continue; - case 'scientific': - result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {})); - continue; - case 'engineering': - result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {})); - continue; - case 'notation-simple': - result.notation = 'standard'; - continue; - // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h - case 'unit-width-narrow': - result.currencyDisplay = 'narrowSymbol'; - result.unitDisplay = 'narrow'; - continue; - case 'unit-width-short': - result.currencyDisplay = 'code'; - result.unitDisplay = 'short'; - continue; - case 'unit-width-full-name': - result.currencyDisplay = 'name'; - result.unitDisplay = 'long'; - continue; - case 'unit-width-iso-code': - result.currencyDisplay = 'symbol'; - continue; - case 'scale': - result.scale = parseFloat(token.options[0]); - continue; - case 'rounding-mode-floor': - result.roundingMode = 'floor'; - continue; - case 'rounding-mode-ceiling': - result.roundingMode = 'ceil'; - continue; - case 'rounding-mode-down': - result.roundingMode = 'trunc'; - continue; - case 'rounding-mode-up': - result.roundingMode = 'expand'; - continue; - case 'rounding-mode-half-even': - result.roundingMode = 'halfEven'; - continue; - case 'rounding-mode-half-down': - result.roundingMode = 'halfTrunc'; - continue; - case 'rounding-mode-half-up': - result.roundingMode = 'halfExpand'; - continue; - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width - case 'integer-width': - if (token.options.length > 1) { - throw new RangeError('integer-width stems only accept a single optional option'); - } - token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) { - if (g1) { - result.minimumIntegerDigits = g2.length; - } - else if (g3 && g4) { - throw new Error('We currently do not support maximum integer digits'); - } - else if (g5) { - throw new Error('We currently do not support exact integer digits'); - } - return ''; - }); - continue; - } - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width - if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) { - result.minimumIntegerDigits = token.stem.length; - continue; - } - if (FRACTION_PRECISION_REGEX.test(token.stem)) { - // Precision - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision - // precision-integer case - if (token.options.length > 1) { - throw new RangeError('Fraction-precision stems only accept a single optional option'); - } - token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) { - // .000* case (before ICU67 it was .000+) - if (g2 === '*') { - result.minimumFractionDigits = g1.length; - } - // .### case - else if (g3 && g3[0] === '#') { - result.maximumFractionDigits = g3.length; - } - // .00## case - else if (g4 && g5) { - result.minimumFractionDigits = g4.length; - result.maximumFractionDigits = g4.length + g5.length; - } - else { - result.minimumFractionDigits = g1.length; - result.maximumFractionDigits = g1.length; - } - return ''; - }); - var opt = token.options[0]; - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display - if (opt === 'w') { - result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' }); - } - else if (opt) { - result = __assign(__assign({}, result), parseSignificantPrecision(opt)); - } - continue; - } - // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision - if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) { - result = __assign(__assign({}, result), parseSignificantPrecision(token.stem)); - continue; - } - var signOpts = parseSign(token.stem); - if (signOpts) { - result = __assign(__assign({}, result), signOpts); - } - var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem); - if (conciseScientificAndEngineeringOpts) { - result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts); - } - } - return result; -} - -// @generated from time-data-gen.ts -// prettier-ignore -var timeData = { - "001": [ - "H", - "h" - ], - "AC": [ - "H", - "h", - "hb", - "hB" - ], - "AD": [ - "H", - "hB" - ], - "AE": [ - "h", - "hB", - "hb", - "H" - ], - "AF": [ - "H", - "hb", - "hB", - "h" - ], - "AG": [ - "h", - "hb", - "H", - "hB" - ], - "AI": [ - "H", - "h", - "hb", - "hB" - ], - "AL": [ - "h", - "H", - "hB" - ], - "AM": [ - "H", - "hB" - ], - "AO": [ - "H", - "hB" - ], - "AR": [ - "H", - "h", - "hB", - "hb" - ], - "AS": [ - "h", - "H" - ], - "AT": [ - "H", - "hB" - ], - "AU": [ - "h", - "hb", - "H", - "hB" - ], - "AW": [ - "H", - "hB" - ], - "AX": [ - "H" - ], - "AZ": [ - "H", - "hB", - "h" - ], - "BA": [ - "H", - "hB", - "h" - ], - "BB": [ - "h", - "hb", - "H", - "hB" - ], - "BD": [ - "h", - "hB", - "H" - ], - "BE": [ - "H", - "hB" - ], - "BF": [ - "H", - "hB" - ], - "BG": [ - "H", - "hB", - "h" - ], - "BH": [ - "h", - "hB", - "hb", - "H" - ], - "BI": [ - "H", - "h" - ], - "BJ": [ - "H", - "hB" - ], - "BL": [ - "H", - "hB" - ], - "BM": [ - "h", - "hb", - "H", - "hB" - ], - "BN": [ - "hb", - "hB", - "h", - "H" - ], - "BO": [ - "H", - "hB", - "h", - "hb" - ], - "BQ": [ - "H" - ], - "BR": [ - "H", - "hB" - ], - "BS": [ - "h", - "hb", - "H", - "hB" - ], - "BT": [ - "h", - "H" - ], - "BW": [ - "H", - "h", - "hb", - "hB" - ], - "BY": [ - "H", - "h" - ], - "BZ": [ - "H", - "h", - "hb", - "hB" - ], - "CA": [ - "h", - "hb", - "H", - "hB" - ], - "CC": [ - "H", - "h", - "hb", - "hB" - ], - "CD": [ - "hB", - "H" - ], - "CF": [ - "H", - "h", - "hB" - ], - "CG": [ - "H", - "hB" - ], - "CH": [ - "H", - "hB", - "h" - ], - "CI": [ - "H", - "hB" - ], - "CK": [ - "H", - "h", - "hb", - "hB" - ], - "CL": [ - "H", - "h", - "hB", - "hb" - ], - "CM": [ - "H", - "h", - "hB" - ], - "CN": [ - "H", - "hB", - "hb", - "h" - ], - "CO": [ - "h", - "H", - "hB", - "hb" - ], - "CP": [ - "H" - ], - "CR": [ - "H", - "h", - "hB", - "hb" - ], - "CU": [ - "H", - "h", - "hB", - "hb" - ], - "CV": [ - "H", - "hB" - ], - "CW": [ - "H", - "hB" - ], - "CX": [ - "H", - "h", - "hb", - "hB" - ], - "CY": [ - "h", - "H", - "hb", - "hB" - ], - "CZ": [ - "H" - ], - "DE": [ - "H", - "hB" - ], - "DG": [ - "H", - "h", - "hb", - "hB" - ], - "DJ": [ - "h", - "H" - ], - "DK": [ - "H" - ], - "DM": [ - "h", - "hb", - "H", - "hB" - ], - "DO": [ - "h", - "H", - "hB", - "hb" - ], - "DZ": [ - "h", - "hB", - "hb", - "H" - ], - "EA": [ - "H", - "h", - "hB", - "hb" - ], - "EC": [ - "H", - "hB", - "h", - "hb" - ], - "EE": [ - "H", - "hB" - ], - "EG": [ - "h", - "hB", - "hb", - "H" - ], - "EH": [ - "h", - "hB", - "hb", - "H" - ], - "ER": [ - "h", - "H" - ], - "ES": [ - "H", - "hB", - "h", - "hb" - ], - "ET": [ - "hB", - "hb", - "h", - "H" - ], - "FI": [ - "H" - ], - "FJ": [ - "h", - "hb", - "H", - "hB" - ], - "FK": [ - "H", - "h", - "hb", - "hB" - ], - "FM": [ - "h", - "hb", - "H", - "hB" - ], - "FO": [ - "H", - "h" - ], - "FR": [ - "H", - "hB" - ], - "GA": [ - "H", - "hB" - ], - "GB": [ - "H", - "h", - "hb", - "hB" - ], - "GD": [ - "h", - "hb", - "H", - "hB" - ], - "GE": [ - "H", - "hB", - "h" - ], - "GF": [ - "H", - "hB" - ], - "GG": [ - "H", - "h", - "hb", - "hB" - ], - "GH": [ - "h", - "H" - ], - "GI": [ - "H", - "h", - "hb", - "hB" - ], - "GL": [ - "H", - "h" - ], - "GM": [ - "h", - "hb", - "H", - "hB" - ], - "GN": [ - "H", - "hB" - ], - "GP": [ - "H", - "hB" - ], - "GQ": [ - "H", - "hB", - "h", - "hb" - ], - "GR": [ - "h", - "H", - "hb", - "hB" - ], - "GT": [ - "H", - "h", - "hB", - "hb" - ], - "GU": [ - "h", - "hb", - "H", - "hB" - ], - "GW": [ - "H", - "hB" - ], - "GY": [ - "h", - "hb", - "H", - "hB" - ], - "HK": [ - "h", - "hB", - "hb", - "H" - ], - "HN": [ - "H", - "h", - "hB", - "hb" - ], - "HR": [ - "H", - "hB" - ], - "HU": [ - "H", - "h" - ], - "IC": [ - "H", - "h", - "hB", - "hb" - ], - "ID": [ - "H" - ], - "IE": [ - "H", - "h", - "hb", - "hB" - ], - "IL": [ - "H", - "hB" - ], - "IM": [ - "H", - "h", - "hb", - "hB" - ], - "IN": [ - "h", - "H" - ], - "IO": [ - "H", - "h", - "hb", - "hB" - ], - "IQ": [ - "h", - "hB", - "hb", - "H" - ], - "IR": [ - "hB", - "H" - ], - "IS": [ - "H" - ], - "IT": [ - "H", - "hB" - ], - "JE": [ - "H", - "h", - "hb", - "hB" - ], - "JM": [ - "h", - "hb", - "H", - "hB" - ], - "JO": [ - "h", - "hB", - "hb", - "H" - ], - "JP": [ - "H", - "K", - "h" - ], - "KE": [ - "hB", - "hb", - "H", - "h" - ], - "KG": [ - "H", - "h", - "hB", - "hb" - ], - "KH": [ - "hB", - "h", - "H", - "hb" - ], - "KI": [ - "h", - "hb", - "H", - "hB" - ], - "KM": [ - "H", - "h", - "hB", - "hb" - ], - "KN": [ - "h", - "hb", - "H", - "hB" - ], - "KP": [ - "h", - "H", - "hB", - "hb" - ], - "KR": [ - "h", - "H", - "hB", - "hb" - ], - "KW": [ - "h", - "hB", - "hb", - "H" - ], - "KY": [ - "h", - "hb", - "H", - "hB" - ], - "KZ": [ - "H", - "hB" - ], - "LA": [ - "H", - "hb", - "hB", - "h" - ], - "LB": [ - "h", - "hB", - "hb", - "H" - ], - "LC": [ - "h", - "hb", - "H", - "hB" - ], - "LI": [ - "H", - "hB", - "h" - ], - "LK": [ - "H", - "h", - "hB", - "hb" - ], - "LR": [ - "h", - "hb", - "H", - "hB" - ], - "LS": [ - "h", - "H" - ], - "LT": [ - "H", - "h", - "hb", - "hB" - ], - "LU": [ - "H", - "h", - "hB" - ], - "LV": [ - "H", - "hB", - "hb", - "h" - ], - "LY": [ - "h", - "hB", - "hb", - "H" - ], - "MA": [ - "H", - "h", - "hB", - "hb" - ], - "MC": [ - "H", - "hB" - ], - "MD": [ - "H", - "hB" - ], - "ME": [ - "H", - "hB", - "h" - ], - "MF": [ - "H", - "hB" - ], - "MG": [ - "H", - "h" - ], - "MH": [ - "h", - "hb", - "H", - "hB" - ], - "MK": [ - "H", - "h", - "hb", - "hB" - ], - "ML": [ - "H" - ], - "MM": [ - "hB", - "hb", - "H", - "h" - ], - "MN": [ - "H", - "h", - "hb", - "hB" - ], - "MO": [ - "h", - "hB", - "hb", - "H" - ], - "MP": [ - "h", - "hb", - "H", - "hB" - ], - "MQ": [ - "H", - "hB" - ], - "MR": [ - "h", - "hB", - "hb", - "H" - ], - "MS": [ - "H", - "h", - "hb", - "hB" - ], - "MT": [ - "H", - "h" - ], - "MU": [ - "H", - "h" - ], - "MV": [ - "H", - "h" - ], - "MW": [ - "h", - "hb", - "H", - "hB" - ], - "MX": [ - "H", - "h", - "hB", - "hb" - ], - "MY": [ - "hb", - "hB", - "h", - "H" - ], - "MZ": [ - "H", - "hB" - ], - "NA": [ - "h", - "H", - "hB", - "hb" - ], - "NC": [ - "H", - "hB" - ], - "NE": [ - "H" - ], - "NF": [ - "H", - "h", - "hb", - "hB" - ], - "NG": [ - "H", - "h", - "hb", - "hB" - ], - "NI": [ - "H", - "h", - "hB", - "hb" - ], - "NL": [ - "H", - "hB" - ], - "NO": [ - "H", - "h" - ], - "NP": [ - "H", - "h", - "hB" - ], - "NR": [ - "H", - "h", - "hb", - "hB" - ], - "NU": [ - "H", - "h", - "hb", - "hB" - ], - "NZ": [ - "h", - "hb", - "H", - "hB" - ], - "OM": [ - "h", - "hB", - "hb", - "H" - ], - "PA": [ - "h", - "H", - "hB", - "hb" - ], - "PE": [ - "H", - "hB", - "h", - "hb" - ], - "PF": [ - "H", - "h", - "hB" - ], - "PG": [ - "h", - "H" - ], - "PH": [ - "h", - "hB", - "hb", - "H" - ], - "PK": [ - "h", - "hB", - "H" - ], - "PL": [ - "H", - "h" - ], - "PM": [ - "H", - "hB" - ], - "PN": [ - "H", - "h", - "hb", - "hB" - ], - "PR": [ - "h", - "H", - "hB", - "hb" - ], - "PS": [ - "h", - "hB", - "hb", - "H" - ], - "PT": [ - "H", - "hB" - ], - "PW": [ - "h", - "H" - ], - "PY": [ - "H", - "h", - "hB", - "hb" - ], - "QA": [ - "h", - "hB", - "hb", - "H" - ], - "RE": [ - "H", - "hB" - ], - "RO": [ - "H", - "hB" - ], - "RS": [ - "H", - "hB", - "h" - ], - "RU": [ - "H" - ], - "RW": [ - "H", - "h" - ], - "SA": [ - "h", - "hB", - "hb", - "H" - ], - "SB": [ - "h", - "hb", - "H", - "hB" - ], - "SC": [ - "H", - "h", - "hB" - ], - "SD": [ - "h", - "hB", - "hb", - "H" - ], - "SE": [ - "H" - ], - "SG": [ - "h", - "hb", - "H", - "hB" - ], - "SH": [ - "H", - "h", - "hb", - "hB" - ], - "SI": [ - "H", - "hB" - ], - "SJ": [ - "H" - ], - "SK": [ - "H" - ], - "SL": [ - "h", - "hb", - "H", - "hB" - ], - "SM": [ - "H", - "h", - "hB" - ], - "SN": [ - "H", - "h", - "hB" - ], - "SO": [ - "h", - "H" - ], - "SR": [ - "H", - "hB" - ], - "SS": [ - "h", - "hb", - "H", - "hB" - ], - "ST": [ - "H", - "hB" - ], - "SV": [ - "H", - "h", - "hB", - "hb" - ], - "SX": [ - "H", - "h", - "hb", - "hB" - ], - "SY": [ - "h", - "hB", - "hb", - "H" - ], - "SZ": [ - "h", - "hb", - "H", - "hB" - ], - "TA": [ - "H", - "h", - "hb", - "hB" - ], - "TC": [ - "h", - "hb", - "H", - "hB" - ], - "TD": [ - "h", - "H", - "hB" - ], - "TF": [ - "H", - "h", - "hB" - ], - "TG": [ - "H", - "hB" - ], - "TH": [ - "H", - "h" - ], - "TJ": [ - "H", - "h" - ], - "TL": [ - "H", - "hB", - "hb", - "h" - ], - "TM": [ - "H", - "h" - ], - "TN": [ - "h", - "hB", - "hb", - "H" - ], - "TO": [ - "h", - "H" - ], - "TR": [ - "H", - "hB" - ], - "TT": [ - "h", - "hb", - "H", - "hB" - ], - "TW": [ - "hB", - "hb", - "h", - "H" - ], - "TZ": [ - "hB", - "hb", - "H", - "h" - ], - "UA": [ - "H", - "hB", - "h" - ], - "UG": [ - "hB", - "hb", - "H", - "h" - ], - "UM": [ - "h", - "hb", - "H", - "hB" - ], - "US": [ - "h", - "hb", - "H", - "hB" - ], - "UY": [ - "H", - "h", - "hB", - "hb" - ], - "UZ": [ - "H", - "hB", - "h" - ], - "VA": [ - "H", - "h", - "hB" - ], - "VC": [ - "h", - "hb", - "H", - "hB" - ], - "VE": [ - "h", - "H", - "hB", - "hb" - ], - "VG": [ - "h", - "hb", - "H", - "hB" - ], - "VI": [ - "h", - "hb", - "H", - "hB" - ], - "VN": [ - "H", - "h" - ], - "VU": [ - "h", - "H" - ], - "WF": [ - "H", - "hB" - ], - "WS": [ - "h", - "H" - ], - "XK": [ - "H", - "hB", - "h" - ], - "YE": [ - "h", - "hB", - "hb", - "H" - ], - "YT": [ - "H", - "hB" - ], - "ZA": [ - "H", - "h", - "hb", - "hB" - ], - "ZM": [ - "h", - "hb", - "H", - "hB" - ], - "ZW": [ - "H", - "h" - ], - "af-ZA": [ - "H", - "h", - "hB", - "hb" - ], - "ar-001": [ - "h", - "hB", - "hb", - "H" - ], - "ca-ES": [ - "H", - "h", - "hB" - ], - "en-001": [ - "h", - "hb", - "H", - "hB" - ], - "es-BO": [ - "H", - "h", - "hB", - "hb" - ], - "es-BR": [ - "H", - "h", - "hB", - "hb" - ], - "es-EC": [ - "H", - "h", - "hB", - "hb" - ], - "es-ES": [ - "H", - "h", - "hB", - "hb" - ], - "es-GQ": [ - "H", - "h", - "hB", - "hb" - ], - "es-PE": [ - "H", - "h", - "hB", - "hb" - ], - "fr-CA": [ - "H", - "h", - "hB" - ], - "gl-ES": [ - "H", - "h", - "hB" - ], - "gu-IN": [ - "hB", - "hb", - "h", - "H" - ], - "hi-IN": [ - "hB", - "h", - "H" - ], - "it-CH": [ - "H", - "h", - "hB" - ], - "it-IT": [ - "H", - "h", - "hB" - ], - "kn-IN": [ - "hB", - "h", - "H" - ], - "ml-IN": [ - "hB", - "h", - "H" - ], - "mr-IN": [ - "hB", - "hb", - "h", - "H" - ], - "pa-IN": [ - "hB", - "hb", - "h", - "H" - ], - "ta-IN": [ - "hB", - "h", - "hb", - "H" - ], - "te-IN": [ - "hB", - "h", - "H" - ], - "zu-ZA": [ - "H", - "hB", - "hb", - "h" - ] -}; - -/** - * Returns the best matching date time pattern if a date time skeleton - * pattern is provided with a locale. Follows the Unicode specification: - * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns - * @param skeleton date time skeleton pattern that possibly includes j, J or C - * @param locale - */ -function getBestPattern(skeleton, locale) { - var skeletonCopy = ''; - for (var patternPos = 0; patternPos < skeleton.length; patternPos++) { - var patternChar = skeleton.charAt(patternPos); - if (patternChar === 'j') { - var extraLength = 0; - while (patternPos + 1 < skeleton.length && - skeleton.charAt(patternPos + 1) === patternChar) { - extraLength++; - patternPos++; - } - var hourLen = 1 + (extraLength & 1); - var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1); - var dayPeriodChar = 'a'; - var hourChar = getDefaultHourSymbolFromLocale(locale); - if (hourChar == 'H' || hourChar == 'k') { - dayPeriodLen = 0; - } - while (dayPeriodLen-- > 0) { - skeletonCopy += dayPeriodChar; - } - while (hourLen-- > 0) { - skeletonCopy = hourChar + skeletonCopy; - } - } - else if (patternChar === 'J') { - skeletonCopy += 'H'; - } - else { - skeletonCopy += patternChar; - } - } - return skeletonCopy; -} -/** - * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle) - * of the given `locale` to the corresponding time pattern. - * @param locale - */ -function getDefaultHourSymbolFromLocale(locale) { - var hourCycle = locale.hourCycle; - if (hourCycle === undefined && - // @ts-ignore hourCycle(s) is not identified yet - locale.hourCycles && - // @ts-ignore - locale.hourCycles.length) { - // @ts-ignore - hourCycle = locale.hourCycles[0]; - } - if (hourCycle) { - switch (hourCycle) { - case 'h24': - return 'k'; - case 'h23': - return 'H'; - case 'h12': - return 'h'; - case 'h11': - return 'K'; - default: - throw new Error('Invalid hourCycle'); - } - } - // TODO: Once hourCycle is fully supported remove the following with data generation - var languageTag = locale.language; - var regionTag; - if (languageTag !== 'root') { - regionTag = locale.maximize().region; - } - var hourCycles = timeData[regionTag || ''] || - timeData[languageTag || ''] || - timeData["".concat(languageTag, "-001")] || - timeData['001']; - return hourCycles[0]; -} - -var _a; -var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(SPACE_SEPARATOR_REGEX.source, "*")); -var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(SPACE_SEPARATOR_REGEX.source, "*$")); -function createLocation(start, end) { - return { start: start, end: end }; -} -// #region Ponyfills -// Consolidate these variables up top for easier toggling during debugging -var hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1); -var hasNativeFromCodePoint = !!String.fromCodePoint; -var hasNativeFromEntries = !!Object.fromEntries; -var hasNativeCodePointAt = !!String.prototype.codePointAt; -var hasTrimStart = !!String.prototype.trimStart; -var hasTrimEnd = !!String.prototype.trimEnd; -var hasNativeIsSafeInteger = !!Number.isSafeInteger; -var isSafeInteger = hasNativeIsSafeInteger - ? Number.isSafeInteger - : function (n) { - return (typeof n === 'number' && - isFinite(n) && - Math.floor(n) === n && - Math.abs(n) <= 0x1fffffffffffff); - }; -// IE11 does not support y and u. -var REGEX_SUPPORTS_U_AND_Y = true; -try { - var re = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu'); - /** - * legacy Edge or Xbox One browser - * Unicode flag support: supported - * Pattern_Syntax support: not supported - * See https://github.com/formatjs/formatjs/issues/2822 - */ - REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a'; -} -catch (_) { - REGEX_SUPPORTS_U_AND_Y = false; -} -var startsWith = hasNativeStartsWith - ? // Native - function startsWith(s, search, position) { - return s.startsWith(search, position); - } - : // For IE11 - function startsWith(s, search, position) { - return s.slice(position, position + search.length) === search; - }; -var fromCodePoint = hasNativeFromCodePoint - ? String.fromCodePoint - : // IE11 - function fromCodePoint() { - var codePoints = []; - for (var _i = 0; _i < arguments.length; _i++) { - codePoints[_i] = arguments[_i]; - } - var elements = ''; - var length = codePoints.length; - var i = 0; - var code; - while (length > i) { - code = codePoints[i++]; - if (code > 0x10ffff) - throw RangeError(code + ' is not a valid code point'); - elements += - code < 0x10000 - ? String.fromCharCode(code) - : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00); - } - return elements; - }; -var fromEntries = -// native -hasNativeFromEntries - ? Object.fromEntries - : // Ponyfill - function fromEntries(entries) { - var obj = {}; - for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { - var _a = entries_1[_i], k = _a[0], v = _a[1]; - obj[k] = v; - } - return obj; - }; -var codePointAt = hasNativeCodePointAt - ? // Native - function codePointAt(s, index) { - return s.codePointAt(index); - } - : // IE 11 - function codePointAt(s, index) { - var size = s.length; - if (index < 0 || index >= size) { - return undefined; - } - var first = s.charCodeAt(index); - var second; - return first < 0xd800 || - first > 0xdbff || - index + 1 === size || - (second = s.charCodeAt(index + 1)) < 0xdc00 || - second > 0xdfff - ? first - : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000; - }; -var trimStart = hasTrimStart - ? // Native - function trimStart(s) { - return s.trimStart(); - } - : // Ponyfill - function trimStart(s) { - return s.replace(SPACE_SEPARATOR_START_REGEX, ''); - }; -var trimEnd = hasTrimEnd - ? // Native - function trimEnd(s) { - return s.trimEnd(); - } - : // Ponyfill - function trimEnd(s) { - return s.replace(SPACE_SEPARATOR_END_REGEX, ''); - }; -// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11. -function RE(s, flag) { - return new RegExp(s, flag); -} -// #endregion -var matchIdentifierAtIndex; -if (REGEX_SUPPORTS_U_AND_Y) { - // Native - var IDENTIFIER_PREFIX_RE_1 = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu'); - matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) { - var _a; - IDENTIFIER_PREFIX_RE_1.lastIndex = index; - var match = IDENTIFIER_PREFIX_RE_1.exec(s); - return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; - }; -} -else { - // IE11 - matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) { - var match = []; - while (true) { - var c = codePointAt(s, index); - if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) { - break; - } - match.push(c); - index += c >= 0x10000 ? 2 : 1; - } - return fromCodePoint.apply(void 0, match); - }; -} -var Parser = /** @class */ (function () { - function Parser(message, options) { - if (options === void 0) { options = {}; } - this.message = message; - this.position = { offset: 0, line: 1, column: 1 }; - this.ignoreTag = !!options.ignoreTag; - this.locale = options.locale; - this.requiresOtherClause = !!options.requiresOtherClause; - this.shouldParseSkeletons = !!options.shouldParseSkeletons; - } - Parser.prototype.parse = function () { - if (this.offset() !== 0) { - throw Error('parser can only be used once'); - } - return this.parseMessage(0, '', false); - }; - Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) { - var elements = []; - while (!this.isEOF()) { - var char = this.char(); - if (char === 123 /* `{` */) { - var result = this.parseArgument(nestingLevel, expectingCloseTag); - if (result.err) { - return result; - } - elements.push(result.val); - } - else if (char === 125 /* `}` */ && nestingLevel > 0) { - break; - } - else if (char === 35 /* `#` */ && - (parentArgType === 'plural' || parentArgType === 'selectordinal')) { - var position = this.clonePosition(); - this.bump(); - elements.push({ - type: TYPE.pound, - location: createLocation(position, this.clonePosition()), - }); - } - else if (char === 60 /* `<` */ && - !this.ignoreTag && - this.peek() === 47 // char code for '/' - ) { - if (expectingCloseTag) { - break; - } - else { - return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition())); - } - } - else if (char === 60 /* `<` */ && - !this.ignoreTag && - _isAlpha(this.peek() || 0)) { - var result = this.parseTag(nestingLevel, parentArgType); - if (result.err) { - return result; - } - elements.push(result.val); - } - else { - var result = this.parseLiteral(nestingLevel, parentArgType); - if (result.err) { - return result; - } - elements.push(result.val); - } - } - return { val: elements, err: null }; - }; - /** - * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the - * [custom element name][] except that a dash is NOT always mandatory and uppercase letters - * are accepted: - * - * ``` - * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" - * tagName ::= [a-z] (PENChar)* - * PENChar ::= - * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] | - * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] | - * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] - * ``` - * - * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name - * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do - * since other tag-based engines like React allow it - */ - Parser.prototype.parseTag = function (nestingLevel, parentArgType) { - var startPosition = this.clonePosition(); - this.bump(); // `<` - var tagName = this.parseTagName(); - this.bumpSpace(); - if (this.bumpIf('/>')) { - // Self closing tag - return { - val: { - type: TYPE.literal, - value: "<".concat(tagName, "/>"), - location: createLocation(startPosition, this.clonePosition()), - }, - err: null, - }; - } - else if (this.bumpIf('>')) { - var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true); - if (childrenResult.err) { - return childrenResult; - } - var children = childrenResult.val; - // Expecting a close tag - var endTagStartPosition = this.clonePosition(); - if (this.bumpIf('')) { - return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition())); - } - return { - val: { - type: TYPE.tag, - value: tagName, - children: children, - location: createLocation(startPosition, this.clonePosition()), - }, - err: null, - }; - } - else { - return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition())); - } - } - else { - return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition())); - } - }; - /** - * This method assumes that the caller has peeked ahead for the first tag character. - */ - Parser.prototype.parseTagName = function () { - var startOffset = this.offset(); - this.bump(); // the first tag name character - while (!this.isEOF() && _isPotentialElementNameChar(this.char())) { - this.bump(); - } - return this.message.slice(startOffset, this.offset()); - }; - Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) { - var start = this.clonePosition(); - var value = ''; - while (true) { - var parseQuoteResult = this.tryParseQuote(parentArgType); - if (parseQuoteResult) { - value += parseQuoteResult; - continue; - } - var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType); - if (parseUnquotedResult) { - value += parseUnquotedResult; - continue; - } - var parseLeftAngleResult = this.tryParseLeftAngleBracket(); - if (parseLeftAngleResult) { - value += parseLeftAngleResult; - continue; - } - break; - } - var location = createLocation(start, this.clonePosition()); - return { - val: { type: TYPE.literal, value: value, location: location }, - err: null, - }; - }; - Parser.prototype.tryParseLeftAngleBracket = function () { - if (!this.isEOF() && - this.char() === 60 /* `<` */ && - (this.ignoreTag || - // If at the opening tag or closing tag position, bail. - !_isAlphaOrSlash(this.peek() || 0))) { - this.bump(); // `<` - return '<'; - } - return null; - }; - /** - * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes - * a character that requires quoting (that is, "only where needed"), and works the same in - * nested messages as on the top level of the pattern. The new behavior is otherwise compatible. - */ - Parser.prototype.tryParseQuote = function (parentArgType) { - if (this.isEOF() || this.char() !== 39 /* `'` */) { - return null; - } - // Parse escaped char following the apostrophe, or early return if there is no escaped char. - // Check if is valid escaped character - switch (this.peek()) { - case 39 /* `'` */: - // double quote, should return as a single quote. - this.bump(); - this.bump(); - return "'"; - // '{', '<', '>', '}' - case 123: - case 60: - case 62: - case 125: - break; - case 35: // '#' - if (parentArgType === 'plural' || parentArgType === 'selectordinal') { - break; - } - return null; - default: - return null; - } - this.bump(); // apostrophe - var codePoints = [this.char()]; // escaped char - this.bump(); - // read chars until the optional closing apostrophe is found - while (!this.isEOF()) { - var ch = this.char(); - if (ch === 39 /* `'` */) { - if (this.peek() === 39 /* `'` */) { - codePoints.push(39); - // Bump one more time because we need to skip 2 characters. - this.bump(); - } - else { - // Optional closing apostrophe. - this.bump(); - break; - } - } - else { - codePoints.push(ch); - } - this.bump(); - } - return fromCodePoint.apply(void 0, codePoints); - }; - Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) { - if (this.isEOF()) { - return null; - } - var ch = this.char(); - if (ch === 60 /* `<` */ || - ch === 123 /* `{` */ || - (ch === 35 /* `#` */ && - (parentArgType === 'plural' || parentArgType === 'selectordinal')) || - (ch === 125 /* `}` */ && nestingLevel > 0)) { - return null; - } - else { - this.bump(); - return fromCodePoint(ch); - } - }; - Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) { - var openingBracePosition = this.clonePosition(); - this.bump(); // `{` - this.bumpSpace(); - if (this.isEOF()) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - if (this.char() === 125 /* `}` */) { - this.bump(); - return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); - } - // argument name - var value = this.parseIdentifierIfPossible().value; - if (!value) { - return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); - } - this.bumpSpace(); - if (this.isEOF()) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - switch (this.char()) { - // Simple argument: `{name}` - case 125 /* `}` */: { - this.bump(); // `}` - return { - val: { - type: TYPE.argument, - // value does not include the opening and closing braces. - value: value, - location: createLocation(openingBracePosition, this.clonePosition()), - }, - err: null, - }; - } - // Argument with options: `{name, format, ...}` - case 44 /* `,` */: { - this.bump(); // `,` - this.bumpSpace(); - if (this.isEOF()) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition); - } - default: - return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); - } - }; - /** - * Advance the parser until the end of the identifier, if it is currently on - * an identifier character. Return an empty string otherwise. - */ - Parser.prototype.parseIdentifierIfPossible = function () { - var startingPosition = this.clonePosition(); - var startOffset = this.offset(); - var value = matchIdentifierAtIndex(this.message, startOffset); - var endOffset = startOffset + value.length; - this.bumpTo(endOffset); - var endPosition = this.clonePosition(); - var location = createLocation(startingPosition, endPosition); - return { value: value, location: location }; - }; - Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) { - var _a; - // Parse this range: - // {name, type, style} - // ^---^ - var typeStartPosition = this.clonePosition(); - var argType = this.parseIdentifierIfPossible().value; - var typeEndPosition = this.clonePosition(); - switch (argType) { - case '': - // Expecting a style string number, date, time, plural, selectordinal, or select. - return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition)); - case 'number': - case 'date': - case 'time': { - // Parse this range: - // {name, number, style} - // ^-------^ - this.bumpSpace(); - var styleAndLocation = null; - if (this.bumpIf(',')) { - this.bumpSpace(); - var styleStartPosition = this.clonePosition(); - var result = this.parseSimpleArgStyleIfPossible(); - if (result.err) { - return result; - } - var style = trimEnd(result.val); - if (style.length === 0) { - return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition())); - } - var styleLocation = createLocation(styleStartPosition, this.clonePosition()); - styleAndLocation = { style: style, styleLocation: styleLocation }; - } - var argCloseResult = this.tryParseArgumentClose(openingBracePosition); - if (argCloseResult.err) { - return argCloseResult; - } - var location_1 = createLocation(openingBracePosition, this.clonePosition()); - // Extract style or skeleton - if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) { - // Skeleton starts with `::`. - var skeleton = trimStart(styleAndLocation.style.slice(2)); - if (argType === 'number') { - var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation); - if (result.err) { - return result; - } - return { - val: { type: TYPE.number, value: value, location: location_1, style: result.val }, - err: null, - }; - } - else { - if (skeleton.length === 0) { - return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1); - } - var dateTimePattern = skeleton; - // Get "best match" pattern only if locale is passed, if not, let it - // pass as-is where `parseDateTimeSkeleton()` will throw an error - // for unsupported patterns. - if (this.locale) { - dateTimePattern = getBestPattern(skeleton, this.locale); - } - var style = { - type: SKELETON_TYPE.dateTime, - pattern: dateTimePattern, - location: styleAndLocation.styleLocation, - parsedOptions: this.shouldParseSkeletons - ? parseDateTimeSkeleton(dateTimePattern) - : {}, - }; - var type = argType === 'date' ? TYPE.date : TYPE.time; - return { - val: { type: type, value: value, location: location_1, style: style }, - err: null, - }; - } - } - // Regular style or no style. - return { - val: { - type: argType === 'number' - ? TYPE.number - : argType === 'date' - ? TYPE.date - : TYPE.time, - value: value, - location: location_1, - style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null, - }, - err: null, - }; - } - case 'plural': - case 'selectordinal': - case 'select': { - // Parse this range: - // {name, plural, options} - // ^---------^ - var typeEndPosition_1 = this.clonePosition(); - this.bumpSpace(); - if (!this.bumpIf(',')) { - return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1))); - } - this.bumpSpace(); - // Parse offset: - // {name, plural, offset:1, options} - // ^-----^ - // - // or the first option: - // - // {name, plural, one {...} other {...}} - // ^--^ - var identifierAndLocation = this.parseIdentifierIfPossible(); - var pluralOffset = 0; - if (argType !== 'select' && identifierAndLocation.value === 'offset') { - if (!this.bumpIf(':')) { - return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition())); - } - this.bumpSpace(); - var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE); - if (result.err) { - return result; - } - // Parse another identifier for option parsing - this.bumpSpace(); - identifierAndLocation = this.parseIdentifierIfPossible(); - pluralOffset = result.val; - } - var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation); - if (optionsResult.err) { - return optionsResult; - } - var argCloseResult = this.tryParseArgumentClose(openingBracePosition); - if (argCloseResult.err) { - return argCloseResult; - } - var location_2 = createLocation(openingBracePosition, this.clonePosition()); - if (argType === 'select') { - return { - val: { - type: TYPE.select, - value: value, - options: fromEntries(optionsResult.val), - location: location_2, - }, - err: null, - }; - } - else { - return { - val: { - type: TYPE.plural, - value: value, - options: fromEntries(optionsResult.val), - offset: pluralOffset, - pluralType: argType === 'plural' ? 'cardinal' : 'ordinal', - location: location_2, - }, - err: null, - }; - } - } - default: - return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition)); - } - }; - Parser.prototype.tryParseArgumentClose = function (openingBracePosition) { - // Parse: {value, number, ::currency/GBP } - // - if (this.isEOF() || this.char() !== 125 /* `}` */) { - return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); - } - this.bump(); // `}` - return { val: true, err: null }; - }; - /** - * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659 - */ - Parser.prototype.parseSimpleArgStyleIfPossible = function () { - var nestedBraces = 0; - var startPosition = this.clonePosition(); - while (!this.isEOF()) { - var ch = this.char(); - switch (ch) { - case 39 /* `'` */: { - // Treat apostrophe as quoting but include it in the style part. - // Find the end of the quoted literal text. - this.bump(); - var apostrophePosition = this.clonePosition(); - if (!this.bumpUntil("'")) { - return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition())); - } - this.bump(); - break; - } - case 123 /* `{` */: { - nestedBraces += 1; - this.bump(); - break; - } - case 125 /* `}` */: { - if (nestedBraces > 0) { - nestedBraces -= 1; - } - else { - return { - val: this.message.slice(startPosition.offset, this.offset()), - err: null, - }; - } - break; - } - default: - this.bump(); - break; - } - } - return { - val: this.message.slice(startPosition.offset, this.offset()), - err: null, - }; - }; - Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) { - var tokens = []; - try { - tokens = parseNumberSkeletonFromString(skeleton); - } - catch (e) { - return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location); - } - return { - val: { - type: SKELETON_TYPE.number, - tokens: tokens, - location: location, - parsedOptions: this.shouldParseSkeletons - ? parseNumberSkeleton(tokens) - : {}, - }, - err: null, - }; - }; - /** - * @param nesting_level The current nesting level of messages. - * This can be positive when parsing message fragment in select or plural argument options. - * @param parent_arg_type The parent argument's type. - * @param parsed_first_identifier If provided, this is the first identifier-like selector of - * the argument. It is a by-product of a previous parsing attempt. - * @param expecting_close_tag If true, this message is directly or indirectly nested inside - * between a pair of opening and closing tags. The nested message will not parse beyond - * the closing tag boundary. - */ - Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) { - var _a; - var hasOtherClause = false; - var options = []; - var parsedSelectors = new Set(); - var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location; - // Parse: - // one {one apple} - // ^--^ - while (true) { - if (selector.length === 0) { - var startPosition = this.clonePosition(); - if (parentArgType !== 'select' && this.bumpIf('=')) { - // Try parse `={number}` selector - var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR); - if (result.err) { - return result; - } - selectorLocation = createLocation(startPosition, this.clonePosition()); - selector = this.message.slice(startPosition.offset, this.offset()); - } - else { - break; - } - } - // Duplicate selector clauses - if (parsedSelectors.has(selector)) { - return this.error(parentArgType === 'select' - ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR - : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation); - } - if (selector === 'other') { - hasOtherClause = true; - } - // Parse: - // one {one apple} - // ^----------^ - this.bumpSpace(); - var openingBracePosition = this.clonePosition(); - if (!this.bumpIf('{')) { - return this.error(parentArgType === 'select' - ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT - : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition())); - } - var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag); - if (fragmentResult.err) { - return fragmentResult; - } - var argCloseResult = this.tryParseArgumentClose(openingBracePosition); - if (argCloseResult.err) { - return argCloseResult; - } - options.push([ - selector, - { - value: fragmentResult.val, - location: createLocation(openingBracePosition, this.clonePosition()), - }, - ]); - // Keep track of the existing selectors - parsedSelectors.add(selector); - // Prep next selector clause. - this.bumpSpace(); - (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location); - } - if (options.length === 0) { - return this.error(parentArgType === 'select' - ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR - : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition())); - } - if (this.requiresOtherClause && !hasOtherClause) { - return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition())); - } - return { val: options, err: null }; - }; - Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) { - var sign = 1; - var startingPosition = this.clonePosition(); - if (this.bumpIf('+')) ; - else if (this.bumpIf('-')) { - sign = -1; - } - var hasDigits = false; - var decimal = 0; - while (!this.isEOF()) { - var ch = this.char(); - if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) { - hasDigits = true; - decimal = decimal * 10 + (ch - 48); - this.bump(); - } - else { - break; - } - } - var location = createLocation(startingPosition, this.clonePosition()); - if (!hasDigits) { - return this.error(expectNumberError, location); - } - decimal *= sign; - if (!isSafeInteger(decimal)) { - return this.error(invalidNumberError, location); - } - return { val: decimal, err: null }; - }; - Parser.prototype.offset = function () { - return this.position.offset; - }; - Parser.prototype.isEOF = function () { - return this.offset() === this.message.length; - }; - Parser.prototype.clonePosition = function () { - // This is much faster than `Object.assign` or spread. - return { - offset: this.position.offset, - line: this.position.line, - column: this.position.column, - }; - }; - /** - * Return the code point at the current position of the parser. - * Throws if the index is out of bound. - */ - Parser.prototype.char = function () { - var offset = this.position.offset; - if (offset >= this.message.length) { - throw Error('out of bound'); - } - var code = codePointAt(this.message, offset); - if (code === undefined) { - throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary")); - } - return code; - }; - Parser.prototype.error = function (kind, location) { - return { - val: null, - err: { - kind: kind, - message: this.message, - location: location, - }, - }; - }; - /** Bump the parser to the next UTF-16 code unit. */ - Parser.prototype.bump = function () { - if (this.isEOF()) { - return; - } - var code = this.char(); - if (code === 10 /* '\n' */) { - this.position.line += 1; - this.position.column = 1; - this.position.offset += 1; - } - else { - this.position.column += 1; - // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair. - this.position.offset += code < 0x10000 ? 1 : 2; - } - }; - /** - * If the substring starting at the current position of the parser has - * the given prefix, then bump the parser to the character immediately - * following the prefix and return true. Otherwise, don't bump the parser - * and return false. - */ - Parser.prototype.bumpIf = function (prefix) { - if (startsWith(this.message, prefix, this.offset())) { - for (var i = 0; i < prefix.length; i++) { - this.bump(); - } - return true; - } - return false; - }; - /** - * Bump the parser until the pattern character is found and return `true`. - * Otherwise bump to the end of the file and return `false`. - */ - Parser.prototype.bumpUntil = function (pattern) { - var currentOffset = this.offset(); - var index = this.message.indexOf(pattern, currentOffset); - if (index >= 0) { - this.bumpTo(index); - return true; - } - else { - this.bumpTo(this.message.length); - return false; - } - }; - /** - * Bump the parser to the target offset. - * If target offset is beyond the end of the input, bump the parser to the end of the input. - */ - Parser.prototype.bumpTo = function (targetOffset) { - if (this.offset() > targetOffset) { - throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset())); - } - targetOffset = Math.min(targetOffset, this.message.length); - while (true) { - var offset = this.offset(); - if (offset === targetOffset) { - break; - } - if (offset > targetOffset) { - throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary")); - } - this.bump(); - if (this.isEOF()) { - break; - } - } - }; - /** advance the parser through all whitespace to the next non-whitespace code unit. */ - Parser.prototype.bumpSpace = function () { - while (!this.isEOF() && _isWhiteSpace(this.char())) { - this.bump(); - } - }; - /** - * Peek at the *next* Unicode codepoint in the input without advancing the parser. - * If the input has been exhausted, then this returns null. - */ - Parser.prototype.peek = function () { - if (this.isEOF()) { - return null; - } - var code = this.char(); - var offset = this.offset(); - var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1)); - return nextCode !== null && nextCode !== void 0 ? nextCode : null; - }; - return Parser; -}()); -/** - * This check if codepoint is alphabet (lower & uppercase) - * @param codepoint - * @returns - */ -function _isAlpha(codepoint) { - return ((codepoint >= 97 && codepoint <= 122) || - (codepoint >= 65 && codepoint <= 90)); -} -function _isAlphaOrSlash(codepoint) { - return _isAlpha(codepoint) || codepoint === 47; /* '/' */ -} -/** See `parseTag` function docs. */ -function _isPotentialElementNameChar(c) { - return (c === 45 /* '-' */ || - c === 46 /* '.' */ || - (c >= 48 && c <= 57) /* 0..9 */ || - c === 95 /* '_' */ || - (c >= 97 && c <= 122) /** a..z */ || - (c >= 65 && c <= 90) /* A..Z */ || - c == 0xb7 || - (c >= 0xc0 && c <= 0xd6) || - (c >= 0xd8 && c <= 0xf6) || - (c >= 0xf8 && c <= 0x37d) || - (c >= 0x37f && c <= 0x1fff) || - (c >= 0x200c && c <= 0x200d) || - (c >= 0x203f && c <= 0x2040) || - (c >= 0x2070 && c <= 0x218f) || - (c >= 0x2c00 && c <= 0x2fef) || - (c >= 0x3001 && c <= 0xd7ff) || - (c >= 0xf900 && c <= 0xfdcf) || - (c >= 0xfdf0 && c <= 0xfffd) || - (c >= 0x10000 && c <= 0xeffff)); -} -/** - * Code point equivalent of regex `\p{White_Space}`. - * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt - */ -function _isWhiteSpace(c) { - return ((c >= 0x0009 && c <= 0x000d) || - c === 0x0020 || - c === 0x0085 || - (c >= 0x200e && c <= 0x200f) || - c === 0x2028 || - c === 0x2029); -} -/** - * Code point equivalent of regex `\p{Pattern_Syntax}`. - * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt - */ -function _isPatternSyntax(c) { - return ((c >= 0x0021 && c <= 0x0023) || - c === 0x0024 || - (c >= 0x0025 && c <= 0x0027) || - c === 0x0028 || - c === 0x0029 || - c === 0x002a || - c === 0x002b || - c === 0x002c || - c === 0x002d || - (c >= 0x002e && c <= 0x002f) || - (c >= 0x003a && c <= 0x003b) || - (c >= 0x003c && c <= 0x003e) || - (c >= 0x003f && c <= 0x0040) || - c === 0x005b || - c === 0x005c || - c === 0x005d || - c === 0x005e || - c === 0x0060 || - c === 0x007b || - c === 0x007c || - c === 0x007d || - c === 0x007e || - c === 0x00a1 || - (c >= 0x00a2 && c <= 0x00a5) || - c === 0x00a6 || - c === 0x00a7 || - c === 0x00a9 || - c === 0x00ab || - c === 0x00ac || - c === 0x00ae || - c === 0x00b0 || - c === 0x00b1 || - c === 0x00b6 || - c === 0x00bb || - c === 0x00bf || - c === 0x00d7 || - c === 0x00f7 || - (c >= 0x2010 && c <= 0x2015) || - (c >= 0x2016 && c <= 0x2017) || - c === 0x2018 || - c === 0x2019 || - c === 0x201a || - (c >= 0x201b && c <= 0x201c) || - c === 0x201d || - c === 0x201e || - c === 0x201f || - (c >= 0x2020 && c <= 0x2027) || - (c >= 0x2030 && c <= 0x2038) || - c === 0x2039 || - c === 0x203a || - (c >= 0x203b && c <= 0x203e) || - (c >= 0x2041 && c <= 0x2043) || - c === 0x2044 || - c === 0x2045 || - c === 0x2046 || - (c >= 0x2047 && c <= 0x2051) || - c === 0x2052 || - c === 0x2053 || - (c >= 0x2055 && c <= 0x205e) || - (c >= 0x2190 && c <= 0x2194) || - (c >= 0x2195 && c <= 0x2199) || - (c >= 0x219a && c <= 0x219b) || - (c >= 0x219c && c <= 0x219f) || - c === 0x21a0 || - (c >= 0x21a1 && c <= 0x21a2) || - c === 0x21a3 || - (c >= 0x21a4 && c <= 0x21a5) || - c === 0x21a6 || - (c >= 0x21a7 && c <= 0x21ad) || - c === 0x21ae || - (c >= 0x21af && c <= 0x21cd) || - (c >= 0x21ce && c <= 0x21cf) || - (c >= 0x21d0 && c <= 0x21d1) || - c === 0x21d2 || - c === 0x21d3 || - c === 0x21d4 || - (c >= 0x21d5 && c <= 0x21f3) || - (c >= 0x21f4 && c <= 0x22ff) || - (c >= 0x2300 && c <= 0x2307) || - c === 0x2308 || - c === 0x2309 || - c === 0x230a || - c === 0x230b || - (c >= 0x230c && c <= 0x231f) || - (c >= 0x2320 && c <= 0x2321) || - (c >= 0x2322 && c <= 0x2328) || - c === 0x2329 || - c === 0x232a || - (c >= 0x232b && c <= 0x237b) || - c === 0x237c || - (c >= 0x237d && c <= 0x239a) || - (c >= 0x239b && c <= 0x23b3) || - (c >= 0x23b4 && c <= 0x23db) || - (c >= 0x23dc && c <= 0x23e1) || - (c >= 0x23e2 && c <= 0x2426) || - (c >= 0x2427 && c <= 0x243f) || - (c >= 0x2440 && c <= 0x244a) || - (c >= 0x244b && c <= 0x245f) || - (c >= 0x2500 && c <= 0x25b6) || - c === 0x25b7 || - (c >= 0x25b8 && c <= 0x25c0) || - c === 0x25c1 || - (c >= 0x25c2 && c <= 0x25f7) || - (c >= 0x25f8 && c <= 0x25ff) || - (c >= 0x2600 && c <= 0x266e) || - c === 0x266f || - (c >= 0x2670 && c <= 0x2767) || - c === 0x2768 || - c === 0x2769 || - c === 0x276a || - c === 0x276b || - c === 0x276c || - c === 0x276d || - c === 0x276e || - c === 0x276f || - c === 0x2770 || - c === 0x2771 || - c === 0x2772 || - c === 0x2773 || - c === 0x2774 || - c === 0x2775 || - (c >= 0x2794 && c <= 0x27bf) || - (c >= 0x27c0 && c <= 0x27c4) || - c === 0x27c5 || - c === 0x27c6 || - (c >= 0x27c7 && c <= 0x27e5) || - c === 0x27e6 || - c === 0x27e7 || - c === 0x27e8 || - c === 0x27e9 || - c === 0x27ea || - c === 0x27eb || - c === 0x27ec || - c === 0x27ed || - c === 0x27ee || - c === 0x27ef || - (c >= 0x27f0 && c <= 0x27ff) || - (c >= 0x2800 && c <= 0x28ff) || - (c >= 0x2900 && c <= 0x2982) || - c === 0x2983 || - c === 0x2984 || - c === 0x2985 || - c === 0x2986 || - c === 0x2987 || - c === 0x2988 || - c === 0x2989 || - c === 0x298a || - c === 0x298b || - c === 0x298c || - c === 0x298d || - c === 0x298e || - c === 0x298f || - c === 0x2990 || - c === 0x2991 || - c === 0x2992 || - c === 0x2993 || - c === 0x2994 || - c === 0x2995 || - c === 0x2996 || - c === 0x2997 || - c === 0x2998 || - (c >= 0x2999 && c <= 0x29d7) || - c === 0x29d8 || - c === 0x29d9 || - c === 0x29da || - c === 0x29db || - (c >= 0x29dc && c <= 0x29fb) || - c === 0x29fc || - c === 0x29fd || - (c >= 0x29fe && c <= 0x2aff) || - (c >= 0x2b00 && c <= 0x2b2f) || - (c >= 0x2b30 && c <= 0x2b44) || - (c >= 0x2b45 && c <= 0x2b46) || - (c >= 0x2b47 && c <= 0x2b4c) || - (c >= 0x2b4d && c <= 0x2b73) || - (c >= 0x2b74 && c <= 0x2b75) || - (c >= 0x2b76 && c <= 0x2b95) || - c === 0x2b96 || - (c >= 0x2b97 && c <= 0x2bff) || - (c >= 0x2e00 && c <= 0x2e01) || - c === 0x2e02 || - c === 0x2e03 || - c === 0x2e04 || - c === 0x2e05 || - (c >= 0x2e06 && c <= 0x2e08) || - c === 0x2e09 || - c === 0x2e0a || - c === 0x2e0b || - c === 0x2e0c || - c === 0x2e0d || - (c >= 0x2e0e && c <= 0x2e16) || - c === 0x2e17 || - (c >= 0x2e18 && c <= 0x2e19) || - c === 0x2e1a || - c === 0x2e1b || - c === 0x2e1c || - c === 0x2e1d || - (c >= 0x2e1e && c <= 0x2e1f) || - c === 0x2e20 || - c === 0x2e21 || - c === 0x2e22 || - c === 0x2e23 || - c === 0x2e24 || - c === 0x2e25 || - c === 0x2e26 || - c === 0x2e27 || - c === 0x2e28 || - c === 0x2e29 || - (c >= 0x2e2a && c <= 0x2e2e) || - c === 0x2e2f || - (c >= 0x2e30 && c <= 0x2e39) || - (c >= 0x2e3a && c <= 0x2e3b) || - (c >= 0x2e3c && c <= 0x2e3f) || - c === 0x2e40 || - c === 0x2e41 || - c === 0x2e42 || - (c >= 0x2e43 && c <= 0x2e4f) || - (c >= 0x2e50 && c <= 0x2e51) || - c === 0x2e52 || - (c >= 0x2e53 && c <= 0x2e7f) || - (c >= 0x3001 && c <= 0x3003) || - c === 0x3008 || - c === 0x3009 || - c === 0x300a || - c === 0x300b || - c === 0x300c || - c === 0x300d || - c === 0x300e || - c === 0x300f || - c === 0x3010 || - c === 0x3011 || - (c >= 0x3012 && c <= 0x3013) || - c === 0x3014 || - c === 0x3015 || - c === 0x3016 || - c === 0x3017 || - c === 0x3018 || - c === 0x3019 || - c === 0x301a || - c === 0x301b || - c === 0x301c || - c === 0x301d || - (c >= 0x301e && c <= 0x301f) || - c === 0x3020 || - c === 0x3030 || - c === 0xfd3e || - c === 0xfd3f || - (c >= 0xfe45 && c <= 0xfe46)); -} - -function pruneLocation(els) { - els.forEach(function (el) { - delete el.location; - if (isSelectElement(el) || isPluralElement(el)) { - for (var k in el.options) { - delete el.options[k].location; - pruneLocation(el.options[k].value); - } - } - else if (isNumberElement(el) && isNumberSkeleton(el.style)) { - delete el.style.location; - } - else if ((isDateElement(el) || isTimeElement(el)) && - isDateTimeSkeleton(el.style)) { - delete el.style.location; - } - else if (isTagElement(el)) { - pruneLocation(el.children); - } - }); -} -function parse(message, opts) { - if (opts === void 0) { opts = {}; } - opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts); - var result = new Parser(message, opts).parse(); - if (result.err) { - var error = SyntaxError(ErrorKind[result.err.kind]); - // @ts-expect-error Assign to error object - error.location = result.err.location; - // @ts-expect-error Assign to error object - error.originalMessage = result.err.message; - throw error; - } - if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) { - pruneLocation(result.val); - } - 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 - ErrorCode["MISSING_VALUE"] = "MISSING_VALUE"; - // When value supplied is invalid - ErrorCode["INVALID_VALUE"] = "INVALID_VALUE"; - // When we need specific Intl API but it's not available - ErrorCode["MISSING_INTL_API"] = "MISSING_INTL_API"; -})(ErrorCode || (ErrorCode = {})); -var FormatError = /** @class */ (function (_super) { - __extends(FormatError, _super); - function FormatError(msg, code, originalMessage) { - var _this = _super.call(this, msg) || this; - _this.code = code; - _this.originalMessage = originalMessage; - return _this; - } - FormatError.prototype.toString = function () { - return "[formatjs Error: ".concat(this.code, "] ").concat(this.message); - }; - return FormatError; -}(Error)); -var InvalidValueError = /** @class */ (function (_super) { - __extends(InvalidValueError, _super); - function InvalidValueError(variableId, value, options, originalMessage) { - return _super.call(this, "Invalid values for \"".concat(variableId, "\": \"").concat(value, "\". Options are \"").concat(Object.keys(options).join('", "'), "\""), ErrorCode.INVALID_VALUE, originalMessage) || this; - } - return InvalidValueError; -}(FormatError)); -var InvalidValueTypeError = /** @class */ (function (_super) { - __extends(InvalidValueTypeError, _super); - function InvalidValueTypeError(value, type, originalMessage) { - return _super.call(this, "Value for \"".concat(value, "\" must be of type ").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this; - } - return InvalidValueTypeError; -}(FormatError)); -var MissingValueError = /** @class */ (function (_super) { - __extends(MissingValueError, _super); - function MissingValueError(variableId, originalMessage) { - return _super.call(this, "The intl string context variable \"".concat(variableId, "\" was not provided to the string \"").concat(originalMessage, "\""), ErrorCode.MISSING_VALUE, originalMessage) || this; - } - return MissingValueError; -}(FormatError)); - -var PART_TYPE; -(function (PART_TYPE) { - PART_TYPE[PART_TYPE["literal"] = 0] = "literal"; - PART_TYPE[PART_TYPE["object"] = 1] = "object"; -})(PART_TYPE || (PART_TYPE = {})); -function mergeLiteral(parts) { - if (parts.length < 2) { - return parts; - } - return parts.reduce(function (all, part) { - var lastPart = all[all.length - 1]; - if (!lastPart || - lastPart.type !== PART_TYPE.literal || - part.type !== PART_TYPE.literal) { - all.push(part); - } - else { - lastPart.value += part.value; - } - return all; - }, []); -} -function isFormatXMLElementFn(el) { - return typeof el === 'function'; -} -// TODO(skeleton): add skeleton support -function formatToParts(els, locales, formatters, formats, values, currentPluralValue, -// For debugging -originalMessage) { - // Hot path for straight simple msg translations - if (els.length === 1 && isLiteralElement(els[0])) { - return [ - { - type: PART_TYPE.literal, - value: els[0].value, - }, - ]; - } - var result = []; - for (var _i = 0, els_1 = els; _i < els_1.length; _i++) { - var el = els_1[_i]; - // Exit early for string parts. - if (isLiteralElement(el)) { - result.push({ - type: PART_TYPE.literal, - value: el.value, - }); - continue; - } - // TODO: should this part be literal type? - // Replace `#` in plural rules with the actual numeric value. - if (isPoundElement(el)) { - if (typeof currentPluralValue === 'number') { - result.push({ - type: PART_TYPE.literal, - value: formatters.getNumberFormat(locales).format(currentPluralValue), - }); - } - continue; - } - var varName = el.value; - // Enforce that all required values are provided by the caller. - if (!(values && varName in values)) { - throw new MissingValueError(varName, originalMessage); - } - var value = values[varName]; - if (isArgumentElement(el)) { - if (!value || typeof value === 'string' || typeof value === 'number') { - value = - typeof value === 'string' || typeof value === 'number' - ? String(value) - : ''; - } - result.push({ - type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object, - value: value, - }); - continue; - } - // Recursively format plural and select parts' option — which can be a - // nested pattern structure. The choosing of the option to use is - // abstracted-by and delegated-to the part helper object. - if (isDateElement(el)) { - var style = typeof el.style === 'string' - ? formats.date[el.style] - : isDateTimeSkeleton(el.style) - ? el.style.parsedOptions - : undefined; - result.push({ - type: PART_TYPE.literal, - value: formatters - .getDateTimeFormat(locales, style) - .format(value), - }); - continue; - } - if (isTimeElement(el)) { - var style = typeof el.style === 'string' - ? formats.time[el.style] - : isDateTimeSkeleton(el.style) - ? el.style.parsedOptions - : formats.time.medium; - result.push({ - type: PART_TYPE.literal, - value: formatters - .getDateTimeFormat(locales, style) - .format(value), - }); - continue; - } - if (isNumberElement(el)) { - var style = typeof el.style === 'string' - ? formats.number[el.style] - : isNumberSkeleton(el.style) - ? el.style.parsedOptions - : undefined; - if (style && style.scale) { - value = - value * - (style.scale || 1); - } - result.push({ - type: PART_TYPE.literal, - value: formatters - .getNumberFormat(locales, style) - .format(value), - }); - continue; - } - if (isTagElement(el)) { - var children = el.children, value_1 = el.value; - var formatFn = values[value_1]; - if (!isFormatXMLElementFn(formatFn)) { - throw new InvalidValueTypeError(value_1, 'function', originalMessage); - } - var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue); - var chunks = formatFn(parts.map(function (p) { return p.value; })); - if (!Array.isArray(chunks)) { - chunks = [chunks]; - } - result.push.apply(result, chunks.map(function (c) { - return { - type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object, - value: c, - }; - })); - } - if (isSelectElement(el)) { - var opt = el.options[value] || el.options.other; - if (!opt) { - throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage); - } - result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values)); - continue; - } - if (isPluralElement(el)) { - var opt = el.options["=".concat(value)]; - if (!opt) { - if (!Intl.PluralRules) { - throw new FormatError("Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n", ErrorCode.MISSING_INTL_API, originalMessage); - } - var rule = formatters - .getPluralRules(locales, { type: el.pluralType }) - .select(value - (el.offset || 0)); - opt = el.options[rule] || el.options.other; - } - if (!opt) { - throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage); - } - result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0))); - continue; - } - } - return mergeLiteral(result); -} - -/* -Copyright (c) 2014, Yahoo! Inc. All rights reserved. -Copyrights licensed under the New BSD License. -See the accompanying LICENSE file for terms. -*/ -// -- MessageFormat -------------------------------------------------------- -function mergeConfig(c1, c2) { - if (!c2) { - return c1; - } - return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) { - all[k] = __assign(__assign({}, c1[k]), (c2[k] || {})); - return all; - }, {})); -} -function mergeConfigs(defaultConfig, configs) { - if (!configs) { - return defaultConfig; - } - return Object.keys(defaultConfig).reduce(function (all, k) { - all[k] = mergeConfig(defaultConfig[k], configs[k]); - return all; - }, __assign({}, defaultConfig)); -} -function createFastMemoizeCache(store) { - return { - create: function () { - return { - get: function (key) { - return store[key]; - }, - set: function (key, value) { - store[key] = value; - }, - }; - }, - }; -} -function createDefaultFormatters(cache) { - if (cache === void 0) { cache = { - number: {}, - dateTime: {}, - pluralRules: {}, - }; } - return { - getNumberFormat: memoize(function () { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))(); - }, { - cache: createFastMemoizeCache(cache.number), - strategy: strategies.variadic, - }), - getDateTimeFormat: memoize(function () { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))(); - }, { - cache: createFastMemoizeCache(cache.dateTime), - strategy: strategies.variadic, - }), - getPluralRules: memoize(function () { - var _a; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))(); - }, { - cache: createFastMemoizeCache(cache.pluralRules), - strategy: strategies.variadic, - }), - }; -} -var IntlMessageFormat$1 = /** @class */ (function () { - function IntlMessageFormat(message, locales, overrideFormats, opts) { - var _this = this; - if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; } - this.formatterCache = { - number: {}, - dateTime: {}, - pluralRules: {}, - }; - this.format = function (values) { - var parts = _this.formatToParts(values); - // Hot path for straight simple msg translations - if (parts.length === 1) { - return parts[0].value; - } - var result = parts.reduce(function (all, part) { - if (!all.length || - part.type !== PART_TYPE.literal || - typeof all[all.length - 1] !== 'string') { - all.push(part.value); - } - else { - all[all.length - 1] += part.value; - } - return all; - }, []); - if (result.length <= 1) { - return result[0] || ''; - } - return result; - }; - this.formatToParts = function (values) { - return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message); - }; - this.resolvedOptions = function () { - var _a; - return ({ - locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) || - Intl.NumberFormat.supportedLocalesOf(_this.locales)[0], - }); - }; - this.getAst = function () { return _this.ast; }; - // Defined first because it's used to build the format pattern. - this.locales = locales; - this.resolvedLocale = IntlMessageFormat.resolveLocale(locales); - if (typeof message === 'string') { - this.message = message; - if (!IntlMessageFormat.__parse) { - throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`'); - } - var _a = opts || {}; _a.formatters; var parseOpts = __rest(_a, ["formatters"]); - // Parse string messages into an AST. - this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale })); - } - else { - this.ast = message; - } - if (!Array.isArray(this.ast)) { - throw new TypeError('A message must be provided as a String or AST.'); - } - // Creates a new object with the specified `formats` merged with the default - // formats. - this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats); - this.formatters = - (opts && opts.formatters) || createDefaultFormatters(this.formatterCache); - } - Object.defineProperty(IntlMessageFormat, "defaultLocale", { - get: function () { - if (!IntlMessageFormat.memoizedDefaultLocale) { - IntlMessageFormat.memoizedDefaultLocale = - new Intl.NumberFormat().resolvedOptions().locale; - } - return IntlMessageFormat.memoizedDefaultLocale; - }, - enumerable: false, - configurable: true - }); - IntlMessageFormat.memoizedDefaultLocale = null; - IntlMessageFormat.resolveLocale = function (locales) { - if (typeof Intl.Locale === 'undefined') { - return; - } - var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales); - if (supportedLocales.length > 0) { - return new Intl.Locale(supportedLocales[0]); - } - return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]); - }; - IntlMessageFormat.__parse = parse; - // Default format options used as the prototype of the `formats` provided to the - // constructor. These are used when constructing the internal Intl.NumberFormat - // and Intl.DateTimeFormat instances. - IntlMessageFormat.formats = { - number: { - integer: { - maximumFractionDigits: 0, - }, - currency: { - style: 'currency', - }, - percent: { - style: 'percent', - }, - }, - date: { - short: { - month: 'numeric', - day: 'numeric', - year: '2-digit', - }, - medium: { - month: 'short', - day: 'numeric', - year: 'numeric', - }, - long: { - month: 'long', - day: 'numeric', - year: 'numeric', - }, - full: { - weekday: 'long', - month: 'long', - day: 'numeric', - year: 'numeric', - }, - }, - time: { - short: { - hour: 'numeric', - minute: 'numeric', - }, - medium: { - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - }, - long: { - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - timeZoneName: 'short', - }, - full: { - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - timeZoneName: 'short', - }, - }, - }; - return IntlMessageFormat; -}()); - -/* -Copyright (c) 2014, Yahoo! Inc. All rights reserved. -Copyrights licensed under the New BSD License. -See the accompanying LICENSE file for terms. -*/ -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]; -// Falk - Adapted the central translator to check if a localStorage key is existing. -var 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); - } - else { - locales = [navigator.language || navigator.userLanguage || defaultLocale]; - } -} -function parseLocale(s) { - var 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 }; - } - 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() }; - } - catch (e) { - log.error("Parse locale:".concat(locale, " failed."), e); - } -} -function parseLocales(list) { - return list.map(parseLocale).filter(function (t) { return t; }); -} -var fallbackLocaleInfos = parseLocales(locales.includes(defaultLocale) ? locales : __spreadArray(__spreadArray([], locales, true), [defaultLocale], false)); -var i18n = __assign({ locales: 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); - if (t !== undefined) { - return t; - } - } - return defaultValue; -} -function getDataByLocale(fileData, suffix, filterLocales, targetLocales) { - var localeInfos = __spreadArray([], fallbackLocaleInfos, true); - var 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 [ - 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]; - if (data !== undefined) { - return { data: data, language: name_1.slice(0, 2) }; - } - } - console.error("Not found ".concat(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; - 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) { - 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); - if (Array.isArray(node)) { - return node.map(function (n, i) { return jsxRuntimeExports.jsx(reactExports.Fragment, { children: n }, i); }); - } - return node; - }; - Translator.prototype.getMessage = function (key) { - var 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); - } - return message; - }; - Translator.prototype.getNestedMessage = function (obj, key) { - for (var _i = 0, _a = key.split("."); _i < _a.length; _i++) { - var k = _a[_i]; - 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; -} - -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 }; +}; + +function isEqualArgs(args, cacheArgs, equals) { + if (!cacheArgs) { + return false; + } + if (args.length === 0 && cacheArgs.length === 0) { + 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]; })); +} +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]; + if (cache && isEqualArgs(args, cache.args, equals)) { + return cache.result; + } +} +function cache(fn, args, thisObj, fnName, equals) { + var result = getCacheResult(thisObj, fnName, args, equals); + if (result) { + return result.value; + } + var cache = { + id: Symbol("id"), + args: args, + time: Date.now(), + }; + if (!thisObj.__cache) { + thisObj.__cache = {}; + } + thisObj.__cache[fnName] = cache; + var value = fn.apply(thisObj, args); + cache.result = { value: 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]; + } + 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, ""); + } + }); + }; + this.record = this.initRecord(); + } + RecursivePerfUtil.prototype.log = function (info, key, log) { + info[key] = log; + }; + RecursivePerfUtil.prototype.perf = function (obj, name, fn) { + { + return fn(_.noop); + } + }; + return RecursivePerfUtil; +}()); +var 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); + // use cache when equals to the last dependingNodeMap + if (dependingNodeMapEquals(_this.evalCache.dependingNodeMap, dependingNodeMap)) { + return _this.evalCache.value; + } + // initialize cyclic field + _this.evalCache.cyclic = false; + var result = _this.justEval(exposingNodes, methods); + // write cache + _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(); }); + } + return result; + }); + }; + AbstractNode.prototype.hasCycle = function () { + var _a; + return (_a = this.evalCache.cyclic) !== null && _a !== void 0 ? _a : false; + }; + AbstractNode.prototype.dependNames = function () { + return Object.keys(this.dependValues()); + }; + AbstractNode.prototype.isHitEvalCache = function (exposingNodes) { + exposingNodes = exposingNodes !== null && exposingNodes !== void 0 ? exposingNodes : {}; + var 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) { + if (n.type === "wrap") { + nextMap.set(n.delegate, p); + } + else { + nextMap.set(n, p); + } + }); + return nextMap; +} +function setEquals(s1, s2) { + return s2 !== undefined && s1.size === s2.size && Array.from(s2).every(function (v) { return s1.has(v); }); +} +/** + * check whether 2 dependingNodeMaps are equal + * - Node use "===" to check + * - string[] use deep compare to check + * + * @param dependingNodeMap1 first dependingNodeMap + * @param dependingNodeMap2 second dependingNodeMap + * @returns whether equals + */ +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) { + result = result && setEquals(paths, map1.get(node)); + }); + return result; +} + +/** + * 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); + }); + }; + FunctionNode.prototype.justEval = function (exposingNodes, methods) { + return this.func(this.child.evaluate(exposingNodes, methods)); + }; + FunctionNode.prototype.getChildren = function () { + return [this.child]; + }; + FunctionNode.prototype.dependValues = function () { + return this.child.dependValues(); + }; + FunctionNode.prototype.fetchInfo = function (exposingNodes, options) { + return this.child.fetchInfo(exposingNodes, options); + }; + __decorate([ + memoized() + ], FunctionNode.prototype, "filterNodes", null); + __decorate([ + memoized() + ], FunctionNode.prototype, "fetchInfo", null); + return FunctionNode; +}(AbstractNode)); +function withFunction(child, func) { + return new FunctionNode(child, func); +} + +function addDepend(target, node, paths) { + if (!node) { + return; + } + var 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); }); +} +function addDepends(target, source) { + source === null || source === void 0 ? void 0 : source.forEach(function (paths, node) { return 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) { + 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 () { + return Object.values(this.children); + }; + RecordNode.prototype.dependValues = function () { + var 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]; + 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); + 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)); +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; + } + CachedNode.prototype.filterNodes = function (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 () { + return [this.child]; + }; + CachedNode.prototype.dependValues = function () { + return this.child.dependValues(); + }; + CachedNode.prototype.fetchInfo = function (exposingNodes) { + return this.child.fetchInfo(exposingNodes); + }; + __decorate([ + memoized() + ], CachedNode.prototype, "filterNodes", null); + return CachedNode; +}(AbstractNode)); +function withEvalCache(node) { + var newNode = withFunction(node, function (x) { return x; }); + newNode.evalCache = __assign({}, node.evalCache); + return newNode; +} +/** + * return a new node with two input nodes. + * - if mainNode is never evaled, then (new node).evaluate equals to mainNode.evaluate + * - if mainNode is evaled, then (new node).evaluate equals to minorNode.evaluate + * + * @remarks + * encapsulation logic: 2 nodes -> CachedNode(mainNode)+minorNode -> RecordNode({main, minor}) -> FunctionNode + * + * @warn improper use may cause unexpected behaviour, be careful. + * @param mainNode mainNode + * @param minorNode minorNode + * @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; + if (!mainCachedValue.isCached) { + return mainCachedValue.value; + } + return record.minor; + }); +} + +function toReadableString(value) { + if (value instanceof RegExp) { + return value.toString(); + } + // fix undefined NaN Infinity -Infinity + if (value === undefined || typeof value === "number") { + return value + ""; + } + if (typeof value === "string") { + // without escaping char + return '"' + value + '"'; + } + // FIXME: correctly show `undefined NaN Infinity -Infinity` inside Object, they are within quotes currently + return JSON.stringify(value, function (key, val) { + switch (typeof val) { + case "function": + case "bigint": + case "symbol": + case "undefined": + return val + ""; + case "number": + if (!isFinite(val)) { + return val + ""; + } + } + return val; + }); +} + +var ValueAndMsg = /** @class */ (function () { + function ValueAndMsg(value, msg, extra, midValue) { + this.value = value; + this.msg = msg; + this.extra = extra; + this.midValue = midValue; + } + ValueAndMsg.prototype.hasError = function () { + 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; +}()); + +function dependsErrorMessage(node) { + return "DependencyError: \"".concat(node.unevaledValue, "\" caused a cyclic dependency."); +} +function getErrorMessage(err) { + // todo try to use 'err instanceof EvalTypeError' instead + if (err instanceof TypeError && err.hint) { + return err.hint + "\n" + err.name + ": " + err.message; + } + return err instanceof Error + ? err.name + ": " + err.message + : "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); + 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))); +} +// node2 mostly has one path +function mergeNode(node1, node2) { + if (!node1 || node1 === node2) { + return 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; + record[name] = subNode; + }); + return fromRecord(record); +} +function nodeIsRecord(node) { + return node.type === "record"; +} + +var 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("{{"); + while (start >= 0) { + var i = start + 2; + while (i < input.length && input[i] === "{") + i++; + var 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; + for (; i < maxIndex; i++) { + switch (input[i]) { + case "{": + sum++; + break; + case "}": + sum--; + if (input[i - 1] === "}") { + var offset = Math.min(Math.max(sum, 0), maxStartOffset); + var value = Math.abs(sum - offset); + if (value < minValue || (value === minValue && offset < minOffset)) { + minValue = value; + minOffset = offset; + end = i + 1; + } + } + break; + } + } + segments.push(input.slice(position, start + minOffset), input.slice(start + minOffset, end)); + position = end; + start = nextStart; + } + segments.push(input.slice(position)); + return segments.filter(function (t) { return 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]; + if (isDynamicSegment(segment)) { + addDepends(ret, parseDepends(segment.slice(2, -2), exposingNodes, maxDepth)); + } + } + return ret; +} +function hasCycle(segment, exposingNodes) { + if (!isDynamicSegment(segment)) { + return false; + } + var ret = false; + parseDepends(segment.slice(2, -2), exposingNodes).forEach(function (paths, node) { + ret = ret || node.hasCycle(); + }); + return ret; +} +function changeDependName(unevaledValue, oldName, name, isFunction) { + if (!unevaledValue || !oldName || !name) { + return unevaledValue; + } + if (isFunction) { + return rename(unevaledValue, oldName, name); + } + return getDynamicStringSegments(unevaledValue) + .map(function (segment) { + if (!isDynamicSegment(segment)) { + return segment; + } + return rename(segment, oldName, name); + }) + .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) { + 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); + matched = true; + } + for (var _i = 0, accessors_1 = accessors; _i < accessors_1.length; _i++) { + var accessor = accessors_1[_i]; + if (s.startsWith(origin + accessor)) { + matched = true; + target = target + accessor + s.substring(origin.length + accessor.length); + break; + } + } + if (matched) { + return target; + } + return s; + }); + } + return ret; +} +function getIdentifiers(jsSnippet) { + var ret = []; + var commonReg = /[a-zA-Z_$][a-zA-Z_$0-9.[\]]*/g; + var commonIds = jsSnippet.match(commonReg); + if (commonIds) { + ret.push.apply(ret, 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))); + }); + ret.push.apply(ret, 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); + if (depend) { + addDepend(depends, depend[0], [depend[1]]); + } + }); + return depends; +} +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]; + if (!nodes.hasOwnProperty(subPath) || !subNode) { + break; + } + node = subNode; + path.push(subPath); + if (!nodeIsRecord(node)) { + break; + } + nodes = node.children; + } + return node ? [node, path.join(".")] : undefined; +} + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +var loglevelExports = {}; +var loglevel = { + get exports(){ return loglevelExports; }, + set exports(v){ loglevelExports = v; }, +}; + +/* +* loglevel - https://github.com/pimterry/loglevel +* +* Copyright (c) 2013 Tim Perry +* Licensed under the MIT license. +*/ + +(function (module) { + (function (root, definition) { + if (module.exports) { + module.exports = definition(); + } else { + root.log = definition(); + } + }(commonjsGlobal, function () { + + // Slightly dubious tricks to cut down minimized file size + var noop = function() {}; + var undefinedType = "undefined"; + var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && ( + /Trident\/|MSIE /.test(window.navigator.userAgent) + ); + + var logMethods = [ + "trace", + "debug", + "info", + "warn", + "error" + ]; + + var _loggersByName = {}; + var defaultLogger = null; + + // Cross-browser bind equivalent that works at least back to IE6 + function bindMethod(obj, methodName) { + var method = obj[methodName]; + if (typeof method.bind === 'function') { + return method.bind(obj); + } else { + try { + return Function.prototype.bind.call(method, obj); + } catch (e) { + // Missing bind shim or IE8 + Modernizr, fallback to wrapping + return function() { + return Function.prototype.apply.apply(method, [obj, arguments]); + }; + } + } + } + + // Trace() doesn't print the message in IE, so for that case we need to wrap it + function traceForIE() { + if (console.log) { + if (console.log.apply) { + console.log.apply(console, arguments); + } else { + // In old IE, native console methods themselves don't have apply(). + Function.prototype.apply.apply(console.log, [console, arguments]); + } + } + if (console.trace) console.trace(); + } + + // Build the best logging method possible for this env + // Wherever possible we want to bind, not wrap, to preserve stack traces + function realMethod(methodName) { + if (methodName === 'debug') { + methodName = 'log'; + } + + if (typeof console === undefinedType) { + return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives + } else if (methodName === 'trace' && isIE) { + return traceForIE; + } else if (console[methodName] !== undefined) { + return bindMethod(console, methodName); + } else if (console.log !== undefined) { + return bindMethod(console, 'log'); + } else { + return noop; + } + } + + // These private functions always need `this` to be set properly + + function replaceLoggingMethods() { + /*jshint validthis:true */ + var level = this.getLevel(); + + // Replace the actual methods. + for (var i = 0; i < logMethods.length; i++) { + var methodName = logMethods[i]; + this[methodName] = (i < level) ? + noop : + this.methodFactory(methodName, level, this.name); + } + + // Define log.log as an alias for log.debug + this.log = this.debug; + + // Return any important warnings. + if (typeof console === undefinedType && level < this.levels.SILENT) { + return "No console available for logging"; + } + } + + // In old IE versions, the console isn't present until you first open it. + // We build realMethod() replacements here that regenerate logging methods + function enableLoggingWhenConsoleArrives(methodName) { + return function () { + if (typeof console !== undefinedType) { + replaceLoggingMethods.call(this); + this[methodName].apply(this, arguments); + } + }; + } + + // By default, we use closely bound real methods wherever possible, and + // otherwise we wait for a console to appear, and then try again. + function defaultMethodFactory(methodName, _level, _loggerName) { + /*jshint validthis:true */ + return realMethod(methodName) || + enableLoggingWhenConsoleArrives.apply(this, arguments); + } + + function Logger(name, factory) { + // Private instance variables. + var self = this; + /** + * The level inherited from a parent logger (or a global default). We + * cache this here rather than delegating to the parent so that it stays + * in sync with the actual logging methods that we have installed (the + * parent could change levels but we might not have rebuilt the loggers + * in this child yet). + * @type {number} + */ + var inheritedLevel; + /** + * The default level for this logger, if any. If set, this overrides + * `inheritedLevel`. + * @type {number|null} + */ + var defaultLevel; + /** + * A user-specific level for this logger. If set, this overrides + * `defaultLevel`. + * @type {number|null} + */ + var userLevel; + + var storageKey = "loglevel"; + if (typeof name === "string") { + storageKey += ":" + name; + } else if (typeof name === "symbol") { + storageKey = undefined; + } + + function persistLevelIfPossible(levelNum) { + var levelName = (logMethods[levelNum] || 'silent').toUpperCase(); + + if (typeof window === undefinedType || !storageKey) return; + + // Use localStorage if available + try { + window.localStorage[storageKey] = levelName; + return; + } catch (ignore) {} + + // Use session cookie as fallback + try { + window.document.cookie = + encodeURIComponent(storageKey) + "=" + levelName + ";"; + } catch (ignore) {} + } + + function getPersistedLevel() { + var storedLevel; + + if (typeof window === undefinedType || !storageKey) return; + + try { + storedLevel = window.localStorage[storageKey]; + } catch (ignore) {} + + // Fallback to cookies if local storage gives us nothing + if (typeof storedLevel === undefinedType) { + try { + var cookie = window.document.cookie; + var cookieName = encodeURIComponent(storageKey); + var location = cookie.indexOf(cookieName + "="); + if (location !== -1) { + storedLevel = /^([^;]+)/.exec( + cookie.slice(location + cookieName.length + 1) + )[1]; + } + } catch (ignore) {} + } + + // If the stored level is not valid, treat it as if nothing was stored. + if (self.levels[storedLevel] === undefined) { + storedLevel = undefined; + } + + return storedLevel; + } + + function clearPersistedLevel() { + if (typeof window === undefinedType || !storageKey) return; + + // Use localStorage if available + try { + window.localStorage.removeItem(storageKey); + } catch (ignore) {} + + // Use session cookie as fallback + try { + window.document.cookie = + encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC"; + } catch (ignore) {} + } + + function normalizeLevel(input) { + var level = input; + if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) { + level = self.levels[level.toUpperCase()]; + } + if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { + return level; + } else { + throw new TypeError("log.setLevel() called with invalid level: " + input); + } + } + + /* + * + * Public logger API - see https://github.com/pimterry/loglevel for details + * + */ + + self.name = name; + + self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, + "ERROR": 4, "SILENT": 5}; + + self.methodFactory = factory || defaultMethodFactory; + + self.getLevel = function () { + if (userLevel != null) { + return userLevel; + } else if (defaultLevel != null) { + return defaultLevel; + } else { + return inheritedLevel; + } + }; + + self.setLevel = function (level, persist) { + userLevel = normalizeLevel(level); + if (persist !== false) { // defaults to true + persistLevelIfPossible(userLevel); + } + + // NOTE: in v2, this should call rebuild(), which updates children. + return replaceLoggingMethods.call(self); + }; + + self.setDefaultLevel = function (level) { + defaultLevel = normalizeLevel(level); + if (!getPersistedLevel()) { + self.setLevel(level, false); + } + }; + + self.resetLevel = function () { + userLevel = null; + clearPersistedLevel(); + replaceLoggingMethods.call(self); + }; + + self.enableAll = function(persist) { + self.setLevel(self.levels.TRACE, persist); + }; + + self.disableAll = function(persist) { + self.setLevel(self.levels.SILENT, persist); + }; + + self.rebuild = function () { + if (defaultLogger !== self) { + inheritedLevel = normalizeLevel(defaultLogger.getLevel()); + } + replaceLoggingMethods.call(self); + + if (defaultLogger === self) { + for (var childName in _loggersByName) { + _loggersByName[childName].rebuild(); + } + } + }; + + // Initialize all the internal levels. + inheritedLevel = normalizeLevel( + defaultLogger ? defaultLogger.getLevel() : "WARN" + ); + var initialLevel = getPersistedLevel(); + if (initialLevel != null) { + userLevel = normalizeLevel(initialLevel); + } + replaceLoggingMethods.call(self); + } + + /* + * + * Top-level API + * + */ + + defaultLogger = new Logger(); + + defaultLogger.getLogger = function getLogger(name) { + if ((typeof name !== "symbol" && typeof name !== "string") || name === "") { + throw new TypeError("You must supply a name when creating a logger."); + } + + var logger = _loggersByName[name]; + if (!logger) { + logger = _loggersByName[name] = new Logger( + name, + defaultLogger.methodFactory + ); + } + return logger; + }; + + // Grab the current global log variable in case of overwrite + var _log = (typeof window !== undefinedType) ? window.log : undefined; + defaultLogger.noConflict = function() { + if (typeof window !== undefinedType && + window.log === defaultLogger) { + window.log = _log; + } + + return defaultLogger; + }; + + defaultLogger.getLoggers = function getLoggers() { + return _loggersByName; + }; + + // ES6 default export, for compatibility + defaultLogger['default'] = defaultLogger; + + return defaultLogger; + })); +} (loglevel)); + +var log = loglevelExports; + +// global variables black list, forbidden to use in for jsQuery/jsAction +var functionBlacklist = new Set([ + "top", + "parent", + "document", + "location", + "chrome", + "fetch", + "XMLHttpRequest", + "importScripts", + "Navigator", + "MutationObserver", +]); +var expressionBlacklist = new Set(__spreadArray(__spreadArray([], Array.from(functionBlacklist.values()), true), [ + "setTimeout", + "setInterval", + "setImmediate", +], false)); +var globalVarNames = new Set(["window", "globalThis", "self", "global"]); +function createBlackHole() { + return new Proxy(function () { + return createBlackHole(); + }, { + get: function (t, p, r) { + if (p === "toString") { + return function () { + return ""; + }; + } + if (p === Symbol.toPrimitive) { + return function () { + return ""; + }; + } + log.log("[Sandbox] access ".concat(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 () { + return true; + }, + set: function (target, p, newValue) { + if (typeof p === "string") { + onSet === null || onSet === void 0 ? void 0 : onSet(p); + } + return Reflect.set(target, p, newValue); + }, + get: function (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")); + return createBlackHole(); + } + return getPropertyFromNativeWindow(p); + }, + }); + return win; +} +var mockWindow; +var currentDisableLimit = false; +function clearMockWindow() { + mockWindow = createMockWindow(); +} +function isDomElement(obj) { + return obj instanceof Element || obj instanceof HTMLCollection; +} +function getPropertyFromNativeWindow(prop) { + var ret = Reflect.get(window, prop); + if (typeof ret === "function" && !ret.prototype) { + return ret.bind(window); + } + // get DOM element by id, serializing may cause error + if (isDomElement(ret)) { + return undefined; + } + 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) { + return key in context || key in (methods || {}) || globalVarNames.has(key); + }; + var cache = {}; + var 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) { + // proxy all variables + return true; + }, + get: function (target, p, receiver) { + if (p === Symbol.unscopables) { + return undefined; + } + if (p === "toJSON") { + return target; + } + if (globalVarNames.has(p)) { + return target; + } + if (p in context) { + if (p in cache) { + return Reflect.get(cache, p); + } + var 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)); + } + Object.freeze(value); + Object.values(value).forEach(Object.freeze); + } + Reflect.set(cache, p, value); + return value; + } + if (disableLimit) { + return getPropertyFromNativeWindow(p); + } + return Reflect.get(target, p, receiver); + }, + set: function (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) { + if (isProtectedVar(p)) { + throw new Error("can't define property:" + p.toString()); + } + return Reflect.defineProperty(target, p, attributes); + }, + deleteProperty: function (target, p) { + if (isProtectedVar(p)) { + throw new Error("can't delete property:" + p.toString()); + } + return Reflect.deleteProperty(target, p); + }, + setPrototypeOf: function (target, v) { + throw new Error("can't invoke setPrototypeOf"); + }, + }); +} +function evalScript(script, context, methods) { + return evalFunc("return (".concat(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 }"); + // eslint-disable-next-line no-new-func + var vm = new Function(code); + var sandbox = proxySandbox(context, methods, options); + var result = vm.call(sandbox); + return result; +} + +var srcExports = {}; +var src = { + get exports(){ return srcExports; }, + set exports(v){ srcExports = v; }, +}; + +var umd_bundleExports = {}; +var umd_bundle = { + get exports(){ return umd_bundleExports; }, + set exports(v){ umd_bundleExports = v; }, +}; + +/* + * The MIT License (MIT) + * + * Copyright (c) 2018-2022 TwelveTone LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +(function (module, exports) { + !function(t,e){module.exports=e();}(commonjsGlobal,(()=>{return t={421:function(t,e){var n,r;n=function(t){var e=t;t.isBooleanArray=function(t){return (Array.isArray(t)||t instanceof Int8Array)&&"BooleanArray"===t.$type$},t.isByteArray=function(t){return t instanceof Int8Array&&"BooleanArray"!==t.$type$},t.isShortArray=function(t){return t instanceof Int16Array},t.isCharArray=function(t){return t instanceof Uint16Array&&"CharArray"===t.$type$},t.isIntArray=function(t){return t instanceof Int32Array},t.isFloatArray=function(t){return t instanceof Float32Array},t.isDoubleArray=function(t){return t instanceof Float64Array},t.isLongArray=function(t){return Array.isArray(t)&&"LongArray"===t.$type$},t.isArray=function(t){return Array.isArray(t)&&!t.$type$},t.isArrayish=function(t){return Array.isArray(t)||ArrayBuffer.isView(t)},t.arrayToString=function(e){if(null===e)return "null";var n=t.isCharArray(e)?String.fromCharCode:t.toString;return "["+Array.prototype.map.call(e,(function(t){return n(t)})).join(", ")+"]"},t.toByte=function(t){return (255&t)<<24>>24},t.toChar=function(t){return 65535&t},t.toBoxedChar=function(e){return null==e||e instanceof t.BoxedChar?e:new t.BoxedChar(e)},t.unboxChar=function(e){return null==e?e:t.toChar(e)},t.equals=function(t,e){return null==t?null==e:null!=e&&(t!=t?e!=e:"object"==typeof t&&"function"==typeof t.equals?t.equals(e):"number"==typeof t&&"number"==typeof e?t===e&&(0!==t||1/t==1/e):t===e)},t.hashCode=function(e){if(null==e)return 0;var n=typeof e;return "object"===n?"function"==typeof e.hashCode?e.hashCode():c(e):"function"===n?c(e):"number"===n?t.numberHashCode(e):"boolean"===n?Number(e):function(t){for(var e=0,n=0;n=t.Long.TWO_PWR_63_DBL_?t.Long.MAX_VALUE:e<0?t.Long.fromNumber(-e).negate():new t.Long(e%t.Long.TWO_PWR_32_DBL_|0,e/t.Long.TWO_PWR_32_DBL_|0)},t.Long.fromBits=function(e,n){return new t.Long(e,n)},t.Long.fromString=function(e,n){if(0==e.length)throw Error("number format error: empty string");var r=n||10;if(r<2||36=0)throw Error('number format error: interior "-" character: '+e);for(var i=t.Long.fromNumber(Math.pow(r,8)),o=t.Long.ZERO,a=0;a=0?this.low_:t.Long.TWO_PWR_32_DBL_+this.low_},t.Long.prototype.getNumBitsAbs=function(){if(this.isNegative())return this.equalsLong(t.Long.MIN_VALUE)?64:this.negate().getNumBitsAbs();for(var e=0!=this.high_?this.high_:this.low_,n=31;n>0&&0==(e&1<0},t.Long.prototype.greaterThanOrEqual=function(t){return this.compare(t)>=0},t.Long.prototype.compare=function(t){if(this.equalsLong(t))return 0;var e=this.isNegative(),n=t.isNegative();return e&&!n?-1:!e&&n?1:this.subtract(t).isNegative()?-1:1},t.Long.prototype.negate=function(){return this.equalsLong(t.Long.MIN_VALUE)?t.Long.MIN_VALUE:this.not().add(t.Long.ONE)},t.Long.prototype.add=function(e){var n=this.high_>>>16,r=65535&this.high_,i=this.low_>>>16,o=65535&this.low_,a=e.high_>>>16,s=65535&e.high_,u=e.low_>>>16,p=0,c=0,l=0,h=0;return l+=(h+=o+(65535&e.low_))>>>16,h&=65535,c+=(l+=i+u)>>>16,l&=65535,p+=(c+=r+s)>>>16,c&=65535,p+=n+a,p&=65535,t.Long.fromBits(l<<16|h,p<<16|c)},t.Long.prototype.subtract=function(t){return this.add(t.negate())},t.Long.prototype.multiply=function(e){if(this.isZero())return t.Long.ZERO;if(e.isZero())return t.Long.ZERO;if(this.equalsLong(t.Long.MIN_VALUE))return e.isOdd()?t.Long.MIN_VALUE:t.Long.ZERO;if(e.equalsLong(t.Long.MIN_VALUE))return this.isOdd()?t.Long.MIN_VALUE:t.Long.ZERO;if(this.isNegative())return e.isNegative()?this.negate().multiply(e.negate()):this.negate().multiply(e).negate();if(e.isNegative())return this.multiply(e.negate()).negate();if(this.lessThan(t.Long.TWO_PWR_24_)&&e.lessThan(t.Long.TWO_PWR_24_))return t.Long.fromNumber(this.toNumber()*e.toNumber());var n=this.high_>>>16,r=65535&this.high_,i=this.low_>>>16,o=65535&this.low_,a=e.high_>>>16,s=65535&e.high_,u=e.low_>>>16,p=65535&e.low_,c=0,l=0,h=0,f=0;return h+=(f+=o*p)>>>16,f&=65535,l+=(h+=i*p)>>>16,h&=65535,l+=(h+=o*u)>>>16,h&=65535,c+=(l+=r*p)>>>16,l&=65535,c+=(l+=i*u)>>>16,l&=65535,c+=(l+=o*s)>>>16,l&=65535,c+=n*p+r*u+i*s+o*a,c&=65535,t.Long.fromBits(h<<16|f,c<<16|l)},t.Long.prototype.div=function(e){if(e.isZero())throw Error("division by zero");if(this.isZero())return t.Long.ZERO;if(this.equalsLong(t.Long.MIN_VALUE)){if(e.equalsLong(t.Long.ONE)||e.equalsLong(t.Long.NEG_ONE))return t.Long.MIN_VALUE;if(e.equalsLong(t.Long.MIN_VALUE))return t.Long.ONE;if((i=this.shiftRight(1).div(e).shiftLeft(1)).equalsLong(t.Long.ZERO))return e.isNegative()?t.Long.ONE:t.Long.NEG_ONE;var n=this.subtract(e.multiply(i));return i.add(n.div(e))}if(e.equalsLong(t.Long.MIN_VALUE))return t.Long.ZERO;if(this.isNegative())return e.isNegative()?this.negate().div(e.negate()):this.negate().div(e).negate();if(e.isNegative())return this.div(e.negate()).negate();var r=t.Long.ZERO;for(n=this;n.greaterThanOrEqual(e);){for(var i=Math.max(1,Math.floor(n.toNumber()/e.toNumber())),o=Math.ceil(Math.log(i)/Math.LN2),a=o<=48?1:Math.pow(2,o-48),s=t.Long.fromNumber(i),u=s.multiply(e);u.isNegative()||u.greaterThan(n);)i-=a,u=(s=t.Long.fromNumber(i)).multiply(e);s.isZero()&&(s=t.Long.ONE),r=r.add(s),n=n.subtract(u);}return r},t.Long.prototype.modulo=function(t){return this.subtract(this.div(t).multiply(t))},t.Long.prototype.not=function(){return t.Long.fromBits(~this.low_,~this.high_)},t.Long.prototype.and=function(e){return t.Long.fromBits(this.low_&e.low_,this.high_&e.high_)},t.Long.prototype.or=function(e){return t.Long.fromBits(this.low_|e.low_,this.high_|e.high_)},t.Long.prototype.xor=function(e){return t.Long.fromBits(this.low_^e.low_,this.high_^e.high_)},t.Long.prototype.shiftLeft=function(e){if(0==(e&=63))return this;var n=this.low_;if(e<32){var r=this.high_;return t.Long.fromBits(n<>>32-e)}return t.Long.fromBits(0,n<>>e|n<<32-e,n>>e)}return t.Long.fromBits(n>>e-32,n>=0?0:-1)},t.Long.prototype.shiftRightUnsigned=function(e){if(0==(e&=63))return this;var n=this.high_;if(e<32){var r=this.low_;return t.Long.fromBits(r>>>e|n<<32-e,n>>>e)}return 32==e?t.Long.fromBits(n,0):t.Long.fromBits(n>>>e-32,0)},t.Long.prototype.equals=function(e){return e instanceof t.Long&&this.equalsLong(e)},t.Long.prototype.compareTo_11rb$=t.Long.prototype.compare,t.Long.prototype.inc=function(){return this.add(t.Long.ONE)},t.Long.prototype.dec=function(){return this.add(t.Long.NEG_ONE)},t.Long.prototype.valueOf=function(){return this.toNumber()},t.Long.prototype.unaryPlus=function(){return this},t.Long.prototype.unaryMinus=t.Long.prototype.negate,t.Long.prototype.inv=t.Long.prototype.not,t.Long.prototype.rangeTo=function(e){return new t.kotlin.ranges.LongRange(this,e)},t.defineInlineFunction=function(t,e){return e},t.wrapFunction=function(t){var e=function(){return (e=t()).apply(this,arguments)};return function(){return e.apply(this,arguments)}},t.suspendCall=function(t){return t},t.coroutineResult=function(t){l();},t.coroutineReceiver=function(t){l();},t.compareTo=function(e,n){var r=typeof e;return "number"===r?"number"==typeof n?t.doubleCompareTo(e,n):t.primitiveCompareTo(e,n):"string"===r||"boolean"===r?t.primitiveCompareTo(e,n):e.compareTo_11rb$(n)},t.primitiveCompareTo=function(t,e){return te?1:0},t.doubleCompareTo=function(t,e){if(te)return 1;if(t===e){if(0!==t)return 0;var n=1/t;return n===1/e?0:n<0?-1:1}return t!=t?e!=e?0:1:-1},t.imul=Math.imul||h,t.imulEmulated=h,n=new ArrayBuffer(8),r=new Float64Array(n),i=new Int32Array(n),o=0,a=1,r[0]=-1,0!==i[o]&&(o=1,a=0),t.numberHashCode=function(t){return (0|t)===t?0|t:(r[0]=t,(31*i[a]|0)+i[o]|0)},t.ensureNotNull=function(e){return null!=e?e:t.throwNPE()},void 0===String.prototype.startsWith&&Object.defineProperty(String.prototype,"startsWith",{value:function(t,e){return e=e||0,this.lastIndexOf(t,e)===e}}),void 0===String.prototype.endsWith&&Object.defineProperty(String.prototype,"endsWith",{value:function(t,e){var n=this.toString();(void 0===e||e>n.length)&&(e=n.length),e-=t.length;var r=n.indexOf(t,e);return -1!==r&&r===e}}),void 0===Math.sign&&(Math.sign=function(t){return 0==(t=+t)||isNaN(t)?Number(t):t>0?1:-1}),void 0===Math.trunc&&(Math.trunc=function(t){return isNaN(t)?NaN:t>0?Math.floor(t):Math.ceil(t)}),function(){var t=Math.sqrt(2220446049250313e-31),e=Math.sqrt(t),n=1/t,r=1/e;if(void 0===Math.sinh&&(Math.sinh=function(n){if(Math.abs(n)t&&(r+=n*n*n/6),r}var i=Math.exp(n),o=1/i;return isFinite(i)?isFinite(o)?(i-o)/2:-Math.exp(-n-Math.LN2):Math.exp(n-Math.LN2)}),void 0===Math.cosh&&(Math.cosh=function(t){var e=Math.exp(t),n=1/e;return isFinite(e)&&isFinite(n)?(e+n)/2:Math.exp(Math.abs(t)-Math.LN2)}),void 0===Math.tanh&&(Math.tanh=function(n){if(Math.abs(n)t&&(r-=n*n*n/3),r}var i=Math.exp(+n),o=Math.exp(-n);return i===1/0?1:o===1/0?-1:(i-o)/(i+o)}),void 0===Math.asinh){var i=function(o){if(o>=+e)return o>r?o>n?Math.log(o)+Math.LN2:Math.log(2*o+1/(2*o)):Math.log(o+Math.sqrt(o*o+1));if(o<=-e)return -i(-o);var a=o;return Math.abs(o)>=t&&(a-=o*o*o/6),a};Math.asinh=i;}void 0===Math.acosh&&(Math.acosh=function(r){if(r<1)return NaN;if(r-1>=e)return r>n?Math.log(r)+Math.LN2:Math.log(r+Math.sqrt(r*r-1));var i=Math.sqrt(r-1),o=i;return i>=t&&(o-=i*i*i/12),Math.sqrt(2)*o}),void 0===Math.atanh&&(Math.atanh=function(n){if(Math.abs(n)t&&(r+=n*n*n/3),r}return Math.log((1+n)/(1-n))/2}),void 0===Math.log1p&&(Math.log1p=function(t){if(Math.abs(t)>>0;return 0===e?32:31-(s(e)/u|0)|0})),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===Array.prototype.fill&&Object.defineProperty(Array.prototype,"fill",{value:function(t){if(null==this)throw new TypeError("this is null or not defined");for(var e=Object(this),n=e.length>>>0,r=arguments[1]>>0,i=r<0?Math.max(n+r,0):Math.min(r,n),o=arguments[2],a=void 0===o?n:o>>0,s=a<0?Math.max(n+a,0):Math.min(a,n);ie)return 1;if(t===e){if(0!==t)return 0;var n=1/t;return n===1/e?0:n<0?-1:1}return t!=t?e!=e?0:1:-1};for(r=0;r=0}function E(t,e){if(null==e){for(var n=0;n!==t.length;++n)if(null==t[n])return n}else for(var r=0;r!==t.length;++r)if(o(e,t[r]))return r;return -1}function A(t,e){for(var n=0;n!==t.length;++n)if(e===t[n])return n;return -1}function z(t,e){var n,r;if(null==e)for(n=Z(L(t)).iterator();n.hasNext();){var i=n.next();if(null==t[i])return i}else for(r=Z(L(t)).iterator();r.hasNext();){var a=r.next();if(o(e,t[a]))return a}return -1}function j(t){var e;switch(t.length){case 0:throw new Ft("Array is empty.");case 1:e=t[0];break;default:throw zt("Array has more than one element.")}return e}function L(t){return new mo(0,T(t))}function T(t){return t.length-1|0}function M(t,e){var n;for(n=0;n!==t.length;++n){var r=t[n];e.add_11rb$(r);}return e}function R(t){var e;switch(t.length){case 0:e=Ei();break;case 1:e=ee(t[0]);break;default:e=M(t,Ke(t.length));}return e}function P(t){this.closure$iterator=t;}function q(e,n){return t.isType(e,nt)?e.contains_11rb$(n):B(e,n)>=0}function B(e,n){var r;if(t.isType(e,it))return e.indexOf_11rb$(n);var i=0;for(r=e.iterator();r.hasNext();){var a=r.next();if(re(i),o(n,a))return i;i=i+1|0;}return -1}function U(t,e){var n;for(n=t.iterator();n.hasNext();){var r=n.next();e.add_11rb$(r);}return e}function F(e){var n;if(t.isType(e,nt)){switch(e.size){case 0:n=Ei();break;case 1:n=ee(t.isType(e,it)?e.get_za3lpa$(0):e.iterator().next());break;default:n=U(e,Ke(e.size));}return n}return zi(U(e,Ve()))}function D(t,e,n,r,i,o,a,s){var u;void 0===n&&(n=", "),void 0===r&&(r=""),void 0===i&&(i=""),void 0===o&&(o=-1),void 0===a&&(a="..."),void 0===s&&(s=null),e.append_gw00v9$(r);var p=0;for(u=t.iterator();u.hasNext();){var c=u.next();if((p=p+1|0)>1&&e.append_gw00v9$(n),!(o<0||p<=o))break;Wo(e,c,s);}return o>=0&&p>o&&e.append_gw00v9$(a),e.append_gw00v9$(i),e}function V(t,e,n,r,i,o,a){return void 0===e&&(e=", "),void 0===n&&(n=""),void 0===r&&(r=""),void 0===i&&(i=-1),void 0===o&&(o="..."),void 0===a&&(a=null),D(t,Jn(),e,n,r,i,o,a).toString()}function W(t){return new P((e=t,function(){return e.iterator()}));var e;}function K(t,e){return To().fromClosedRange_qt1dr2$(t,e,-1)}function Z(t){return To().fromClosedRange_qt1dr2$(t.last,t.first,0|-t.step)}function H(t,e){return te?e:t}function G(e,n){if(!(n>=0))throw zt(("Requested element count "+n+" is less than zero.").toString());return 0===n?li():t.isType(e,gi)?e.take_za3lpa$(n):new xi(e,n)}function Q(t,e){return new yi(t,e)}function Y(){}function X(){}function tt(){}function et(){}function nt(){}function rt(){}function it(){}function ot(){}function at(){}function st(){}function ut(){}function pt(){}function ct(){}function lt(){}function ht(){}function ft(){}function _t(){}function yt(){}function dt(){mt=this;}new t.Long(1,-2147483648),new t.Long(1908874354,-59652324),new t.Long(1,-1073741824),new t.Long(1108857478,-1074),t.Long.fromInt(-2147483647),new t.Long(2077252342,2147),new t.Long(-2077252342,-2148),new t.Long(1316134911,2328),new t.Long(387905,-1073741824),new t.Long(-387905,1073741823),new t.Long(-1,1073741823),new t.Long(-1108857478,1073),t.Long.fromInt(2047),St.prototype=Object.create(x.prototype),St.prototype.constructor=St,It.prototype=Object.create(St.prototype),It.prototype.constructor=It,Ot.prototype=Object.create(x.prototype),Ot.prototype.constructor=Ot,At.prototype=Object.create(It.prototype),At.prototype.constructor=At,jt.prototype=Object.create(It.prototype),jt.prototype.constructor=jt,Tt.prototype=Object.create(It.prototype),Tt.prototype.constructor=Tt,Mt.prototype=Object.create(It.prototype),Mt.prototype.constructor=Mt,qt.prototype=Object.create(At.prototype),qt.prototype.constructor=qt,Bt.prototype=Object.create(It.prototype),Bt.prototype.constructor=Bt,Ut.prototype=Object.create(It.prototype),Ut.prototype.constructor=Ut,Ft.prototype=Object.create(It.prototype),Ft.prototype.constructor=Ft,Vt.prototype=Object.create(It.prototype),Vt.prototype.constructor=Vt,Cr.prototype=Object.create(kr.prototype),Cr.prototype.constructor=Cr,oe.prototype=Object.create(kr.prototype),oe.prototype.constructor=oe,ue.prototype=Object.create(se.prototype),ue.prototype.constructor=ue,ae.prototype=Object.create(oe.prototype),ae.prototype.constructor=ae,pe.prototype=Object.create(ae.prototype),pe.prototype.constructor=pe,me.prototype=Object.create(oe.prototype),me.prototype.constructor=me,he.prototype=Object.create(me.prototype),he.prototype.constructor=he,fe.prototype=Object.create(me.prototype),fe.prototype.constructor=fe,ye.prototype=Object.create(oe.prototype),ye.prototype.constructor=ye,ce.prototype=Object.create(zr.prototype),ce.prototype.constructor=ce,$e.prototype=Object.create(ae.prototype),$e.prototype.constructor=$e,Ce.prototype=Object.create(he.prototype),Ce.prototype.constructor=Ce,ke.prototype=Object.create(ce.prototype),ke.prototype.constructor=ke,Ie.prototype=Object.create(me.prototype),Ie.prototype.constructor=Ie,Pe.prototype=Object.create(le.prototype),Pe.prototype.constructor=Pe,qe.prototype=Object.create(he.prototype),qe.prototype.constructor=qe,Re.prototype=Object.create(ke.prototype),Re.prototype.constructor=Re,De.prototype=Object.create(Ie.prototype),De.prototype.constructor=De,Je.prototype=Object.create(He.prototype),Je.prototype.constructor=Je,Ge.prototype=Object.create(He.prototype),Ge.prototype.constructor=Ge,Qe.prototype=Object.create(Ge.prototype),Qe.prototype.constructor=Qe,sn.prototype=Object.create(an.prototype),sn.prototype.constructor=sn,un.prototype=Object.create(an.prototype),un.prototype.constructor=un,pn.prototype=Object.create(an.prototype),pn.prototype.constructor=pn,_r.prototype=Object.create(Cr.prototype),_r.prototype.constructor=_r,yr.prototype=Object.create(kr.prototype),yr.prototype.constructor=yr,Or.prototype=Object.create(Cr.prototype),Or.prototype.constructor=Or,Sr.prototype=Object.create(Nr.prototype),Sr.prototype.constructor=Sr,Br.prototype=Object.create(kr.prototype),Br.prototype.constructor=Br,jr.prototype=Object.create(Br.prototype),jr.prototype.constructor=jr,Tr.prototype=Object.create(kr.prototype),Tr.prototype.constructor=Tr,ci.prototype=Object.create(pi.prototype),ci.prototype.constructor=ci,eo.prototype=Object.create($.prototype),eo.prototype.constructor=eo,ho.prototype=Object.create(So.prototype),ho.prototype.constructor=ho,mo.prototype=Object.create(zo.prototype),mo.prototype.constructor=mo,bo.prototype=Object.create(Mo.prototype),bo.prototype.constructor=bo,Co.prototype=Object.create(ni.prototype),Co.prototype.constructor=Co,Oo.prototype=Object.create(ri.prototype),Oo.prototype.constructor=Oo,No.prototype=Object.create(ii.prototype),No.prototype.constructor=No,Yo.prototype=Object.create(ni.prototype),Yo.prototype.constructor=Yo,Ca.prototype=Object.create(Ot.prototype),Ca.prototype.constructor=Ca,P.prototype.iterator=function(){return this.closure$iterator()},P.$metadata$={kind:n,interfaces:[oi]},Y.$metadata$={kind:d,simpleName:"Annotation",interfaces:[]},X.$metadata$={kind:d,simpleName:"CharSequence",interfaces:[]},tt.$metadata$={kind:d,simpleName:"Iterable",interfaces:[]},et.$metadata$={kind:d,simpleName:"MutableIterable",interfaces:[tt]},nt.$metadata$={kind:d,simpleName:"Collection",interfaces:[tt]},rt.$metadata$={kind:d,simpleName:"MutableCollection",interfaces:[et,nt]},it.$metadata$={kind:d,simpleName:"List",interfaces:[nt]},ot.$metadata$={kind:d,simpleName:"MutableList",interfaces:[rt,it]},at.$metadata$={kind:d,simpleName:"Set",interfaces:[nt]},st.$metadata$={kind:d,simpleName:"MutableSet",interfaces:[rt,at]},ut.prototype.getOrDefault_xwzc9p$=function(t,e){throw new Ca},pt.$metadata$={kind:d,simpleName:"Entry",interfaces:[]},ut.$metadata$={kind:d,simpleName:"Map",interfaces:[]},ct.prototype.remove_xwzc9p$=function(t,e){return !0},lt.$metadata$={kind:d,simpleName:"MutableEntry",interfaces:[pt]},ct.$metadata$={kind:d,simpleName:"MutableMap",interfaces:[ut]},ht.$metadata$={kind:d,simpleName:"Iterator",interfaces:[]},ft.$metadata$={kind:d,simpleName:"MutableIterator",interfaces:[ht]},_t.$metadata$={kind:d,simpleName:"ListIterator",interfaces:[ht]},yt.$metadata$={kind:d,simpleName:"MutableListIterator",interfaces:[ft,_t]},dt.prototype.toString=function(){return "kotlin.Unit"},dt.$metadata$={kind:m,simpleName:"Unit",interfaces:[]};var mt=null;function $t(){return null===mt&&new dt,mt}function gt(t){this.c=t;}function vt(t){this.resultContinuation_0=t,this.state_0=0,this.exceptionState_0=0,this.result_0=null,this.exception_0=null,this.finallyPath_0=null,this.context_hxcuhl$_0=this.resultContinuation_0.context,this.intercepted__0=null;}function bt(){xt=this;}gt.prototype.equals=function(e){return t.isType(e,gt)&&this.c===e.c},gt.prototype.hashCode=function(){return this.c},gt.prototype.toString=function(){return String.fromCharCode(s(this.c))},gt.prototype.compareTo_11rb$=function(t){return this.c-t},gt.prototype.valueOf=function(){return this.c},gt.$metadata$={kind:n,simpleName:"BoxedChar",interfaces:[g]},Object.defineProperty(vt.prototype,"context",{configurable:!0,get:function(){return this.context_hxcuhl$_0}}),vt.prototype.intercepted=function(){var t,e,n,r;if(null!=(n=this.intercepted__0))r=n;else {var i=null!=(e=null!=(t=this.context.get_j3r2sn$(Ri()))?t.interceptContinuation_wj8d80$(this):null)?e:this;this.intercepted__0=i,r=i;}return r},vt.prototype.resumeWith_tl1gpc$=function(e){for(var n,r={v:this},i={v:e.isFailure?null:null==(n=e.value)||t.isType(n,b)?n:y()},o={v:e.exceptionOrNull()};;){var a,s,u=r.v,p=u.resultContinuation_0;null==o.v?u.result_0=i.v:(u.state_0=u.exceptionState_0,u.exception_0=o.v);try{var c=u.doResume();if(c===to())return;i.v=c,o.v=null;}catch(t){i.v=null,o.v=t;}if(u.releaseIntercepted_0(),!t.isType(p,vt))return null!=(a=o.v)?(p.resumeWith_tl1gpc$(new $a(wa(a))),s=dt):s=null,void(null==s&&p.resumeWith_tl1gpc$(new $a(i.v)));r.v=p;}},vt.prototype.releaseIntercepted_0=function(){var t=this.intercepted__0;null!=t&&t!==this&&v(this.context.get_j3r2sn$(Ri())).releaseInterceptedContinuation_k98bjh$(t),this.intercepted__0=wt();},vt.$metadata$={kind:n,simpleName:"CoroutineImpl",interfaces:[ji]},Object.defineProperty(bt.prototype,"context",{configurable:!0,get:function(){throw Lt("This continuation is already complete".toString())}}),bt.prototype.resumeWith_tl1gpc$=function(t){throw Lt("This continuation is already complete".toString())},bt.prototype.toString=function(){return "This continuation is already complete"},bt.$metadata$={kind:m,simpleName:"CompletedContinuation",interfaces:[ji]};var xt=null;function wt(){return null===xt&&new bt,xt}function kt(t,e){this.closure$block=t,vt.call(this,e);}function Ct(e,n,r){return 3==e.length?e(n,r,!0):new kt((i=e,o=n,a=r,function(){return i(o,a)}),t.isType(s=r,ji)?s:tn());var i,o,a,s;}function Ot(e,n){var r;x.call(this),r=null!=n?n:null,this.message_q7r8iu$_0=void 0===e&&null!=r?t.toString(r):e,this.cause_us9j0c$_0=r,t.captureStack(x,this),this.name="Error";}function Nt(t,e){return e=e||Object.create(Ot.prototype),Ot.call(e,t,null),e}function St(e,n){var r;x.call(this),r=null!=n?n:null,this.message_8yp7un$_0=void 0===e&&null!=r?t.toString(r):e,this.cause_th0jdv$_0=r,t.captureStack(x,this),this.name="Exception";}function It(t,e){St.call(this,t,e),this.name="RuntimeException";}function Et(t,e){return e=e||Object.create(It.prototype),It.call(e,t,null),e}function At(t,e){It.call(this,t,e),this.name="IllegalArgumentException";}function zt(t,e){return e=e||Object.create(At.prototype),At.call(e,t,null),e}function jt(t,e){It.call(this,t,e),this.name="IllegalStateException";}function Lt(t,e){return e=e||Object.create(jt.prototype),jt.call(e,t,null),e}function Tt(t){Et(t,this),this.name="IndexOutOfBoundsException";}function Mt(t,e){It.call(this,t,e),this.name="UnsupportedOperationException";}function Rt(t){return t=t||Object.create(Mt.prototype),Mt.call(t,null,null),t}function Pt(t,e){return e=e||Object.create(Mt.prototype),Mt.call(e,t,null),e}function qt(t){zt(t,this),this.name="NumberFormatException";}function Bt(t){Et(t,this),this.name="NullPointerException";}function Ut(t){Et(t,this),this.name="ClassCastException";}function Ft(t){Et(t,this),this.name="NoSuchElementException";}function Dt(t){return t=t||Object.create(Ft.prototype),Ft.call(t,null),t}function Vt(t){Et(t,this),this.name="ArithmeticException";}function Wt(t,e,n){return Ar().checkRangeIndexes_cub51b$(e,n,t.length),t.slice(e,n)}function Kt(){Zt=this,this.rangeStart_8be2vx$=new Int32Array([48,1632,1776,1984,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,42528,43216,43264,43472,43504,43600,44016,65296]);}kt.prototype=Object.create(vt.prototype),kt.prototype.constructor=kt,kt.prototype.doResume=function(){var t;if(null!=(t=this.exception_0))throw t;return this.closure$block()},kt.$metadata$={kind:n,interfaces:[vt]},Object.defineProperty(Ot.prototype,"message",{get:function(){return this.message_q7r8iu$_0}}),Object.defineProperty(Ot.prototype,"cause",{get:function(){return this.cause_us9j0c$_0}}),Ot.$metadata$={kind:n,simpleName:"Error",interfaces:[x]},Object.defineProperty(St.prototype,"message",{get:function(){return this.message_8yp7un$_0}}),Object.defineProperty(St.prototype,"cause",{get:function(){return this.cause_th0jdv$_0}}),St.$metadata$={kind:n,simpleName:"Exception",interfaces:[x]},It.$metadata$={kind:n,simpleName:"RuntimeException",interfaces:[St]},At.$metadata$={kind:n,simpleName:"IllegalArgumentException",interfaces:[It]},jt.$metadata$={kind:n,simpleName:"IllegalStateException",interfaces:[It]},Tt.$metadata$={kind:n,simpleName:"IndexOutOfBoundsException",interfaces:[It]},Mt.$metadata$={kind:n,simpleName:"UnsupportedOperationException",interfaces:[It]},qt.$metadata$={kind:n,simpleName:"NumberFormatException",interfaces:[At]},Bt.$metadata$={kind:n,simpleName:"NullPointerException",interfaces:[It]},Ut.$metadata$={kind:n,simpleName:"ClassCastException",interfaces:[It]},Ft.$metadata$={kind:n,simpleName:"NoSuchElementException",interfaces:[It]},Vt.$metadata$={kind:n,simpleName:"ArithmeticException",interfaces:[It]},Kt.$metadata$={kind:m,simpleName:"Digit",interfaces:[]};var Zt=null;function Ht(){return null===Zt&&new Kt,Zt}function Jt(t,e){for(var n=0,r=t.length-1|0,i=-1,o=0;n<=r;)if(e>(o=t[i=(n+r|0)/2|0]))n=i+1|0;else {if(e===o)return i;r=i-1|0;}return i-(e=0;u--)e[n+u|0]=t[r+u|0];}function re(t){return t<0&&Jr(),t}function ie(t){return t}function oe(){kr.call(this);}function ae(){oe.call(this),this.modCount=0;}function se(t){this.$outer=t,this.index_0=0,this.last_0=-1;}function ue(t,e){this.$outer=t,se.call(this,this.$outer),Ar().checkPositionIndex_6xvm5r$(e,this.$outer.size),this.index_0=e;}function pe(t,e,n){ae.call(this),this.list_0=t,this.fromIndex_0=e,this._size_0=0,Ar().checkRangeIndexes_cub51b$(this.fromIndex_0,n,this.list_0.size),this._size_0=n-this.fromIndex_0|0;}function ce(){zr.call(this),this._keys_qe2m0n$_0=null,this._values_kxdlqh$_0=null;}function le(t,e){this.key_5xhq3d$_0=t,this._value_0=e;}function he(){me.call(this);}function fe(t){this.this$AbstractMutableMap=t,me.call(this);}function _e(t){this.closure$entryIterator=t;}function ye(t){this.this$AbstractMutableMap=t,oe.call(this);}function de(t){this.closure$entryIterator=t;}function me(){oe.call(this);}function $e(t){ae.call(this),this.array_hd7ov6$_0=t,this.isReadOnly_dbt2oh$_0=!1;}function ge(t){return t=t||Object.create($e.prototype),$e.call(t,[]),t}function ve(){}function be(){xe=this;}Qt.prototype.compare=function(t,e){return this.function$(t,e)},Qt.$metadata$={kind:d,simpleName:"Comparator",interfaces:[]},oe.prototype.remove_11rb$=function(t){this.checkIsMutable();for(var e=this.iterator();e.hasNext();)if(o(e.next(),t))return e.remove(),!0;return !1},oe.prototype.addAll_brywnq$=function(t){var e;this.checkIsMutable();var n=!1;for(e=t.iterator();e.hasNext();){var r=e.next();this.add_11rb$(r)&&(n=!0);}return n},oe.prototype.removeAll_brywnq$=function(e){var n;return this.checkIsMutable(),Xr(t.isType(this,et)?this:tn(),(n=e,function(t){return n.contains_11rb$(t)}))},oe.prototype.retainAll_brywnq$=function(e){var n;return this.checkIsMutable(),Xr(t.isType(this,et)?this:tn(),(n=e,function(t){return !n.contains_11rb$(t)}))},oe.prototype.clear=function(){this.checkIsMutable();for(var t=this.iterator();t.hasNext();)t.next(),t.remove();},oe.prototype.toJSON=function(){return this.toArray()},oe.prototype.checkIsMutable=function(){},oe.$metadata$={kind:n,simpleName:"AbstractMutableCollection",interfaces:[rt,kr]},ae.prototype.add_11rb$=function(t){return this.checkIsMutable(),this.add_wxm5ur$(this.size,t),!0},ae.prototype.addAll_u57x28$=function(t,e){var n,r;Ar().checkPositionIndex_6xvm5r$(t,this.size),this.checkIsMutable();var i=t,o=!1;for(n=e.iterator();n.hasNext();){var a=n.next();this.add_wxm5ur$((i=(r=i)+1|0,r),a),o=!0;}return o},ae.prototype.clear=function(){this.checkIsMutable(),this.removeRange_vux9f0$(0,this.size);},ae.prototype.removeAll_brywnq$=function(t){return this.checkIsMutable(),ei(this,(e=t,function(t){return e.contains_11rb$(t)}));var e;},ae.prototype.retainAll_brywnq$=function(t){return this.checkIsMutable(),ei(this,(e=t,function(t){return !e.contains_11rb$(t)}));var e;},ae.prototype.iterator=function(){return new se(this)},ae.prototype.contains_11rb$=function(t){return this.indexOf_11rb$(t)>=0},ae.prototype.indexOf_11rb$=function(t){var e;e=Hr(this);for(var n=0;n<=e;n++)if(o(this.get_za3lpa$(n),t))return n;return -1},ae.prototype.lastIndexOf_11rb$=function(t){for(var e=Hr(this);e>=0;e--)if(o(this.get_za3lpa$(e),t))return e;return -1},ae.prototype.listIterator=function(){return this.listIterator_za3lpa$(0)},ae.prototype.listIterator_za3lpa$=function(t){return new ue(this,t)},ae.prototype.subList_vux9f0$=function(t,e){return new pe(this,t,e)},ae.prototype.removeRange_vux9f0$=function(t,e){for(var n=this.listIterator_za3lpa$(t),r=e-t|0,i=0;i0},ue.prototype.nextIndex=function(){return this.index_0},ue.prototype.previous=function(){if(!this.hasPrevious())throw Dt();return this.last_0=(this.index_0=this.index_0-1|0,this.index_0),this.$outer.get_za3lpa$(this.last_0)},ue.prototype.previousIndex=function(){return this.index_0-1|0},ue.prototype.add_11rb$=function(t){this.$outer.add_wxm5ur$(this.index_0,t),this.index_0=this.index_0+1|0,this.last_0=-1;},ue.prototype.set_11rb$=function(t){if(-1===this.last_0)throw Lt("Call next() or previous() before updating element value with the iterator.".toString());this.$outer.set_wxm5ur$(this.last_0,t);},ue.$metadata$={kind:n,simpleName:"ListIteratorImpl",interfaces:[yt,se]},pe.prototype.add_wxm5ur$=function(t,e){Ar().checkPositionIndex_6xvm5r$(t,this._size_0),this.list_0.add_wxm5ur$(this.fromIndex_0+t|0,e),this._size_0=this._size_0+1|0;},pe.prototype.get_za3lpa$=function(t){return Ar().checkElementIndex_6xvm5r$(t,this._size_0),this.list_0.get_za3lpa$(this.fromIndex_0+t|0)},pe.prototype.removeAt_za3lpa$=function(t){Ar().checkElementIndex_6xvm5r$(t,this._size_0);var e=this.list_0.removeAt_za3lpa$(this.fromIndex_0+t|0);return this._size_0=this._size_0-1|0,e},pe.prototype.set_wxm5ur$=function(t,e){return Ar().checkElementIndex_6xvm5r$(t,this._size_0),this.list_0.set_wxm5ur$(this.fromIndex_0+t|0,e)},Object.defineProperty(pe.prototype,"size",{configurable:!0,get:function(){return this._size_0}}),pe.prototype.checkIsMutable=function(){this.list_0.checkIsMutable();},pe.$metadata$={kind:n,simpleName:"SubList",interfaces:[Ze,ae]},ae.$metadata$={kind:n,simpleName:"AbstractMutableList",interfaces:[ot,oe]},Object.defineProperty(le.prototype,"key",{get:function(){return this.key_5xhq3d$_0}}),Object.defineProperty(le.prototype,"value",{configurable:!0,get:function(){return this._value_0}}),le.prototype.setValue_11rc$=function(t){var e=this._value_0;return this._value_0=t,e},le.prototype.hashCode=function(){return qr().entryHashCode_9fthdn$(this)},le.prototype.toString=function(){return qr().entryToString_9fthdn$(this)},le.prototype.equals=function(t){return qr().entryEquals_js7fox$(this,t)},le.$metadata$={kind:n,simpleName:"SimpleEntry",interfaces:[lt]},he.prototype.contains_11rb$=function(t){return this.containsEntry_kw6fkd$(t)},he.prototype.remove_11rb$=function(t){return this.removeEntry_kw6fkd$(t)},he.$metadata$={kind:n,simpleName:"AbstractEntrySet",interfaces:[me]},ce.prototype.clear=function(){this.entries.clear();},fe.prototype.add_11rb$=function(t){throw Pt("Add is not supported on keys")},fe.prototype.clear=function(){this.this$AbstractMutableMap.clear();},fe.prototype.contains_11rb$=function(t){return this.this$AbstractMutableMap.containsKey_11rb$(t)},_e.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},_e.prototype.next=function(){return this.closure$entryIterator.next().key},_e.prototype.remove=function(){this.closure$entryIterator.remove();},_e.$metadata$={kind:n,interfaces:[ft]},fe.prototype.iterator=function(){return new _e(this.this$AbstractMutableMap.entries.iterator())},fe.prototype.remove_11rb$=function(t){return this.checkIsMutable(),!!this.this$AbstractMutableMap.containsKey_11rb$(t)&&(this.this$AbstractMutableMap.remove_11rb$(t),!0)},Object.defineProperty(fe.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMutableMap.size}}),fe.prototype.checkIsMutable=function(){this.this$AbstractMutableMap.checkIsMutable();},fe.$metadata$={kind:n,interfaces:[me]},Object.defineProperty(ce.prototype,"keys",{configurable:!0,get:function(){return null==this._keys_qe2m0n$_0&&(this._keys_qe2m0n$_0=new fe(this)),v(this._keys_qe2m0n$_0)}}),ce.prototype.putAll_a2k3zr$=function(t){var e;for(this.checkIsMutable(),e=t.entries.iterator();e.hasNext();){var n=e.next(),r=n.key,i=n.value;this.put_xwzc9p$(r,i);}},ye.prototype.add_11rb$=function(t){throw Pt("Add is not supported on values")},ye.prototype.clear=function(){this.this$AbstractMutableMap.clear();},ye.prototype.contains_11rb$=function(t){return this.this$AbstractMutableMap.containsValue_11rc$(t)},de.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},de.prototype.next=function(){return this.closure$entryIterator.next().value},de.prototype.remove=function(){this.closure$entryIterator.remove();},de.$metadata$={kind:n,interfaces:[ft]},ye.prototype.iterator=function(){return new de(this.this$AbstractMutableMap.entries.iterator())},Object.defineProperty(ye.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMutableMap.size}}),ye.prototype.checkIsMutable=function(){this.this$AbstractMutableMap.checkIsMutable();},ye.$metadata$={kind:n,interfaces:[oe]},Object.defineProperty(ce.prototype,"values",{configurable:!0,get:function(){return null==this._values_kxdlqh$_0&&(this._values_kxdlqh$_0=new ye(this)),v(this._values_kxdlqh$_0)}}),ce.prototype.remove_11rb$=function(t){this.checkIsMutable();for(var e=this.entries.iterator();e.hasNext();){var n=e.next(),r=n.key;if(o(t,r)){var i=n.value;return e.remove(),i}}return null},ce.prototype.checkIsMutable=function(){},ce.$metadata$={kind:n,simpleName:"AbstractMutableMap",interfaces:[ct,zr]},me.prototype.equals=function(e){return e===this||!!t.isType(e,at)&&Dr().setEquals_y8f7en$(this,e)},me.prototype.hashCode=function(){return Dr().unorderedHashCode_nykoif$(this)},me.$metadata$={kind:n,simpleName:"AbstractMutableSet",interfaces:[st,oe]},$e.prototype.build=function(){return this.checkIsMutable(),this.isReadOnly_dbt2oh$_0=!0,this},$e.prototype.trimToSize=function(){},$e.prototype.ensureCapacity_za3lpa$=function(t){},Object.defineProperty($e.prototype,"size",{configurable:!0,get:function(){return this.array_hd7ov6$_0.length}}),$e.prototype.get_za3lpa$=function(e){var n;return null==(n=this.array_hd7ov6$_0[this.rangeCheck_xcmk5o$_0(e)])||t.isType(n,b)?n:tn()},$e.prototype.set_wxm5ur$=function(e,n){var r;this.checkIsMutable(),this.rangeCheck_xcmk5o$_0(e);var i=this.array_hd7ov6$_0[e];return this.array_hd7ov6$_0[e]=n,null==(r=i)||t.isType(r,b)?r:tn()},$e.prototype.add_11rb$=function(t){return this.checkIsMutable(),this.array_hd7ov6$_0.push(t),this.modCount=this.modCount+1|0,!0},$e.prototype.add_wxm5ur$=function(t,e){this.checkIsMutable(),this.array_hd7ov6$_0.splice(this.insertionRangeCheck_xwivfl$_0(t),0,e),this.modCount=this.modCount+1|0;},$e.prototype.addAll_brywnq$=function(t){return this.checkIsMutable(),!t.isEmpty()&&(this.array_hd7ov6$_0=this.array_hd7ov6$_0.concat(Yt(t)),this.modCount=this.modCount+1|0,!0)},$e.prototype.addAll_u57x28$=function(t,e){return this.checkIsMutable(),this.insertionRangeCheck_xwivfl$_0(t),t===this.size?this.addAll_brywnq$(e):!e.isEmpty()&&(t===this.size?this.addAll_brywnq$(e):(this.array_hd7ov6$_0=0===t?Yt(e).concat(this.array_hd7ov6$_0):Wt(this.array_hd7ov6$_0,0,t).concat(Yt(e),Wt(this.array_hd7ov6$_0,t,this.size)),this.modCount=this.modCount+1|0,!0))},$e.prototype.removeAt_za3lpa$=function(t){return this.checkIsMutable(),this.rangeCheck_xcmk5o$_0(t),this.modCount=this.modCount+1|0,t===Hr(this)?this.array_hd7ov6$_0.pop():this.array_hd7ov6$_0.splice(t,1)[0]},$e.prototype.remove_11rb$=function(t){var e;this.checkIsMutable(),e=this.array_hd7ov6$_0;for(var n=0;n!==e.length;++n)if(o(this.array_hd7ov6$_0[n],t))return this.array_hd7ov6$_0.splice(n,1),this.modCount=this.modCount+1|0,!0;return !1},$e.prototype.removeRange_vux9f0$=function(t,e){this.checkIsMutable(),this.modCount=this.modCount+1|0,this.array_hd7ov6$_0.splice(t,e-t|0);},$e.prototype.clear=function(){this.checkIsMutable(),this.array_hd7ov6$_0=[],this.modCount=this.modCount+1|0;},$e.prototype.indexOf_11rb$=function(t){return E(this.array_hd7ov6$_0,t)},$e.prototype.lastIndexOf_11rb$=function(t){return z(this.array_hd7ov6$_0,t)},$e.prototype.toString=function(){return w(this.array_hd7ov6$_0)},$e.prototype.toArray_ro6dgy$=function(e){var n,r;if(e.lengththis.size&&(e[this.size]=null),e},$e.prototype.toArray=function(){return [].slice.call(this.array_hd7ov6$_0)},$e.prototype.checkIsMutable=function(){if(this.isReadOnly_dbt2oh$_0)throw Rt()},$e.prototype.rangeCheck_xcmk5o$_0=function(t){return Ar().checkElementIndex_6xvm5r$(t,this.size),t},$e.prototype.insertionRangeCheck_xwivfl$_0=function(t){return Ar().checkPositionIndex_6xvm5r$(t,this.size),t},$e.$metadata$={kind:n,simpleName:"ArrayList",interfaces:[Ze,ae,ot]},be.prototype.equals_oaftn8$=function(t,e){return o(t,e)},be.prototype.getHashCode_s8jyv4$=function(t){var e;return null!=(e=null!=t?C(t):null)?e:0},be.$metadata$={kind:m,simpleName:"HashCode",interfaces:[ve]};var xe=null;function we(){return null===xe&&new be,xe}function ke(){this.internalMap_uxhen5$_0=null,this.equality_vgh6cm$_0=null,this._entries_7ih87x$_0=null;}function Ce(t){this.$outer=t,he.call(this);}function Oe(t,e){return e=e||Object.create(ke.prototype),ce.call(e),ke.call(e),e.internalMap_uxhen5$_0=t,e.equality_vgh6cm$_0=t.equality,e}function Ne(t){return t=t||Object.create(ke.prototype),Oe(new je(we()),t),t}function Se(t,e,n){if(Ne(n=n||Object.create(ke.prototype)),!(t>=0))throw zt(("Negative initial capacity: "+t).toString());if(!(e>=0))throw zt(("Non-positive load factor: "+e).toString());return n}function Ie(){this.map_8be2vx$=null;}function Ee(t,e,n){return n=n||Object.create(Ie.prototype),me.call(n),Ie.call(n),n.map_8be2vx$=Se(t,e),n}function Ae(t,e){return Ee(t,0,e=e||Object.create(Ie.prototype)),e}function ze(t,e){return e=e||Object.create(Ie.prototype),me.call(e),Ie.call(e),e.map_8be2vx$=t,e}function je(t){this.equality_mamlu8$_0=t,this.backingMap_0=this.createJsMap(),this.size_x3bm7r$_0=0;}function Le(t){this.this$InternalHashCodeMap=t,this.state=-1,this.keys=Object.keys(t.backingMap_0),this.keyIndex=-1,this.chainOrEntry=null,this.isChain=!1,this.itemIndex=-1,this.lastEntry=null;}function Te(){}function Me(t){this.equality_qma612$_0=t,this.backingMap_0=this.createJsMap(),this.size_6u3ykz$_0=0;}function Re(){this.head_1lr44l$_0=null,this.map_97q5dv$_0=null,this.isReadOnly_uhyvn5$_0=!1;}function Pe(t,e,n){this.$outer=t,le.call(this,e,n),this.next_8be2vx$=null,this.prev_8be2vx$=null;}function qe(t){this.$outer=t,he.call(this);}function Be(t){this.$outer=t,this.last_0=null,this.next_0=null,this.next_0=this.$outer.$outer.head_1lr44l$_0;}function Ue(t){return Ne(t=t||Object.create(Re.prototype)),Re.call(t),t.map_97q5dv$_0=Ne(),t}function Fe(t,e,n){return Se(t,e,n=n||Object.create(Re.prototype)),Re.call(n),n.map_97q5dv$_0=Ne(),n}function De(){}function Ve(t){return t=t||Object.create(De.prototype),ze(Ue(),t),De.call(t),t}function We(t,e,n){return n=n||Object.create(De.prototype),ze(Fe(t,e),n),De.call(n),n}function Ke(t,e){return We(t,0,e=e||Object.create(De.prototype)),e}function Ze(){}function He(){}function Je(t){He.call(this),this.outputStream=t;}function Ge(){He.call(this),this.buffer="";}function Qe(){Ge.call(this);}function Ye(t,e){this.delegate_0=t,this.result_0=e;}function Xe(t,e){this.closure$context=t,this.closure$resumeWith=e;}function tn(){throw new Ut("Illegal cast")}function en(t){throw Lt(t)}function nn(){}function rn(){}function on(){}function an(t){this.jClass_1ppatx$_0=t;}function sn(t){var e;an.call(this,t),this.simpleName_m7mxi0$_0=null!=(e=t.$metadata$)?e.simpleName:null;}function un(t,e,n){an.call(this,t),this.givenSimpleName_0=e,this.isInstanceFunction_0=n;}function pn(){cn=this,an.call(this,Object),this.simpleName_lnzy73$_0="Nothing";}ve.$metadata$={kind:d,simpleName:"EqualityComparator",interfaces:[]},Ce.prototype.add_11rb$=function(t){throw Pt("Add is not supported on entries")},Ce.prototype.clear=function(){this.$outer.clear();},Ce.prototype.containsEntry_kw6fkd$=function(t){return this.$outer.containsEntry_8hxqw4$(t)},Ce.prototype.iterator=function(){return this.$outer.internalMap_uxhen5$_0.iterator()},Ce.prototype.removeEntry_kw6fkd$=function(t){return !!q(this,t)&&(this.$outer.remove_11rb$(t.key),!0)},Object.defineProperty(Ce.prototype,"size",{configurable:!0,get:function(){return this.$outer.size}}),Ce.$metadata$={kind:n,simpleName:"EntrySet",interfaces:[he]},ke.prototype.clear=function(){this.internalMap_uxhen5$_0.clear();},ke.prototype.containsKey_11rb$=function(t){return this.internalMap_uxhen5$_0.contains_11rb$(t)},ke.prototype.containsValue_11rc$=function(e){var n,r=this.internalMap_uxhen5$_0;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!1;break t}for(i=r.iterator();i.hasNext();){var o=i.next();if(this.equality_vgh6cm$_0.equals_oaftn8$(o.value,e)){n=!0;break t}}n=!1;}while(0);return n},Object.defineProperty(ke.prototype,"entries",{configurable:!0,get:function(){return null==this._entries_7ih87x$_0&&(this._entries_7ih87x$_0=this.createEntrySet()),v(this._entries_7ih87x$_0)}}),ke.prototype.createEntrySet=function(){return new Ce(this)},ke.prototype.get_11rb$=function(t){return this.internalMap_uxhen5$_0.get_11rb$(t)},ke.prototype.put_xwzc9p$=function(t,e){return this.internalMap_uxhen5$_0.put_xwzc9p$(t,e)},ke.prototype.remove_11rb$=function(t){return this.internalMap_uxhen5$_0.remove_11rb$(t)},Object.defineProperty(ke.prototype,"size",{configurable:!0,get:function(){return this.internalMap_uxhen5$_0.size}}),ke.$metadata$={kind:n,simpleName:"HashMap",interfaces:[ce,ct]},Ie.prototype.add_11rb$=function(t){return null==this.map_8be2vx$.put_xwzc9p$(t,this)},Ie.prototype.clear=function(){this.map_8be2vx$.clear();},Ie.prototype.contains_11rb$=function(t){return this.map_8be2vx$.containsKey_11rb$(t)},Ie.prototype.isEmpty=function(){return this.map_8be2vx$.isEmpty()},Ie.prototype.iterator=function(){return this.map_8be2vx$.keys.iterator()},Ie.prototype.remove_11rb$=function(t){return null!=this.map_8be2vx$.remove_11rb$(t)},Object.defineProperty(Ie.prototype,"size",{configurable:!0,get:function(){return this.map_8be2vx$.size}}),Ie.$metadata$={kind:n,simpleName:"HashSet",interfaces:[me,st]},Object.defineProperty(je.prototype,"equality",{get:function(){return this.equality_mamlu8$_0}}),Object.defineProperty(je.prototype,"size",{configurable:!0,get:function(){return this.size_x3bm7r$_0},set:function(t){this.size_x3bm7r$_0=t;}}),je.prototype.put_xwzc9p$=function(e,n){var r=this.equality.getHashCode_s8jyv4$(e),i=this.getChainOrEntryOrNull_0(r);if(null==i)this.backingMap_0[r]=new le(e,n);else {if(!t.isArray(i)){var o=i;return this.equality.equals_oaftn8$(o.key,e)?o.setValue_11rc$(n):(this.backingMap_0[r]=[o,new le(e,n)],this.size=this.size+1|0,null)}var a=i,s=this.findEntryInChain_0(a,e);if(null!=s)return s.setValue_11rc$(n);a.push(new le(e,n));}return this.size=this.size+1|0,null},je.prototype.remove_11rb$=function(e){var n,r=this.equality.getHashCode_s8jyv4$(e);if(null==(n=this.getChainOrEntryOrNull_0(r)))return null;var i=n;if(!t.isArray(i)){var o=i;return this.equality.equals_oaftn8$(o.key,e)?(delete this.backingMap_0[r],this.size=this.size-1|0,o.value):null}for(var a=i,s=0;s!==a.length;++s){var u=a[s];if(this.equality.equals_oaftn8$(e,u.key))return 1===a.length?(a.length=0,delete this.backingMap_0[r]):a.splice(s,1),this.size=this.size-1|0,u.value}return null},je.prototype.clear=function(){this.backingMap_0=this.createJsMap(),this.size=0;},je.prototype.contains_11rb$=function(t){return null!=this.getEntry_0(t)},je.prototype.get_11rb$=function(t){var e;return null!=(e=this.getEntry_0(t))?e.value:null},je.prototype.getEntry_0=function(e){var n;if(null==(n=this.getChainOrEntryOrNull_0(this.equality.getHashCode_s8jyv4$(e))))return null;var r=n;if(t.isArray(r)){var i=r;return this.findEntryInChain_0(i,e)}var o=r;return this.equality.equals_oaftn8$(o.key,e)?o:null},je.prototype.findEntryInChain_0=function(t,e){var n;t:do{var r;for(r=0;r!==t.length;++r){var i=t[r];if(this.equality.equals_oaftn8$(i.key,e)){n=i;break t}}n=null;}while(0);return n},Le.prototype.computeNext_0=function(){if(null!=this.chainOrEntry&&this.isChain){var e=this.chainOrEntry.length;if(this.itemIndex=this.itemIndex+1|0,this.itemIndex=0&&(this.buffer=this.buffer+e.substring(0,n),this.flush(),e=e.substring(n+1|0)),this.buffer=this.buffer+e;},Qe.prototype.flush=function(){console.log(this.buffer),this.buffer="";},Qe.$metadata$={kind:n,simpleName:"BufferedOutputToConsoleLog",interfaces:[Ge]},Object.defineProperty(Ye.prototype,"context",{configurable:!0,get:function(){return this.delegate_0.context}}),Ye.prototype.resumeWith_tl1gpc$=function(t){var e=this.result_0;if(e===io())this.result_0=t.value;else {if(e!==to())throw Lt("Already resumed");this.result_0=oo(),this.delegate_0.resumeWith_tl1gpc$(t);}},Ye.prototype.getOrThrow=function(){var e;if(this.result_0===io())return this.result_0=to(),to();var n=this.result_0;if(n===oo())e=to();else {if(t.isType(n,xa))throw n.exception;e=n;}return e},Ye.$metadata$={kind:n,simpleName:"SafeContinuation",interfaces:[ji]},Object.defineProperty(Xe.prototype,"context",{configurable:!0,get:function(){return this.closure$context}}),Xe.prototype.resumeWith_tl1gpc$=function(t){this.closure$resumeWith(t);},Xe.$metadata$={kind:n,interfaces:[ji]},nn.$metadata$={kind:d,simpleName:"Serializable",interfaces:[]},rn.$metadata$={kind:d,simpleName:"KCallable",interfaces:[]},on.$metadata$={kind:d,simpleName:"KClass",interfaces:[Vo]},Object.defineProperty(an.prototype,"jClass",{get:function(){return this.jClass_1ppatx$_0}}),Object.defineProperty(an.prototype,"qualifiedName",{configurable:!0,get:function(){throw new Ca}}),an.prototype.equals=function(e){return t.isType(e,an)&&o(this.jClass,e.jClass)},an.prototype.hashCode=function(){var t,e;return null!=(e=null!=(t=this.simpleName)?C(t):null)?e:0},an.prototype.toString=function(){return "class "+_(this.simpleName)},an.$metadata$={kind:n,simpleName:"KClassImpl",interfaces:[on]},Object.defineProperty(sn.prototype,"simpleName",{configurable:!0,get:function(){return this.simpleName_m7mxi0$_0}}),sn.prototype.isInstance_s8jyv4$=function(e){var n=this.jClass;return t.isType(e,n)},sn.$metadata$={kind:n,simpleName:"SimpleKClassImpl",interfaces:[an]},un.prototype.equals=function(e){return !!t.isType(e,un)&&an.prototype.equals.call(this,e)&&o(this.givenSimpleName_0,e.givenSimpleName_0)},Object.defineProperty(un.prototype,"simpleName",{configurable:!0,get:function(){return this.givenSimpleName_0}}),un.prototype.isInstance_s8jyv4$=function(t){return this.isInstanceFunction_0(t)},un.$metadata$={kind:n,simpleName:"PrimitiveKClassImpl",interfaces:[an]},Object.defineProperty(pn.prototype,"simpleName",{configurable:!0,get:function(){return this.simpleName_lnzy73$_0}}),pn.prototype.isInstance_s8jyv4$=function(t){return !1},Object.defineProperty(pn.prototype,"jClass",{configurable:!0,get:function(){throw Pt("There's no native JS class for Nothing type")}}),pn.prototype.equals=function(t){return t===this},pn.prototype.hashCode=function(){return 0},pn.$metadata$={kind:m,simpleName:"NothingKClassImpl",interfaces:[an]};var cn=null;function ln(){return null===cn&&new pn,cn}function hn(){}function fn(){}function _n(){}function yn(){}function dn(){}function mn(){}function $n(){}function gn(){Bn=this,this.anyClass=new un(Object,"Any",vn),this.numberClass=new un(Number,"Number",bn),this.nothingClass=ln(),this.booleanClass=new un(Boolean,"Boolean",xn),this.byteClass=new un(Number,"Byte",wn),this.shortClass=new un(Number,"Short",kn),this.intClass=new un(Number,"Int",Cn),this.floatClass=new un(Number,"Float",On),this.doubleClass=new un(Number,"Double",Nn),this.arrayClass=new un(Array,"Array",Sn),this.stringClass=new un(String,"String",In),this.throwableClass=new un(Error,"Throwable",En),this.booleanArrayClass=new un(Array,"BooleanArray",An),this.charArrayClass=new un(Uint16Array,"CharArray",zn),this.byteArrayClass=new un(Int8Array,"ByteArray",jn),this.shortArrayClass=new un(Int16Array,"ShortArray",Ln),this.intArrayClass=new un(Int32Array,"IntArray",Tn),this.longArrayClass=new un(Array,"LongArray",Mn),this.floatArrayClass=new un(Float32Array,"FloatArray",Rn),this.doubleArrayClass=new un(Float64Array,"DoubleArray",Pn);}function vn(e){return t.isType(e,b)}function bn(e){return t.isNumber(e)}function xn(t){return "boolean"==typeof t}function wn(t){return "number"==typeof t}function kn(t){return "number"==typeof t}function Cn(t){return "number"==typeof t}function On(t){return "number"==typeof t}function Nn(t){return "number"==typeof t}function Sn(e){return t.isArray(e)}function In(t){return "string"==typeof t}function En(e){return t.isType(e,x)}function An(e){return t.isBooleanArray(e)}function zn(e){return t.isCharArray(e)}function jn(e){return t.isByteArray(e)}function Ln(e){return t.isShortArray(e)}function Tn(e){return t.isIntArray(e)}function Mn(e){return t.isLongArray(e)}function Rn(e){return t.isFloatArray(e)}function Pn(e){return t.isDoubleArray(e)}Object.defineProperty(hn.prototype,"simpleName",{configurable:!0,get:function(){throw Lt("Unknown simpleName for ErrorKClass".toString())}}),Object.defineProperty(hn.prototype,"qualifiedName",{configurable:!0,get:function(){throw Lt("Unknown qualifiedName for ErrorKClass".toString())}}),hn.prototype.isInstance_s8jyv4$=function(t){throw Lt("Can's check isInstance on ErrorKClass".toString())},hn.prototype.equals=function(t){return t===this},hn.prototype.hashCode=function(){return 0},hn.$metadata$={kind:n,simpleName:"ErrorKClass",interfaces:[on]},fn.$metadata$={kind:d,simpleName:"KProperty",interfaces:[rn]},_n.$metadata$={kind:d,simpleName:"KMutableProperty",interfaces:[fn]},yn.$metadata$={kind:d,simpleName:"KProperty0",interfaces:[fn]},dn.$metadata$={kind:d,simpleName:"KMutableProperty0",interfaces:[_n,yn]},mn.$metadata$={kind:d,simpleName:"KProperty1",interfaces:[fn]},$n.$metadata$={kind:d,simpleName:"KMutableProperty1",interfaces:[_n,mn]},gn.prototype.functionClass=function(t){var e,n,r;if(null!=(e=qn[t]))n=e;else {var i=new un(Function,"Function"+t,(r=t,function(t){return "function"==typeof t&&t.length===r}));qn[t]=i,n=i;}return n},gn.$metadata$={kind:m,simpleName:"PrimitiveClasses",interfaces:[]};var qn,Bn=null;function Un(){return null===Bn&&new gn,Bn}function Fn(t){return Array.isArray(t)?Dn(t):Vn(t)}function Dn(t){switch(t.length){case 1:return Vn(t[0]);case 0:return ln();default:return new hn}}function Vn(t){var e;if(t===String)return Un().stringClass;var n=t.$metadata$;if(null!=n)if(null==n.$kClass$){var r=new sn(t);n.$kClass$=r,e=r;}else e=n.$kClass$;else e=new sn(t);return e}function Wn(t){t.lastIndex=0;}function Kn(){}function Zn(t){this.string_0=void 0!==t?t:"";}function Hn(t,e){return Jn(e=e||Object.create(Zn.prototype)),e}function Jn(t){return t=t||Object.create(Zn.prototype),Zn.call(t,""),t}function Gn(t){var e=String.fromCharCode(t).toUpperCase();return e.length>1?t:e.charCodeAt(0)}function Qn(t){return new ho(O.MIN_HIGH_SURROGATE,O.MAX_HIGH_SURROGATE).contains_mef7kx$(t)}function Yn(t){return new ho(O.MIN_LOW_SURROGATE,O.MAX_LOW_SURROGATE).contains_mef7kx$(t)}function Xn(t){var e;return null!=(e=Zo(t))?e:Jo(t)}function tr(t){if(!(2<=t&&t<=36))throw zt("radix "+t+" was not in valid range 2..36");return t}function er(t,e){var n;return (n=t>=48&&t<=57?t-48:t>=65&&t<=90?t-65+10|0:t>=97&&t<=122?t-97+10|0:t<128?-1:t>=65313&&t<=65338?t-65313+10|0:t>=65345&&t<=65370?t-65345+10|0:Gt(t))>=e?-1:n}function nr(t){return t.value}function rr(t,e){return V(t,"",e,void 0,void 0,void 0,nr)}function ir(t){this.value=t;}function or(e,n){var r,i;if(null==(i=t.isType(r=e,pa)?r:null))throw Pt("Retrieving groups by name is not supported on this platform.");return i.get_61zpoe$(n)}function ar(t,e){lr(),this.pattern=t,this.options=F(e),this.nativePattern_0=new RegExp(t,rr(e,"gu")),this.nativeStickyPattern_0=null,this.nativeMatchesEntirePattern_0=null;}function sr(t){return t.next()}function ur(t,e,n,r,i,o){vt.call(this,o),this.$controller=i,this.exceptionState_0=1,this.local$closure$input=t,this.local$this$Regex=e,this.local$closure$limit=n,this.local$match=void 0,this.local$nextStart=void 0,this.local$splitCount=void 0,this.local$foundMatch=void 0,this.local$$receiver=r;}function pr(){cr=this,this.patternEscape_0=new RegExp("[\\\\^$*+?.()|[\\]{}]","g"),this.replacementEscape_0=new RegExp("[\\\\$]","g"),this.nativeReplacementEscape_0=new RegExp("\\$","g");}Kn.$metadata$={kind:d,simpleName:"Appendable",interfaces:[]},Object.defineProperty(Zn.prototype,"length",{configurable:!0,get:function(){return this.string_0.length}}),Zn.prototype.charCodeAt=function(t){var e=this.string_0;if(!(t>=0&&t<=ta(e)))throw new Tt("index: "+t+", length: "+this.length+"}");return e.charCodeAt(t)},Zn.prototype.subSequence_vux9f0$=function(t,e){return this.string_0.substring(t,e)},Zn.prototype.append_s8itvh$=function(t){return this.string_0+=String.fromCharCode(t),this},Zn.prototype.append_gw00v9$=function(t){return this.string_0+=_(t),this},Zn.prototype.append_ezbsdh$=function(t,e,n){return this.appendRange_3peag4$(null!=t?t:"null",e,n)},Zn.prototype.reverse=function(){for(var t,e,n="",r=this.string_0.length-1|0;r>=0;){var i=this.string_0.charCodeAt((r=(t=r)-1|0,t));if(Yn(i)&&r>=0){var o=this.string_0.charCodeAt((r=(e=r)-1|0,e));n=Qn(o)?n+String.fromCharCode(a(o))+String.fromCharCode(a(i)):n+String.fromCharCode(a(i))+String.fromCharCode(a(o));}else n+=String.fromCharCode(i);}return this.string_0=n,this},Zn.prototype.append_s8jyv4$=function(t){return this.string_0+=_(t),this},Zn.prototype.append_6taknv$=function(t){return this.string_0+=t,this},Zn.prototype.append_4hbowm$=function(t){return this.string_0+=vr(t),this},Zn.prototype.append_61zpoe$=function(t){return this.append_pdl1vj$(t)},Zn.prototype.append_pdl1vj$=function(t){return this.string_0=this.string_0+(null!=t?t:"null"),this},Zn.prototype.capacity=function(){return this.length},Zn.prototype.ensureCapacity_za3lpa$=function(t){},Zn.prototype.indexOf_61zpoe$=function(t){return this.string_0.indexOf(t)},Zn.prototype.indexOf_bm4lxs$=function(t,e){return this.string_0.indexOf(t,e)},Zn.prototype.lastIndexOf_61zpoe$=function(t){return this.string_0.lastIndexOf(t)},Zn.prototype.lastIndexOf_bm4lxs$=function(t,e){return 0===t.length&&e<0?-1:this.string_0.lastIndexOf(t,e)},Zn.prototype.insert_fzusl$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_6t1mh3$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+String.fromCharCode(a(e))+this.string_0.substring(t),this},Zn.prototype.insert_7u455s$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+vr(e)+this.string_0.substring(t),this},Zn.prototype.insert_1u9bqd$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_6t2rgq$=function(t,e){return Ar().checkPositionIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+_(e)+this.string_0.substring(t),this},Zn.prototype.insert_19mbxw$=function(t,e){return this.insert_vqvrqt$(t,e)},Zn.prototype.insert_vqvrqt$=function(t,e){Ar().checkPositionIndex_6xvm5r$(t,this.length);var n=null!=e?e:"null";return this.string_0=this.string_0.substring(0,t)+n+this.string_0.substring(t),this},Zn.prototype.setLength_za3lpa$=function(t){if(t<0)throw zt("Negative new length: "+t+".");if(t<=this.length)this.string_0=this.string_0.substring(0,t);else for(var e=this.length;en)throw new Tt("startIndex: "+t+", length: "+n);if(t>e)throw zt("startIndex("+t+") > endIndex("+e+")")},Zn.prototype.deleteAt_za3lpa$=function(t){return Ar().checkElementIndex_6xvm5r$(t,this.length),this.string_0=this.string_0.substring(0,t)+this.string_0.substring(t+1|0),this},Zn.prototype.deleteRange_vux9f0$=function(t,e){return this.checkReplaceRange_0(t,e,this.length),this.string_0=this.string_0.substring(0,t)+this.string_0.substring(e),this},Zn.prototype.toCharArray_pqkatk$=function(t,e,n,r){var i;void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=this.length),Ar().checkBoundsIndexes_cub51b$(n,r,this.length),Ar().checkBoundsIndexes_cub51b$(e,e+r-n|0,t.length);for(var o=e,a=n;at.length)throw new Tt("index out of bounds: "+e+", input length: "+t.length);var n=this.initStickyPattern_0();return n.lastIndex=e,n.test(t.toString())},ar.prototype.find_905azu$=function(t,e){if(void 0===e&&(e=0),e<0||e>t.length)throw new Tt("Start index out of bounds: "+e+", input length: "+t.length);return dr(this.nativePattern_0,t.toString(),e,this.nativePattern_0)},ar.prototype.findAll_905azu$=function(t,e){if(void 0===e&&(e=0),e<0||e>t.length)throw new Tt("Start index out of bounds: "+e+", input length: "+t.length);return Oi((n=t,r=e,i=this,function(){return i.find_905azu$(n,r)}),sr);var n,r,i;},ar.prototype.matchEntire_6bul2c$=function(t){return dr(this.initMatchesEntirePattern_0(),t.toString(),0,this.nativePattern_0)},ar.prototype.matchAt_905azu$=function(t,e){if(e<0||e>t.length)throw new Tt("index out of bounds: "+e+", input length: "+t.length);return dr(this.initStickyPattern_0(),t.toString(),e,this.nativePattern_0)},ar.prototype.replace_x2uqeu$=function(t,e){return aa(e,92)||aa(e,36)?this.replace_20wsma$(t,(n=e,function(t){return mr(t,n)})):t.toString().replace(this.nativePattern_0,e);var n;},ar.prototype.replace_20wsma$=function(t,e){var n=this.find_905azu$(t);if(null==n)return t.toString();var r=0,i=t.length,o=Hn();do{var a=v(n);o.append_ezbsdh$(t,r,a.range.start),o.append_gw00v9$(e(a)),r=a.range.endInclusive+1|0,n=a.next();}while(r=f.size)throw new Tt("Group with index "+y+" does not exist");p.append_pdl1vj$(null!=(s=null!=(a=f.get_za3lpa$(y))?a.value:null)?s:""),u=_;}}else p.append_s8itvh$(c);}return p.toString()}function $r(t,e){for(var n=e;n0},Sr.prototype.nextIndex=function(){return this.index_0},Sr.prototype.previous=function(){if(!this.hasPrevious())throw Dt();return this.$outer.get_za3lpa$((this.index_0=this.index_0-1|0,this.index_0))},Sr.prototype.previousIndex=function(){return this.index_0-1|0},Sr.$metadata$={kind:n,simpleName:"ListIteratorImpl",interfaces:[_t,Nr]},Ir.prototype.checkElementIndex_6xvm5r$=function(t,e){if(t<0||t>=e)throw new Tt("index: "+t+", size: "+e)},Ir.prototype.checkPositionIndex_6xvm5r$=function(t,e){if(t<0||t>e)throw new Tt("index: "+t+", size: "+e)},Ir.prototype.checkRangeIndexes_cub51b$=function(t,e,n){if(t<0||e>n)throw new Tt("fromIndex: "+t+", toIndex: "+e+", size: "+n);if(t>e)throw zt("fromIndex: "+t+" > toIndex: "+e)},Ir.prototype.checkBoundsIndexes_cub51b$=function(t,e,n){if(t<0||e>n)throw new Tt("startIndex: "+t+", endIndex: "+e+", size: "+n);if(t>e)throw zt("startIndex: "+t+" > endIndex: "+e)},Ir.prototype.orderedHashCode_nykoif$=function(t){var e,n,r=1;for(e=t.iterator();e.hasNext();){var i=e.next();r=(31*r|0)+(null!=(n=null!=i?C(i):null)?n:0)|0;}return r},Ir.prototype.orderedEquals_e92ka7$=function(t,e){var n;if(t.size!==e.size)return !1;var r=e.iterator();for(n=t.iterator();n.hasNext();){var i=n.next(),a=r.next();if(!o(i,a))return !1}return !0},Ir.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Er=null;function Ar(){return null===Er&&new Ir,Er}function zr(){qr(),this._keys_up5z3z$_0=null,this._values_6nw1f1$_0=null;}function jr(t){this.this$AbstractMap=t,Br.call(this);}function Lr(t){this.closure$entryIterator=t;}function Tr(t){this.this$AbstractMap=t,kr.call(this);}function Mr(t){this.closure$entryIterator=t;}function Rr(){Pr=this;}Cr.$metadata$={kind:n,simpleName:"AbstractList",interfaces:[it,kr]},zr.prototype.containsKey_11rb$=function(t){return null!=this.implFindEntry_8k1i24$_0(t)},zr.prototype.containsValue_11rc$=function(e){var n,r=this.entries;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!1;break t}for(i=r.iterator();i.hasNext();){var a=i.next();if(o(a.value,e)){n=!0;break t}}n=!1;}while(0);return n},zr.prototype.containsEntry_8hxqw4$=function(e){if(!t.isType(e,pt))return !1;var n=e.key,r=e.value,i=(t.isType(this,ut)?this:y()).get_11rb$(n);if(!o(r,i))return !1;var a=null==i;return a&&(a=!(t.isType(this,ut)?this:y()).containsKey_11rb$(n)),!a},zr.prototype.equals=function(e){if(e===this)return !0;if(!t.isType(e,ut))return !1;if(this.size!==e.size)return !1;var n,r=e.entries;t:do{var i;if(t.isType(r,nt)&&r.isEmpty()){n=!0;break t}for(i=r.iterator();i.hasNext();){var o=i.next();if(!this.containsEntry_8hxqw4$(o)){n=!1;break t}}n=!0;}while(0);return n},zr.prototype.get_11rb$=function(t){var e;return null!=(e=this.implFindEntry_8k1i24$_0(t))?e.value:null},zr.prototype.hashCode=function(){return C(this.entries)},zr.prototype.isEmpty=function(){return 0===this.size},Object.defineProperty(zr.prototype,"size",{configurable:!0,get:function(){return this.entries.size}}),jr.prototype.contains_11rb$=function(t){return this.this$AbstractMap.containsKey_11rb$(t)},Lr.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},Lr.prototype.next=function(){return this.closure$entryIterator.next().key},Lr.$metadata$={kind:n,interfaces:[ht]},jr.prototype.iterator=function(){return new Lr(this.this$AbstractMap.entries.iterator())},Object.defineProperty(jr.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMap.size}}),jr.$metadata$={kind:n,interfaces:[Br]},Object.defineProperty(zr.prototype,"keys",{configurable:!0,get:function(){return null==this._keys_up5z3z$_0&&(this._keys_up5z3z$_0=new jr(this)),v(this._keys_up5z3z$_0)}}),zr.prototype.toString=function(){return V(this.entries,", ","{","}",void 0,void 0,(t=this,function(e){return t.toString_55he67$_0(e)}));var t;},zr.prototype.toString_55he67$_0=function(t){return this.toString_kthv8s$_0(t.key)+"="+this.toString_kthv8s$_0(t.value)},zr.prototype.toString_kthv8s$_0=function(t){return t===this?"(this Map)":_(t)},Tr.prototype.contains_11rb$=function(t){return this.this$AbstractMap.containsValue_11rc$(t)},Mr.prototype.hasNext=function(){return this.closure$entryIterator.hasNext()},Mr.prototype.next=function(){return this.closure$entryIterator.next().value},Mr.$metadata$={kind:n,interfaces:[ht]},Tr.prototype.iterator=function(){return new Mr(this.this$AbstractMap.entries.iterator())},Object.defineProperty(Tr.prototype,"size",{configurable:!0,get:function(){return this.this$AbstractMap.size}}),Tr.$metadata$={kind:n,interfaces:[kr]},Object.defineProperty(zr.prototype,"values",{configurable:!0,get:function(){return null==this._values_6nw1f1$_0&&(this._values_6nw1f1$_0=new Tr(this)),v(this._values_6nw1f1$_0)}}),zr.prototype.implFindEntry_8k1i24$_0=function(t){var e,n=this.entries;t:do{var r;for(r=n.iterator();r.hasNext();){var i=r.next();if(o(i.key,t)){e=i;break t}}e=null;}while(0);return e},Rr.prototype.entryHashCode_9fthdn$=function(t){var e,n,r,i;return (null!=(n=null!=(e=t.key)?C(e):null)?n:0)^(null!=(i=null!=(r=t.value)?C(r):null)?i:0)},Rr.prototype.entryToString_9fthdn$=function(t){return _(t.key)+"="+_(t.value)},Rr.prototype.entryEquals_js7fox$=function(e,n){return !!t.isType(n,pt)&&o(e.key,n.key)&&o(e.value,n.value)},Rr.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Pr=null;function qr(){return null===Pr&&new Rr,Pr}function Br(){Dr(),kr.call(this);}function Ur(){Fr=this;}zr.$metadata$={kind:n,simpleName:"AbstractMap",interfaces:[ut]},Br.prototype.equals=function(e){return e===this||!!t.isType(e,at)&&Dr().setEquals_y8f7en$(this,e)},Br.prototype.hashCode=function(){return Dr().unorderedHashCode_nykoif$(this)},Ur.prototype.unorderedHashCode_nykoif$=function(t){var e,n=0;for(e=t.iterator();e.hasNext();){var r,i=e.next();n=n+(null!=(r=null!=i?C(i):null)?r:0)|0;}return n},Ur.prototype.setEquals_y8f7en$=function(t,e){return t.size===e.size&&t.containsAll_brywnq$(e)},Ur.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Fr=null;function Dr(){return null===Fr&&new Ur,Fr}function Vr(){Wr=this;}Br.$metadata$={kind:n,simpleName:"AbstractSet",interfaces:[at,kr]},Vr.prototype.hasNext=function(){return !1},Vr.prototype.hasPrevious=function(){return !1},Vr.prototype.nextIndex=function(){return 0},Vr.prototype.previousIndex=function(){return -1},Vr.prototype.next=function(){throw Dt()},Vr.prototype.previous=function(){throw Dt()},Vr.$metadata$={kind:m,simpleName:"EmptyIterator",interfaces:[_t]};var Wr=null;function Kr(){return null===Wr&&new Vr,Wr}function Zr(t){return new mo(0,t.size-1|0)}function Hr(t){return t.size-1|0}function Jr(){throw new Vt("Index overflow has happened.")}function Xr(t,e){return ti(t,e,!0)}function ti(t,e,n){for(var r={v:!1},i=t.iterator();i.hasNext();)e(i.next())===n&&(i.remove(),r.v=!0);return r.v}function ei(e,n){return function(e,n,r){var i,o,a;if(!t.isType(e,Ze))return ti(t.isType(i=e,et)?i:tn(),n,r);var s=0;o=Hr(e);for(var u=0;u<=o;u++){var p=e.get_za3lpa$(u);n(p)!==r&&(s!==u&&e.set_wxm5ur$(s,p),s=s+1|0);}if(s=a;c--)e.removeAt_za3lpa$(c);return !0}return !1}(e,n,!0)}function ni(){}function ri(){}function ii(){}function oi(){}function ai(t){this.closure$iterator=t;}function si(t){return new ai((e=t,function(){return ui(e)}));var e;}function ui(t){var e=new ci;return e.nextStep=Ct(t,e,e),e}function pi(){}function ci(){pi.call(this),this.state_0=0,this.nextValue_0=null,this.nextIterator_0=null,this.nextStep=null;}function li(){return _i()}function hi(){fi=this;}ni.prototype.next=function(){return a(this.nextChar())},ni.$metadata$={kind:n,simpleName:"CharIterator",interfaces:[ht]},ri.prototype.next=function(){return this.nextInt()},ri.$metadata$={kind:n,simpleName:"IntIterator",interfaces:[ht]},ii.prototype.next=function(){return this.nextLong()},ii.$metadata$={kind:n,simpleName:"LongIterator",interfaces:[ht]},oi.$metadata$={kind:d,simpleName:"Sequence",interfaces:[]},ai.prototype.iterator=function(){return this.closure$iterator()},ai.$metadata$={kind:n,interfaces:[oi]},pi.prototype.yieldAll_p1ys8y$=function(e,n){if(!t.isType(e,nt)||!e.isEmpty())return this.yieldAll_1phuh2$(e.iterator(),n)},pi.prototype.yieldAll_swo9gw$=function(t,e){return this.yieldAll_1phuh2$(t.iterator(),e)},pi.$metadata$={kind:n,simpleName:"SequenceScope",interfaces:[]},ci.prototype.hasNext=function(){for(;;){switch(this.state_0){case 0:break;case 1:if(v(this.nextIterator_0).hasNext())return this.state_0=2,!0;this.nextIterator_0=null;break;case 4:return !1;case 3:case 2:return !0;default:throw this.exceptionalState_0()}this.state_0=5;var t=v(this.nextStep);this.nextStep=null,t.resumeWith_tl1gpc$(new $a($t()));}},ci.prototype.next=function(){var e;switch(this.state_0){case 0:case 1:return this.nextNotReady_0();case 2:return this.state_0=1,v(this.nextIterator_0).next();case 3:this.state_0=0;var n=null==(e=this.nextValue_0)||t.isType(e,b)?e:tn();return this.nextValue_0=null,n;default:throw this.exceptionalState_0()}},ci.prototype.nextNotReady_0=function(){if(this.hasNext())return this.next();throw Dt()},ci.prototype.exceptionalState_0=function(){switch(this.state_0){case 4:return Dt();case 5:return Lt("Iterator has failed.");default:return Lt("Unexpected state of the iterator: "+this.state_0)}},ci.prototype.yield_11rb$=function(t,e){return this.nextValue_0=t,this.state_0=3,(n=this,function(t){return n.nextStep=t,to()})(e);var n;},ci.prototype.yieldAll_1phuh2$=function(t,e){if(t.hasNext())return this.nextIterator_0=t,this.state_0=2,(n=this,function(t){return n.nextStep=t,to()})(e);var n;},ci.prototype.resumeWith_tl1gpc$=function(e){var n;ka(e),null==(n=e.value)||t.isType(n,b)||y(),this.state_0=4;},Object.defineProperty(ci.prototype,"context",{configurable:!0,get:function(){return Wi()}}),ci.$metadata$={kind:n,simpleName:"SequenceBuilderIterator",interfaces:[ji,ht,pi]},hi.prototype.iterator=function(){return Kr()},hi.prototype.drop_za3lpa$=function(t){return _i()},hi.prototype.take_za3lpa$=function(t){return _i()},hi.$metadata$={kind:m,simpleName:"EmptySequence",interfaces:[gi,oi]};var fi=null;function _i(){return null===fi&&new hi,fi}function yi(t,e){this.sequence_0=t,this.transformer_0=e;}function di(t){this.this$TransformingSequence=t,this.iterator=t.sequence_0.iterator();}function mi(t,e,n){this.sequence_0=t,this.transformer_0=e,this.iterator_0=n;}function $i(t){this.this$FlatteningSequence=t,this.iterator=t.sequence_0.iterator(),this.itemIterator=null;}function gi(){}function vi(t,e,n){if(this.sequence_0=t,this.startIndex_0=e,this.endIndex_0=n,!(this.startIndex_0>=0))throw zt(("startIndex should be non-negative, but is "+this.startIndex_0).toString());if(!(this.endIndex_0>=0))throw zt(("endIndex should be non-negative, but is "+this.endIndex_0).toString());if(!(this.endIndex_0>=this.startIndex_0))throw zt(("endIndex should be not less than startIndex, but was "+this.endIndex_0+" < "+this.startIndex_0).toString())}function bi(t){this.this$SubSequence=t,this.iterator=t.sequence_0.iterator(),this.position=0;}function xi(t,e){if(this.sequence_0=t,this.count_0=e,!(this.count_0>=0))throw zt(("count must be non-negative, but was "+this.count_0+".").toString())}function wi(t){this.left=t.count_0,this.iterator=t.sequence_0.iterator();}function ki(t,e){this.getInitialValue_0=t,this.getNextValue_0=e;}function Ci(t){this.this$GeneratorSequence=t,this.nextItem=null,this.nextState=-2;}function Oi(t,e){return new ki(t,e)}function Ni(){Si=this,this.serialVersionUID_0=N;}di.prototype.next=function(){return this.this$TransformingSequence.transformer_0(this.iterator.next())},di.prototype.hasNext=function(){return this.iterator.hasNext()},di.$metadata$={kind:n,interfaces:[ht]},yi.prototype.iterator=function(){return new di(this)},yi.prototype.flatten_1tglza$=function(t){return new mi(this.sequence_0,this.transformer_0,t)},yi.$metadata$={kind:n,simpleName:"TransformingSequence",interfaces:[oi]},$i.prototype.next=function(){if(!this.ensureItemIterator_0())throw Dt();return v(this.itemIterator).next()},$i.prototype.hasNext=function(){return this.ensureItemIterator_0()},$i.prototype.ensureItemIterator_0=function(){var t;for(!1===(null!=(t=this.itemIterator)?t.hasNext():null)&&(this.itemIterator=null);null==this.itemIterator;){if(!this.iterator.hasNext())return !1;var e=this.iterator.next(),n=this.this$FlatteningSequence.iterator_0(this.this$FlatteningSequence.transformer_0(e));if(n.hasNext())return this.itemIterator=n,!0}return !0},$i.$metadata$={kind:n,interfaces:[ht]},mi.prototype.iterator=function(){return new $i(this)},mi.$metadata$={kind:n,simpleName:"FlatteningSequence",interfaces:[oi]},gi.$metadata$={kind:d,simpleName:"DropTakeSequence",interfaces:[oi]},Object.defineProperty(vi.prototype,"count_0",{configurable:!0,get:function(){return this.endIndex_0-this.startIndex_0|0}}),vi.prototype.drop_za3lpa$=function(t){return t>=this.count_0?li():new vi(this.sequence_0,this.startIndex_0+t|0,this.endIndex_0)},vi.prototype.take_za3lpa$=function(t){return t>=this.count_0?this:new vi(this.sequence_0,this.startIndex_0,this.startIndex_0+t|0)},bi.prototype.drop_0=function(){for(;this.position=this.this$SubSequence.endIndex_0)throw Dt();return this.position=this.position+1|0,this.iterator.next()},bi.$metadata$={kind:n,interfaces:[ht]},vi.prototype.iterator=function(){return new bi(this)},vi.$metadata$={kind:n,simpleName:"SubSequence",interfaces:[gi,oi]},xi.prototype.drop_za3lpa$=function(t){return t>=this.count_0?li():new vi(this.sequence_0,t,this.count_0)},xi.prototype.take_za3lpa$=function(t){return t>=this.count_0?this:new xi(this.sequence_0,t)},wi.prototype.next=function(){if(0===this.left)throw Dt();return this.left=this.left-1|0,this.iterator.next()},wi.prototype.hasNext=function(){return this.left>0&&this.iterator.hasNext()},wi.$metadata$={kind:n,interfaces:[ht]},xi.prototype.iterator=function(){return new wi(this)},xi.$metadata$={kind:n,simpleName:"TakeSequence",interfaces:[gi,oi]},Ci.prototype.calcNext_0=function(){this.nextItem=-2===this.nextState?this.this$GeneratorSequence.getInitialValue_0():this.this$GeneratorSequence.getNextValue_0(v(this.nextItem)),this.nextState=null==this.nextItem?0:1;},Ci.prototype.next=function(){var e;if(this.nextState<0&&this.calcNext_0(),0===this.nextState)throw Dt();var n=t.isType(e=this.nextItem,b)?e:tn();return this.nextState=-1,n},Ci.prototype.hasNext=function(){return this.nextState<0&&this.calcNext_0(),1===this.nextState},Ci.$metadata$={kind:n,interfaces:[ht]},ki.prototype.iterator=function(){return new Ci(this)},ki.$metadata$={kind:n,simpleName:"GeneratorSequence",interfaces:[oi]},Ni.prototype.equals=function(e){return t.isType(e,at)&&e.isEmpty()},Ni.prototype.hashCode=function(){return 0},Ni.prototype.toString=function(){return "[]"},Object.defineProperty(Ni.prototype,"size",{configurable:!0,get:function(){return 0}}),Ni.prototype.isEmpty=function(){return !0},Ni.prototype.contains_11rb$=function(t){return !1},Ni.prototype.containsAll_brywnq$=function(t){return t.isEmpty()},Ni.prototype.iterator=function(){return Kr()},Ni.prototype.readResolve_0=function(){return Ii()},Ni.$metadata$={kind:m,simpleName:"EmptySet",interfaces:[nn,at]};var Si=null;function Ii(){return null===Si&&new Ni,Si}function Ei(){return Ii()}function Ai(t){return M(t,Ae(t.length))}function zi(t){switch(t.size){case 0:return Ei();case 1:return ee(t.iterator().next());default:return t}}function ji(){}function Li(){Ri();}function Ti(){Mi=this;}ji.$metadata$={kind:d,simpleName:"Continuation",interfaces:[]},r("kotlin.kotlin.coroutines.suspendCoroutine_922awp$",i((function(){var n=e.kotlin.coroutines.intrinsics.intercepted_f9mg25$,r=e.kotlin.coroutines.SafeContinuation_init_wj8d80$;return function(e,i){return t.suspendCall((o=e,function(t){var e=r(n(t));return o(e),e.getOrThrow()})(t.coroutineReceiver())),t.coroutineResult(t.coroutineReceiver());var o;}}))),Ti.$metadata$={kind:m,simpleName:"Key",interfaces:[Bi]};var Mi=null;function Ri(){return null===Mi&&new Ti,Mi}function Pi(){}function qi(t,e){var n=t.minusKey_yeqjby$(e.key);if(n===Wi())return e;var r=n.get_j3r2sn$(Ri());if(null==r)return new Ki(n,e);var i=n.minusKey_yeqjby$(Ri());return i===Wi()?new Ki(e,r):new Ki(new Ki(i,e),r)}function Bi(){}function Ui(){}function Fi(t){this.key_no4tas$_0=t;}function Di(){Vi=this,this.serialVersionUID_0=u;}Pi.prototype.plus_1fupul$=function(t){return t===Wi()?this:t.fold_3cc69b$(this,qi)},Bi.$metadata$={kind:d,simpleName:"Key",interfaces:[]},Ui.prototype.get_j3r2sn$=function(e){return o(this.key,e)?t.isType(this,Ui)?this:tn():null},Ui.prototype.fold_3cc69b$=function(t,e){return e(t,this)},Ui.prototype.minusKey_yeqjby$=function(t){return o(this.key,t)?Wi():this},Ui.$metadata$={kind:d,simpleName:"Element",interfaces:[Pi]},Pi.$metadata$={kind:d,simpleName:"CoroutineContext",interfaces:[]},Di.prototype.readResolve_0=function(){return Wi()},Di.prototype.get_j3r2sn$=function(t){return null},Di.prototype.fold_3cc69b$=function(t,e){return t},Di.prototype.plus_1fupul$=function(t){return t},Di.prototype.minusKey_yeqjby$=function(t){return this},Di.prototype.hashCode=function(){return 0},Di.prototype.toString=function(){return "EmptyCoroutineContext"},Di.$metadata$={kind:m,simpleName:"EmptyCoroutineContext",interfaces:[nn,Pi]};var Vi=null;function Wi(){return null===Vi&&new Di,Vi}function Ki(t,e){this.left_0=t,this.element_0=e;}function Zi(t,e){return 0===t.length?e.toString():t+", "+e}function Hi(t){this.elements=t;}Ki.prototype.get_j3r2sn$=function(e){for(var n,r=this;;){if(null!=(n=r.element_0.get_j3r2sn$(e)))return n;var i=r.left_0;if(!t.isType(i,Ki))return i.get_j3r2sn$(e);r=i;}},Ki.prototype.fold_3cc69b$=function(t,e){return e(this.left_0.fold_3cc69b$(t,e),this.element_0)},Ki.prototype.minusKey_yeqjby$=function(t){if(null!=this.element_0.get_j3r2sn$(t))return this.left_0;var e=this.left_0.minusKey_yeqjby$(t);return e===this.left_0?this:e===Wi()?this.element_0:new Ki(e,this.element_0)},Ki.prototype.size_0=function(){for(var e,n,r=this,i=2;;){if(null==(n=t.isType(e=r.left_0,Ki)?e:null))return i;r=n,i=i+1|0;}},Ki.prototype.contains_0=function(t){return o(this.get_j3r2sn$(t.key),t)},Ki.prototype.containsAll_0=function(e){for(var n,r=e;;){if(!this.contains_0(r.element_0))return !1;var i=r.left_0;if(!t.isType(i,Ki))return this.contains_0(t.isType(n=i,Ui)?n:tn());r=i;}},Ki.prototype.equals=function(e){return this===e||t.isType(e,Ki)&&e.size_0()===this.size_0()&&e.containsAll_0(this)},Ki.prototype.hashCode=function(){return C(this.left_0)+C(this.element_0)|0},Ki.prototype.toString=function(){return "["+this.fold_3cc69b$("",Zi)+"]"},Ki.prototype.writeReplace_0=function(){var e,n,r,i=this.size_0(),o=t.newArray(i,null),a={v:0};if(this.fold_3cc69b$($t(),(n=o,r=a,function(t,e){var i;return n[(i=r.v,r.v=i+1|0,i)]=e,dt})),a.v!==i)throw Lt("Check failed.".toString());return new Hi(t.isArray(e=o)?e:tn())};var Gi,Qi,Yi;function to(){return ro()}function eo(t,e){$.call(this),this.name$=t,this.ordinal$=e;}function no(){no=function(){},Gi=new eo("COROUTINE_SUSPENDED",0),Qi=new eo("UNDECIDED",1),Yi=new eo("RESUMED",2);}function ro(){return no(),Gi}function io(){return no(),Qi}function oo(){return no(),Yi}function ao(t,e){var n=t%e|0;return n>=0?n:n+e|0}function so(t,e){var n=t.modulo(e);return n.toNumber()>=0?n:n.add(e)}function uo(t,e,n){return ao(ao(t,n)-ao(e,n)|0,n)}function po(t,e,n){return so(so(t,n).subtract(so(e,n)),n)}function co(t,e,n){if(n>0)return t>=e?e:e-uo(e,t,n)|0;if(n<0)return t<=e?e:e+uo(t,e,0|-n)|0;throw zt("Step is zero.")}function lo(t,e,n){if(n.toNumber()>0)return t.compareTo_11rb$(e)>=0?e:e.subtract(po(e,t,n));if(n.toNumber()<0)return t.compareTo_11rb$(e)<=0?e:e.add(po(t,e,n.unaryMinus()));throw zt("Step is zero.")}function ho(t,e){yo(),So.call(this,t,e,1);}function fo(){_o=this,this.EMPTY=new ho(c(1),c(0));}Hi.prototype.readResolve_0=function(){var t,e=this.elements,n=Wi();for(t=0;t!==e.length;++t){var r=e[t];n=n.plus_1fupul$(r);}return n},Hi.$metadata$={kind:n,simpleName:"Serialized",interfaces:[nn]},Ki.$metadata$={kind:n,simpleName:"CombinedContext",interfaces:[nn,Pi]},r("kotlin.kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn_zb0pmy$",i((function(){var t=e.kotlin.NotImplementedError;return function(e,n){throw new t("Implementation of suspendCoroutineUninterceptedOrReturn is intrinsic")}}))),eo.$metadata$={kind:n,simpleName:"CoroutineSingletons",interfaces:[$]},eo.values=function(){return [ro(),io(),oo()]},eo.valueOf_61zpoe$=function(t){switch(t){case"COROUTINE_SUSPENDED":return ro();case"UNDECIDED":return io();case"RESUMED":return oo();default:en("No enum constant kotlin.coroutines.intrinsics.CoroutineSingletons."+t);}},Object.defineProperty(ho.prototype,"start",{configurable:!0,get:function(){return a(this.first)}}),Object.defineProperty(ho.prototype,"endInclusive",{configurable:!0,get:function(){return a(this.last)}}),Object.defineProperty(ho.prototype,"endExclusive",{configurable:!0,get:function(){if(this.last===O.MAX_VALUE)throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return a(c(this.last+1))}}),ho.prototype.contains_mef7kx$=function(t){return this.first<=t&&t<=this.last},ho.prototype.isEmpty=function(){return this.first>this.last},ho.prototype.equals=function(e){return t.isType(e,ho)&&(this.isEmpty()&&e.isEmpty()||this.first===e.first&&this.last===e.last)},ho.prototype.hashCode=function(){return this.isEmpty()?-1:(31*(0|this.first)|0)+(0|this.last)|0},ho.prototype.toString=function(){return String.fromCharCode(this.first)+".."+String.fromCharCode(this.last)},fo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var _o=null;function yo(){return null===_o&&new fo,_o}function mo(t,e){vo(),zo.call(this,t,e,1);}function $o(){go=this,this.EMPTY=new mo(1,0);}ho.$metadata$={kind:n,simpleName:"CharRange",interfaces:[Uo,Bo,So]},Object.defineProperty(mo.prototype,"start",{configurable:!0,get:function(){return this.first}}),Object.defineProperty(mo.prototype,"endInclusive",{configurable:!0,get:function(){return this.last}}),Object.defineProperty(mo.prototype,"endExclusive",{configurable:!0,get:function(){if(2147483647===this.last)throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return this.last+1|0}}),mo.prototype.contains_mef7kx$=function(t){return this.first<=t&&t<=this.last},mo.prototype.isEmpty=function(){return this.first>this.last},mo.prototype.equals=function(e){return t.isType(e,mo)&&(this.isEmpty()&&e.isEmpty()||this.first===e.first&&this.last===e.last)},mo.prototype.hashCode=function(){return this.isEmpty()?-1:(31*this.first|0)+this.last|0},mo.prototype.toString=function(){return this.first.toString()+".."+this.last},$o.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var go=null;function vo(){return null===go&&new $o,go}function bo(t,e){ko(),Mo.call(this,t,e,S);}function xo(){wo=this,this.EMPTY=new bo(S,u);}mo.$metadata$={kind:n,simpleName:"IntRange",interfaces:[Uo,Bo,zo]},Object.defineProperty(bo.prototype,"start",{configurable:!0,get:function(){return this.first}}),Object.defineProperty(bo.prototype,"endInclusive",{configurable:!0,get:function(){return this.last}}),Object.defineProperty(bo.prototype,"endExclusive",{configurable:!0,get:function(){if(o(this.last,f))throw Lt("Cannot return the exclusive upper bound of a range that includes MAX_VALUE.".toString());return this.last.add(t.Long.fromInt(1))}}),bo.prototype.contains_mef7kx$=function(t){return this.first.compareTo_11rb$(t)<=0&&t.compareTo_11rb$(this.last)<=0},bo.prototype.isEmpty=function(){return this.first.compareTo_11rb$(this.last)>0},bo.prototype.equals=function(e){return t.isType(e,bo)&&(this.isEmpty()&&e.isEmpty()||o(this.first,e.first)&&o(this.last,e.last))},bo.prototype.hashCode=function(){return this.isEmpty()?-1:t.Long.fromInt(31).multiply(this.first.xor(this.first.shiftRightUnsigned(32))).add(this.last.xor(this.last.shiftRightUnsigned(32))).toInt()},bo.prototype.toString=function(){return this.first.toString()+".."+this.last.toString()},xo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var wo=null;function ko(){return null===wo&&new xo,wo}function Co(t,e,n){ni.call(this),this.step=n,this.finalElement_0=0|e,this.hasNext_0=this.step>0?t<=e:t>=e,this.next_0=this.hasNext_0?0|t:this.finalElement_0;}function Oo(t,e,n){ri.call(this),this.step=n,this.finalElement_0=e,this.hasNext_0=this.step>0?t<=e:t>=e,this.next_0=this.hasNext_0?t:this.finalElement_0;}function No(t,e,n){ii.call(this),this.step=n,this.finalElement_0=e,this.hasNext_0=this.step.toNumber()>0?t.compareTo_11rb$(e)<=0:t.compareTo_11rb$(e)>=0,this.next_0=this.hasNext_0?t:this.finalElement_0;}function So(t,e,n){if(Ao(),0===n)throw zt("Step must be non-zero.");if(-2147483648===n)throw zt("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=c(co(0|t,0|e,n)),this.step=n;}function Io(){Eo=this;}bo.$metadata$={kind:n,simpleName:"LongRange",interfaces:[Uo,Bo,Mo]},Co.prototype.hasNext=function(){return this.hasNext_0},Co.prototype.nextChar=function(){var t=this.next_0;if(t===this.finalElement_0){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0+this.step|0;return c(t)},Co.$metadata$={kind:n,simpleName:"CharProgressionIterator",interfaces:[ni]},Oo.prototype.hasNext=function(){return this.hasNext_0},Oo.prototype.nextInt=function(){var t=this.next_0;if(t===this.finalElement_0){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0+this.step|0;return t},Oo.$metadata$={kind:n,simpleName:"IntProgressionIterator",interfaces:[ri]},No.prototype.hasNext=function(){return this.hasNext_0},No.prototype.nextLong=function(){var t=this.next_0;if(o(t,this.finalElement_0)){if(!this.hasNext_0)throw Dt();this.hasNext_0=!1;}else this.next_0=this.next_0.add(this.step);return t},No.$metadata$={kind:n,simpleName:"LongProgressionIterator",interfaces:[ii]},So.prototype.iterator=function(){return new Co(this.first,this.last,this.step)},So.prototype.isEmpty=function(){return this.step>0?this.first>this.last:this.first0?String.fromCharCode(this.first)+".."+String.fromCharCode(this.last)+" step "+this.step:String.fromCharCode(this.first)+" downTo "+String.fromCharCode(this.last)+" step "+(0|-this.step)},Io.prototype.fromClosedRange_ayra44$=function(t,e,n){return new So(t,e,n)},Io.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Eo=null;function Ao(){return null===Eo&&new Io,Eo}function zo(t,e,n){if(To(),0===n)throw zt("Step must be non-zero.");if(-2147483648===n)throw zt("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=co(t,e,n),this.step=n;}function jo(){Lo=this;}So.$metadata$={kind:n,simpleName:"CharProgression",interfaces:[tt]},zo.prototype.iterator=function(){return new Oo(this.first,this.last,this.step)},zo.prototype.isEmpty=function(){return this.step>0?this.first>this.last:this.first0?this.first.toString()+".."+this.last+" step "+this.step:this.first.toString()+" downTo "+this.last+" step "+(0|-this.step)},jo.prototype.fromClosedRange_qt1dr2$=function(t,e,n){return new zo(t,e,n)},jo.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Lo=null;function To(){return null===Lo&&new jo,Lo}function Mo(t,e,n){if(qo(),o(n,u))throw zt("Step must be non-zero.");if(o(n,h))throw zt("Step must be greater than Long.MIN_VALUE to avoid overflow on negation.");this.first=t,this.last=lo(t,e,n),this.step=n;}function Ro(){Po=this;}zo.$metadata$={kind:n,simpleName:"IntProgression",interfaces:[tt]},Mo.prototype.iterator=function(){return new No(this.first,this.last,this.step)},Mo.prototype.isEmpty=function(){return this.step.toNumber()>0?this.first.compareTo_11rb$(this.last)>0:this.first.compareTo_11rb$(this.last)<0},Mo.prototype.equals=function(e){return t.isType(e,Mo)&&(this.isEmpty()&&e.isEmpty()||o(this.first,e.first)&&o(this.last,e.last)&&o(this.step,e.step))},Mo.prototype.hashCode=function(){return this.isEmpty()?-1:t.Long.fromInt(31).multiply(t.Long.fromInt(31).multiply(this.first.xor(this.first.shiftRightUnsigned(32))).add(this.last.xor(this.last.shiftRightUnsigned(32)))).add(this.step.xor(this.step.shiftRightUnsigned(32))).toInt()},Mo.prototype.toString=function(){return this.step.toNumber()>0?this.first.toString()+".."+this.last.toString()+" step "+this.step.toString():this.first.toString()+" downTo "+this.last.toString()+" step "+this.step.unaryMinus().toString()},Ro.prototype.fromClosedRange_b9bd0d$=function(t,e,n){return new Mo(t,e,n)},Ro.$metadata$={kind:m,simpleName:"Companion",interfaces:[]};var Po=null;function qo(){return null===Po&&new Ro,Po}function Bo(){}function Uo(){}function Vo(){}function Wo(e,n,r){null!=r?e.append_gw00v9$(r(n)):null==n||t.isCharSequence(n)?e.append_gw00v9$(n):t.isChar(n)?e.append_s8itvh$(s(n)):e.append_gw00v9$(_(n));}function Ko(t,e,n){if(void 0===n&&(n=!1),t===e)return !0;if(!n)return !1;var r=Gn(t),i=Gn(e),o=r===i;return o||(o=String.fromCharCode(r).toLowerCase().charCodeAt(0)===String.fromCharCode(i).toLowerCase().charCodeAt(0)),o}function Zo(t){return Ho(t,10)}function Ho(e,n){tr(n);var r,i,o,a=e.length;if(0===a)return null;var s=e.charCodeAt(0);if(s<48){if(1===a)return null;if(r=1,45===s)i=!0,o=-2147483648;else {if(43!==s)return null;i=!1,o=-2147483647;}}else r=0,i=!1,o=-2147483647;for(var u=-59652323,p=u,c=0,l=r;l(t.length-i|0)||r>(n.length-i|0))return !1;for(var a=0;a0&&Ko(t.charCodeAt(0),e,n)}function ra(t,e,n){return void 0===n&&(n=!1),t.length>0&&Ko(t.charCodeAt(ta(t)),e,n)}function ia(t,e,n,r){var i,o;if(void 0===n&&(n=0),void 0===r&&(r=!1),!r&&1===e.length&&"string"==typeof t){var u=j(e);return t.indexOf(String.fromCharCode(u),n)}i=H(n,0),o=ta(t);for(var p=i;p<=o;p++){var c,l=t.charCodeAt(p);t:do{var h;for(h=0;h!==e.length;++h){var f=s(e[h]);if(Ko(s(a(f)),l,r)){c=!0;break t}}c=!1;}while(0);if(c)return p}return -1}function oa(e,n,r,i){return void 0===r&&(r=0),void 0===i&&(i=!1),i||"string"!=typeof e?ia(e,t.charArrayOf(n),r,i):e.indexOf(String.fromCharCode(n),r)}function aa(t,e,n){return void 0===n&&(n=!1),oa(t,e,void 0,n)>=0}function sa(t){if(!(t>=0))throw zt(("Limit must be non-negative, but was "+t).toString())}function ua(){}function pa(){}function ca(){}function la(t){this.match=t;}function ha(){}function fa(){_a=this;}Mo.$metadata$={kind:n,simpleName:"LongProgression",interfaces:[tt]},Bo.prototype.contains_mef7kx$=function(e){return t.compareTo(e,this.start)>=0&&t.compareTo(e,this.endInclusive)<=0},Bo.prototype.isEmpty=function(){return t.compareTo(this.start,this.endInclusive)>0},Bo.$metadata$={kind:d,simpleName:"ClosedRange",interfaces:[]},Uo.prototype.contains_mef7kx$=function(e){return t.compareTo(e,this.start)>=0&&t.compareTo(e,this.endExclusive)<0},Uo.prototype.isEmpty=function(){return t.compareTo(this.start,this.endExclusive)>=0},Uo.$metadata$={kind:d,simpleName:"OpenEndRange",interfaces:[]},Vo.$metadata$={kind:d,simpleName:"KClassifier",interfaces:[]},Yo.prototype.nextChar=function(){var t,e;return t=this.index_0,this.index_0=t+1|0,e=t,this.this$iterator.charCodeAt(e)},Yo.prototype.hasNext=function(){return this.index_00?R(t):Ei()},Sa.hashSetOf_i5x0yv$=Ai,Sa.optimizeReadOnlySet_94kdbt$=zi,La.Continuation=ji,Oa.Result=$a,Ta.get_COROUTINE_SUSPENDED=to,Object.defineProperty(Li,"Key",{get:Ri}),La.ContinuationInterceptor=Li,Pi.Key=Bi,Pi.Element=Ui,La.CoroutineContext=Pi,La.AbstractCoroutineContextElement=Fi,Object.defineProperty(La,"EmptyCoroutineContext",{get:Wi}),La.CombinedContext=Ki,Object.defineProperty(Ta,"COROUTINE_SUSPENDED",{get:to}),Object.defineProperty(eo,"COROUTINE_SUSPENDED",{get:ro}),Object.defineProperty(eo,"UNDECIDED",{get:io}),Object.defineProperty(eo,"RESUMED",{get:oo}),Ta.CoroutineSingletons=eo,Na.getProgressionLastElement_qt1dr2$=co,Na.getProgressionLastElement_b9bd0d$=lo,Object.defineProperty(ho,"Companion",{get:yo}),Ia.CharRange=ho,Object.defineProperty(mo,"Companion",{get:vo}),Ia.IntRange=mo,Object.defineProperty(bo,"Companion",{get:ko}),Ia.LongRange=bo,Ia.CharProgressionIterator=Co,Ia.IntProgressionIterator=Oo,Ia.LongProgressionIterator=No,Object.defineProperty(So,"Companion",{get:Ao}),Ia.CharProgression=So,Object.defineProperty(zo,"Companion",{get:To}),Ia.IntProgression=zo,Object.defineProperty(Mo,"Companion",{get:qo}),Ia.LongProgression=Mo,Ia.OpenEndRange=Uo,Ma.KClassifier=Vo,Ea.appendElement_k2zgzt$=Wo,Ea.equals_4lte5s$=Ko,Ea.toIntOrNull_pdl1vz$=Zo,Ea.toIntOrNull_6ic1pp$=Ho,Ea.numberFormatError_y4putb$=Jo,Ea.trimStart_wqw3xr$=Go,Ea.trimEnd_wqw3xr$=Qo,Ea.regionMatchesImpl_4c7s8r$=ea,Ea.startsWith_sgbm27$=na,Ea.endsWith_sgbm27$=ra,Ea.indexOfAny_junqau$=ia,Ea.indexOf_8eortd$=oa,Ea.indexOf_l5u8uk$=function(t,e,n,r){return void 0===n&&(n=0),void 0===r&&(r=!1),r||"string"!=typeof t?function(t,e,n,r,i,o){var a,s;void 0===o&&(o=!1);var u=o?K(J(n,ta(t)),H(r,0)):new mo(H(n,0),J(r,t.length));if("string"==typeof t&&"string"==typeof e)for(a=u.iterator();a.hasNext();){var p=a.next();if(wr(e,0,t,p,e.length,i))return p}else for(s=u.iterator();s.hasNext();){var c=s.next();if(ea(e,0,t,c,e.length,i))return c}return -1}(t,e,n,t.length,r):t.indexOf(e,n)},Ea.contains_sgbm27$=aa,Ea.requireNonNegativeLimit_kcn2v3$=sa,Ea.MatchGroupCollection=ua,Ea.MatchNamedGroupCollection=pa,ca.Destructured=la,Ea.MatchResult=ca,Oa.Lazy=ha,Object.defineProperty(Oa,"UNINITIALIZED_VALUE",{get:ya}),Oa.UnsafeLazyImpl=da,Oa.InitializedLazyImpl=ma,Oa.createFailure_tcv7n7$=wa,Object.defineProperty($a,"Companion",{get:ba}),$a.Failure=xa,Oa.throwOnFailure_iacion$=ka,Oa.NotImplementedError=Ca,ct.prototype.getOrDefault_xwzc9p$=ut.prototype.getOrDefault_xwzc9p$,zr.prototype.getOrDefault_xwzc9p$=ut.prototype.getOrDefault_xwzc9p$,ce.prototype.remove_xwzc9p$=ct.prototype.remove_xwzc9p$,je.prototype.createJsMap=Te.prototype.createJsMap,Me.prototype.createJsMap=Te.prototype.createJsMap,Object.defineProperty(fr.prototype,"destructured",Object.getOwnPropertyDescriptor(ca.prototype,"destructured")),ut.prototype.getOrDefault_xwzc9p$,ct.prototype.remove_xwzc9p$,ct.prototype.getOrDefault_xwzc9p$,ut.prototype.getOrDefault_xwzc9p$,Ui.prototype.plus_1fupul$=Pi.prototype.plus_1fupul$,Li.prototype.fold_3cc69b$=Ui.prototype.fold_3cc69b$,Li.prototype.plus_1fupul$=Ui.prototype.plus_1fupul$,Fi.prototype.get_j3r2sn$=Ui.prototype.get_j3r2sn$,Fi.prototype.fold_3cc69b$=Ui.prototype.fold_3cc69b$,Fi.prototype.minusKey_yeqjby$=Ui.prototype.minusKey_yeqjby$,Fi.prototype.plus_1fupul$=Ui.prototype.plus_1fupul$,Ki.prototype.plus_1fupul$=Pi.prototype.plus_1fupul$,Bo.prototype.contains_mef7kx$,Bo.prototype.isEmpty,Uo.prototype.contains_mef7kx$,Uo.prototype.isEmpty,"undefined"!=typeof process&&process.versions&&process.versions.node?new Je(process.stdout):new Qe,new Xe(Wi(),(function(e){var n;return ka(e),null==(n=e.value)||t.isType(n,b)||y(),dt})),qn=t.newArray(0,null),new Qt((function(t,e){return xr(t,e,!0)})),new Int8Array([l(239),l(191),l(189)]),new $a(to());}();},void 0===(r=n.apply(e,[e]))||(t.exports=r);},42:function(t,e,n){var r,i,o;i=[e,n(421)],void 0===(o="function"==typeof(r=function(t,e){var n=e.Kind.OBJECT,r=e.Kind.CLASS,i=(e.kotlin.js.internal.StringCompanionObject,Error),o=e.Kind.INTERFACE,a=e.toChar,s=e.ensureNotNull,u=e.kotlin.Unit,p=(e.kotlin.js.internal.IntCompanionObject,e.kotlin.js.internal.LongCompanionObject,e.kotlin.js.internal.FloatCompanionObject,e.kotlin.js.internal.DoubleCompanionObject,e.kotlin.collections.MutableIterator),c=e.hashCode,l=e.throwCCE,h=e.equals,f=e.kotlin.collections.MutableIterable,_=e.kotlin.collections.ArrayList_init_mqih57$,y=e.getKClass,d=e.kotlin.collections.Iterator,m=e.toByte,$=e.kotlin.collections.Iterable,g=e.toString,v=e.unboxChar,b=e.kotlin.collections.joinToString_fmv235$,x=e.kotlin.collections.setOf_i5x0yv$,w=e.kotlin.collections.ArrayList_init_ww73n8$,k=e.kotlin.text.iterator_gw00vp$,C=e.toBoxedChar,O=Math,N=e.kotlin.text.Regex_init_61zpoe$,S=e.kotlin.lazy_klfg04$,I=e.kotlin.text.replace_680rmw$,E=e.kotlin.Annotation,A=String,z=e.kotlin.text.indexOf_l5u8uk$,j=e.kotlin.NumberFormatException,L=e.kotlin.Exception,T=Object,M=e.kotlin.collections.MutableList;function R(){P=this;}J.prototype=Object.create(i.prototype),J.prototype.constructor=J,G.prototype=Object.create(i.prototype),G.prototype.constructor=G,Y.prototype=Object.create(i.prototype),Y.prototype.constructor=Y,X.prototype=Object.create(i.prototype),X.prototype.constructor=X,nt.prototype=Object.create(i.prototype),nt.prototype.constructor=nt,at.prototype=Object.create(xt.prototype),at.prototype.constructor=at,bt.prototype=Object.create(i.prototype),bt.prototype.constructor=bt,St.prototype=Object.create(Pt.prototype),St.prototype.constructor=St,At.prototype=Object.create(Yt.prototype),At.prototype.constructor=At,qt.prototype=Object.create(Yt.prototype),qt.prototype.constructor=qt,Bt.prototype=Object.create(Yt.prototype),Bt.prototype.constructor=Bt,Ut.prototype=Object.create(Yt.prototype),Ut.prototype.constructor=Ut,Qt.prototype=Object.create(Yt.prototype),Qt.prototype.constructor=Qt,ue.prototype=Object.create(i.prototype),ue.prototype.constructor=ue,ce.prototype=Object.create(ne.prototype),ce.prototype.constructor=ce,pe.prototype=Object.create(_e.prototype),pe.prototype.constructor=pe,de.prototype=Object.create(_e.prototype),de.prototype.constructor=de,ge.prototype=Object.create(xt.prototype),ge.prototype.constructor=ge,ve.prototype=Object.create(i.prototype),ve.prototype.constructor=ve,be.prototype=Object.create(i.prototype),be.prototype.constructor=be,Te.prototype=Object.create(Le.prototype),Te.prototype.constructor=Te,Me.prototype=Object.create(Le.prototype),Me.prototype.constructor=Me,Re.prototype=Object.create(Le.prototype),Re.prototype.constructor=Re,qe.prototype=Object.create(i.prototype),qe.prototype.constructor=qe,Be.prototype=Object.create(i.prototype),Be.prototype.constructor=Be,We.prototype=Object.create(i.prototype),We.prototype.constructor=We,Ze.prototype=Object.create(Re.prototype),Ze.prototype.constructor=Ze,He.prototype=Object.create(Re.prototype),He.prototype.constructor=He,Je.prototype=Object.create(Re.prototype),Je.prototype.constructor=Je,Ge.prototype=Object.create(Re.prototype),Ge.prototype.constructor=Ge,Qe.prototype=Object.create(Re.prototype),Qe.prototype.constructor=Qe,Ye.prototype=Object.create(Re.prototype),Ye.prototype.constructor=Ye,Xe.prototype=Object.create(Re.prototype),Xe.prototype.constructor=Xe,tn.prototype=Object.create(Re.prototype),tn.prototype.constructor=tn,en.prototype=Object.create(Re.prototype),en.prototype.constructor=en,nn.prototype=Object.create(Re.prototype),nn.prototype.constructor=nn,R.prototype.fill_ugzc7n$=function(t,e){var n;n=t.length-1|0;for(var r=0;r<=n;r++)t[r]=e;},R.$metadata$={kind:n,simpleName:"Arrays",interfaces:[]};var P=null;function q(){return null===P&&new R,P}function B(t){void 0===t&&(t=""),this.src=t;}function U(t){this.this$ByteInputStream=t,this.next=0;}function F(){D=this;}U.prototype.read_8chfmy$=function(t,e,n){var r,i,o=0;r=e+n-1|0;for(var a=e;a<=r&&!(this.next>=this.this$ByteInputStream.src.length);a++)t[a]=this.this$ByteInputStream.src.charCodeAt((i=this.next,this.next=i+1|0,i)),o=o+1|0;return 0===o?-1:o},U.$metadata$={kind:r,interfaces:[et]},B.prototype.bufferedReader=function(){return new U(this)},B.prototype.reader=function(){return this.bufferedReader()},B.$metadata$={kind:r,simpleName:"ByteInputStream",interfaces:[Q]},F.prototype.isWhitespace_s8itvh$=function(t){var e;switch(t){case 32:case 9:case 10:case 13:e=!0;break;default:e=!1;}return e},F.$metadata$={kind:n,simpleName:"Character",interfaces:[]};var D=null;function V(){W=this;}V.prototype.unmodifiableList_zfnyf4$=function(t){yt("not implemented");},V.$metadata$={kind:n,simpleName:"Collections",interfaces:[]};var W=null;function K(){return null===W&&new V,W}function Z(t,e,n,r,i){var o,a,s=n;o=r+i-1|0;for(var u=r;u<=o;u++)e[(a=s,s=a+1|0,a)]=t.charCodeAt(u);}function H(t,e,n,r){return zn().create_8chfmy$(e,n,r)}function J(t){void 0===t&&(t=null),i.call(this),this.message_opjsbb$_0=t,this.cause_18nhvr$_0=null,e.captureStack(i,this),this.name="IOException";}function G(t){void 0===t&&(t=null),i.call(this),this.message_nykor0$_0=t,this.cause_n038z2$_0=null,e.captureStack(i,this),this.name="IllegalArgumentException";}function Q(){}function Y(t){void 0===t&&(t=null),i.call(this),this.message_77za5l$_0=t,this.cause_jiegcr$_0=null,e.captureStack(i,this),this.name="NullPointerException";}function X(){i.call(this),this.message_l78tod$_0=void 0,this.cause_y27uld$_0=null,e.captureStack(i,this),this.name="NumberFormatException";}function tt(){}function et(){}function nt(t){void 0===t&&(t=null),i.call(this),this.message_2hhrll$_0=t,this.cause_blbmi1$_0=null,e.captureStack(i,this),this.name="RuntimeException";}function rt(t,e){return e=e||Object.create(nt.prototype),nt.call(e,t.message),e}function it(){this.value="";}function ot(t){this.string=t,this.nextPos_0=0;}function at(){Ot(this),this.value="";}function st(t,e){e();}function ut(t){return new B(t)}function pt(t,e,n){yt("implement");}function ct(t,e){yt("implement");}function lt(t,e,n){yt("implement");}function ht(t,e,n){yt("implement");}function ft(t,e){yt("implement");}function _t(t,e){yt("implement");}function yt(t){throw e.newThrowable(t)}function dt(t,e){yt("implement");}function mt(t,e){yt("implement");}function $t(t,e){yt("implement");}function gt(t,e){yt("implement");}function vt(t,e){yt("implement");}function bt(t){void 0===t&&(t=null),i.call(this),this.message_3rkdyj$_0=t,this.cause_2kxft9$_0=null,e.captureStack(i,this),this.name="UnsupportedOperationException";}function xt(){Ct(),this.writeBuffer_9jar4r$_0=null,this.lock=null;}function wt(){kt=this,this.WRITE_BUFFER_SIZE_0=1024;}Object.defineProperty(J.prototype,"message",{get:function(){return this.message_opjsbb$_0}}),Object.defineProperty(J.prototype,"cause",{get:function(){return this.cause_18nhvr$_0}}),J.$metadata$={kind:r,simpleName:"IOException",interfaces:[i]},Object.defineProperty(G.prototype,"message",{get:function(){return this.message_nykor0$_0}}),Object.defineProperty(G.prototype,"cause",{get:function(){return this.cause_n038z2$_0}}),G.$metadata$={kind:r,simpleName:"IllegalArgumentException",interfaces:[i]},Q.$metadata$={kind:o,simpleName:"InputStream",interfaces:[]},Object.defineProperty(Y.prototype,"message",{get:function(){return this.message_77za5l$_0}}),Object.defineProperty(Y.prototype,"cause",{get:function(){return this.cause_jiegcr$_0}}),Y.$metadata$={kind:r,simpleName:"NullPointerException",interfaces:[i]},Object.defineProperty(X.prototype,"message",{get:function(){return this.message_l78tod$_0}}),Object.defineProperty(X.prototype,"cause",{get:function(){return this.cause_y27uld$_0}}),X.$metadata$={kind:r,simpleName:"NumberFormatException",interfaces:[i]},tt.prototype.defaultReadObject=function(){yt("not implemented");},tt.$metadata$={kind:o,simpleName:"ObjectInputStream",interfaces:[]},et.$metadata$={kind:o,simpleName:"Reader",interfaces:[]},Object.defineProperty(nt.prototype,"message",{get:function(){return this.message_2hhrll$_0}}),Object.defineProperty(nt.prototype,"cause",{get:function(){return this.cause_blbmi1$_0}}),nt.$metadata$={kind:r,simpleName:"RuntimeException",interfaces:[i]},Object.defineProperty(it.prototype,"length",{configurable:!0,get:function(){return this.value.length},set:function(t){this.value=this.value.substring(0,t);}}),it.prototype.append_8chfmy$=function(t,e,n){var r;r=e+n-1|0;for(var i=e;i<=r;i++)this.value+=String.fromCharCode(t[i]);},it.prototype.append_s8itvh$=function(t){this.value+=String.fromCharCode(t);},it.prototype.append_61zpoe$=function(t){var e;e=t.length-1|0;for(var n=0;n<=e;n++)this.value+=String.fromCharCode(t.charCodeAt(n));},it.prototype.isEmpty=function(){return 0===this.length},it.prototype.toString=function(){return this.value},it.prototype.byteInputStream=function(){return new B(this.value)},it.$metadata$={kind:r,simpleName:"StringBuilder",interfaces:[]},ot.prototype.read_8chfmy$=function(t,e,n){var r,i,o=0;r=e+n-1|0;for(var a=e;a<=r&&!(this.nextPos_0>=this.string.length);a++)t[a]=this.string.charCodeAt((i=this.nextPos_0,this.nextPos_0=i+1|0,i)),o=o+1|0;return o>0?o:-1},ot.$metadata$={kind:r,simpleName:"StringReader",interfaces:[et]},at.prototype.write_8chfmy$=function(t,e,n){var r;r=e+n-1|0;for(var i=e;i<=r;i++)this.value+=String.fromCharCode(t[i]);},at.prototype.flush=function(){this.value="";},at.prototype.close=function(){},at.prototype.toString=function(){return this.value},at.$metadata$={kind:r,simpleName:"StringWriter",interfaces:[xt]},Object.defineProperty(bt.prototype,"message",{get:function(){return this.message_3rkdyj$_0}}),Object.defineProperty(bt.prototype,"cause",{get:function(){return this.cause_2kxft9$_0}}),bt.$metadata$={kind:r,simpleName:"UnsupportedOperationException",interfaces:[i]},xt.prototype.write_za3lpa$=function(t){var n,r;st(this.lock,(n=this,r=t,function(){return null==n.writeBuffer_9jar4r$_0&&(n.writeBuffer_9jar4r$_0=e.charArray(Ct().WRITE_BUFFER_SIZE_0)),s(n.writeBuffer_9jar4r$_0)[0]=a(r),n.write_8chfmy$(s(n.writeBuffer_9jar4r$_0),0,1),u}));},xt.prototype.write_4hbowm$=function(t){this.write_8chfmy$(t,0,t.length);},xt.prototype.write_61zpoe$=function(t){this.write_3m52m6$(t,0,t.length);},xt.prototype.write_3m52m6$=function(t,n,r){var i,o,a,p;st(this.lock,(i=r,o=this,a=t,p=n,function(){var t;return i<=Ct().WRITE_BUFFER_SIZE_0?(null==o.writeBuffer_9jar4r$_0&&(o.writeBuffer_9jar4r$_0=e.charArray(Ct().WRITE_BUFFER_SIZE_0)),t=s(o.writeBuffer_9jar4r$_0)):t=e.charArray(i),Z(a,t,0,p,p+i|0),o.write_8chfmy$(t,0,i),u}));},xt.prototype.append_gw00v9$=function(t){return null==t?this.write_61zpoe$("null"):this.write_61zpoe$(t.toString()),this},xt.prototype.append_ezbsdh$=function(t,n,r){var i=null!=t?t:"null";return this.write_61zpoe$(e.subSequence(i,n,r).toString()),this},xt.prototype.append_s8itvh$=function(t){return this.write_za3lpa$(0|t),this},wt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var kt=null;function Ct(){return null===kt&&new wt,kt}function Ot(t){return t=t||Object.create(xt.prototype),xt.call(t),t.lock=t,t}function Nt(){It=this,this.NULL=new qt("null"),this.TRUE=new qt("true"),this.FALSE=new qt("false");}function St(){Pt.call(this),this.value_wcgww9$_0=null;}xt.$metadata$={kind:r,simpleName:"Writer",interfaces:[]},Nt.prototype.value_za3lpa$=function(t){return new Bt(ht())},Nt.prototype.value_s8cxhz$=function(t){return new Bt(lt())},Nt.prototype.value_mx4ult$=function(t){if($t()||mt())throw new G("Infinite and NaN values not permitted in JSON");return new Bt(this.cutOffPointZero_0(ft()))},Nt.prototype.value_14dthe$=function(t){if(vt()||gt())throw new G("Infinite and NaN values not permitted in JSON");return new Bt(this.cutOffPointZero_0(_t()))},Nt.prototype.value_pdl1vj$=function(t){return null==t?this.NULL:new Qt(t)},Nt.prototype.value_6taknv$=function(t){return t?this.TRUE:this.FALSE},Nt.prototype.array=function(){return Mt()},Nt.prototype.array_pmhfmb$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_za3lpa$(r);}return n},Nt.prototype.array_2muz52$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_s8cxhz$(r);}return n},Nt.prototype.array_8cqhcw$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_mx4ult$(r);}return n},Nt.prototype.array_yqxtqz$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_14dthe$(r);}return n},Nt.prototype.array_wwrst0$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_6taknv$(r);}return n},Nt.prototype.array_vqirvp$=function(t){var e,n=Mt();for(e=0;e!==t.length;++e){var r=t[e];n.add_61zpoe$(r);}return n},Nt.prototype.object=function(){return Jt()},Nt.prototype.parse_61zpoe$=function(t){return (new yn).parse_61zpoe$(t)},Nt.prototype.parse_6nb378$=function(t){return (new yn).streamToValue(new Cn(t))},Nt.prototype.cutOffPointZero_0=function(t){var e;if(dt()){var n=t.length-2|0;e=t.substring(0,n);}else e=t;return e},Object.defineProperty(St.prototype,"value",{configurable:!0,get:function(){return this.value_wcgww9$_0},set:function(t){this.value_wcgww9$_0=t;}}),St.prototype.startArray=function(){return Mt()},St.prototype.startObject=function(){return Jt()},St.prototype.endNull=function(){this.value=Et().NULL;},St.prototype.endBoolean_6taknv$=function(t){this.value=t?Et().TRUE:Et().FALSE;},St.prototype.endString_61zpoe$=function(t){this.value=new Qt(t);},St.prototype.endNumber_61zpoe$=function(t){this.value=new Bt(t);},St.prototype.endArray_11rb$=function(t){this.value=t;},St.prototype.endObject_11rc$=function(t){this.value=t;},St.prototype.endArrayValue_11rb$=function(t){null!=t&&t.add_luq74r$(this.value);},St.prototype.endObjectValue_otyqx2$=function(t,e){null!=t&&t.add_8kvr2e$(e,this.value);},St.$metadata$={kind:r,simpleName:"DefaultHandler",interfaces:[Pt]},Nt.$metadata$={kind:n,simpleName:"Json",interfaces:[]};var It=null;function Et(){return null===It&&new Nt,It}function At(){Tt(),this.values_0=null;}function zt(t){this.closure$iterator=t;}function jt(){Lt=this;}Object.defineProperty(At.prototype,"isEmpty",{configurable:!0,get:function(){return this.values_0.isEmpty()}}),At.prototype.add_za3lpa$=function(t){return this.values_0.add_11rb$(Et().value_za3lpa$(t)),this},At.prototype.add_s8cxhz$=function(t){return this.values_0.add_11rb$(Et().value_s8cxhz$(t)),this},At.prototype.add_mx4ult$=function(t){return this.values_0.add_11rb$(Et().value_mx4ult$(t)),this},At.prototype.add_14dthe$=function(t){return this.values_0.add_11rb$(Et().value_14dthe$(t)),this},At.prototype.add_6taknv$=function(t){return this.values_0.add_11rb$(Et().value_6taknv$(t)),this},At.prototype.add_61zpoe$=function(t){return this.values_0.add_11rb$(Et().value_pdl1vj$(t)),this},At.prototype.add_luq74r$=function(t){if(null==t)throw new Y("value is null");return this.values_0.add_11rb$(t),this},At.prototype.set_vux9f0$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_za3lpa$(e)),this},At.prototype.set_6svq3l$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_s8cxhz$(e)),this},At.prototype.set_24o109$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_mx4ult$(e)),this},At.prototype.set_5wr77w$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_14dthe$(e)),this},At.prototype.set_fzusl$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_6taknv$(e)),this},At.prototype.set_19mbxw$=function(t,e){return this.values_0.set_wxm5ur$(t,Et().value_pdl1vj$(e)),this},At.prototype.set_zefct7$=function(t,e){if(null==e)throw new Y("value is null");return this.values_0.set_wxm5ur$(t,e),this},At.prototype.remove_za3lpa$=function(t){return this.values_0.removeAt_za3lpa$(t),this},At.prototype.size=function(){return this.values_0.size},At.prototype.get_za3lpa$=function(t){return this.values_0.get_za3lpa$(t)},At.prototype.values=function(){return K().unmodifiableList_zfnyf4$(this.values_0)},zt.prototype.hasNext=function(){return this.closure$iterator.hasNext()},zt.prototype.next=function(){return this.closure$iterator.next()},zt.prototype.remove=function(){throw new bt},zt.$metadata$={kind:r,interfaces:[p]},At.prototype.iterator=function(){return new zt(this.values_0.iterator())},At.prototype.write_l4e0ba$=function(t){t.writeArrayOpen();var e=this.iterator();if(e.hasNext())for(e.next().write_l4e0ba$(t);e.hasNext();)t.writeArraySeparator(),e.next().write_l4e0ba$(t);t.writeArrayClose();},Object.defineProperty(At.prototype,"isArray",{configurable:!0,get:function(){return !0}}),At.prototype.asArray=function(){return this},At.prototype.hashCode=function(){return c(this.values_0)},At.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,At)?r:l();return h(this.values_0,s(i).values_0)},jt.prototype.readFrom_6nb378$=function(t){return ee().readFromReader_6nb378$(t).asArray()},jt.prototype.readFrom_61zpoe$=function(t){return ee().readFrom_61zpoe$(t).asArray()},jt.prototype.unmodifiableArray_v27daa$=function(t){return Rt(t,!0)},jt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Lt=null;function Tt(){return null===Lt&&new jt,Lt}function Mt(t){return t=t||Object.create(At.prototype),Yt.call(t),At.call(t),t.values_0=new Rn,t}function Rt(t,e,n){if(n=n||Object.create(At.prototype),Yt.call(n),At.call(n),null==t)throw new Y("array is null");return n.values_0=e?K().unmodifiableList_zfnyf4$(t.values_0):_(t.values_0),n}function Pt(){this.parser_3qxlfk$_0=null;}function qt(t){Yt.call(this),this.value=t,this.isNull_35npp$_0=h("null",this.value),this.isTrue_3de4$_0=h("true",this.value),this.isFalse_6t83vt$_0=h("false",this.value);}function Bt(t){Yt.call(this),this.string_0=t;}function Ut(){Ht(),this.names_0=null,this.values_0=null,this.table_0=null;}function Ft(t,e){this.closure$namesIterator=t,this.closure$valuesIterator=e;}function Dt(t,e){this.name=t,this.value=e;}function Vt(){this.hashTable_0=new Int8Array(32);}function Wt(t){return t=t||Object.create(Vt.prototype),Vt.call(t),t}function Kt(){Zt=this;}At.$metadata$={kind:r,simpleName:"JsonArray",interfaces:[f,Yt]},Object.defineProperty(Pt.prototype,"parser",{configurable:!0,get:function(){return this.parser_3qxlfk$_0},set:function(t){this.parser_3qxlfk$_0=t;}}),Object.defineProperty(Pt.prototype,"location",{configurable:!0,get:function(){return s(this.parser).location}}),Pt.prototype.startNull=function(){},Pt.prototype.endNull=function(){},Pt.prototype.startBoolean=function(){},Pt.prototype.endBoolean_6taknv$=function(t){},Pt.prototype.startString=function(){},Pt.prototype.endString_61zpoe$=function(t){},Pt.prototype.startNumber=function(){},Pt.prototype.endNumber_61zpoe$=function(t){},Pt.prototype.startArray=function(){return null},Pt.prototype.endArray_11rb$=function(t){},Pt.prototype.startArrayValue_11rb$=function(t){},Pt.prototype.endArrayValue_11rb$=function(t){},Pt.prototype.startObject=function(){return null},Pt.prototype.endObject_11rc$=function(t){},Pt.prototype.startObjectName_11rc$=function(t){},Pt.prototype.endObjectName_otyqx2$=function(t,e){},Pt.prototype.startObjectValue_otyqx2$=function(t,e){},Pt.prototype.endObjectValue_otyqx2$=function(t,e){},Pt.$metadata$={kind:r,simpleName:"JsonHandler",interfaces:[]},Object.defineProperty(qt.prototype,"isNull",{configurable:!0,get:function(){return this.isNull_35npp$_0}}),Object.defineProperty(qt.prototype,"isTrue",{configurable:!0,get:function(){return this.isTrue_3de4$_0}}),Object.defineProperty(qt.prototype,"isFalse",{configurable:!0,get:function(){return this.isFalse_6t83vt$_0}}),Object.defineProperty(qt.prototype,"isBoolean",{configurable:!0,get:function(){return this.isTrue||this.isFalse}}),qt.prototype.write_l4e0ba$=function(t){t.writeLiteral_y4putb$(this.value);},qt.prototype.toString=function(){return this.value},qt.prototype.hashCode=function(){return c(this.value)},qt.prototype.asBoolean=function(){return this.isNull?Yt.prototype.asBoolean.call(this):this.isTrue},qt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=y(qt))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,qt)?r:l();return h(this.value,s(i).value)},qt.$metadata$={kind:r,simpleName:"JsonLiteral",interfaces:[Yt]},Object.defineProperty(Bt.prototype,"isNumber",{configurable:!0,get:function(){return !0}}),Bt.prototype.toString=function(){return this.string_0},Bt.prototype.write_l4e0ba$=function(t){t.writeNumber_y4putb$(this.string_0);},Bt.prototype.asInt=function(){return Fn(0,this.string_0,10)},Bt.prototype.asLong=function(){return pt(0,this.string_0)},Bt.prototype.asFloat=function(){return ct(0,this.string_0)},Bt.prototype.asDouble=function(){return Mn(0,this.string_0)},Bt.prototype.hashCode=function(){return c(this.string_0)},Bt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Bt)?r:l();return h(this.string_0,s(i).string_0)},Bt.$metadata$={kind:r,simpleName:"JsonNumber",interfaces:[Yt]},Object.defineProperty(Ut.prototype,"isEmpty",{configurable:!0,get:function(){return this.names_0.isEmpty()}}),Object.defineProperty(Ut.prototype,"isObject",{configurable:!0,get:function(){return !0}}),Ut.prototype.add_bm4lxs$=function(t,e){return this.add_8kvr2e$(t,Et().value_za3lpa$(e)),this},Ut.prototype.add_4wgjuj$=function(t,e){return this.add_8kvr2e$(t,Et().value_s8cxhz$(e)),this},Ut.prototype.add_9sobi5$=function(t,e){return this.add_8kvr2e$(t,Et().value_mx4ult$(e)),this},Ut.prototype.add_io5o9c$=function(t,e){return this.add_8kvr2e$(t,Et().value_14dthe$(e)),this},Ut.prototype.add_ivxn3r$=function(t,e){return this.add_8kvr2e$(t,Et().value_6taknv$(e)),this},Ut.prototype.add_puj7f4$=function(t,e){return this.add_8kvr2e$(t,Et().value_pdl1vj$(e)),this},Ut.prototype.add_8kvr2e$=function(t,e){if(null==t)throw new Y("name is null");if(null==e)throw new Y("value is null");return s(this.table_0).add_bm4lxs$(t,this.names_0.size),this.names_0.add_11rb$(t),this.values_0.add_11rb$(e),this},Ut.prototype.set_bm4lxs$=function(t,e){return this.set_8kvr2e$(t,Et().value_za3lpa$(e)),this},Ut.prototype.set_4wgjuj$=function(t,e){return this.set_8kvr2e$(t,Et().value_s8cxhz$(e)),this},Ut.prototype.set_9sobi5$=function(t,e){return this.set_8kvr2e$(t,Et().value_mx4ult$(e)),this},Ut.prototype.set_io5o9c$=function(t,e){return this.set_8kvr2e$(t,Et().value_14dthe$(e)),this},Ut.prototype.set_ivxn3r$=function(t,e){return this.set_8kvr2e$(t,Et().value_6taknv$(e)),this},Ut.prototype.set_puj7f4$=function(t,e){return this.set_8kvr2e$(t,Et().value_pdl1vj$(e)),this},Ut.prototype.set_8kvr2e$=function(t,e){if(null==t)throw new Y("name is null");if(null==e)throw new Y("value is null");var n=this.indexOf_y4putb$(t);return -1!==n?this.values_0.set_wxm5ur$(n,e):(s(this.table_0).add_bm4lxs$(t,this.names_0.size),this.names_0.add_11rb$(t),this.values_0.add_11rb$(e)),this},Ut.prototype.remove_pdl1vj$=function(t){if(null==t)throw new Y("name is null");var e=this.indexOf_y4putb$(t);return -1!==e&&(s(this.table_0).remove_za3lpa$(e),this.names_0.removeAt_za3lpa$(e),this.values_0.removeAt_za3lpa$(e)),this},Ut.prototype.merge_1kkabt$=function(t){var e;if(null==t)throw new Y("object is null");for(e=t.iterator();e.hasNext();){var n=e.next();this.set_8kvr2e$(n.name,n.value);}return this},Ut.prototype.get_pdl1vj$=function(t){if(null==t)throw new Y("name is null");var e=this.indexOf_y4putb$(t);return -1!==e?this.values_0.get_za3lpa$(e):null},Ut.prototype.getInt_bm4lxs$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asInt():null)?n:e},Ut.prototype.getLong_4wgjuj$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asLong():null)?n:e},Ut.prototype.getFloat_9sobi5$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asFloat():null)?n:e},Ut.prototype.getDouble_io5o9c$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asDouble():null)?n:e},Ut.prototype.getBoolean_ivxn3r$=function(t,e){var n,r=this.get_pdl1vj$(t);return null!=(n=null!=r?r.asBoolean():null)?n:e},Ut.prototype.getString_puj7f4$=function(t,e){var n=this.get_pdl1vj$(t);return null!=n?n.asString():e},Ut.prototype.size=function(){return this.names_0.size},Ut.prototype.names=function(){return K().unmodifiableList_zfnyf4$(this.names_0)},Ft.prototype.hasNext=function(){return this.closure$namesIterator.hasNext()},Ft.prototype.next=function(){return new Dt(this.closure$namesIterator.next(),this.closure$valuesIterator.next())},Ft.$metadata$={kind:r,interfaces:[d]},Ut.prototype.iterator=function(){return new Ft(this.names_0.iterator(),this.values_0.iterator())},Ut.prototype.write_l4e0ba$=function(t){t.writeObjectOpen();var e=this.names_0.iterator(),n=this.values_0.iterator();if(e.hasNext())for(t.writeMemberName_y4putb$(e.next()),t.writeMemberSeparator(),n.next().write_l4e0ba$(t);e.hasNext();)t.writeObjectSeparator(),t.writeMemberName_y4putb$(e.next()),t.writeMemberSeparator(),n.next().write_l4e0ba$(t);t.writeObjectClose();},Ut.prototype.asObject=function(){return this},Ut.prototype.hashCode=function(){var t=1;return (31*(t=(31*t|0)+c(this.names_0)|0)|0)+c(this.values_0)|0},Ut.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Ut)?r:l();return h(this.names_0,s(i).names_0)&&h(this.values_0,i.values_0)},Ut.prototype.indexOf_y4putb$=function(t){var e=s(this.table_0).get_za3rmp$(t);return -1!==e&&h(t,this.names_0.get_za3lpa$(e))?e:this.names_0.lastIndexOf_11rb$(t)},Ut.prototype.readObject_0=function(t){t.defaultReadObject(),this.table_0=Wt(),this.updateHashIndex_0();},Ut.prototype.updateHashIndex_0=function(){var t;t=this.names_0.size-1|0;for(var e=0;e<=t;e++)s(this.table_0).add_bm4lxs$(this.names_0.get_za3lpa$(e),e);},Dt.prototype.hashCode=function(){var t=1;return (31*(t=(31*t|0)+c(this.name)|0)|0)+c(this.value)|0},Dt.prototype.equals=function(t){var n,r,i;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var o=null==(r=t)||e.isType(r,Dt)?r:l();return h(this.name,s(o).name)&&(null!=(i=this.value)?i.equals(o.value):null)},Dt.$metadata$={kind:r,simpleName:"Member",interfaces:[]},Vt.prototype.add_bm4lxs$=function(t,e){var n=this.hashSlotFor_0(t);this.hashTable_0[n]=e<255?m(e+1|0):0;},Vt.prototype.remove_za3lpa$=function(t){var e;e=this.hashTable_0.length-1|0;for(var n=0;n<=e;n++)if(this.hashTable_0[n]===(t+1|0))this.hashTable_0[n]=0;else if(this.hashTable_0[n]>(t+1|0)){var r;(r=this.hashTable_0)[n]=m(r[n]-1);}},Vt.prototype.get_za3rmp$=function(t){var e=this.hashSlotFor_0(t);return (255&this.hashTable_0[e])-1|0},Vt.prototype.hashSlotFor_0=function(t){return c(t)&this.hashTable_0.length-1},Vt.$metadata$={kind:r,simpleName:"HashIndexTable",interfaces:[]},Kt.prototype.readFrom_6nb378$=function(t){return ee().readFromReader_6nb378$(t).asObject()},Kt.prototype.readFrom_61zpoe$=function(t){return ee().readFrom_61zpoe$(t).asObject()},Kt.prototype.unmodifiableObject_p5jd56$=function(t){return Gt(t,!0)},Kt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Zt=null;function Ht(){return null===Zt&&new Kt,Zt}function Jt(t){return t=t||Object.create(Ut.prototype),Yt.call(t),Ut.call(t),t.names_0=new Rn,t.values_0=new Rn,t.table_0=Wt(),t}function Gt(t,e,n){if(n=n||Object.create(Ut.prototype),Yt.call(n),Ut.call(n),null==t)throw new Y("object is null");return e?(n.names_0=K().unmodifiableList_zfnyf4$(t.names_0),n.values_0=K().unmodifiableList_zfnyf4$(t.values_0)):(n.names_0=_(t.names_0),n.values_0=_(t.values_0)),n.table_0=Wt(),n.updateHashIndex_0(),n}function Qt(t){Yt.call(this),this.string_0=t;}function Yt(){ee();}function Xt(){te=this,this.TRUE=new qt("true"),this.FALSE=new qt("false"),this.NULL=new qt("null");}Ut.$metadata$={kind:r,simpleName:"JsonObject",interfaces:[$,Yt]},Qt.prototype.write_l4e0ba$=function(t){t.writeString_y4putb$(this.string_0);},Object.defineProperty(Qt.prototype,"isString",{configurable:!0,get:function(){return !0}}),Qt.prototype.asString=function(){return this.string_0},Qt.prototype.hashCode=function(){return c(this.string_0)},Qt.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,Qt)?r:l();return h(this.string_0,s(i).string_0)},Qt.$metadata$={kind:r,simpleName:"JsonString",interfaces:[Yt]},Object.defineProperty(Yt.prototype,"isObject",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isArray",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isNumber",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isString",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isBoolean",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isTrue",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isFalse",{configurable:!0,get:function(){return !1}}),Object.defineProperty(Yt.prototype,"isNull",{configurable:!0,get:function(){return !1}}),Yt.prototype.asObject=function(){throw new bt("Not an object: "+this.toString())},Yt.prototype.asArray=function(){throw new bt("Not an array: "+this.toString())},Yt.prototype.asInt=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asLong=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asFloat=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asDouble=function(){throw new bt("Not a number: "+this.toString())},Yt.prototype.asString=function(){throw new bt("Not a string: "+this.toString())},Yt.prototype.asBoolean=function(){throw new bt("Not a boolean: "+this.toString())},Yt.prototype.writeTo_j6tqms$=function(t,e){if(void 0===e&&(e=$e().MINIMAL),null==t)throw new Y("writer is null");if(null==e)throw new Y("config is null");var n=new ge(t,128);this.write_l4e0ba$(e.createWriter_97tyn8$(n)),n.flush();},Yt.prototype.toString=function(){return this.toString_fmi98k$($e().MINIMAL)},Yt.prototype.toString_fmi98k$=function(t){var n=new at;try{this.writeTo_j6tqms$(n,t);}catch(t){throw e.isType(t,J)?rt(t):t}return n.toString()},Yt.prototype.equals=function(t){return this===t},Xt.prototype.readFromReader_6nb378$=function(t){return Et().parse_6nb378$(t)},Xt.prototype.readFrom_61zpoe$=function(t){return Et().parse_61zpoe$(t)},Xt.prototype.valueOf_za3lpa$=function(t){return Et().value_za3lpa$(t)},Xt.prototype.valueOf_s8cxhz$=function(t){return Et().value_s8cxhz$(t)},Xt.prototype.valueOf_mx4ult$=function(t){return Et().value_mx4ult$(t)},Xt.prototype.valueOf_14dthe$=function(t){return Et().value_14dthe$(t)},Xt.prototype.valueOf_61zpoe$=function(t){return Et().value_pdl1vj$(t)},Xt.prototype.valueOf_6taknv$=function(t){return Et().value_6taknv$(t)},Xt.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var te=null;function ee(){return null===te&&new Xt,te}function ne(t){oe(),this.writer=t;}function re(){ie=this,this.CONTROL_CHARACTERS_END_0=31,this.QUOT_CHARS_0=e.charArrayOf(92,34),this.BS_CHARS_0=e.charArrayOf(92,92),this.LF_CHARS_0=e.charArrayOf(92,110),this.CR_CHARS_0=e.charArrayOf(92,114),this.TAB_CHARS_0=e.charArrayOf(92,116),this.UNICODE_2028_CHARS_0=e.charArrayOf(92,117,50,48,50,56),this.UNICODE_2029_CHARS_0=e.charArrayOf(92,117,50,48,50,57),this.HEX_DIGITS_0=e.charArrayOf(48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102);}Yt.$metadata$={kind:r,simpleName:"JsonValue",interfaces:[]},ne.prototype.writeLiteral_y4putb$=function(t){this.writer.write_61zpoe$(t);},ne.prototype.writeNumber_y4putb$=function(t){this.writer.write_61zpoe$(t);},ne.prototype.writeString_y4putb$=function(t){ae(this.writer,34),this.writeJsonString_y4putb$(t),ae(this.writer,34);},ne.prototype.writeArrayOpen=function(){ae(this.writer,91);},ne.prototype.writeArrayClose=function(){ae(this.writer,93);},ne.prototype.writeArraySeparator=function(){ae(this.writer,44);},ne.prototype.writeObjectOpen=function(){ae(this.writer,123);},ne.prototype.writeObjectClose=function(){ae(this.writer,125);},ne.prototype.writeMemberName_y4putb$=function(t){ae(this.writer,34),this.writeJsonString_y4putb$(t),ae(this.writer,34);},ne.prototype.writeMemberSeparator=function(){ae(this.writer,58);},ne.prototype.writeObjectSeparator=function(){ae(this.writer,44);},ne.prototype.writeJsonString_y4putb$=function(t){var e,n=t.length,r=0;e=n-1|0;for(var i=0;i<=e;i++){var o=oe().getReplacementChars_0(t.charCodeAt(i));null!=o&&(this.writer.write_3m52m6$(t,r,i-r|0),this.writer.write_4hbowm$(o),r=i+1|0);}this.writer.write_3m52m6$(t,r,n-r|0);},re.prototype.getReplacementChars_0=function(t){return t>92?t<8232||t>8233?null:8232===t?this.UNICODE_2028_CHARS_0:this.UNICODE_2029_CHARS_0:92===t?this.BS_CHARS_0:t>34?null:34===t?this.QUOT_CHARS_0:(0|t)>this.CONTROL_CHARACTERS_END_0?null:10===t?this.LF_CHARS_0:13===t?this.CR_CHARS_0:9===t?this.TAB_CHARS_0:e.charArrayOf(92,117,48,48,this.HEX_DIGITS_0[(0|t)>>4&15],this.HEX_DIGITS_0[15&(0|t)])},re.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var ie=null;function oe(){return null===ie&&new re,ie}function ae(t,e){t.write_za3lpa$(0|e);}function se(t,e,n){this.offset=t,this.line=e,this.column=n;}function ue(t,n){i.call(this),this.message_72rz6e$_0=t+" at "+g(n),this.cause_95carw$_0=null,this.location=n,e.captureStack(i,this),this.name="ParseException";}function pe(t){fe(),_e.call(this),this.indentChars_0=t;}function ce(t,e){ne.call(this,t),this.indentChars_0=e,this.indent_0=0;}function le(){he=this;}ne.$metadata$={kind:r,simpleName:"JsonWriter",interfaces:[]},se.prototype.toString=function(){return this.line.toString()+":"+g(this.column)},se.prototype.hashCode=function(){return this.offset},se.prototype.equals=function(t){var n,r;if(this===t)return !0;if(null==t)return !1;if(null==(n=e.getKClassFromExpression(this))||!n.equals(e.getKClassFromExpression(t)))return !1;var i=null==(r=t)||e.isType(r,se)?r:l();return this.offset===s(i).offset&&this.column===i.column&&this.line===i.line},se.$metadata$={kind:r,simpleName:"Location",interfaces:[]},Object.defineProperty(ue.prototype,"offset",{configurable:!0,get:function(){return this.location.offset}}),Object.defineProperty(ue.prototype,"line",{configurable:!0,get:function(){return this.location.line}}),Object.defineProperty(ue.prototype,"column",{configurable:!0,get:function(){return this.location.column}}),Object.defineProperty(ue.prototype,"message",{get:function(){return this.message_72rz6e$_0}}),Object.defineProperty(ue.prototype,"cause",{get:function(){return this.cause_95carw$_0}}),ue.$metadata$={kind:r,simpleName:"ParseException",interfaces:[i]},pe.prototype.createWriter_97tyn8$=function(t){return new ce(t,this.indentChars_0)},ce.prototype.writeArrayOpen=function(){this.indent_0=this.indent_0+1|0,this.writer.write_za3lpa$(91),this.writeNewLine_0();},ce.prototype.writeArrayClose=function(){this.indent_0=this.indent_0-1|0,this.writeNewLine_0(),this.writer.write_za3lpa$(93);},ce.prototype.writeArraySeparator=function(){this.writer.write_za3lpa$(44),this.writeNewLine_0()||this.writer.write_za3lpa$(32);},ce.prototype.writeObjectOpen=function(){this.indent_0=this.indent_0+1|0,this.writer.write_za3lpa$(123),this.writeNewLine_0();},ce.prototype.writeObjectClose=function(){this.indent_0=this.indent_0-1|0,this.writeNewLine_0(),this.writer.write_za3lpa$(125);},ce.prototype.writeMemberSeparator=function(){this.writer.write_za3lpa$(58),this.writer.write_za3lpa$(32);},ce.prototype.writeObjectSeparator=function(){this.writer.write_za3lpa$(44),this.writeNewLine_0()||this.writer.write_za3lpa$(32);},ce.prototype.writeNewLine_0=function(){var t;if(null==this.indentChars_0)return !1;this.writer.write_za3lpa$(10),t=this.indent_0-1|0;for(var e=0;e<=t;e++)this.writer.write_4hbowm$(this.indentChars_0);return !0},ce.$metadata$={kind:r,simpleName:"PrettyPrintWriter",interfaces:[ne]},le.prototype.singleLine=function(){return new pe(e.charArray(0))},le.prototype.indentWithSpaces_za3lpa$=function(t){if(t<0)throw new G("number is negative");var n=e.charArray(t);return q().fill_ugzc7n$(n,32),new pe(n)},le.prototype.indentWithTabs=function(){return new pe(e.charArrayOf(9))},le.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var he=null;function fe(){return null===he&&new le,he}function _e(){$e();}function ye(){me=this,this.MINIMAL=new de,this.PRETTY_PRINT=fe().indentWithSpaces_za3lpa$(2);}function de(){_e.call(this);}pe.$metadata$={kind:r,simpleName:"PrettyPrint",interfaces:[_e]},de.prototype.createWriter_97tyn8$=function(t){return new ne(t)},de.$metadata$={kind:r,interfaces:[_e]},ye.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var me=null;function $e(){return null===me&&new ye,me}function ge(t,n){void 0===n&&(n=16),Ot(this),this.writer_0=t,this.buffer_0=null,this.fill_0=0,this.buffer_0=e.charArray(n);}function ve(t){void 0===t&&(t=null),i.call(this),this.message_y7nasg$_0=t,this.cause_26vz5q$_0=null,e.captureStack(i,this),this.name="SyntaxException";}function be(t){void 0===t&&(t=null),i.call(this),this.message_kt89er$_0=t,this.cause_c2uidd$_0=null,e.captureStack(i,this),this.name="IoException";}function xe(t){Ce(),this.flex=t,this.myTokenType_0=null,this.bufferSequence_i8enee$_0=null,this.myTokenStart_0=0,this.myTokenEnd_0=0,this.bufferEnd_7ee91e$_0=0,this.myState_0=0,this.myFailed_0=!1;}function we(){ke=this;}_e.$metadata$={kind:r,simpleName:"WriterConfig",interfaces:[]},ge.prototype.write_za3lpa$=function(t){var e;this.fill_0>(this.buffer_0.length-1|0)&&this.flush(),this.buffer_0[(e=this.fill_0,this.fill_0=e+1|0,e)]=a(t);},ge.prototype.write_8chfmy$=function(t,e,n){this.fill_0>(this.buffer_0.length-n|0)&&(this.flush(),n>this.buffer_0.length)?this.writer_0.write_8chfmy$(t,e,n):(Un().arraycopy_yp22ie$(t,e,this.buffer_0,this.fill_0,n),this.fill_0=this.fill_0+n|0);},ge.prototype.write_3m52m6$=function(t,e,n){this.fill_0>(this.buffer_0.length-n|0)&&(this.flush(),n>this.buffer_0.length)?this.writer_0.write_3m52m6$(t,e,n):(Z(t,this.buffer_0,this.fill_0,e,n),this.fill_0=this.fill_0+n|0);},ge.prototype.flush=function(){this.writer_0.write_8chfmy$(this.buffer_0,0,this.fill_0),this.fill_0=0;},ge.prototype.close=function(){},ge.$metadata$={kind:r,simpleName:"WritingBuffer",interfaces:[xt]},Object.defineProperty(ve.prototype,"message",{get:function(){return this.message_y7nasg$_0}}),Object.defineProperty(ve.prototype,"cause",{get:function(){return this.cause_26vz5q$_0}}),ve.$metadata$={kind:r,simpleName:"SyntaxException",interfaces:[i]},Object.defineProperty(be.prototype,"message",{get:function(){return this.message_kt89er$_0}}),Object.defineProperty(be.prototype,"cause",{get:function(){return this.cause_c2uidd$_0}}),be.$metadata$={kind:r,simpleName:"IoException",interfaces:[i]},Object.defineProperty(xe.prototype,"bufferSequence",{configurable:!0,get:function(){return this.bufferSequence_i8enee$_0},set:function(t){this.bufferSequence_i8enee$_0=t;}}),Object.defineProperty(xe.prototype,"bufferEnd",{configurable:!0,get:function(){return this.bufferEnd_7ee91e$_0},set:function(t){this.bufferEnd_7ee91e$_0=t;}}),Object.defineProperty(xe.prototype,"state",{configurable:!0,get:function(){return this.locateToken_0(),this.myState_0}}),Object.defineProperty(xe.prototype,"tokenType",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenType_0}}),Object.defineProperty(xe.prototype,"tokenStart",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenStart_0}}),Object.defineProperty(xe.prototype,"tokenEnd",{configurable:!0,get:function(){return this.locateToken_0(),this.myTokenEnd_0}}),xe.prototype.start_6na8x6$=function(t,e,n,r){this.bufferSequence=t,this.myTokenEnd_0=e,this.myTokenStart_0=this.myTokenEnd_0,this.bufferEnd=n,this.flex.reset_6na8x6$(s(this.bufferSequence),e,n,r),this.myTokenType_0=null;},xe.prototype.advance=function(){this.locateToken_0(),this.myTokenType_0=null;},xe.prototype.locateToken_0=function(){if(null==this.myTokenType_0&&(this.myTokenStart_0=this.myTokenEnd_0,!this.myFailed_0))try{this.myState_0=this.flex.yystate(),this.myTokenType_0=this.flex.advance();}catch(t){if(e.isType(t,We))throw t;if(!e.isType(t,i))throw t;this.myFailed_0=!0,this.myTokenType_0=kn().BAD_CHARACTER,this.myTokenEnd_0=this.bufferEnd;}},we.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var ke=null;function Ce(){return null===ke&&new we,ke}function Oe(t){void 0===t&&(t=new Ne),this.options_0=t,this.buffer_0=new it,this.level_0=0;}function Ne(){Ae(),this.target="json",this.quoteFallback="double",this.useQuotes=!0,this.usePropertyNameQuotes=!0,this.useArrayCommas=!0,this.useObjectCommas=!0,this.indentLevel=2,this.objectItemNewline=!1,this.arrayItemNewline=!1,this.isSpaceAfterComma=!0,this.isSpaceAfterColon=!0,this.escapeUnicode=!1;}function Se(){Ee=this;}xe.$metadata$={kind:r,simpleName:"FlexAdapter",interfaces:[]},Object.defineProperty(Se.prototype,"RJsonCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="rjson",t.useQuotes=!1,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!1,t.useObjectCommas=!1,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"RJsonPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="rjson",t.useQuotes=!1,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!1,t.useObjectCommas=!1,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Object.defineProperty(Se.prototype,"JsonCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="json",t.useQuotes=!0,t.usePropertyNameQuotes=!0,t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"JsonPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="json",t.useQuotes=!0,t.usePropertyNameQuotes=!0,t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Object.defineProperty(Se.prototype,"JsCompact",{configurable:!0,get:function(){var t=new Ne;return t.target="js",t.useQuotes=!0,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!1,t.arrayItemNewline=!1,t.isSpaceAfterComma=!1,t.isSpaceAfterColon=!1,t}}),Object.defineProperty(Se.prototype,"JsPretty",{configurable:!0,get:function(){var t=new Ne;return t.target="js",t.useQuotes=!0,t.usePropertyNameQuotes=!1,t.quoteFallback="single",t.useArrayCommas=!0,t.useObjectCommas=!0,t.objectItemNewline=!0,t.arrayItemNewline=!0,t.isSpaceAfterComma=!0,t.isSpaceAfterColon=!0,t}}),Se.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var Ie,Ee=null;function Ae(){return null===Ee&&new Se,Ee}function ze(t){return !!Ie.contains_11rb$(t)||!N("[a-zA-Z_][a-zA-Z_0-9]*").matches_6bul2c$(t)}function je(t){this.elementType=t;}function Le(t){this.id=t;}function Te(t){Le.call(this,t);}function Me(t){Le.call(this,t);}function Re(t){Le.call(this,t.elementType.id),this.node=t;}function Pe(t){this.string=t;}function qe(){i.call(this),this.message_5xs4d4$_0=void 0,this.cause_f0a41y$_0=null,e.captureStack(i,this),this.name="ArrayIndexOutOfBoundsException";}function Be(t){i.call(this),this.message_v24yh0$_0=t,this.cause_rj05em$_0=null,e.captureStack(i,this),this.name="Error";}function Ue(){Ve();}function Fe(){De=this;}Ne.$metadata$={kind:r,simpleName:"Options",interfaces:[]},Oe.prototype.valueToStream=function(t){return this.buffer_0.length=0,this.printValue_0(t),this.buffer_0.byteInputStream()},Oe.prototype.valueToString=function(t){return this.buffer_0.length=0,this.printValue_0(t),this.buffer_0.toString()},Oe.prototype.stringToString=function(t){var e=_n().getDefault().createParser().streamToValue(ut(t));return this.buffer_0.length=0,this.printValue_0(e),this.buffer_0.toString()},Oe.prototype.streamToStream=function(t){var e=_n().getDefault().createParser().streamToValue(t);return this.buffer_0.length=0,this.printValue_0(e),this.buffer_0.byteInputStream()},Oe.prototype.streamToString=function(t){var e=_n().getDefault().createParser().streamToValue(t);return this.printValue_0(e),this.buffer_0.toString()},Oe.prototype.printValue_0=function(t,n){if(void 0===n&&(n=!1),e.isType(t,qt))this.append_0(t.value,void 0,n);else if(e.isType(t,Qt)){var r=this.tryEscapeUnicode_0(t.asString());this.append_0(Ln(r,this.options_0,!1),void 0,n);}else if(e.isType(t,Bt))this.append_0(this.toIntOrDecimalString_0(t),void 0,n);else if(e.isType(t,Ut))this.printObject_0(t,n);else {if(!e.isType(t,At))throw new ve("Unexpected type: "+e.getKClassFromExpression(t).toString());this.printArray_0(t,n);}},Oe.prototype.tryEscapeUnicode_0=function(t){var e;if(this.options_0.escapeUnicode){var n,r=w(t.length);for(n=k(t);n.hasNext();){var i,o=v(n.next()),a=r.add_11rb$,s=C(o);if((0|v(s))>2047){for(var u="\\u"+jn(0|v(s));u.length<4;)u="0"+u;i=u;}else i=String.fromCharCode(v(s));a.call(r,i);}e=b(r,"");}else e=t;return e},Oe.prototype.printObject_0=function(t,e){this.append_0("{",void 0,e),this.level_0=this.level_0+1|0;for(var n=!!this.options_0.objectItemNewline&&this.options_0.arrayItemNewline,r=0,i=t.iterator();i.hasNext();++r){var o=i.next();this.options_0.objectItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.printPair_0(o.name,o.value,n),r<(t.size()-1|0)&&(this.options_0.useObjectCommas?(this.append_0(",",void 0,!1),this.options_0.isSpaceAfterComma&&!this.options_0.objectItemNewline&&this.append_0(" ",void 0,!1)):this.options_0.objectItemNewline||this.append_0(" ",void 0,!1));}this.level_0=this.level_0-1|0,this.options_0.objectItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.append_0("}",void 0,this.options_0.objectItemNewline);},Oe.prototype.printArray_0=function(t,e){var n;void 0===e&&(e=!0),this.append_0("[",void 0,e),this.level_0=this.level_0+1|0;var r=0;for(n=t.iterator();n.hasNext();){var i=n.next(),o=this.options_0.arrayItemNewline;this.options_0.arrayItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.printValue_0(i,o),r<(t.size()-1|0)&&(this.options_0.useArrayCommas?(this.append_0(",",void 0,!1),this.options_0.isSpaceAfterComma&&!this.options_0.arrayItemNewline&&this.append_0(" ",void 0,!1)):this.options_0.arrayItemNewline||this.append_0(" ",void 0,!1)),r=r+1|0;}this.level_0=this.level_0-1|0,this.options_0.arrayItemNewline&&this.buffer_0.append_61zpoe$("\n"),this.append_0("]",void 0,this.options_0.arrayItemNewline);},Oe.prototype.printPair_0=function(t,e,n){void 0===n&&(n=!0),this.printKey_0(t,n),this.append_0(":",void 0,!1),this.options_0.isSpaceAfterColon&&this.append_0(" ",void 0,!1),this.printValue_0(e,!1);},Oe.prototype.printKey_0=function(t,e){if(void 0===e&&(e=!0),!this.options_0.usePropertyNameQuotes&&Tn(t))this.append_0(t,void 0,e);else {var n=this.tryEscapeUnicode_0(t);this.append_0(Ln(n,this.options_0,!0),void 0,e);}},Oe.prototype.append_0=function(t,e,n){var r,i;if(void 0===e&&(e=!1),void 0===n&&(n=!0),e&&this.buffer_0.append_61zpoe$("\n"),n){r=this.level_0;for(var o=0;o\0\0\0\0?\0\0\0\0@\0\0\0A\0\0\0\0\0B\0\0\0\tC\0\0\0\0\nD\0\0\0\0\v8\0',this.ZZ_TRANS_0=this.zzUnpackTrans_1(),this.ZZ_UNKNOWN_ERROR_0=0,this.ZZ_NO_MATCH_0=1,this.ZZ_PUSHBACK_2BIG_0=2,this.ZZ_ERROR_MSG_0=["Unknown internal scanner error","Error: could not match input","Error: pushback value was too large"],this.ZZ_ATTRIBUTE_PACKED_0_0="\0\t\r\t\0\0\t\0\t\0\t\b\0\t\0\b",this.ZZ_ATTRIBUTE_0=this.zzUnpackAttribute_1();}Ue.$metadata$={kind:r,simpleName:"Character",interfaces:[]},Object.defineProperty(We.prototype,"message",{get:function(){return this.message_us6fov$_0}}),Object.defineProperty(We.prototype,"cause",{get:function(){return this.cause_i5ew99$_0}}),We.$metadata$={kind:r,simpleName:"ProcessCanceledException",interfaces:[i]},Ke.$metadata$={kind:r,simpleName:"StringBuffer",interfaces:[]},Ze.$metadata$={kind:r,simpleName:"RJsonIdImpl",interfaces:[Re]},He.$metadata$={kind:r,simpleName:"RJsonBooleanImpl",interfaces:[Re]},Je.$metadata$={kind:r,simpleName:"RJsonCommentImpl",interfaces:[Re]},Ge.$metadata$={kind:r,simpleName:"RJsonListImpl",interfaces:[Re]},Qe.$metadata$={kind:r,simpleName:"RJsonObjectImpl",interfaces:[Re]},Ye.$metadata$={kind:r,simpleName:"RJsonPairImpl",interfaces:[Re]},Xe.$metadata$={kind:r,simpleName:"RJsonStringImpl",interfaces:[Re]},tn.$metadata$={kind:r,simpleName:"RJsonValueImpl",interfaces:[Re]},en.$metadata$={kind:r,simpleName:"RJsonWhiteSpaceImpl",interfaces:[Re]},nn.$metadata$={kind:r,simpleName:"RJsonBadCharacterImpl",interfaces:[Re]},Object.defineProperty(rn.prototype,"zzStartRead",{configurable:!0,get:function(){return this.zzStartRead_amyg19$_0},set:function(t){this.zzStartRead_amyg19$_0=t;}}),rn.prototype.getTokenStart=function(){return this.zzStartRead},rn.prototype.getTokenEnd=function(){return this.getTokenStart()+this.yylength()|0},rn.prototype.reset_6na8x6$=function(t,e,n,r){this.zzBuffer_0=t,this.zzStartRead=e,this.zzMarkedPos_0=this.zzStartRead,this.zzCurrentPos_0=this.zzMarkedPos_0,this.zzAtEOF_0=!1,this.zzAtBOL_0=!0,this.zzEndRead_0=n,this.yybegin_za3lpa$(r);},rn.prototype.zzRefill_0=function(){return !0},rn.prototype.yystate=function(){return this.zzLexicalState_0},rn.prototype.yybegin_za3lpa$=function(t){this.zzLexicalState_0=t;},rn.prototype.yytext=function(){return e.subSequence(this.zzBuffer_0,this.zzStartRead,this.zzMarkedPos_0)},rn.prototype.yycharat_za3lpa$=function(t){return C(this.zzBuffer_0.charCodeAt(this.zzStartRead+t|0))},rn.prototype.yylength=function(){return this.zzMarkedPos_0-this.zzStartRead|0},rn.prototype.zzScanError_0=function(t){var n;try{n=sn().ZZ_ERROR_MSG_0[t];}catch(t){if(!e.isType(t,qe))throw t;n=sn().ZZ_ERROR_MSG_0[0];}throw new Be(n)},rn.prototype.yypushback_za3lpa$=function(t){t>this.yylength()&&this.zzScanError_0(2),this.zzMarkedPos_0=this.zzMarkedPos_0-t|0;},rn.prototype.zzDoEOF_0=function(){this.zzEOFDone_0||(this.zzEOFDone_0=!0);},rn.prototype.advance=function(){for(var t={v:0},e={v:null},n={v:null},r={v:null},i={v:this.zzEndRead_0},o={v:this.zzBuffer_0},a=sn().ZZ_TRANS_0,s=sn().ZZ_ROWMAP_0,u=sn().ZZ_ATTRIBUTE_0;;){r.v=this.zzMarkedPos_0,this.yychar=this.yychar+(r.v-this.zzStartRead)|0;var p,c,l=!1;for(n.v=this.zzStartRead;n.v>14]|t>>7&127])<<7|127&t]},on.prototype.zzUnpackActionx_0=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackAction_0(this.ZZ_ACTION_PACKED_0_0,e,t),t},on.prototype.zzUnpackAction_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackRowMap_1=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackRowMap_0(this.ZZ_ROWMAP_PACKED_0_0,e,t),t},on.prototype.zzUnpackRowMap_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackAttribute_1=function(){var t=new Int32Array(68),e=0;return e=this.zzUnpackAttribute_0(this.ZZ_ATTRIBUTE_PACKED_0_0,e,t),t},on.prototype.zzUnpackAttribute_0=function(t,e,n){for(var r,i,o,a=0,s=e,u=t.length;a0)}return s},on.prototype.zzUnpackCMap_0=function(t){for(var n,r,i,o={v:0},a=0,s=t.length;a0)}return u},on.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var an=null;function sn(){return null===an&&new on,an}function un(){}function pn(){}function cn(){_n();}function ln(){fn=this,this.factory_2h3e2k$_0=S(hn);}function hn(){return new cn}rn.$metadata$={kind:r,simpleName:"RJsonLexer",interfaces:[]},un.$metadata$={kind:o,simpleName:"RJsonParser",interfaces:[]},pn.prototype.stringToJson=function(t){return Et().parse_61zpoe$(t).toString()},pn.prototype.stringToValue=function(t){return Et().parse_61zpoe$(t)},pn.prototype.streamToValue=function(t){return Et().parse_6nb378$(t.reader())},pn.prototype.streamToJsonStream=function(t){return new B(Et().parse_6nb378$(t.reader()).toString())},pn.prototype.streamToRJsonStream=function(t){var e=Et().parse_6nb378$(t.bufferedReader());return new Oe(Ae().RJsonCompact).valueToStream(e)},pn.$metadata$={kind:r,simpleName:"RJsonParserImpl",interfaces:[un]},Object.defineProperty(ln.prototype,"factory_0",{configurable:!0,get:function(){return this.factory_2h3e2k$_0.value}}),ln.prototype.getDefault=function(){return this.factory_0},ln.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var fn=null;function _n(){return null===fn&&new ln,fn}function yn(){this.lexer=new rn(null),this.type=null,this.location_i61z51$_0=new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn),this.rxUnicode_0=N("\\\\u([a-fA-F0-9]{4})"),this.rxBareEscape_0=N("\\\\.");}function dn(t){return ""+String.fromCharCode(C(a(Fn(0,s(t.groups.get_za3lpa$(1)).value,16))))}function mn(t){return ""+String.fromCharCode(C(a(Fn(0,s(t.groups.get_za3lpa$(1)).value,16))))}function $n(t){return t.value.substring(1)}function gn(){kn();}function vn(){bn=this;}cn.prototype.createParser=function(){return new yn},cn.$metadata$={kind:r,simpleName:"RJsonParserFactory",interfaces:[]},Object.defineProperty(yn.prototype,"location",{configurable:!0,get:function(){return new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn)},set:function(t){this.location_i61z51$_0=t;}}),yn.prototype.parse_61zpoe$=function(t){var n;this.lexer.reset_6na8x6$(t,0,t.length,0),this.advance_0(),this.skipWhitespaceAndComments_0();try{n=this.readValue_0();}catch(t){throw e.isType(t,ue)?t:e.isType(t,i)?new ue("Expected value",this.location):t}if(this.skipWhitespaceAndComments_0(),null!=this.type)throw new ue("Expected EOF but received "+this.currentTokenString_0(),this.location);return n},yn.prototype.stringToValue=function(t){return this.parse_61zpoe$(t)},yn.prototype.stringToJson=function(t){return this.stringToValue(t).toString()},yn.prototype.streamToValue=function(t){return e.isType(t,B)?this.parse_61zpoe$(t.src):this.parse_61zpoe$(t.bufferedReader().toString())},yn.prototype.streamToJsonStream=function(t){return new Oe(Ae().JsonCompact).streamToStream(t)},yn.prototype.streamToRJsonStream=function(t){return new Oe(Ae().RJsonCompact).streamToStream(t)},yn.prototype.advance_0=function(){this.type=this.lexer.advance();},yn.prototype.readValue_0=function(){var t;if(this.skipWhitespaceAndComments_0(),s(this.type),t=this.type,h(t,kn().L_BRACKET))return this.advance_0(),this.readList_0();if(h(t,kn().L_CURLY))return this.advance_0(),this.readObject_0();if(h(t,kn().BARE_STRING)){var e=new Qt(this.unescapeBare_0(this.lexer.yytext().toString()));return this.advance_0(),e}if(h(t,kn().DOUBLE_QUOTED_STRING)||h(t,kn().SINGLE_QUOTED_STRING)||h(t,kn().TICK_QUOTED_STRING)){var n=this.lexer.yytext().toString(),r=n.length-1|0,i=new Qt(this.unescape_0(n.substring(1,r)));return this.advance_0(),i}if(h(t,kn().TRUE)){var o=new qt(this.lexer.yytext().toString());return this.advance_0(),o}if(h(t,kn().FALSE)){var a=new qt(this.lexer.yytext().toString());return this.advance_0(),a}if(h(t,kn().NULL)){var u=new qt(this.lexer.yytext().toString());return this.advance_0(),u}if(h(t,kn().NUMBER)){var p=new Bt(this.lexer.yytext().toString());return this.advance_0(),p}throw new ue("Did not expect "+this.currentTokenString_0(),this.location)},yn.prototype.currentTokenString_0=function(){return h(this.type,kn().BAD_CHARACTER)?"("+this.lexer.yytext()+")":s(this.type).id},yn.prototype.skipWhitespaceAndComments_0=function(){for(var t;;){if(t=this.type,!(h(t,kn().WHITE_SPACE)||h(t,kn().BLOCK_COMMENT)||h(t,kn().LINE_COMMENT)))return;this.advance_0();}},yn.prototype.skipComma_0=function(){for(var t;;){if(t=this.type,!(h(t,kn().WHITE_SPACE)||h(t,kn().BLOCK_COMMENT)||h(t,kn().LINE_COMMENT)||h(t,kn().COMMA)))return;this.advance_0();}},yn.prototype.readList_0=function(){for(var t=Mt();;){if(this.skipWhitespaceAndComments_0(),h(this.type,kn().R_BRACKET))return this.advance_0(),t;try{t.add_luq74r$(this.readValue_0());}catch(t){throw e.isType(t,i)?new ue("Expected value or R_BRACKET",this.location):t}this.skipComma_0();}},yn.prototype.readObject_0=function(){for(var t=Jt();;){if(this.skipWhitespaceAndComments_0(),h(this.type,kn().R_CURLY))return this.advance_0(),t;var n,r;try{n=this.readName_0();}catch(t){throw e.isType(t,i)?new ue("Expected object property name or R_CURLY",this.location):t}this.skipWhitespaceAndComments_0(),this.consume_0(kn().COLON),this.skipWhitespaceAndComments_0();try{r=this.readValue_0();}catch(t){throw e.isType(t,i)?new ue("Expected value or R_CURLY",this.location):t}this.skipComma_0(),t.add_8kvr2e$(n,r);}},yn.prototype.consume_0=function(t){if(this.skipWhitespaceAndComments_0(),!h(this.type,t))throw new ue("Expected "+t.id,new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn));this.advance_0();},yn.prototype.readName_0=function(){var t;if(this.skipWhitespaceAndComments_0(),t=this.type,h(t,kn().NUMBER)||h(t,kn().TRUE)||h(t,kn().FALSE)||h(t,kn().NULL)){var e=this.lexer.yytext().toString();return this.advance_0(),e}if(h(t,kn().BARE_STRING)){var n=this.lexer.yytext().toString();return this.advance_0(),this.unescapeBare_0(n)}if(h(t,kn().DOUBLE_QUOTED_STRING)||h(t,kn().SINGLE_QUOTED_STRING)||h(t,kn().TICK_QUOTED_STRING)){var r=this.lexer.yytext().toString(),i=r.length-1|0,o=r.substring(1,i);return this.advance_0(),this.unescape_0(o)}throw new ue("Expected property name or R_CURLY, not "+this.currentTokenString_0(),new se(this.lexer.yychar,this.lexer.yyline,this.lexer.yycolumn))},yn.prototype.unescape_0=function(t){var e=this.rxUnicode_0.replace_20wsma$(t,dn);return e=I(e,"\\'","'"),e=I(e,"\\`","`"),e=I(e,'\\"','"'),e=I(e,"\\ "," "),I(e,"\\\n","")},yn.prototype.unescapeBare_0=function(t){var e=this.rxUnicode_0.replace_20wsma$(t,mn),n=e;return this.rxBareEscape_0.replace_20wsma$(n,$n)},yn.$metadata$={kind:r,simpleName:"RJsonParser2",interfaces:[un]},vn.prototype.createElement_a4qy0p$=function(t){var n=t.elementType;if(n===kn().BOOLEAN)return new He(t);if(n===kn().COMMENT)return new Je(t);if(n===kn().ID)return new Ze(t);if(n===kn().LIST)return new Ge(t);if(n===kn().OBJECT)return new Qe(t);if(n===kn().PAIR)return new Ye(t);if(n===kn().STRING)return new Xe(t);if(n===kn().VALUE)return new tn(t);if(n===kn().WHITE_SPACE)return new en(t);if(n===kn().BAD_CHARACTER)return new nn(t);throw e.newThrowable("Unknown element type: "+n)},vn.$metadata$={kind:n,simpleName:"Factory",interfaces:[]};var bn=null;function xn(){wn=this,this.BOOLEAN=new Te("BOOLEAN"),this.COMMENT=new Te("COMMENT"),this.ID=new Te("ID"),this.LIST=new Te("LIST"),this.OBJECT=new Te("OBJECT"),this.PAIR=new Te("PAIR"),this.STRING=new Te("STRING"),this.VALUE=new Te("VALUE"),this.BARE_STRING=new Me("BARE_STRING"),this.BLOCK_COMMENT=new Me("BLOCK_COMMENT"),this.COLON=new Me("COLON"),this.COMMA=new Me("COMMA"),this.DOUBLE_QUOTED_STRING=new Me("DOUBLE_QUOTED_STRING"),this.FALSE=new Me("FALSE"),this.LINE_COMMENT=new Me("LINE_COMMENT"),this.L_BRACKET=new Me("L_BRACKET"),this.L_CURLY=new Me("L_CURLY"),this.NULL=new Me("NULL"),this.NUMBER=new Me("NUMBER"),this.R_BRACKET=new Me("R_BRACKET"),this.R_CURLY=new Me("R_CURLY"),this.SINGLE_QUOTED_STRING=new Me("SINGLE_QUOTED_STRING"),this.TICK_QUOTED_STRING=new Me("TICK_QUOTED_STRING"),this.TRUE=new Me("TRUE"),this.WHITE_SPACE=new Me("WHITE_SPACE"),this.BAD_CHARACTER=new Me("BAD_CHARACTER");}xn.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var wn=null;function kn(){return null===wn&&new xn,wn}function Cn(t){this.theReader_0=t;}function On(){}function Nn(){zn();}function Sn(){An=this;}gn.$metadata$={kind:o,simpleName:"RJsonTypes",interfaces:[]},Cn.prototype.reader=function(){return this.theReader_0},Cn.prototype.bufferedReader=function(){return this.reader()},Cn.$metadata$={kind:r,simpleName:"ReaderInputStream",interfaces:[Q]},On.$metadata$={kind:r,simpleName:"JsDummy",interfaces:[E]},Sn.prototype.create_8chfmy$=function(t,e,n){var r,i=new A;r=e+n-1|0;for(var o=e;o<=r;o++)i+=String.fromCharCode(C(t[o]));return i},Sn.$metadata$={kind:n,simpleName:"Companion",interfaces:[]};var In,En,An=null;function zn(){return null===An&&new Sn,An}function jn(t){return t.toString(16)}function Ln(t,e,n){var r;if(!isNaN(parseFloat(t)))return h(e.quoteFallback,"single")?"'"+t+"'":h(e.quoteFallback,"backtick")?"`"+t+"`":'"'+t+'"';var i=n?e.usePropertyNameQuotes:e.useQuotes;if(!i&&In.test(t)&&(i=!0),!i&&h(t,"")&&(i=!0),!i&&n&&h(e.target,"js")&&(i=ze(t)),i){var o=t;r=h(e.quoteFallback,"single")&&-1===z(t,"'")?"'"+(o=I(o,"'","\\'"))+"'":h(e.quoteFallback,"backtick")&&-1===z(t,"`")?"`"+(o=I(o,"`","\\`"))+"`":'"'+(o=I(o,'"','\\"'))+'"';}else r=t;return r}function Tn(t){return En.test(t)}function Mn(t,n){try{if(!En.test(n))throw new j("not a float");var r=parseFloat(n);if(!isFinite(r))throw new j("not finite");return r}catch(t){throw e.isType(t,L)?new j(t.message):t}}function Rn(){this.a=[];}function Pn(t){this.this$ArrayList=t,this._n=0;}function qn(){Bn=this;}Nn.$metadata$={kind:r,simpleName:"XString",interfaces:[]},Rn.prototype.add_11rb$=function(t){return this.a.push(t),!0},Rn.prototype.add_wxm5ur$=function(t,e){yt("not implemented");},Rn.prototype.addAll_u57x28$=function(t,e){yt("not implemented");},Rn.prototype.addAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.clear=function(){yt("not implemented");},Rn.prototype.listIterator=function(){yt("not implemented");},Rn.prototype.listIterator_za3lpa$=function(t){yt("not implemented");},Rn.prototype.remove_11rb$=function(t){yt("not implemented");},Rn.prototype.removeAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.removeAt_za3lpa$=function(t){yt("not implemented");},Rn.prototype.retainAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.subList_vux9f0$=function(t,e){yt("not implemented");},Object.defineProperty(Rn.prototype,"size",{configurable:!0,get:function(){return this.a.length}}),Rn.prototype.contains_11rb$=function(t){yt("not implemented");},Rn.prototype.containsAll_brywnq$=function(t){yt("not implemented");},Rn.prototype.get_za3lpa$=function(t){return this.a[t]},Rn.prototype.indexOf_11rb$=function(t){yt("not implemented");},Rn.prototype.isEmpty=function(){yt("not implemented");},Pn.prototype.hasNext=function(){var t;return this._n<("number"==typeof(t=this.this$ArrayList.a.length)?t:l())},Pn.prototype.next=function(){var t,n;return null==(n=this.this$ArrayList.a[(t=this._n,this._n=t+1|0,t)])||e.isType(n,T)?n:l()},Pn.prototype.remove=function(){yt("not implemented");},Pn.$metadata$={kind:r,interfaces:[p]},Rn.prototype.iterator=function(){return new Pn(this)},Rn.prototype.set_wxm5ur$=function(t,e){yt("not implemented");},Rn.prototype.lastIndexOf_11rb$=function(t){yt("not implemented");},Rn.$metadata$={kind:r,simpleName:"ArrayList",interfaces:[M]},qn.prototype.arraycopy_yp22ie$=function(t,e,n,r,i){var o,a,s=r;o=e+i|0;for(var u=e;u thePackage.RJsonParserFactory.Companion.getDefault().createParser(), + createParserFactory: () => thePackage.RJsonParserFactory.Companion.getDefault(), + + PrettyPrinter: thePackage.PrettyPrinter, + /** + * @deprecated since 0.1.0. Use toJson() instead. + * @param rjsonString {String} + * @returns {String} + */ + convert: function (rjsonString) { + const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); + return parser.stringToJson(rjsonString); + }, + /** + * + * @param rjsonString {String} + * @param compact {Boolean} + * @returns {String} + */ + toJson: function (rjsonString, compact = true) { + const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); + const value = parser.stringToValue(rjsonString); + let opts; + if (compact) { + opts = thePackage.PrettyPrinter.Options.Companion.JsonCompact; + } else { + opts = thePackage.PrettyPrinter.Options.Companion.JsonPretty; + } + const printer = new thePackage.PrettyPrinter(opts); + return printer.valueToString(value); + }, + /** + * + * @param rjsonString {String} + * @param compact {Boolean} + * @returns {String} + */ + toRJson: function (jsonString, compact = true) { + const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); + const value = parser.stringToValue(jsonString); + let opts; + if (compact) { + opts = thePackage.PrettyPrinter.Options.Companion.RJsonCompact; + } else { + opts = thePackage.PrettyPrinter.Options.Companion.RJsonPretty; + } + const printer = new thePackage.PrettyPrinter(opts); + return printer.valueToString(value); + }, + /** + * + * @param rjsonString {String} + * @param compact {Boolean} + * @returns {String} + */ + toJs: function (rjsonString, compact = true) { + const parser = thePackage.RJsonParserFactory.Companion.getDefault().createParser(); + const value = parser.stringToValue(rjsonString); + let opts; + if (compact) { + opts = thePackage.PrettyPrinter.Options.Companion.JsCompact; + } else { + opts = thePackage.PrettyPrinter.Options.Companion.JsPretty; + } + const printer = new thePackage.PrettyPrinter(opts); + return printer.valueToString(value); + }, + + /** + * + * @param options {Options} PrettyPrinter options + * @param stringOrValue {string|object} a JsonLike string or JsonValue + * @returns {string} + */ + prettyPrint: function (options, stringOrValue) { + const prettyPrinter = new thePackage.PrettyPrinter(options); + if (typeof stringOrValue === 'string') { + return prettyPrinter.stringToString(stringOrValue); + } else { + return prettyPrinter.valueToString(stringOrValue); + } + }, + + api: theModule, + PrettyPrinter: thePackage.PrettyPrinter, + Options, + + }; + + module.exports.default = module.exports; +} (src)); + +function relaxedJSONToJSON(text, compact) { + if (text.trim().length === 0) { + return ""; + } + return srcExports.toJson(text, compact); +} + +function call(content, context, segment) { + if (!content) { + return new ValueAndMsg("", undefined, { segments: [{ value: segment, success: true }] }); + } + try { + var value = evalScript(content, context); + return new ValueAndMsg(value, undefined, { segments: [{ value: segment, success: true }] }); + } + catch (err) { + return new ValueAndMsg("", getErrorMessage(err), { + segments: [{ value: segment, success: false }], + }); + } +} +function evalDefault(unevaledValue, context) { + return new DefaultParser(unevaledValue, context).parse(); +} +var DefaultParser = /** @class */ (function () { + function DefaultParser(unevaledValue, context) { + this.context = context; + this.valueAndMsgs = []; + this.segments = getDynamicStringSegments(unevaledValue.trim()); + } + DefaultParser.prototype.parse = function () { + var _a; + try { + var 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 : []; }), + }); + } + 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; + }); + return values.length === 1 ? values[0] : values.join(""); + }; + DefaultParser.prototype.evalDynamicSegment = function (segment) { + var 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; + } + RelaxedJsonParser.prototype.parseObject = function () { + try { + return this.parseRelaxedJson(); + } + catch (e) { + return _super.prototype.parseObject.call(this); + } + }; + RelaxedJsonParser.prototype.parseRelaxedJson = function () { + // replace the original {{...}} as relaxed-json adaptive \{\{ + ${index} + \}\} + var indexedRelaxedJsonString = this.segments + .map(function (s, i) { return (isDynamicSegment(s) ? "\\{\\{" + i + "\\}\\}" : s); }) + .join(""); + if (indexedRelaxedJsonString.length === 0) { + // return empty, let the later transform determines the default value + return ""; + } + // 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); + // 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) + "\\\\}\\\\}"; }), {}); + return this.evalIndexedObject(indexedJsonObject); + }; + RelaxedJsonParser.prototype.evalIndexedObject = function (obj) { + if (typeof obj === "string") { + return this.evalIndexedStringToObject(obj); + } + if (typeof obj !== "object" || obj === null) { + return obj; + } + 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]; + ret[this.evalIndexedStringToString(key)] = this.evalIndexedObject(value); + } + return ret; + }; + RelaxedJsonParser.prototype.evalIndexedStringToObject = function (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; + // replace all {{ + ${index} + }} and \{\{ + ${index} \}\} + return indexedString.replace(/({{\d+}})|(\\{\\{\d+\\}\\})/g, function (s) { return _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)); + if (index >= 0 && index < this.segments.length) { + var 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); + }); + } + 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*/]; + } + }); + }); +} +function string2Fn(unevaledValue, type, methods) { + if (type) { + switch (type) { + case "JSON": + return function (context) { return evalJson(unevaledValue, context); }; + case "Function": + return function (context) { return evalFunction(unevaledValue, context, methods); }; + } + } + return function (context) { return evalDefault(unevaledValue, context); }; +} + +var IS_FETCHING_FIELD = "isFetching"; +var LATEST_END_TIME_FIELD = "latestEndTime"; +var TRIGGER_TYPE_FIELD = "triggerType"; +/** + * user input node + * + * @remarks + * CodeNode should resolve the cyclic dependency problem + * we may assume cyclic dependency only imported by CodeNode + * + * 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; + } + // FIXME: optimize later + CodeNode.prototype.convertedValue = function () { + if (this.codeType === "Function") { + return "{{function(){".concat(this.unevaledValue, "}}}"); + } + return this.unevaledValue; + }; + CodeNode.prototype.filterNodes = function (exposingNodes) { + if (!!this.evalCache.inFilterNodes) { + return new Map(); + } + this.evalCache.inFilterNodes = true; + try { + var 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)); + }); + // Add isFetching & latestEndTime node for FetchCheck + var topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); + topDepends.forEach(function (paths, depend) { + if (nodeIsRecord(depend)) { + var _loop_1 = function (field) { + var node = depend.children[field]; + if (node) { + addDepend(result_1, node, Array.from(paths).map(function (p) { return 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; + } + finally { + this.evalCache.inFilterNodes = false; + } + }; + // only includes direct depends, exlucdes depends of dependencies + CodeNode.prototype.filterDirectDepends = function (exposingNodes) { + return filterDepends(this.convertedValue(), exposingNodes); + }; + CodeNode.prototype.justEval = function (exposingNodes, methods) { + // log.log("justEval: ", this, "\nexposingNodes: ", exposingNodes); + if (!!this.evalCache.inEval) { + // found cyclic eval + this.evalCache.cyclic = true; + return new ValueAndMsg(""); + } + this.evalCache.inEval = true; + try { + var 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); + // 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)); + } + return valueAndMsg; + } + finally { + this.evalCache.inEval = false; + } + }; + CodeNode.prototype.getChildren = function () { + if (this.directDepends) { + return Array.from(this.directDepends.keys()); + } + return []; + }; + CodeNode.prototype.dependValues = function () { + var ret = {}; + this.directDepends.forEach(function (paths, node) { + if (node instanceof AbstractNode) { + paths.forEach(function (path) { + ret[path] = node.evalCache.value; + }); + } + }); + return ret; + }; + CodeNode.prototype.fetchInfo = function (exposingNodes, options) { + if (!!this.evalCache.inIsFetching) { + return { + isFetching: false, + ready: true, + }; + } + 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) && + _.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)) + return; + // wait for lazy loaded comps to load before executing query on page load + if (!Object.keys(value).length && paths.size) { + isFetching_1 = true; + ready_1 = false; + } + if (_.has(value, IS_FETCHING_FIELD)) { + isFetching_1 = isFetching_1 || value.isFetching === true; + } + if (_.has(value, LATEST_END_TIME_FIELD)) { + ready_1 = ready_1 && 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; + }); + return { + isFetching: isFetching_1, + ready: ready_1, + }; + } + 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)); +/** + * generate node for unevaledValue + */ +function fromUnevaledValue(unevaledValue) { + return new FunctionNode(new CodeNode(unevaledValue), function (valueAndMsg) { return 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) { + if (segment.success) { + segment.success = !hasCycle(segment.value, exposingNodes); + } + }); + return extra; +} + +/** + * 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) { + return this.child.filterNodes(exposingNodes); + }; + FetchCheckNode.prototype.justEval = function (exposingNodes) { + return this.fetchInfo(exposingNodes); + }; + FetchCheckNode.prototype.getChildren = function () { + return [this.child]; + }; + FetchCheckNode.prototype.dependValues = function () { + return this.child.dependValues(); + }; + FetchCheckNode.prototype.fetchInfo = function (exposingNodes) { + return this.child.fetchInfo(exposingNodes, this.options); + }; + __decorate([ + memoized() + ], FetchCheckNode.prototype, "filterNodes", null); + __decorate([ + memoized() + ], FetchCheckNode.prototype, "fetchInfo", null); + return FetchCheckNode; +}(AbstractNode)); +function isFetching(node) { + return new FetchCheckNode(node); +} + +const perf = + typeof performance === 'object' && + performance && + typeof performance.now === 'function' + ? performance + : Date; + +const hasAbortController = typeof AbortController === 'function'; + +// minimal backwards-compatibility polyfill +// this doesn't have nearly all the checks and whatnot that +// actual AbortController/Signal has, but it's enough for +// our purposes, and if used properly, behaves the same. +const AC = hasAbortController + ? AbortController + : class AbortController { + constructor() { + this.signal = new AS(); + } + abort(reason = new Error('This operation was aborted')) { + this.signal.reason = this.signal.reason || reason; + this.signal.aborted = true; + this.signal.dispatchEvent({ + type: 'abort', + target: this.signal, + }); + } + }; + +const hasAbortSignal = typeof AbortSignal === 'function'; +// Some polyfills put this on the AC class, not global +const hasACAbortSignal = typeof AC.AbortSignal === 'function'; +const AS = hasAbortSignal + ? AbortSignal + : hasACAbortSignal + ? AC.AbortController + : class AbortSignal { + constructor() { + this.reason = undefined; + this.aborted = false; + this._listeners = []; + } + dispatchEvent(e) { + if (e.type === 'abort') { + this.aborted = true; + this.onabort(e); + this._listeners.forEach(f => f(e), this); + } + } + onabort() {} + addEventListener(ev, fn) { + if (ev === 'abort') { + this._listeners.push(fn); + } + } + removeEventListener(ev, fn) { + if (ev === 'abort') { + this._listeners = this._listeners.filter(f => f !== fn); + } + } + }; + +const warned = new Set(); +const deprecatedOption = (opt, instead) => { + const code = `LRU_CACHE_OPTION_${opt}`; + if (shouldWarn(code)) { + warn(code, `${opt} option`, `options.${instead}`, LRUCache); + } +}; +const deprecatedMethod = (method, instead) => { + const code = `LRU_CACHE_METHOD_${method}`; + if (shouldWarn(code)) { + const { prototype } = LRUCache; + const { get } = Object.getOwnPropertyDescriptor(prototype, method); + warn(code, `${method} method`, `cache.${instead}()`, get); + } +}; +const deprecatedProperty = (field, instead) => { + const code = `LRU_CACHE_PROPERTY_${field}`; + if (shouldWarn(code)) { + const { prototype } = LRUCache; + const { get } = Object.getOwnPropertyDescriptor(prototype, field); + warn(code, `${field} property`, `cache.${instead}`, get); + } +}; + +const emitWarning = (...a) => { + typeof process === 'object' && + process && + typeof process.emitWarning === 'function' + ? process.emitWarning(...a) + : console.error(...a); +}; + +const shouldWarn = code => !warned.has(code); + +const warn = (code, what, instead, fn) => { + warned.add(code); + const msg = `The ${what} is deprecated. Please use ${instead} instead.`; + emitWarning(msg, 'DeprecationWarning', code, fn); +}; + +const isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n); + +/* istanbul ignore next - This is a little bit ridiculous, tbh. + * The maximum array length is 2^32-1 or thereabouts on most JS impls. + * And well before that point, you're caching the entire world, I mean, + * that's ~32GB of just integers for the next/prev links, plus whatever + * else to hold that many keys and values. Just filling the memory with + * zeroes at init time is brutal when you get that big. + * But why not be complete? + * Maybe in the future, these limits will have expanded. */ +const getUintArray = max => + !isPosInt(max) + ? null + : max <= Math.pow(2, 8) + ? Uint8Array + : max <= Math.pow(2, 16) + ? Uint16Array + : max <= Math.pow(2, 32) + ? Uint32Array + : max <= Number.MAX_SAFE_INTEGER + ? ZeroArray + : null; + +class ZeroArray extends Array { + constructor(size) { + super(size); + this.fill(0); + } +} + +class Stack { + constructor(max) { + if (max === 0) { + return [] + } + const UintArray = getUintArray(max); + this.heap = new UintArray(max); + this.length = 0; + } + push(n) { + this.heap[this.length++] = n; + } + pop() { + return this.heap[--this.length] + } +} + +class LRUCache { + constructor(options = {}) { + const { + max = 0, + ttl, + ttlResolution = 1, + ttlAutopurge, + updateAgeOnGet, + updateAgeOnHas, + allowStale, + dispose, + disposeAfter, + noDisposeOnSet, + noUpdateTTL, + maxSize = 0, + maxEntrySize = 0, + sizeCalculation, + fetchMethod, + fetchContext, + noDeleteOnFetchRejection, + noDeleteOnStaleGet, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + } = options; + + // deprecated options, don't trigger a warning for getting them if + // the thing being passed in is another LRUCache we're copying. + const { length, maxAge, stale } = + options instanceof LRUCache ? {} : options; + + if (max !== 0 && !isPosInt(max)) { + throw new TypeError('max option must be a nonnegative integer') + } + + const UintArray = max ? getUintArray(max) : Array; + if (!UintArray) { + throw new Error('invalid max value: ' + max) + } + + this.max = max; + this.maxSize = maxSize; + this.maxEntrySize = maxEntrySize || this.maxSize; + this.sizeCalculation = sizeCalculation || length; + if (this.sizeCalculation) { + if (!this.maxSize && !this.maxEntrySize) { + throw new TypeError( + 'cannot set sizeCalculation without setting maxSize or maxEntrySize' + ) + } + if (typeof this.sizeCalculation !== 'function') { + throw new TypeError('sizeCalculation set to non-function') + } + } + + this.fetchMethod = fetchMethod || null; + if (this.fetchMethod && typeof this.fetchMethod !== 'function') { + throw new TypeError( + 'fetchMethod must be a function if specified' + ) + } + + this.fetchContext = fetchContext; + if (!this.fetchMethod && fetchContext !== undefined) { + throw new TypeError( + 'cannot set fetchContext without fetchMethod' + ) + } + + this.keyMap = new Map(); + this.keyList = new Array(max).fill(null); + this.valList = new Array(max).fill(null); + this.next = new UintArray(max); + this.prev = new UintArray(max); + this.head = 0; + this.tail = 0; + this.free = new Stack(max); + this.initialFill = 1; + this.size = 0; + + if (typeof dispose === 'function') { + this.dispose = dispose; + } + if (typeof disposeAfter === 'function') { + this.disposeAfter = disposeAfter; + this.disposed = []; + } else { + this.disposeAfter = null; + this.disposed = null; + } + this.noDisposeOnSet = !!noDisposeOnSet; + this.noUpdateTTL = !!noUpdateTTL; + this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; + this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; + this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; + this.ignoreFetchAbort = !!ignoreFetchAbort; + + // NB: maxEntrySize is set to maxSize if it's set + if (this.maxEntrySize !== 0) { + if (this.maxSize !== 0) { + if (!isPosInt(this.maxSize)) { + throw new TypeError( + 'maxSize must be a positive integer if specified' + ) + } + } + if (!isPosInt(this.maxEntrySize)) { + throw new TypeError( + 'maxEntrySize must be a positive integer if specified' + ) + } + this.initializeSizeTracking(); + } + + this.allowStale = !!allowStale || !!stale; + this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; + this.updateAgeOnGet = !!updateAgeOnGet; + this.updateAgeOnHas = !!updateAgeOnHas; + this.ttlResolution = + isPosInt(ttlResolution) || ttlResolution === 0 + ? ttlResolution + : 1; + this.ttlAutopurge = !!ttlAutopurge; + this.ttl = ttl || maxAge || 0; + if (this.ttl) { + if (!isPosInt(this.ttl)) { + throw new TypeError( + 'ttl must be a positive integer if specified' + ) + } + this.initializeTTLTracking(); + } + + // do not allow completely unbounded caches + if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) { + throw new TypeError( + 'At least one of max, maxSize, or ttl is required' + ) + } + if (!this.ttlAutopurge && !this.max && !this.maxSize) { + const code = 'LRU_CACHE_UNBOUNDED'; + if (shouldWarn(code)) { + warned.add(code); + const msg = + 'TTL caching without ttlAutopurge, max, or maxSize can ' + + 'result in unbounded memory consumption.'; + emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache); + } + } + + if (stale) { + deprecatedOption('stale', 'allowStale'); + } + if (maxAge) { + deprecatedOption('maxAge', 'ttl'); + } + if (length) { + deprecatedOption('length', 'sizeCalculation'); + } + } + + getRemainingTTL(key) { + return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0 + } + + initializeTTLTracking() { + this.ttls = new ZeroArray(this.max); + this.starts = new ZeroArray(this.max); + + this.setItemTTL = (index, ttl, start = perf.now()) => { + this.starts[index] = ttl !== 0 ? start : 0; + this.ttls[index] = ttl; + if (ttl !== 0 && this.ttlAutopurge) { + const t = setTimeout(() => { + if (this.isStale(index)) { + this.delete(this.keyList[index]); + } + }, ttl + 1); + /* istanbul ignore else - unref() not supported on all platforms */ + if (t.unref) { + t.unref(); + } + } + }; + + this.updateItemAge = index => { + this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0; + }; + + this.statusTTL = (status, index) => { + if (status) { + status.ttl = this.ttls[index]; + status.start = this.starts[index]; + status.now = cachedNow || getNow(); + status.remainingTTL = status.now + status.ttl - status.start; + } + }; + + // debounce calls to perf.now() to 1s so we're not hitting + // that costly call repeatedly. + let cachedNow = 0; + const getNow = () => { + const n = perf.now(); + if (this.ttlResolution > 0) { + cachedNow = n; + const t = setTimeout( + () => (cachedNow = 0), + this.ttlResolution + ); + /* istanbul ignore else - not available on all platforms */ + if (t.unref) { + t.unref(); + } + } + return n + }; + + this.getRemainingTTL = key => { + const index = this.keyMap.get(key); + if (index === undefined) { + return 0 + } + return this.ttls[index] === 0 || this.starts[index] === 0 + ? Infinity + : this.starts[index] + + this.ttls[index] - + (cachedNow || getNow()) + }; + + this.isStale = index => { + return ( + this.ttls[index] !== 0 && + this.starts[index] !== 0 && + (cachedNow || getNow()) - this.starts[index] > + this.ttls[index] + ) + }; + } + updateItemAge(_index) {} + statusTTL(_status, _index) {} + setItemTTL(_index, _ttl, _start) {} + isStale(_index) { + return false + } + + initializeSizeTracking() { + this.calculatedSize = 0; + this.sizes = new ZeroArray(this.max); + this.removeItemSize = index => { + this.calculatedSize -= this.sizes[index]; + this.sizes[index] = 0; + }; + this.requireSize = (k, v, size, sizeCalculation) => { + // provisionally accept background fetches. + // actual value size will be checked when they return. + if (this.isBackgroundFetch(v)) { + return 0 + } + if (!isPosInt(size)) { + if (sizeCalculation) { + if (typeof sizeCalculation !== 'function') { + throw new TypeError('sizeCalculation must be a function') + } + size = sizeCalculation(v, k); + if (!isPosInt(size)) { + throw new TypeError( + 'sizeCalculation return invalid (expect positive integer)' + ) + } + } else { + throw new TypeError( + 'invalid size value (must be positive integer). ' + + 'When maxSize or maxEntrySize is used, sizeCalculation or size ' + + 'must be set.' + ) + } + } + return size + }; + this.addItemSize = (index, size, status) => { + this.sizes[index] = size; + if (this.maxSize) { + const maxSize = this.maxSize - this.sizes[index]; + while (this.calculatedSize > maxSize) { + this.evict(true); + } + } + this.calculatedSize += this.sizes[index]; + if (status) { + status.entrySize = size; + status.totalCalculatedSize = this.calculatedSize; + } + }; + } + removeItemSize(_index) {} + addItemSize(_index, _size) {} + requireSize(_k, _v, size, sizeCalculation) { + if (size || sizeCalculation) { + throw new TypeError( + 'cannot set size without setting maxSize or maxEntrySize on cache' + ) + } + } + + *indexes({ allowStale = this.allowStale } = {}) { + if (this.size) { + for (let i = this.tail; true; ) { + if (!this.isValidIndex(i)) { + break + } + if (allowStale || !this.isStale(i)) { + yield i; + } + if (i === this.head) { + break + } else { + i = this.prev[i]; + } + } + } + } + + *rindexes({ allowStale = this.allowStale } = {}) { + if (this.size) { + for (let i = this.head; true; ) { + if (!this.isValidIndex(i)) { + break + } + if (allowStale || !this.isStale(i)) { + yield i; + } + if (i === this.tail) { + break + } else { + i = this.next[i]; + } + } + } + } + + isValidIndex(index) { + return ( + index !== undefined && + this.keyMap.get(this.keyList[index]) === index + ) + } + + *entries() { + for (const i of this.indexes()) { + if ( + this.valList[i] !== undefined && + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield [this.keyList[i], this.valList[i]]; + } + } + } + *rentries() { + for (const i of this.rindexes()) { + if ( + this.valList[i] !== undefined && + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield [this.keyList[i], this.valList[i]]; + } + } + } + + *keys() { + for (const i of this.indexes()) { + if ( + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.keyList[i]; + } + } + } + *rkeys() { + for (const i of this.rindexes()) { + if ( + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.keyList[i]; + } + } + } + + *values() { + for (const i of this.indexes()) { + if ( + this.valList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.valList[i]; + } + } + } + *rvalues() { + for (const i of this.rindexes()) { + if ( + this.valList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.valList[i]; + } + } + } + + [Symbol.iterator]() { + return this.entries() + } + + find(fn, getOptions) { + for (const i of this.indexes()) { + const v = this.valList[i]; + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v; + if (value === undefined) continue + if (fn(value, this.keyList[i], this)) { + return this.get(this.keyList[i], getOptions) + } + } + } + + forEach(fn, thisp = this) { + for (const i of this.indexes()) { + const v = this.valList[i]; + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v; + if (value === undefined) continue + fn.call(thisp, value, this.keyList[i], this); + } + } + + rforEach(fn, thisp = this) { + for (const i of this.rindexes()) { + const v = this.valList[i]; + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v; + if (value === undefined) continue + fn.call(thisp, value, this.keyList[i], this); + } + } + + get prune() { + deprecatedMethod('prune', 'purgeStale'); + return this.purgeStale + } + + purgeStale() { + let deleted = false; + for (const i of this.rindexes({ allowStale: true })) { + if (this.isStale(i)) { + this.delete(this.keyList[i]); + deleted = true; + } + } + return deleted + } + + dump() { + const arr = []; + for (const i of this.indexes({ allowStale: true })) { + const key = this.keyList[i]; + const v = this.valList[i]; + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v; + if (value === undefined) continue + const entry = { value }; + if (this.ttls) { + entry.ttl = this.ttls[i]; + // always dump the start relative to a portable timestamp + // it's ok for this to be a bit slow, it's a rare operation. + const age = perf.now() - this.starts[i]; + entry.start = Math.floor(Date.now() - age); + } + if (this.sizes) { + entry.size = this.sizes[i]; + } + arr.unshift([key, entry]); + } + return arr + } + + load(arr) { + this.clear(); + for (const [key, entry] of arr) { + if (entry.start) { + // entry.start is a portable timestamp, but we may be using + // node's performance.now(), so calculate the offset. + // it's ok for this to be a bit slow, it's a rare operation. + const age = Date.now() - entry.start; + entry.start = perf.now() - age; + } + this.set(key, entry.value, entry); + } + } + + dispose(_v, _k, _reason) {} + + set( + k, + v, + { + ttl = this.ttl, + start, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + status, + } = {} + ) { + size = this.requireSize(k, v, size, sizeCalculation); + // if the item doesn't fit, don't do anything + // NB: maxEntrySize set to maxSize by default + if (this.maxEntrySize && size > this.maxEntrySize) { + if (status) { + status.set = 'miss'; + status.maxEntrySizeExceeded = true; + } + // have to delete, in case a background fetch is there already. + // in non-async cases, this is a no-op + this.delete(k); + return this + } + let index = this.size === 0 ? undefined : this.keyMap.get(k); + if (index === undefined) { + // addition + index = this.newIndex(); + this.keyList[index] = k; + this.valList[index] = v; + this.keyMap.set(k, index); + this.next[this.tail] = index; + this.prev[index] = this.tail; + this.tail = index; + this.size++; + this.addItemSize(index, size, status); + if (status) { + status.set = 'add'; + } + noUpdateTTL = false; + } else { + // update + this.moveToTail(index); + const oldVal = this.valList[index]; + if (v !== oldVal) { + if (this.isBackgroundFetch(oldVal)) { + oldVal.__abortController.abort(new Error('replaced')); + } else { + if (!noDisposeOnSet) { + this.dispose(oldVal, k, 'set'); + if (this.disposeAfter) { + this.disposed.push([oldVal, k, 'set']); + } + } + } + this.removeItemSize(index); + this.valList[index] = v; + this.addItemSize(index, size, status); + if (status) { + status.set = 'replace'; + const oldValue = + oldVal && this.isBackgroundFetch(oldVal) + ? oldVal.__staleWhileFetching + : oldVal; + if (oldValue !== undefined) status.oldValue = oldValue; + } + } else if (status) { + status.set = 'update'; + } + } + if (ttl !== 0 && this.ttl === 0 && !this.ttls) { + this.initializeTTLTracking(); + } + if (!noUpdateTTL) { + this.setItemTTL(index, ttl, start); + } + this.statusTTL(status, index); + if (this.disposeAfter) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()); + } + } + return this + } + + newIndex() { + if (this.size === 0) { + return this.tail + } + if (this.size === this.max && this.max !== 0) { + return this.evict(false) + } + if (this.free.length !== 0) { + return this.free.pop() + } + // initial fill, just keep writing down the list + return this.initialFill++ + } + + pop() { + if (this.size) { + const val = this.valList[this.head]; + this.evict(true); + return val + } + } + + evict(free) { + const head = this.head; + const k = this.keyList[head]; + const v = this.valList[head]; + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('evicted')); + } else { + this.dispose(v, k, 'evict'); + if (this.disposeAfter) { + this.disposed.push([v, k, 'evict']); + } + } + this.removeItemSize(head); + // if we aren't about to use the index, then null these out + if (free) { + this.keyList[head] = null; + this.valList[head] = null; + this.free.push(head); + } + this.head = this.next[head]; + this.keyMap.delete(k); + this.size--; + return head + } + + has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) { + const index = this.keyMap.get(k); + if (index !== undefined) { + if (!this.isStale(index)) { + if (updateAgeOnHas) { + this.updateItemAge(index); + } + if (status) status.has = 'hit'; + this.statusTTL(status, index); + return true + } else if (status) { + status.has = 'stale'; + this.statusTTL(status, index); + } + } else if (status) { + status.has = 'miss'; + } + return false + } + + // like get(), but without any LRU updating or TTL expiration + peek(k, { allowStale = this.allowStale } = {}) { + const index = this.keyMap.get(k); + if (index !== undefined && (allowStale || !this.isStale(index))) { + const v = this.valList[index]; + // either stale and allowed, or forcing a refresh of non-stale value + return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v + } + } + + backgroundFetch(k, index, options, context) { + const v = index === undefined ? undefined : this.valList[index]; + if (this.isBackgroundFetch(v)) { + return v + } + const ac = new AC(); + if (options.signal) { + options.signal.addEventListener('abort', () => + ac.abort(options.signal.reason) + ); + } + const fetchOpts = { + signal: ac.signal, + options, + context, + }; + const cb = (v, updateCache = false) => { + const { aborted } = ac.signal; + const ignoreAbort = options.ignoreFetchAbort && v !== undefined; + if (options.status) { + if (aborted && !updateCache) { + options.status.fetchAborted = true; + options.status.fetchError = ac.signal.reason; + if (ignoreAbort) options.status.fetchAbortIgnored = true; + } else { + options.status.fetchResolved = true; + } + } + if (aborted && !ignoreAbort && !updateCache) { + return fetchFail(ac.signal.reason) + } + // either we didn't abort, and are still here, or we did, and ignored + if (this.valList[index] === p) { + if (v === undefined) { + if (p.__staleWhileFetching) { + this.valList[index] = p.__staleWhileFetching; + } else { + this.delete(k); + } + } else { + if (options.status) options.status.fetchUpdated = true; + this.set(k, v, fetchOpts.options); + } + } + return v + }; + const eb = er => { + if (options.status) { + options.status.fetchRejected = true; + options.status.fetchError = er; + } + return fetchFail(er) + }; + const fetchFail = er => { + const { aborted } = ac.signal; + const allowStaleAborted = + aborted && options.allowStaleOnFetchAbort; + const allowStale = + allowStaleAborted || options.allowStaleOnFetchRejection; + const noDelete = allowStale || options.noDeleteOnFetchRejection; + if (this.valList[index] === p) { + // if we allow stale on fetch rejections, then we need to ensure that + // the stale value is not removed from the cache when the fetch fails. + const del = !noDelete || p.__staleWhileFetching === undefined; + if (del) { + this.delete(k); + } else if (!allowStaleAborted) { + // still replace the *promise* with the stale value, + // since we are done with the promise at this point. + // leave it untouched if we're still waiting for an + // aborted background fetch that hasn't yet returned. + this.valList[index] = p.__staleWhileFetching; + } + } + if (allowStale) { + if (options.status && p.__staleWhileFetching !== undefined) { + options.status.returnedStale = true; + } + return p.__staleWhileFetching + } else if (p.__returned === p) { + throw er + } + }; + const pcall = (res, rej) => { + this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej); + // ignored, we go until we finish, regardless. + // defer check until we are actually aborting, + // so fetchMethod can override. + ac.signal.addEventListener('abort', () => { + if ( + !options.ignoreFetchAbort || + options.allowStaleOnFetchAbort + ) { + res(); + // when it eventually resolves, update the cache. + if (options.allowStaleOnFetchAbort) { + res = v => cb(v, true); + } + } + }); + }; + if (options.status) options.status.fetchDispatched = true; + const p = new Promise(pcall).then(cb, eb); + p.__abortController = ac; + p.__staleWhileFetching = v; + p.__returned = null; + if (index === undefined) { + // internal, don't expose status. + this.set(k, p, { ...fetchOpts.options, status: undefined }); + index = this.keyMap.get(k); + } else { + this.valList[index] = p; + } + return p + } + + isBackgroundFetch(p) { + return ( + p && + typeof p === 'object' && + typeof p.then === 'function' && + Object.prototype.hasOwnProperty.call( + p, + '__staleWhileFetching' + ) && + Object.prototype.hasOwnProperty.call(p, '__returned') && + (p.__returned === p || p.__returned === null) + ) + } + + // this takes the union of get() and set() opts, because it does both + async fetch( + k, + { + // get options + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + // set options + ttl = this.ttl, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + // fetch exclusive options + noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, + allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, + ignoreFetchAbort = this.ignoreFetchAbort, + allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, + fetchContext = this.fetchContext, + forceRefresh = false, + status, + signal, + } = {} + ) { + if (!this.fetchMethod) { + if (status) status.fetch = 'get'; + return this.get(k, { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + status, + }) + } + + const options = { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + ttl, + noDisposeOnSet, + size, + sizeCalculation, + noUpdateTTL, + noDeleteOnFetchRejection, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + status, + signal, + }; + + let index = this.keyMap.get(k); + if (index === undefined) { + if (status) status.fetch = 'miss'; + const p = this.backgroundFetch(k, index, options, fetchContext); + return (p.__returned = p) + } else { + // in cache, maybe already fetching + const v = this.valList[index]; + if (this.isBackgroundFetch(v)) { + const stale = + allowStale && v.__staleWhileFetching !== undefined; + if (status) { + status.fetch = 'inflight'; + if (stale) status.returnedStale = true; + } + return stale ? v.__staleWhileFetching : (v.__returned = v) + } + + // if we force a refresh, that means do NOT serve the cached value, + // unless we are already in the process of refreshing the cache. + const isStale = this.isStale(index); + if (!forceRefresh && !isStale) { + if (status) status.fetch = 'hit'; + this.moveToTail(index); + if (updateAgeOnGet) { + this.updateItemAge(index); + } + this.statusTTL(status, index); + return v + } + + // ok, it is stale or a forced refresh, and not already fetching. + // refresh the cache. + const p = this.backgroundFetch(k, index, options, fetchContext); + const hasStale = p.__staleWhileFetching !== undefined; + const staleVal = hasStale && allowStale; + if (status) { + status.fetch = hasStale && isStale ? 'stale' : 'refresh'; + if (staleVal && isStale) status.returnedStale = true; + } + return staleVal ? p.__staleWhileFetching : (p.__returned = p) + } + } + + get( + k, + { + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + status, + } = {} + ) { + const index = this.keyMap.get(k); + if (index !== undefined) { + const value = this.valList[index]; + const fetching = this.isBackgroundFetch(value); + this.statusTTL(status, index); + if (this.isStale(index)) { + if (status) status.get = 'stale'; + // delete only if not an in-flight background fetch + if (!fetching) { + if (!noDeleteOnStaleGet) { + this.delete(k); + } + if (status) status.returnedStale = allowStale; + return allowStale ? value : undefined + } else { + if (status) { + status.returnedStale = + allowStale && value.__staleWhileFetching !== undefined; + } + return allowStale ? value.__staleWhileFetching : undefined + } + } else { + if (status) status.get = 'hit'; + // if we're currently fetching it, we don't actually have it yet + // it's not stale, which means this isn't a staleWhileRefetching. + // If it's not stale, and fetching, AND has a __staleWhileFetching + // value, then that means the user fetched with {forceRefresh:true}, + // so it's safe to return that value. + if (fetching) { + return value.__staleWhileFetching + } + this.moveToTail(index); + if (updateAgeOnGet) { + this.updateItemAge(index); + } + return value + } + } else if (status) { + status.get = 'miss'; + } + } + + connect(p, n) { + this.prev[n] = p; + this.next[p] = n; + } + + moveToTail(index) { + // if tail already, nothing to do + // if head, move head to next[index] + // else + // move next[prev[index]] to next[index] (head has no prev) + // move prev[next[index]] to prev[index] + // prev[index] = tail + // next[tail] = index + // tail = index + if (index !== this.tail) { + if (index === this.head) { + this.head = this.next[index]; + } else { + this.connect(this.prev[index], this.next[index]); + } + this.connect(this.tail, index); + this.tail = index; + } + } + + get del() { + deprecatedMethod('del', 'delete'); + return this.delete + } + + delete(k) { + let deleted = false; + if (this.size !== 0) { + const index = this.keyMap.get(k); + if (index !== undefined) { + deleted = true; + if (this.size === 1) { + this.clear(); + } else { + this.removeItemSize(index); + const v = this.valList[index]; + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('deleted')); + } else { + this.dispose(v, k, 'delete'); + if (this.disposeAfter) { + this.disposed.push([v, k, 'delete']); + } + } + this.keyMap.delete(k); + this.keyList[index] = null; + this.valList[index] = null; + if (index === this.tail) { + this.tail = this.prev[index]; + } else if (index === this.head) { + this.head = this.next[index]; + } else { + this.next[this.prev[index]] = this.next[index]; + this.prev[this.next[index]] = this.prev[index]; + } + this.size--; + this.free.push(index); + } + } + } + if (this.disposed) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()); + } + } + return deleted + } + + clear() { + for (const index of this.rindexes({ allowStale: true })) { + const v = this.valList[index]; + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('deleted')); + } else { + const k = this.keyList[index]; + this.dispose(v, k, 'delete'); + if (this.disposeAfter) { + this.disposed.push([v, k, 'delete']); + } + } + } + + this.keyMap.clear(); + this.valList.fill(null); + this.keyList.fill(null); + if (this.ttls) { + this.ttls.fill(0); + this.starts.fill(0); + } + if (this.sizes) { + this.sizes.fill(0); + } + this.head = 0; + this.tail = 0; + this.initialFill = 1; + this.free.length = 0; + this.calculatedSize = 0; + this.size = 0; + if (this.disposed) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()); + } + } + } + + get reset() { + deprecatedMethod('reset', 'clear'); + return this.clear + } + + get length() { + deprecatedProperty('length', 'size'); + return this.size + } + + static get AbortController() { + return AC + } + static get AbortSignal() { + return AS + } +} + +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; + } + SimpleNode.prototype.filterNodes = function (exposingNodes) { + return evalPerfUtil.perf(this, "filterNodes", function () { + return new Map(); + }); + }; + SimpleNode.prototype.justEval = function (exposingNodes) { + return this.value; + }; + SimpleNode.prototype.getChildren = function () { + return []; + }; + SimpleNode.prototype.dependValues = function () { + return {}; + }; + SimpleNode.prototype.fetchInfo = function (exposingNodes) { + return { + isFetching: false, + ready: true, + }; + }; + __decorate([ + memoized() + ], SimpleNode.prototype, "filterNodes", null); + return SimpleNode; +}(AbstractNode)); +/** + * provide simple value, don't need to eval + */ +function fromValue(value) { + return new SimpleNode(value); +} +var lru = new LRU({ max: 16384 }); +function fromValueWithCache(value) { + var res = lru.get(value); + if (res === undefined) { + res = fromValue(value); + lru.set(value, res); + } + return res; +} + +// 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) { + if (!this.inputNodes) { + return this.moduleExposingNodes; + } + var 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; + if (!targetNode) { + return; + } + inputNodes[name] = new WrapNode(targetNode, exposingNodes, exposingMethods); + }); + return __assign(__assign({}, this.moduleExposingNodes), inputNodes); + }; + WrapNode.prototype.filterNodes = function (exposingNodes) { + return this.delegate.filterNodes(this.wrap(exposingNodes, {})); + }; + WrapNode.prototype.justEval = function (exposingNodes, methods) { + return this.delegate.evaluate(this.wrap(exposingNodes, methods), this.moduleExposingMethods); + }; + WrapNode.prototype.fetchInfo = function (exposingNodes) { + return this.delegate.fetchInfo(this.wrap(exposingNodes, {})); + }; + WrapNode.prototype.getChildren = function () { + return [this.delegate]; + }; + WrapNode.prototype.dependValues = function () { + 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) { + return this.child.filterNodes(exposingNodes); + }; + WrapContextNode.prototype.justEval = function (exposingNodes, methods) { + var _this = this; + return function (params) { + var nodes; + if (params) { + nodes = __assign({}, exposingNodes); + Object.entries(params).forEach(function (_a) { + var key = _a[0], value = _a[1]; + nodes[key] = fromValueWithCache(value); + }); + } + else { + nodes = exposingNodes; + } + return _this.child.evaluate(nodes, methods); + }; + }; + WrapContextNode.prototype.getChildren = function () { + return [this.child]; + }; + WrapContextNode.prototype.dependValues = function () { + return this.child.dependValues(); + }; + WrapContextNode.prototype.fetchInfo = function (exposingNodes) { + return this.child.fetchInfo(exposingNodes); + }; + __decorate([ + memoized() + ], WrapContextNode.prototype, "filterNodes", null); + return WrapContextNode; +}(AbstractNode)); +function wrapContext(node) { + return new WrapContextNode(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) { + return this.child.filterNodes(exposingNodes); + }; + WrapContextNodeV2.prototype.justEval = function (exposingNodes, methods) { + return this.child.evaluate(this.wrap(exposingNodes), methods); + }; + WrapContextNodeV2.prototype.getChildren = function () { + return [this.child]; + }; + WrapContextNodeV2.prototype.dependValues = function () { + return this.child.dependValues(); + }; + WrapContextNodeV2.prototype.fetchInfo = function (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)); + +function transformWrapper(transformFn, defaultValue) { + function transformWithMsg(valueAndMsg) { + var _a; + var result; + try { + var value = transformFn(valueAndMsg.value); + result = new ValueAndMsg(value, valueAndMsg.msg, valueAndMsg.extra, valueAndMsg.value); + } + catch (err) { + var value = void 0; + try { + value = defaultValue !== null && defaultValue !== void 0 ? defaultValue : transformFn(""); + } + catch (err2) { + value = undefined; + } + var errorMsg = (_a = valueAndMsg.msg) !== null && _a !== void 0 ? _a : getErrorMessage(err); + result = new ValueAndMsg(value, errorMsg, valueAndMsg.extra, valueAndMsg.value); + } + // log.trace( + // "transformWithMsg. func: ", + // transformFn.name, + // "\nsource: ", + // valueAndMsg, + // "\nresult: ", + // result + // ); + return result; + } + return transformWithMsg; +} + +function styleNamespace(id) { + return "style-for-".concat(id); +} +function evalStyle(id, css, globalStyle) { + var _a; + var styleId = styleNamespace(id); + var prefixId = globalStyle ? id : "#".concat(id); + var compiledCSS = ""; + css.forEach(function (i) { + if (!i.trim()) { + return; + } + compiledCSS += serialize(compile("".concat(prefixId, "{").concat(i, "}")), middleware([prefixer, stringify])); + }); + var styleNode = document.querySelector("#".concat(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); + } + styleNode.textContent = compiledCSS; +} +function clearStyleEval(id) { + var styleId = id && styleNamespace(id); + var styleNode = document.querySelectorAll("style[data-style-src=eval]"); + if (styleNode) { + styleNode.forEach(function (i) { + if (!styleId || styleId === i.id) { + i.remove(); + } + }); + } +} + +var CompActionTypes; +(function (CompActionTypes) { + CompActionTypes["CHANGE_VALUE"] = "CHANGE_VALUE"; + CompActionTypes["RENAME"] = "RENAME"; + CompActionTypes["MULTI_CHANGE"] = "MULTI_CHANGE"; + CompActionTypes["DELETE_COMP"] = "DELETE_COMP"; + CompActionTypes["REPLACE_COMP"] = "REPLACE_COMP"; + CompActionTypes["ONLY_EVAL"] = "NEED_EVAL"; + // UPDATE_NODES = "UPDATE_NODES", + CompActionTypes["UPDATE_NODES_V2"] = "UPDATE_NODES_V2"; + CompActionTypes["EXECUTE_QUERY"] = "EXECUTE_QUERY"; + CompActionTypes["TRIGGER_MODULE_EVENT"] = "TRIGGER_MODULE_EVENT"; + /** + * this action can pass data to the comp by name + */ + CompActionTypes["ROUTE_BY_NAME"] = "ROUTE_BY_NAME"; + /** + * execute action with context. for example, buttons in table's column should has currentRow as context + * FIXME: this is a broadcast message, better to be improved by a heritage mechanism. + */ + CompActionTypes["UPDATE_ACTION_CONTEXT"] = "UPDATE_ACTION_CONTEXT"; + /** + * comp-specific action can be placed not globally. + * use CUSTOM uniformly. + */ + CompActionTypes["CUSTOM"] = "CUSTOM"; + /** + * broadcast other actions in comp tree structure. + * used for encapsulate MultiBaseComp + */ + CompActionTypes["BROADCAST"] = "BROADCAST"; +})(CompActionTypes || (CompActionTypes = {})); + +function customAction(value, editDSL) { + return { + type: CompActionTypes.CUSTOM, + path: [], + value: value, + editDSL: editDSL, + }; +} +function updateActionContextAction(context) { + var value = { + type: CompActionTypes.UPDATE_ACTION_CONTEXT, + path: [], + editDSL: false, + context: context, + }; + return { + type: CompActionTypes.BROADCAST, + path: [], + editDSL: false, + action: value, + }; +} +/** + * check if it's current custom action. + * keep type safe via generics, users should keep type the same as T, otherwise may cause bug. + */ +function isMyCustomAction(action, type) { + return !isChildAction(action) && isCustomAction(action, type); +} +function isCustomAction(action, type) { + return action.type === CompActionTypes.CUSTOM && _.get(action.value, "type") === type; +} +/** + * The action of execute query. + * path route to the query exactly. + * RootComp will change the path correctly when queryName is passed. + */ +function executeQueryAction(props) { + return __assign({ type: CompActionTypes.EXECUTE_QUERY, path: [], editDSL: false }, props); +} +function triggerModuleEventAction(name) { + return { + type: CompActionTypes.TRIGGER_MODULE_EVENT, + path: [], + editDSL: false, + name: name, + }; +} +/** + * better to use comp.dispatchChangeValueAction to keep type safe + */ +function changeValueAction(value, editDSL) { + return { + type: CompActionTypes.CHANGE_VALUE, + path: [], + editDSL: editDSL, + value: value, + }; +} +function isBroadcastAction(action, type) { + return action.type === CompActionTypes.BROADCAST && _.get(action.action, "type") === type; +} +function renameAction(oldName, name) { + var value = { + type: CompActionTypes.RENAME, + path: [], + editDSL: true, + oldName: oldName, + name: name, + }; + return { + type: CompActionTypes.BROADCAST, + path: [], + editDSL: true, + action: value, + }; +} +function routeByNameAction(name, action) { + return { + type: CompActionTypes.ROUTE_BY_NAME, + path: [], + name: name, + editDSL: action.editDSL, + action: 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); + return { + type: CompActionTypes.MULTI_CHANGE, + path: [], + editDSL: editDSL, + changes: changes, + }; +} +function deleteCompAction() { + return { + type: CompActionTypes.DELETE_COMP, + path: [], + editDSL: true, + }; +} +function replaceCompAction(compFactory) { + return { + type: CompActionTypes.REPLACE_COMP, + path: [], + editDSL: false, + compFactory: compFactory, + }; +} +function onlyEvalAction() { + return { + type: CompActionTypes.ONLY_EVAL, + path: [], + editDSL: false, + }; +} +function wrapChildAction(childName, action) { + return __assign(__assign({}, action), { path: __spreadArray([childName], action.path, true) }); +} +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; +} +function unwrapChildAction(action) { + return [action.path[0], __assign(__assign({}, action), { path: action.path.slice(1) })]; +} +function changeChildAction(childName, value, editDSL) { + return wrapChildAction(childName, changeValueAction(value, editDSL)); +} +function updateNodesV2Action(value) { + return { + type: CompActionTypes.UPDATE_NODES_V2, + path: [], + editDSL: false, + value: value, + }; +} +function wrapActionExtraInfo(action, extraInfos) { + return __assign(__assign({}, action), { extraInfo: __assign(__assign({}, action.extraInfo), extraInfos) }); +} +function deferAction(action) { + return __assign(__assign({}, action), { priority: "defer" }); +} +function changeEditDSLAction(action, editDSL) { + return __assign(__assign({}, action), { editDSL: editDSL }); +} + +var CACHE_PREFIX = "__cache__"; +/** + * a decorator for caching function's result ignoring params. + * + * @remarks + * caches are stored in `__cache__xxx` fields. + * `ObjectUtils.setFields` will not save this 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; + if (!thisObj[cachePropertyKey]) { + // put the result into array, for representing `undefined` + thisObj[cachePropertyKey] = [originalMethod.apply(this, args)]; + } + return thisObj[cachePropertyKey][0]; + }; +} + +/** + * compare keys and values + */ +function shallowEqual(obj1, obj2) { + if (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]; })); +} +function containFields(obj, fields) { + if (fields === undefined) { + return true; + } + var notEqualIndex = Object.keys(fields).findIndex(function (key) { + return obj[key] !== fields[key]; + }); + return notEqualIndex === -1; +} +/** + * type unsafe, users should keep safe by self. + * 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) { + 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))) { + delete res[key]; + } + } + }); + 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) { }); + } + AbstractComp.prototype.changeDispatch = function (dispatch) { + return setFieldsNoTypeCheck(this, { dispatch: dispatch }, { keepCacheKeys: ["node"] }); + }; + /** + * trigger changeValueAction, type safe + */ + AbstractComp.prototype.dispatchChangeValueAction = function (value) { + this.dispatch(this.changeValueAction(value)); + }; + AbstractComp.prototype.changeValueAction = function (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 () { + return this.nodeWithoutCache(); + }; + __decorate([ + memo + ], AbstractComp.prototype, "node", null); + return AbstractComp; +}()); + +/** + * wrap a dispatch as a child dispatch + * + * @param dispatch input dispatch + * @param childName the key of the child dispatch + * @returns a wrapped dispatch with the child dispatch + */ +function wrapDispatch(dispatch, childName) { + return function (action) { + if (dispatch) { + dispatch(wrapChildAction(childName, action)); + } + }; +} +/** + * the core class of multi function + * build the tree structure of comps + * @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); + 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; + // 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; + if (!NextComp) { + return this; + } + var compName = action.path[0]; + var currentComp = this.children[compName]; + var value = currentComp.toJsonValue(); + var nextComp = new NextComp({ + value: value, + dispatch: wrapDispatch(this.dispatch, compName), + }); + return this.setChildren(__assign(__assign({}, this.children), (_a = {}, _a[compName] = nextComp, _a))); + } + if (isChildAction(action)) { + var _d = unwrapChildAction(action), childName = _d[0], childAction = _d[1]; + var child = this.children[childName]; + if (!child) { + log.error("found bad action path ", childName); + return this; + } + var newChild = child.reduce(childAction); + return this.setChild(childName, newChild); + } + // key, value + switch (action.type) { + case CompActionTypes.MULTI_CHANGE: { + var changes_1 = action.changes; + // handle DELETE in the parent level + var mcChildren = _.omitBy(this.children, function (comp, childName) { + var innerAction = changes_1[childName]; + return (innerAction && + innerAction.type === CompActionTypes.DELETE_COMP && + innerAction.path.length === 0); + }); + // CHANGE + mcChildren = _.mapValues(mcChildren, function (comp, childName) { + var innerAction = changes_1[childName]; + if (innerAction) { + return comp.reduce(innerAction); + } + return comp; + }); + return this.setChildren(mcChildren); + } + case CompActionTypes.UPDATE_NODES_V2: { + var value_1 = action.value; + if (value_1 === undefined) { + return this; + } + var cacheKey = CACHE_PREFIX + "REDUCE_UPDATE_NODE"; + // if constructed by the value, just return + if (this[cacheKey] === value_1) { + // 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])); + } + return comp; + }); + var extraFields = (_c = this.extraNode()) === null || _c === void 0 ? void 0 : _c.updateNodeFields(value_1); + 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"] }); + } + case CompActionTypes.CHANGE_VALUE: { + return this.setChildren(this.parseChildrenFromValue({ + dispatch: this.dispatch, + value: action.value, + })); + } + case CompActionTypes.BROADCAST: { + return this.setChildren(_.mapValues(this.children, function (comp) { + return comp.reduce(action); + })); + } + case CompActionTypes.ONLY_EVAL: { + return this; + } + } + }; + MultiBaseComp.prototype.setChild = function (childName, newChild) { + var _a; + 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) { + 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 () { + return undefined; + }; + MultiBaseComp.prototype.childrenNode = function () { + var _this = this; + var result = {}; + Object.keys(this.children).forEach(function (key) { + var 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) { + return comp.changeDispatch(wrapDispatch(dispatch, childName)); + }); + return _super.prototype.changeDispatch.call(this, dispatch).setChildren(newChildren, { keepCacheKeys: ["node"] }); + }; + MultiBaseComp.prototype.ignoreChildDefaultValue = function () { + 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]; + // FIXME: this implementation is a little tricky, better choose a encapsulated implementation + if (comp.hasOwnProperty("NO_PERSISTENCE")) { + return; + } + var 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 () { + return true; + }; + MultiBaseComp.prototype.changeChildAction = function (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)); + }, + }; +} + +/** + * 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; + } + /** + * may override this to implement compatibility + */ + SimpleAbstractComp.prototype.oldValueToNew = function (value) { + return value; + }; + SimpleAbstractComp.prototype.reduce = function (action) { + if (action.type === CompActionTypes.CHANGE_VALUE) { + if (this.value === action.value) { + return this; + } + return setFieldsNoTypeCheck(this, { value: action.value }); + } + return this; + }; + SimpleAbstractComp.prototype.nodeWithoutCache = function () { + return fromValue(this.value); + }; + SimpleAbstractComp.prototype.exposingNode = function () { + return this.node(); + }; + // may be used in defaultValue + SimpleAbstractComp.prototype.toJsonValue = function () { + 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 () { + return this.value; + }; + return SimpleComp; +}(SimpleAbstractComp)); + +var jsxRuntimeExports = {}; +var jsxRuntime = { + get exports(){ return jsxRuntimeExports; }, + set exports(v){ jsxRuntimeExports = v; }, +}; + +var reactJsxRuntime_production_min = {}; + +var reactExports = {}; +var react = { + get exports(){ return reactExports; }, + set exports(v){ reactExports = v; }, +}; + +var react_production_min = {}; + +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var hasRequiredReact_production_min; + +function requireReact_production_min () { + if (hasRequiredReact_production_min) return react_production_min; + hasRequiredReact_production_min = 1; +var l=Symbol.for("react.element"),n=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),q=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),t=Symbol.for("react.provider"),u=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),z=Symbol.iterator;function A(a){if(null===a||"object"!==typeof a)return null;a=z&&a[z]||a["@@iterator"];return "function"===typeof a?a:null} + var B={isMounted:function(){return !1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B;}E.prototype.isReactComponent={}; + E.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,a,b,"setState");};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate");};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B;}var H=G.prototype=new F; + H.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0}; + function M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=""+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + printWarning('warn', format, args); + } + } + } + function error(format) { + { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } + } + } + + function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } // eslint-disable-next-line react-internal/safe-string-coercion + + + var argsWithFormat = args.map(function (item) { + return String(item); + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } + } + + var didWarnStateUpdateForUnmountedComponent = {}; + + function warnNoop(publicInstance, callerName) { + { + var _constructor = publicInstance.constructor; + var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; + var warningKey = componentName + "." + callerName; + + if (didWarnStateUpdateForUnmountedComponent[warningKey]) { + return; + } + + error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); + + didWarnStateUpdateForUnmountedComponent[warningKey] = true; + } + } + /** + * This is the abstract API for an update queue. + */ + + + var ReactNoopUpdateQueue = { + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + return false; + }, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueForceUpdate: function (publicInstance, callback, callerName) { + warnNoop(publicInstance, 'forceUpdate'); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { + warnNoop(publicInstance, 'replaceState'); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @param {?function} callback Called after component is updated. + * @param {?string} Name of the calling function in the public API. + * @internal + */ + enqueueSetState: function (publicInstance, partialState, callback, callerName) { + warnNoop(publicInstance, 'setState'); + } + }; + + var assign = Object.assign; + + var emptyObject = {}; + + { + Object.freeze(emptyObject); + } + /** + * Base class helpers for the updating state of a component. + */ + + + function Component(props, context, updater) { + this.props = props; + this.context = context; // If a component has string refs, we will assign a different object later. + + this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the + // renderer. + + this.updater = updater || ReactNoopUpdateQueue; + } + + Component.prototype.isReactComponent = {}; + /** + * Sets a subset of the state. Always use this to mutate + * state. You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * There is no guarantee that calls to `setState` will run synchronously, + * as they may eventually be batched together. You can provide an optional + * callback that will be executed when the call to setState is actually + * completed. + * + * When a function is provided to setState, it will be called at some point in + * the future (not synchronously). It will be called with the up to date + * component arguments (state, props, context). These values can be different + * from this.* because your function may be called after receiveProps but before + * shouldComponentUpdate, and this new state, props, and context will not yet be + * assigned to this. + * + * @param {object|function} partialState Next partial state or function to + * produce next partial state to be merged with current state. + * @param {?function} callback Called after state is updated. + * @final + * @protected + */ + + Component.prototype.setState = function (partialState, callback) { + if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) { + throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.'); + } + + this.updater.enqueueSetState(this, partialState, callback, 'setState'); + }; + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {?function} callback Called after update is complete. + * @final + * @protected + */ + + + Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); + }; + /** + * Deprecated APIs. These APIs used to exist on classic React classes but since + * we would like to deprecate them, we're not going to move them over to this + * modern base class. Instead, we define a getter that warns if it's accessed. + */ + + + { + var deprecatedAPIs = { + isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], + replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] + }; + + var defineDeprecationWarning = function (methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function () { + warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); + + return undefined; + } + }); + }; + + for (var fnName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(fnName)) { + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + } + } + } + + function ComponentDummy() {} + + ComponentDummy.prototype = Component.prototype; + /** + * Convenience component with default shallow equality check for sCU. + */ + + function PureComponent(props, context, updater) { + this.props = props; + this.context = context; // If a component has string refs, we will assign a different object later. + + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + + var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); + pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. + + assign(pureComponentPrototype, Component.prototype); + pureComponentPrototype.isPureReactComponent = true; + + // an immutable object with a single mutable value + function createRef() { + var refObject = { + current: null + }; + + { + Object.seal(refObject); + } + + return refObject; + } + + var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare + + function isArray(a) { + return isArrayImpl(a); + } + + /* + * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol + * and Temporal.* types. See https://github.com/facebook/react/pull/22064. + * + * The functions in this module will throw an easier-to-understand, + * easier-to-debug exception with a clear errors message message explaining the + * problem. (Instead of a confusing exception thrown inside the implementation + * of the `value` object). + */ + // $FlowFixMe only called in DEV, so void return is not possible. + function typeName(value) { + { + // toStringTag is needed for namespaced types like Temporal.Instant + var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; + var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; + return type; + } + } // $FlowFixMe only called in DEV, so void return is not possible. + + + function willCoercionThrow(value) { + { + try { + testStringCoercion(value); + return false; + } catch (e) { + return true; + } + } + } + + function testStringCoercion(value) { + // If you ended up here by following an exception call stack, here's what's + // happened: you supplied an object or symbol value to React (as a prop, key, + // DOM attribute, CSS property, string ref, etc.) and when React tried to + // coerce it to a string using `'' + value`, an exception was thrown. + // + // The most common types that will cause this exception are `Symbol` instances + // and Temporal objects like `Temporal.Instant`. But any object that has a + // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this + // exception. (Library authors do this to prevent users from using built-in + // numeric operators like `+` or comparison operators like `>=` because custom + // methods are needed to perform accurate arithmetic or comparison.) + // + // To fix the problem, coerce this object or symbol value to a string before + // passing it to React. The most reliable way is usually `String(value)`. + // + // To find which value is throwing, check the browser or debugger console. + // Before this exception was thrown, there should be `console.error` output + // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the + // problem and how that type was used: key, atrribute, input value prop, etc. + // In most cases, this console output also shows the component and its + // ancestor components where the exception happened. + // + // eslint-disable-next-line react-internal/safe-string-coercion + return '' + value; + } + function checkKeyStringCoercion(value) { + { + if (willCoercionThrow(value)) { + error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); + + return testStringCoercion(value); // throw (to help callers find troubleshooting comments) + } + } + } + + function getWrappedName(outerType, innerType, wrapperName) { + var displayName = outerType.displayName; + + if (displayName) { + return displayName; + } + + var functionName = innerType.displayName || innerType.name || ''; + return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; + } // Keep in sync with react-reconciler/getComponentNameFromFiber + + + function getContextName(type) { + return type.displayName || 'Context'; + } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. + + + function getComponentNameFromType(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case REACT_FRAGMENT_TYPE: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + var outerName = type.displayName || null; + + if (outerName !== null) { + return outerName; + } + + return getComponentNameFromType(type.type) || 'Memo'; + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentNameFromType(init(payload)); + } catch (x) { + return null; + } + } + + // eslint-disable-next-line no-fallthrough + } + } + + return null; + } + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true + }; + var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; + + { + didWarnAboutStringRefs = {}; + } + + function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; + } + + function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; + } + + function defineKeyPropWarningGetter(props, displayName) { + var warnAboutAccessingKey = function () { + { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); + } + + function defineRefPropWarningGetter(props, displayName) { + var warnAboutAccessingRef = function () { + { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); + } + + function warnIfStringRefCannotBeAutoConverted(config) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { + var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } + } + /** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + + var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; + }; + /** + * Create and return a new ReactElement of the given type. + * See https://reactjs.org/docs/react-api.html#createelement + */ + + function createElement(type, config, children) { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; + var self = null; + var source = null; + + if (config != null) { + if (hasValidRef(config)) { + ref = config.ref; + + { + warnIfStringRefCannotBeAutoConverted(config); + } + } + + if (hasValidKey(config)) { + { + checkKeyStringCoercion(config.key); + } + + key = '' + config.key; + } + + self = config.__self === undefined ? null : config.__self; + source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + + + var childrenLength = arguments.length - 2; + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + + { + if (Object.freeze) { + Object.freeze(childArray); + } + } + + props.children = childArray; + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + { + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + } + function cloneAndReplaceKey(oldElement, newKey) { + var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); + return newElement; + } + /** + * Clone and return a new ReactElement using element as the starting point. + * See https://reactjs.org/docs/react-api.html#cloneelement + */ + + function cloneElement(element, config, children) { + if (element === null || element === undefined) { + throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + "."); + } + + var propName; // Original props are copied + + var props = assign({}, element.props); // Reserved names are extracted + + var key = element.key; + var ref = element.ref; // Self is preserved since the owner is preserved. + + var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a + // transpiler, and the original source is probably a better indicator of the + // true owner. + + var source = element._source; // Owner will be preserved, unless ref is overridden + + var owner = element._owner; + + if (config != null) { + if (hasValidRef(config)) { + // Silently steal the ref from the parent. + ref = config.ref; + owner = ReactCurrentOwner.current; + } + + if (hasValidKey(config)) { + { + checkKeyStringCoercion(config.key); + } + + key = '' + config.key; + } // Remaining properties override existing props + + + var defaultProps; + + if (element.type && element.type.defaultProps) { + defaultProps = element.type.defaultProps; + } + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + if (config[propName] === undefined && defaultProps !== undefined) { + // Resolve default props + props[propName] = defaultProps[propName]; + } else { + props[propName] = config[propName]; + } + } + } + } // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + + + var childrenLength = arguments.length - 2; + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + + props.children = childArray; + } + + return ReactElement(element.type, key, ref, self, source, owner, props); + } + /** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + + function isValidElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } + + var SEPARATOR = '.'; + var SUBSEPARATOR = ':'; + /** + * Escape and wrap key so it is safe to use as a reactid + * + * @param {string} key to be escaped. + * @return {string} the escaped key. + */ + + function escape(key) { + var escapeRegex = /[=:]/g; + var escaperLookup = { + '=': '=0', + ':': '=2' + }; + var escapedString = key.replace(escapeRegex, function (match) { + return escaperLookup[match]; + }); + return '$' + escapedString; + } + /** + * TODO: Test that a single child and an array with one item have the same key + * pattern. + */ + + + var didWarnAboutMaps = false; + var userProvidedKeyEscapeRegex = /\/+/g; + + function escapeUserProvidedKey(text) { + return text.replace(userProvidedKeyEscapeRegex, '$&/'); + } + /** + * Generate a key string that identifies a element within a set. + * + * @param {*} element A element that could contain a manual key. + * @param {number} index Index that is used if a manual key is not provided. + * @return {string} + */ + + + function getElementKey(element, index) { + // Do some typechecking here since we call this blindly. We want to ensure + // that we don't block potential future ES APIs. + if (typeof element === 'object' && element !== null && element.key != null) { + // Explicit key + { + checkKeyStringCoercion(element.key); + } + + return escape('' + element.key); + } // Implicit key determined by the index in the set + + + return index.toString(36); + } + + function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + + if (type === 'undefined' || type === 'boolean') { + // All of the above are perceived as null. + children = null; + } + + var invokeCallback = false; + + if (children === null) { + invokeCallback = true; + } else { + switch (type) { + case 'string': + case 'number': + invokeCallback = true; + break; + + case 'object': + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = true; + } + + } + } + + if (invokeCallback) { + var _child = children; + var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array + // so that it's consistent if the number of children grows: + + var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; + + if (isArray(mappedChild)) { + var escapedChildKey = ''; + + if (childKey != null) { + escapedChildKey = escapeUserProvidedKey(childKey) + '/'; + } + + mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { + return c; + }); + } else if (mappedChild != null) { + if (isValidElement(mappedChild)) { + { + // The `if` statement here prevents auto-disabling of the safe + // coercion ESLint rule, so we must manually disable it below. + // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key + if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) { + checkKeyStringCoercion(mappedChild.key); + } + } + + mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as + // traverseAllChildren used to do for objects as children + escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key + mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number + // eslint-disable-next-line react-internal/safe-string-coercion + escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); + } + + array.push(mappedChild); + } + + return 1; + } + + var child; + var nextName; + var subtreeCount = 0; // Count of children found in the current subtree. + + var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; + + if (isArray(children)) { + for (var i = 0; i < children.length; i++) { + child = children[i]; + nextName = nextNamePrefix + getElementKey(child, i); + subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); + } + } else { + var iteratorFn = getIteratorFn(children); + + if (typeof iteratorFn === 'function') { + var iterableChildren = children; + + { + // Warn about using Maps as children + if (iteratorFn === iterableChildren.entries) { + if (!didWarnAboutMaps) { + warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); + } + + didWarnAboutMaps = true; + } + } + + var iterator = iteratorFn.call(iterableChildren); + var step; + var ii = 0; + + while (!(step = iterator.next()).done) { + child = step.value; + nextName = nextNamePrefix + getElementKey(child, ii++); + subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); + } + } else if (type === 'object') { + // eslint-disable-next-line react-internal/safe-string-coercion + var childrenString = String(children); + throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.'); + } + } + + return subtreeCount; + } + + /** + * Maps children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenmap + * + * The provided mapFunction(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} func The map function. + * @param {*} context Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ + function mapChildren(children, func, context) { + if (children == null) { + return children; + } + + var result = []; + var count = 0; + mapIntoArray(children, result, '', '', function (child) { + return func.call(context, child, count++); + }); + return result; + } + /** + * Count the number of children that are typically specified as + * `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrencount + * + * @param {?*} children Children tree container. + * @return {number} The number of children. + */ + + + function countChildren(children) { + var n = 0; + mapChildren(children, function () { + n++; // Don't return anything + }); + return n; + } + + /** + * Iterates through children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenforeach + * + * The provided forEachFunc(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc + * @param {*} forEachContext Context for forEachContext. + */ + function forEachChildren(children, forEachFunc, forEachContext) { + mapChildren(children, function () { + forEachFunc.apply(this, arguments); // Don't return anything. + }, forEachContext); + } + /** + * Flatten a children object (typically specified as `props.children`) and + * return an array with appropriately re-keyed children. + * + * See https://reactjs.org/docs/react-api.html#reactchildrentoarray + */ + + + function toArray(children) { + return mapChildren(children, function (child) { + return child; + }) || []; + } + /** + * Returns the first child in a collection of children and verifies that there + * is only one child in the collection. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenonly + * + * The current implementation of this function assumes that a single child gets + * passed without a wrapper, but the purpose of this helper function is to + * abstract away the particular structure of children. + * + * @param {?object} children Child collection structure. + * @return {ReactElement} The first and only `ReactElement` contained in the + * structure. + */ + + + function onlyChild(children) { + if (!isValidElement(children)) { + throw new Error('React.Children.only expected to receive a single React element child.'); + } + + return children; + } + + function createContext(defaultValue) { + // TODO: Second argument used to be an optional `calculateChangedBits` + // function. Warn to reserve for future use? + var context = { + $$typeof: REACT_CONTEXT_TYPE, + // As a workaround to support multiple concurrent renderers, we categorize + // some renderers as primary and others as secondary. We only expect + // there to be two concurrent renderers at most: React Native (primary) and + // Fabric (secondary); React DOM (primary) and React ART (secondary). + // Secondary renderers store their context values on separate fields. + _currentValue: defaultValue, + _currentValue2: defaultValue, + // Used to track how many concurrent renderers this context currently + // supports within in a single renderer. Such as parallel server rendering. + _threadCount: 0, + // These are circular + Provider: null, + Consumer: null, + // Add these to use same hidden class in VM as ServerContext + _defaultValue: null, + _globalName: null + }; + context.Provider = { + $$typeof: REACT_PROVIDER_TYPE, + _context: context + }; + var hasWarnedAboutUsingNestedContextConsumers = false; + var hasWarnedAboutUsingConsumerProvider = false; + var hasWarnedAboutDisplayNameOnConsumer = false; + + { + // A separate object, but proxies back to the original context object for + // backwards compatibility. It has a different $$typeof, so we can properly + // warn for the incorrect usage of Context as a Consumer. + var Consumer = { + $$typeof: REACT_CONTEXT_TYPE, + _context: context + }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here + + Object.defineProperties(Consumer, { + Provider: { + get: function () { + if (!hasWarnedAboutUsingConsumerProvider) { + hasWarnedAboutUsingConsumerProvider = true; + + error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); + } + + return context.Provider; + }, + set: function (_Provider) { + context.Provider = _Provider; + } + }, + _currentValue: { + get: function () { + return context._currentValue; + }, + set: function (_currentValue) { + context._currentValue = _currentValue; + } + }, + _currentValue2: { + get: function () { + return context._currentValue2; + }, + set: function (_currentValue2) { + context._currentValue2 = _currentValue2; + } + }, + _threadCount: { + get: function () { + return context._threadCount; + }, + set: function (_threadCount) { + context._threadCount = _threadCount; + } + }, + Consumer: { + get: function () { + if (!hasWarnedAboutUsingNestedContextConsumers) { + hasWarnedAboutUsingNestedContextConsumers = true; + + error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); + } + + return context.Consumer; + } + }, + displayName: { + get: function () { + return context.displayName; + }, + set: function (displayName) { + if (!hasWarnedAboutDisplayNameOnConsumer) { + warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); + + hasWarnedAboutDisplayNameOnConsumer = true; + } + } + } + }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty + + context.Consumer = Consumer; + } + + { + context._currentRenderer = null; + context._currentRenderer2 = null; + } + + return context; + } + + var Uninitialized = -1; + var Pending = 0; + var Resolved = 1; + var Rejected = 2; + + function lazyInitializer(payload) { + if (payload._status === Uninitialized) { + var ctor = payload._result; + var thenable = ctor(); // Transition to the next state. + // This might throw either because it's missing or throws. If so, we treat it + // as still uninitialized and try again next time. Which is the same as what + // happens if the ctor or any wrappers processing the ctor throws. This might + // end up fixing it if the resolution was a concurrency bug. + + thenable.then(function (moduleObject) { + if (payload._status === Pending || payload._status === Uninitialized) { + // Transition to the next state. + var resolved = payload; + resolved._status = Resolved; + resolved._result = moduleObject; + } + }, function (error) { + if (payload._status === Pending || payload._status === Uninitialized) { + // Transition to the next state. + var rejected = payload; + rejected._status = Rejected; + rejected._result = error; + } + }); + + if (payload._status === Uninitialized) { + // In case, we're still uninitialized, then we're waiting for the thenable + // to resolve. Set it as pending in the meantime. + var pending = payload; + pending._status = Pending; + pending._result = thenable; + } + } + + if (payload._status === Resolved) { + var moduleObject = payload._result; + + { + if (moduleObject === undefined) { + error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. + 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject); + } + } + + { + if (!('default' in moduleObject)) { + error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. + 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); + } + } + + return moduleObject.default; + } else { + throw payload._result; + } + } + + function lazy(ctor) { + var payload = { + // We use these fields to store the result. + _status: Uninitialized, + _result: ctor + }; + var lazyType = { + $$typeof: REACT_LAZY_TYPE, + _payload: payload, + _init: lazyInitializer + }; + + { + // In production, this would just set it on the object. + var defaultProps; + var propTypes; // $FlowFixMe + + Object.defineProperties(lazyType, { + defaultProps: { + configurable: true, + get: function () { + return defaultProps; + }, + set: function (newDefaultProps) { + error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); + + defaultProps = newDefaultProps; // Match production behavior more closely: + // $FlowFixMe + + Object.defineProperty(lazyType, 'defaultProps', { + enumerable: true + }); + } + }, + propTypes: { + configurable: true, + get: function () { + return propTypes; + }, + set: function (newPropTypes) { + error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); + + propTypes = newPropTypes; // Match production behavior more closely: + // $FlowFixMe + + Object.defineProperty(lazyType, 'propTypes', { + enumerable: true + }); + } + } + }); + } + + return lazyType; + } + + function forwardRef(render) { + { + if (render != null && render.$$typeof === REACT_MEMO_TYPE) { + error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); + } else if (typeof render !== 'function') { + error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); + } else { + if (render.length !== 0 && render.length !== 2) { + error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); + } + } + + if (render != null) { + if (render.defaultProps != null || render.propTypes != null) { + error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); + } + } + } + + var elementType = { + $$typeof: REACT_FORWARD_REF_TYPE, + render: render + }; + + { + var ownName; + Object.defineProperty(elementType, 'displayName', { + enumerable: false, + configurable: true, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; // The inner component shouldn't inherit this display name in most cases, + // because the component may be used elsewhere. + // But it's nice for anonymous functions to inherit the name, + // so that our component-stack generation logic will display their frames. + // An anonymous function generally suggests a pattern like: + // React.forwardRef((props, ref) => {...}); + // This kind of inner function is not used elsewhere so the side effect is okay. + + if (!render.name && !render.displayName) { + render.displayName = name; + } + } + }); + } + + return elementType; + } + + var REACT_MODULE_REFERENCE; + + { + REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); + } + + function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object + // types supported by any Flight configuration anywhere since + // we don't know which Flight build this will end up being used + // with. + type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { + return true; + } + } + + return false; + } + + function memo(type, compare) { + { + if (!isValidElementType(type)) { + error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); + } + } + + var elementType = { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: compare === undefined ? null : compare + }; + + { + var ownName; + Object.defineProperty(elementType, 'displayName', { + enumerable: false, + configurable: true, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; // The inner component shouldn't inherit this display name in most cases, + // because the component may be used elsewhere. + // But it's nice for anonymous functions to inherit the name, + // so that our component-stack generation logic will display their frames. + // An anonymous function generally suggests a pattern like: + // React.memo((props) => {...}); + // This kind of inner function is not used elsewhere so the side effect is okay. + + if (!type.name && !type.displayName) { + type.displayName = name; + } + } + }); + } + + return elementType; + } + + function resolveDispatcher() { + var dispatcher = ReactCurrentDispatcher.current; + + { + if (dispatcher === null) { + error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.'); + } + } // Will result in a null access error if accessed outside render phase. We + // intentionally don't throw our own error because this is in a hot path. + // Also helps ensure this is inlined. + + + return dispatcher; + } + function useContext(Context) { + var dispatcher = resolveDispatcher(); + + { + // TODO: add a more generic warning for invalid values. + if (Context._context !== undefined) { + var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs + // and nobody should be using this in existing code. + + if (realContext.Consumer === Context) { + error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); + } else if (realContext.Provider === Context) { + error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); + } + } + } + + return dispatcher.useContext(Context); + } + function useState(initialState) { + var dispatcher = resolveDispatcher(); + return dispatcher.useState(initialState); + } + function useReducer(reducer, initialArg, init) { + var dispatcher = resolveDispatcher(); + return dispatcher.useReducer(reducer, initialArg, init); + } + function useRef(initialValue) { + var dispatcher = resolveDispatcher(); + return dispatcher.useRef(initialValue); + } + function useEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useEffect(create, deps); + } + function useInsertionEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useInsertionEffect(create, deps); + } + function useLayoutEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useLayoutEffect(create, deps); + } + function useCallback(callback, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useCallback(callback, deps); + } + function useMemo(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useMemo(create, deps); + } + function useImperativeHandle(ref, create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useImperativeHandle(ref, create, deps); + } + function useDebugValue(value, formatterFn) { + { + var dispatcher = resolveDispatcher(); + return dispatcher.useDebugValue(value, formatterFn); + } + } + function useTransition() { + var dispatcher = resolveDispatcher(); + return dispatcher.useTransition(); + } + function useDeferredValue(value) { + var dispatcher = resolveDispatcher(); + return dispatcher.useDeferredValue(value); + } + function useId() { + var dispatcher = resolveDispatcher(); + return dispatcher.useId(); + } + function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { + var dispatcher = resolveDispatcher(); + return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); + } + + // Helpers to patch console.logs to avoid logging during side-effect free + // replaying on render function. This currently only patches the object + // lazily which won't cover if the log function was extracted eagerly. + // We could also eagerly patch the method. + var disabledDepth = 0; + var prevLog; + var prevInfo; + var prevWarn; + var prevError; + var prevGroup; + var prevGroupCollapsed; + var prevGroupEnd; + + function disabledLog() {} + + disabledLog.__reactDisabledLog = true; + function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } + } + function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: assign({}, props, { + value: prevLog + }), + info: assign({}, props, { + value: prevInfo + }), + warn: assign({}, props, { + value: prevWarn + }), + error: assign({}, props, { + value: prevError + }), + group: assign({}, props, { + value: prevGroup + }), + groupCollapsed: assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } + } + + var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; + var prefix; + function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } + } + var reentry = false; + var componentFrameCache; + + { + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); + } + + function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if ( !fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher$1.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" + // but we have a user-provided "displayName" + // splice it in to make the stack more readable. + + + if (fn.displayName && _frame.includes('')) { + _frame = _frame.replace('', fn.displayName); + } + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher$1.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; + } + function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } + } + + function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); + } + + function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; + } + + var loggedTypeFailures = {}; + var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + + function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } + } + + function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + // eslint-disable-next-line react-internal/prod-error-codes + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } + } + + function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + setExtraStackFrame(stack); + } else { + setExtraStackFrame(null); + } + } + } + + var propTypesMisspellWarningShown; + + { + propTypesMisspellWarningShown = false; + } + + function getDeclarationErrorAddendum() { + if (ReactCurrentOwner.current) { + var name = getComponentNameFromType(ReactCurrentOwner.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; + } + + function getSourceInfoErrorAddendum(source) { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; + } + + function getSourceInfoErrorAddendumForProps(elementProps) { + if (elementProps !== null && elementProps !== undefined) { + return getSourceInfoErrorAddendum(elementProps.__source); + } + + return ''; + } + /** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + + var ownerHasKeyUseWarning = {}; + + function getCurrentComponentErrorInfo(parentType) { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; + } + /** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + + function validateExplicitKey(element, parentType) { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; + } + + { + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } + } + /** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + + function validateChildKeys(node, parentType) { + if (typeof node !== 'object') { + return; + } + + if (isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } + /** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + + function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentNameFromType(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentNameFromType(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } + } + /** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + + function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } + } + function createElementWithValidation(type, props, children) { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendumForProps(props); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + { + error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + } + + var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + if (type === REACT_FRAGMENT_TYPE) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; + } + var didWarnAboutDeprecatedCreateFactory = false; + function createFactoryWithValidation(type) { + var validatedFactory = createElementWithValidation.bind(null, type); + validatedFactory.type = type; + + { + if (!didWarnAboutDeprecatedCreateFactory) { + didWarnAboutDeprecatedCreateFactory = true; + + warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); + } // Legacy hook: remove it + + + Object.defineProperty(validatedFactory, 'type', { + enumerable: false, + get: function () { + warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); + + Object.defineProperty(this, 'type', { + value: type + }); + return type; + } + }); + } + + return validatedFactory; + } + function cloneElementWithValidation(element, props, children) { + var newElement = cloneElement.apply(this, arguments); + + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], newElement.type); + } + + validatePropTypes(newElement); + return newElement; + } + + function startTransition(scope, options) { + var prevTransition = ReactCurrentBatchConfig.transition; + ReactCurrentBatchConfig.transition = {}; + var currentTransition = ReactCurrentBatchConfig.transition; + + { + ReactCurrentBatchConfig.transition._updatedFibers = new Set(); + } + + try { + scope(); + } finally { + ReactCurrentBatchConfig.transition = prevTransition; + + { + if (prevTransition === null && currentTransition._updatedFibers) { + var updatedFibersCount = currentTransition._updatedFibers.size; + + if (updatedFibersCount > 10) { + warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.'); + } + + currentTransition._updatedFibers.clear(); + } + } + } + } + + var didWarnAboutMessageChannel = false; + var enqueueTaskImpl = null; + function enqueueTask(task) { + if (enqueueTaskImpl === null) { + try { + // read require off the module object to get around the bundlers. + // we don't want them to detect a require and bundle a Node polyfill. + var requireString = ('require' + Math.random()).slice(0, 7); + var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's + // version of setImmediate, bypassing fake timers if any. + + enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate; + } catch (_err) { + // we're in a browser + // we can't use regular timers because they may still be faked + // so we try MessageChannel+postMessage instead + enqueueTaskImpl = function (callback) { + { + if (didWarnAboutMessageChannel === false) { + didWarnAboutMessageChannel = true; + + if (typeof MessageChannel === 'undefined') { + error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.'); + } + } + } + + var channel = new MessageChannel(); + channel.port1.onmessage = callback; + channel.port2.postMessage(undefined); + }; + } + } + + return enqueueTaskImpl(task); + } + + var actScopeDepth = 0; + var didWarnNoAwaitAct = false; + function act(callback) { + { + // `act` calls can be nested, so we track the depth. This represents the + // number of `act` scopes on the stack. + var prevActScopeDepth = actScopeDepth; + actScopeDepth++; + + if (ReactCurrentActQueue.current === null) { + // This is the outermost `act` scope. Initialize the queue. The reconciler + // will detect the queue and use it instead of Scheduler. + ReactCurrentActQueue.current = []; + } + + var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy; + var result; + + try { + // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only + // set to `true` while the given callback is executed, not for updates + // triggered during an async event, because this is how the legacy + // implementation of `act` behaved. + ReactCurrentActQueue.isBatchingLegacy = true; + result = callback(); // Replicate behavior of original `act` implementation in legacy mode, + // which flushed updates immediately after the scope function exits, even + // if it's an async function. + + if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) { + var queue = ReactCurrentActQueue.current; + + if (queue !== null) { + ReactCurrentActQueue.didScheduleLegacyUpdate = false; + flushActQueue(queue); + } + } + } catch (error) { + popActScope(prevActScopeDepth); + throw error; + } finally { + ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy; + } + + if (result !== null && typeof result === 'object' && typeof result.then === 'function') { + var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait + // for it to resolve before exiting the current scope. + + var wasAwaited = false; + var thenable = { + then: function (resolve, reject) { + wasAwaited = true; + thenableResult.then(function (returnValue) { + popActScope(prevActScopeDepth); + + if (actScopeDepth === 0) { + // We've exited the outermost act scope. Recursively flush the + // queue until there's no remaining work. + recursivelyFlushAsyncActWork(returnValue, resolve, reject); + } else { + resolve(returnValue); + } + }, function (error) { + // The callback threw an error. + popActScope(prevActScopeDepth); + reject(error); + }); + } + }; + + { + if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') { + // eslint-disable-next-line no-undef + Promise.resolve().then(function () {}).then(function () { + if (!wasAwaited) { + didWarnNoAwaitAct = true; + + error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);'); + } + }); + } + } + + return thenable; + } else { + var returnValue = result; // The callback is not an async function. Exit the current scope + // immediately, without awaiting. + + popActScope(prevActScopeDepth); + + if (actScopeDepth === 0) { + // Exiting the outermost act scope. Flush the queue. + var _queue = ReactCurrentActQueue.current; + + if (_queue !== null) { + flushActQueue(_queue); + ReactCurrentActQueue.current = null; + } // Return a thenable. If the user awaits it, we'll flush again in + // case additional work was scheduled by a microtask. + + + var _thenable = { + then: function (resolve, reject) { + // Confirm we haven't re-entered another `act` scope, in case + // the user does something weird like await the thenable + // multiple times. + if (ReactCurrentActQueue.current === null) { + // Recursively flush the queue until there's no remaining work. + ReactCurrentActQueue.current = []; + recursivelyFlushAsyncActWork(returnValue, resolve, reject); + } else { + resolve(returnValue); + } + } + }; + return _thenable; + } else { + // Since we're inside a nested `act` scope, the returned thenable + // immediately resolves. The outer scope will flush the queue. + var _thenable2 = { + then: function (resolve, reject) { + resolve(returnValue); + } + }; + return _thenable2; + } + } + } + } + + function popActScope(prevActScopeDepth) { + { + if (prevActScopeDepth !== actScopeDepth - 1) { + error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. '); + } + + actScopeDepth = prevActScopeDepth; + } + } + + function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { + { + var queue = ReactCurrentActQueue.current; + + if (queue !== null) { + try { + flushActQueue(queue); + enqueueTask(function () { + if (queue.length === 0) { + // No additional work was scheduled. Finish. + ReactCurrentActQueue.current = null; + resolve(returnValue); + } else { + // Keep flushing work until there's none left. + recursivelyFlushAsyncActWork(returnValue, resolve, reject); + } + }); + } catch (error) { + reject(error); + } + } else { + resolve(returnValue); + } + } + } + + var isFlushing = false; + + function flushActQueue(queue) { + { + if (!isFlushing) { + // Prevent re-entrance. + isFlushing = true; + var i = 0; + + try { + for (; i < queue.length; i++) { + var callback = queue[i]; + + do { + callback = callback(true); + } while (callback !== null); + } + + queue.length = 0; + } catch (error) { + // If something throws, leave the remaining callbacks on the queue. + queue = queue.slice(i + 1); + throw error; + } finally { + isFlushing = false; + } + } + } + } + + var createElement$1 = createElementWithValidation ; + var cloneElement$1 = cloneElementWithValidation ; + var createFactory = createFactoryWithValidation ; + var Children = { + map: mapChildren, + forEach: forEachChildren, + count: countChildren, + toArray: toArray, + only: onlyChild + }; + + exports.Children = Children; + exports.Component = Component; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.Profiler = REACT_PROFILER_TYPE; + exports.PureComponent = PureComponent; + 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; + exports.createFactory = createFactory; + exports.createRef = createRef; + exports.forwardRef = forwardRef; + exports.isValidElement = isValidElement; + exports.lazy = lazy; + exports.memo = memo; + exports.startTransition = startTransition; + exports.unstable_act = act; + exports.useCallback = useCallback; + exports.useContext = useContext; + exports.useDebugValue = useDebugValue; + exports.useDeferredValue = useDeferredValue; + exports.useEffect = useEffect; + exports.useId = useId; + exports.useImperativeHandle = useImperativeHandle; + exports.useInsertionEffect = useInsertionEffect; + exports.useLayoutEffect = useLayoutEffect; + exports.useMemo = useMemo; + exports.useReducer = useReducer; + exports.useRef = useRef; + exports.useState = useState; + exports.useSyncExternalStore = useSyncExternalStore; + exports.useTransition = useTransition; + exports.version = ReactVersion; + /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ + if ( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === + 'function' + ) { + __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); + } + + })(); + } +} (react_development, react_developmentExports)); + return react_developmentExports; +} + +(function (module) { + + if (process.env.NODE_ENV === 'production') { + module.exports = requireReact_production_min(); + } else { + module.exports = requireReact_development(); + } +} (react)); + +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var hasRequiredReactJsxRuntime_production_min; + +function requireReactJsxRuntime_production_min () { + if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min; + hasRequiredReactJsxRuntime_production_min = 1; +var f=reactExports,k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0}; + function q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return {$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}reactJsxRuntime_production_min.Fragment=l;reactJsxRuntime_production_min.jsx=q;reactJsxRuntime_production_min.jsxs=q; + return reactJsxRuntime_production_min; +} + +var reactJsxRuntime_development = {}; + +/** + * @license React + * react-jsx-runtime.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var hasRequiredReactJsxRuntime_development; + +function requireReactJsxRuntime_development () { + if (hasRequiredReactJsxRuntime_development) return reactJsxRuntime_development; + hasRequiredReactJsxRuntime_development = 1; + + if (process.env.NODE_ENV !== "production") { + (function() { + + var React = reactExports; + + // ATTENTION + // When adding new symbols to this file, + // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' + // The Symbol used to tag the ReactElement-like types. + var REACT_ELEMENT_TYPE = Symbol.for('react.element'); + var REACT_PORTAL_TYPE = Symbol.for('react.portal'); + var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment'); + var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode'); + var REACT_PROFILER_TYPE = Symbol.for('react.profiler'); + var REACT_PROVIDER_TYPE = Symbol.for('react.provider'); + var REACT_CONTEXT_TYPE = Symbol.for('react.context'); + var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref'); + var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense'); + var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list'); + var REACT_MEMO_TYPE = Symbol.for('react.memo'); + var REACT_LAZY_TYPE = Symbol.for('react.lazy'); + var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen'); + var MAYBE_ITERATOR_SYMBOL = Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; + function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable !== 'object') { + return null; + } + + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + + return null; + } + + var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + + function error(format) { + { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } + } + } + + function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } // eslint-disable-next-line react-internal/safe-string-coercion + + + var argsWithFormat = args.map(function (item) { + return String(item); + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } + } + + // ----------------------------------------------------------------------------- + + var enableScopeAPI = false; // Experimental Create Event Handle API. + var enableCacheElement = false; + var enableTransitionTracing = false; // No known bugs, but needs performance testing + + var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber + // stuff. Intended to enable React core members to more easily debug scheduling + // issues in DEV builds. + + var enableDebugTracing = false; // Track which Fiber(s) schedule render work. + + var REACT_MODULE_REFERENCE; + + { + REACT_MODULE_REFERENCE = Symbol.for('react.module.reference'); + } + + function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object + // types supported by any Flight configuration anywhere since + // we don't know which Flight build this will end up being used + // with. + type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) { + return true; + } + } + + return false; + } + + function getWrappedName(outerType, innerType, wrapperName) { + var displayName = outerType.displayName; + + if (displayName) { + return displayName; + } + + var functionName = innerType.displayName || innerType.name || ''; + return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName; + } // Keep in sync with react-reconciler/getComponentNameFromFiber + + + function getContextName(type) { + return type.displayName || 'Context'; + } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead. + + + function getComponentNameFromType(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case REACT_FRAGMENT_TYPE: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + var outerName = type.displayName || null; + + if (outerName !== null) { + return outerName; + } + + return getComponentNameFromType(type.type) || 'Memo'; + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentNameFromType(init(payload)); + } catch (x) { + return null; + } + } + + // eslint-disable-next-line no-fallthrough + } + } + + return null; + } + + var assign = Object.assign; + + // Helpers to patch console.logs to avoid logging during side-effect free + // replaying on render function. This currently only patches the object + // lazily which won't cover if the log function was extracted eagerly. + // We could also eagerly patch the method. + var disabledDepth = 0; + var prevLog; + var prevInfo; + var prevWarn; + var prevError; + var prevGroup; + var prevGroupCollapsed; + var prevGroupEnd; + + function disabledLog() {} + + disabledLog.__reactDisabledLog = true; + function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } + } + function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: assign({}, props, { + value: prevLog + }), + info: assign({}, props, { + value: prevInfo + }), + warn: assign({}, props, { + value: prevWarn + }), + error: assign({}, props, { + value: prevError + }), + group: assign({}, props, { + value: prevGroup + }), + groupCollapsed: assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } + } + + var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; + var prefix; + function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } + } + var reentry = false; + var componentFrameCache; + + { + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); + } + + function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if ( !fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "" + // but we have a user-provided "displayName" + // splice it in to make the stack more readable. + + + if (fn.displayName && _frame.includes('')) { + _frame = _frame.replace('', fn.displayName); + } + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; + } + function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } + } + + function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); + } + + function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; + } + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + var loggedTypeFailures = {}; + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + + function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame.setExtraStackFrame(null); + } + } + } + + function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + // eslint-disable-next-line react-internal/prod-error-codes + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } + } + + var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare + + function isArray(a) { + return isArrayImpl(a); + } + + /* + * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol + * and Temporal.* types. See https://github.com/facebook/react/pull/22064. + * + * The functions in this module will throw an easier-to-understand, + * easier-to-debug exception with a clear errors message message explaining the + * problem. (Instead of a confusing exception thrown inside the implementation + * of the `value` object). + */ + // $FlowFixMe only called in DEV, so void return is not possible. + function typeName(value) { + { + // toStringTag is needed for namespaced types like Temporal.Instant + var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag; + var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; + return type; + } + } // $FlowFixMe only called in DEV, so void return is not possible. + + + function willCoercionThrow(value) { + { + try { + testStringCoercion(value); + return false; + } catch (e) { + return true; + } + } + } + + function testStringCoercion(value) { + // If you ended up here by following an exception call stack, here's what's + // happened: you supplied an object or symbol value to React (as a prop, key, + // DOM attribute, CSS property, string ref, etc.) and when React tried to + // coerce it to a string using `'' + value`, an exception was thrown. + // + // The most common types that will cause this exception are `Symbol` instances + // and Temporal objects like `Temporal.Instant`. But any object that has a + // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this + // exception. (Library authors do this to prevent users from using built-in + // numeric operators like `+` or comparison operators like `>=` because custom + // methods are needed to perform accurate arithmetic or comparison.) + // + // To fix the problem, coerce this object or symbol value to a string before + // passing it to React. The most reliable way is usually `String(value)`. + // + // To find which value is throwing, check the browser or debugger console. + // Before this exception was thrown, there should be `console.error` output + // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the + // problem and how that type was used: key, atrribute, input value prop, etc. + // In most cases, this console output also shows the component and its + // ancestor components where the exception happened. + // + // eslint-disable-next-line react-internal/safe-string-coercion + return '' + value; + } + function checkKeyStringCoercion(value) { + { + if (willCoercionThrow(value)) { + error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value)); + + return testStringCoercion(value); // throw (to help callers find troubleshooting comments) + } + } + } + + var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; + var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true + }; + var specialPropKeyWarningShown; + var specialPropRefWarningShown; + var didWarnAboutStringRefs; + + { + didWarnAboutStringRefs = {}; + } + + function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; + } + + function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; + } + + function warnIfStringRefCannotBeAutoConverted(config, self) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) { + var componentName = getComponentNameFromType(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } + } + + function defineKeyPropWarningGetter(props, displayName) { + { + var warnAboutAccessingKey = function () { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); + } + } + + function defineRefPropWarningGetter(props, displayName) { + { + var warnAboutAccessingRef = function () { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); + } + } + /** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + + var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; + }; + /** + * https://github.com/reactjs/rfcs/pull/107 + * @param {*} type + * @param {object} props + * @param {string} key + */ + + function jsxDEV(type, config, maybeKey, source, self) { + { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; // Currently, key can be spread in as a prop. This causes a potential + // issue if key is also explicitly declared (ie.
+ // or
). We want to deprecate key spread, + // but as an intermediary step, we will use jsxDEV for everything except + //
, because we aren't currently able to tell if + // key is explicitly declared to be undefined or not. + + if (maybeKey !== undefined) { + { + checkKeyStringCoercion(maybeKey); + } + + key = '' + maybeKey; + } + + if (hasValidKey(config)) { + { + checkKeyStringCoercion(config.key); + } + + key = '' + config.key; + } + + if (hasValidRef(config)) { + ref = config.ref; + warnIfStringRefCannotBeAutoConverted(config, self); + } // Remaining properties are added to a new props object + + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); + } + } + + var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; + var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + + function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } + } + + var propTypesMisspellWarningShown; + + { + propTypesMisspellWarningShown = false; + } + /** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + + + function isValidElement(object) { + { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } + } + + function getDeclarationErrorAddendum() { + { + if (ReactCurrentOwner$1.current) { + var name = getComponentNameFromType(ReactCurrentOwner$1.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; + } + } + + function getSourceInfoErrorAddendum(source) { + { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; + } + } + /** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + + var ownerHasKeyUseWarning = {}; + + function getCurrentComponentErrorInfo(parentType) { + { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; + } + } + /** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + + function validateExplicitKey(element, parentType) { + { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; + } + + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } + } + /** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + + function validateChildKeys(node, parentType) { + { + if (typeof node !== 'object') { + return; + } + + if (isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } + } + } + /** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + + function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentNameFromType(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentNameFromType(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } + } + /** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + + function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } + } + + var didWarnAboutKeySpread = {}; + function jsxWithValidation(type, props, key, isStaticChildren, source, self) { + { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendum(source); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + + var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + var children = props.children; + + if (children !== undefined) { + if (isStaticChildren) { + if (isArray(children)) { + for (var i = 0; i < children.length; i++) { + validateChildKeys(children[i], type); + } + + if (Object.freeze) { + Object.freeze(children); + } + } else { + error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.'); + } + } else { + validateChildKeys(children, type); + } + } + } + + { + if (hasOwnProperty.call(props, 'key')) { + var componentName = getComponentNameFromType(type); + var keys = Object.keys(props).filter(function (k) { + return k !== 'key'; + }); + var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}'; + + if (!didWarnAboutKeySpread[componentName + beforeExample]) { + var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}'; + + error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName); + + didWarnAboutKeySpread[componentName + beforeExample] = true; + } + } + } + + if (type === REACT_FRAGMENT_TYPE) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; + } + } // These two functions exist to still get child warnings in dev + // even with the prod transform. This means that jsxDEV is purely + // opt-in behavior for better messages but that we won't stop + // giving you warnings if you use production apis. + + function jsxWithValidationStatic(type, props, key) { + { + return jsxWithValidation(type, props, key, true); + } + } + function jsxWithValidationDynamic(type, props, key) { + { + return jsxWithValidation(type, props, key, false); + } + } + + var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children. + // for now we can ship identical prod functions + + var jsxs = jsxWithValidationStatic ; + + reactJsxRuntime_development.Fragment = REACT_FRAGMENT_TYPE; + reactJsxRuntime_development.jsx = jsx; + reactJsxRuntime_development.jsxs = jsxs; + })(); + } + return reactJsxRuntime_development; +} + +(function (module) { + + if (process.env.NODE_ENV === 'production') { + module.exports = requireReactJsxRuntime_production_min(); + } else { + module.exports = requireReactJsxRuntime_development(); + } +} (jsxRuntime)); + +var en = {}; + +var zh = {}; + +var de = {}; + +var pt = {}; + +// file examples: en, enGB, zh, zhHK + +var localeData = /*#__PURE__*/Object.freeze({ + __proto__: null, + en: en, + zh: zh, + de: de, + pt: pt +}); + +var ErrorKind; +(function (ErrorKind) { + /** Argument is unclosed (e.g. `{0`) */ + ErrorKind[ErrorKind["EXPECT_ARGUMENT_CLOSING_BRACE"] = 1] = "EXPECT_ARGUMENT_CLOSING_BRACE"; + /** Argument is empty (e.g. `{}`). */ + ErrorKind[ErrorKind["EMPTY_ARGUMENT"] = 2] = "EMPTY_ARGUMENT"; + /** Argument is malformed (e.g. `{foo!}``) */ + ErrorKind[ErrorKind["MALFORMED_ARGUMENT"] = 3] = "MALFORMED_ARGUMENT"; + /** Expect an argument type (e.g. `{foo,}`) */ + ErrorKind[ErrorKind["EXPECT_ARGUMENT_TYPE"] = 4] = "EXPECT_ARGUMENT_TYPE"; + /** Unsupported argument type (e.g. `{foo,foo}`) */ + ErrorKind[ErrorKind["INVALID_ARGUMENT_TYPE"] = 5] = "INVALID_ARGUMENT_TYPE"; + /** Expect an argument style (e.g. `{foo, number, }`) */ + ErrorKind[ErrorKind["EXPECT_ARGUMENT_STYLE"] = 6] = "EXPECT_ARGUMENT_STYLE"; + /** The number skeleton is invalid. */ + ErrorKind[ErrorKind["INVALID_NUMBER_SKELETON"] = 7] = "INVALID_NUMBER_SKELETON"; + /** The date time skeleton is invalid. */ + ErrorKind[ErrorKind["INVALID_DATE_TIME_SKELETON"] = 8] = "INVALID_DATE_TIME_SKELETON"; + /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */ + ErrorKind[ErrorKind["EXPECT_NUMBER_SKELETON"] = 9] = "EXPECT_NUMBER_SKELETON"; + /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */ + ErrorKind[ErrorKind["EXPECT_DATE_TIME_SKELETON"] = 10] = "EXPECT_DATE_TIME_SKELETON"; + /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */ + ErrorKind[ErrorKind["UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"] = 11] = "UNCLOSED_QUOTE_IN_ARGUMENT_STYLE"; + /** Missing select argument options (e.g. `{foo, select}`) */ + ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_OPTIONS"] = 12] = "EXPECT_SELECT_ARGUMENT_OPTIONS"; + /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */ + ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"] = 13] = "EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE"; + /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */ + ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"] = 14] = "INVALID_PLURAL_ARGUMENT_OFFSET_VALUE"; + /** Expecting a selector in `select` argument (e.g `{foo, select}`) */ + ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR"] = 15] = "EXPECT_SELECT_ARGUMENT_SELECTOR"; + /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */ + ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR"] = 16] = "EXPECT_PLURAL_ARGUMENT_SELECTOR"; + /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */ + ErrorKind[ErrorKind["EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"] = 17] = "EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT"; + /** + * Expecting a message fragment after the `plural` or `selectordinal` selector + * (e.g. `{foo, plural, one}`) + */ + ErrorKind[ErrorKind["EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"] = 18] = "EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT"; + /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */ + ErrorKind[ErrorKind["INVALID_PLURAL_ARGUMENT_SELECTOR"] = 19] = "INVALID_PLURAL_ARGUMENT_SELECTOR"; + /** + * Duplicate selectors in `plural` or `selectordinal` argument. + * (e.g. {foo, plural, one {#} one {#}}) + */ + ErrorKind[ErrorKind["DUPLICATE_PLURAL_ARGUMENT_SELECTOR"] = 20] = "DUPLICATE_PLURAL_ARGUMENT_SELECTOR"; + /** Duplicate selectors in `select` argument. + * (e.g. {foo, select, apple {apple} apple {apple}}) + */ + ErrorKind[ErrorKind["DUPLICATE_SELECT_ARGUMENT_SELECTOR"] = 21] = "DUPLICATE_SELECT_ARGUMENT_SELECTOR"; + /** Plural or select argument option must have `other` clause. */ + ErrorKind[ErrorKind["MISSING_OTHER_CLAUSE"] = 22] = "MISSING_OTHER_CLAUSE"; + /** The tag is malformed. (e.g. `foo) */ + ErrorKind[ErrorKind["INVALID_TAG"] = 23] = "INVALID_TAG"; + /** The tag name is invalid. (e.g. `<123>foo`) */ + ErrorKind[ErrorKind["INVALID_TAG_NAME"] = 25] = "INVALID_TAG_NAME"; + /** The closing tag does not match the opening tag. (e.g. `foo`) */ + ErrorKind[ErrorKind["UNMATCHED_CLOSING_TAG"] = 26] = "UNMATCHED_CLOSING_TAG"; + /** The opening tag has unmatched closing tag. (e.g. `foo`) */ + ErrorKind[ErrorKind["UNCLOSED_TAG"] = 27] = "UNCLOSED_TAG"; +})(ErrorKind || (ErrorKind = {})); + +var TYPE; +(function (TYPE) { + /** + * Raw text + */ + TYPE[TYPE["literal"] = 0] = "literal"; + /** + * Variable w/o any format, e.g `var` in `this is a {var}` + */ + TYPE[TYPE["argument"] = 1] = "argument"; + /** + * Variable w/ number format + */ + TYPE[TYPE["number"] = 2] = "number"; + /** + * Variable w/ date format + */ + TYPE[TYPE["date"] = 3] = "date"; + /** + * Variable w/ time format + */ + TYPE[TYPE["time"] = 4] = "time"; + /** + * Variable w/ select format + */ + TYPE[TYPE["select"] = 5] = "select"; + /** + * Variable w/ plural format + */ + TYPE[TYPE["plural"] = 6] = "plural"; + /** + * Only possible within plural argument. + * This is the `#` symbol that will be substituted with the count. + */ + TYPE[TYPE["pound"] = 7] = "pound"; + /** + * XML-like tag + */ + TYPE[TYPE["tag"] = 8] = "tag"; +})(TYPE || (TYPE = {})); +var SKELETON_TYPE; +(function (SKELETON_TYPE) { + SKELETON_TYPE[SKELETON_TYPE["number"] = 0] = "number"; + SKELETON_TYPE[SKELETON_TYPE["dateTime"] = 1] = "dateTime"; +})(SKELETON_TYPE || (SKELETON_TYPE = {})); +/** + * Type Guards + */ +function isLiteralElement(el) { + return el.type === TYPE.literal; +} +function isArgumentElement(el) { + return el.type === TYPE.argument; +} +function isNumberElement(el) { + return el.type === TYPE.number; +} +function isDateElement(el) { + return el.type === TYPE.date; +} +function isTimeElement(el) { + return el.type === TYPE.time; +} +function isSelectElement(el) { + return el.type === TYPE.select; +} +function isPluralElement(el) { + return el.type === TYPE.plural; +} +function isPoundElement(el) { + return el.type === TYPE.pound; +} +function isTagElement(el) { + return el.type === TYPE.tag; +} +function isNumberSkeleton(el) { + return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number); +} +function isDateTimeSkeleton(el) { + return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime); +} + +// @generated from regex-gen.ts +var SPACE_SEPARATOR_REGEX = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/; + +/** + * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js + * with some tweaks + */ +var DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g; +/** + * Parse Date time skeleton into Intl.DateTimeFormatOptions + * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table + * @public + * @param skeleton skeleton string + */ +function parseDateTimeSkeleton(skeleton) { + var result = {}; + skeleton.replace(DATE_TIME_REGEX, function (match) { + var len = match.length; + switch (match[0]) { + // Era + case 'G': + result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'; + break; + // Year + case 'y': + result.year = len === 2 ? '2-digit' : 'numeric'; + break; + case 'Y': + case 'u': + case 'U': + case 'r': + throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead'); + // Quarter + case 'q': + case 'Q': + throw new RangeError('`q/Q` (quarter) patterns are not supported'); + // Month + case 'M': + case 'L': + result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1]; + break; + // Week + case 'w': + case 'W': + throw new RangeError('`w/W` (week) patterns are not supported'); + case 'd': + result.day = ['numeric', '2-digit'][len - 1]; + break; + case 'D': + case 'F': + case 'g': + throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead'); + // Weekday + case 'E': + result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'; + break; + case 'e': + if (len < 4) { + throw new RangeError('`e..eee` (weekday) patterns are not supported'); + } + result.weekday = ['short', 'long', 'narrow', 'short'][len - 4]; + break; + case 'c': + if (len < 4) { + throw new RangeError('`c..ccc` (weekday) patterns are not supported'); + } + result.weekday = ['short', 'long', 'narrow', 'short'][len - 4]; + break; + // Period + case 'a': // AM, PM + result.hour12 = true; + break; + case 'b': // am, pm, noon, midnight + case 'B': // flexible day periods + throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead'); + // Hour + case 'h': + result.hourCycle = 'h12'; + result.hour = ['numeric', '2-digit'][len - 1]; + break; + case 'H': + result.hourCycle = 'h23'; + result.hour = ['numeric', '2-digit'][len - 1]; + break; + case 'K': + result.hourCycle = 'h11'; + result.hour = ['numeric', '2-digit'][len - 1]; + break; + case 'k': + result.hourCycle = 'h24'; + result.hour = ['numeric', '2-digit'][len - 1]; + break; + case 'j': + case 'J': + case 'C': + throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead'); + // Minute + case 'm': + result.minute = ['numeric', '2-digit'][len - 1]; + break; + // Second + case 's': + result.second = ['numeric', '2-digit'][len - 1]; + break; + case 'S': + case 'A': + throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead'); + // Zone + case 'z': // 1..3, 4: specific non-location format + result.timeZoneName = len < 4 ? 'short' : 'long'; + break; + case 'Z': // 1..3, 4, 5: The ISO8601 varios formats + case 'O': // 1, 4: milliseconds in day short, long + case 'v': // 1, 4: generic non-location format + case 'V': // 1, 2, 3, 4: time zone ID or city + case 'X': // 1, 2, 3, 4: The ISO8601 varios formats + case 'x': // 1, 2, 3, 4: The ISO8601 varios formats + throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead'); + } + return ''; + }); + return result; +} + +// @generated from regex-gen.ts +var WHITE_SPACE_REGEX = /[\t-\r \x85\u200E\u200F\u2028\u2029]/i; + +function parseNumberSkeletonFromString(skeleton) { + if (skeleton.length === 0) { + throw new Error('Number skeleton cannot be empty'); + } + // Parse the skeleton + var stringTokens = skeleton + .split(WHITE_SPACE_REGEX) + .filter(function (x) { return x.length > 0; }); + var tokens = []; + for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) { + var stringToken = stringTokens_1[_i]; + var stemAndOptions = stringToken.split('/'); + if (stemAndOptions.length === 0) { + throw new Error('Invalid number skeleton'); + } + var stem = stemAndOptions[0], options = stemAndOptions.slice(1); + for (var _a = 0, options_1 = options; _a < options_1.length; _a++) { + var option = options_1[_a]; + if (option.length === 0) { + throw new Error('Invalid number skeleton'); + } + } + tokens.push({ stem: stem, options: options }); + } + return tokens; +} +function icuUnitToEcma(unit) { + return unit.replace(/^(.*?)-/, ''); +} +var FRACTION_PRECISION_REGEX = /^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g; +var SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\+|#+)?[rs]?$/g; +var INTEGER_WIDTH_REGEX = /(\*)(0+)|(#+)(0+)|(0+)/g; +var CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/; +function parseSignificantPrecision(str) { + var result = {}; + if (str[str.length - 1] === 'r') { + result.roundingPriority = 'morePrecision'; + } + else if (str[str.length - 1] === 's') { + result.roundingPriority = 'lessPrecision'; + } + str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) { + // @@@ case + if (typeof g2 !== 'string') { + result.minimumSignificantDigits = g1.length; + result.maximumSignificantDigits = g1.length; + } + // @@@+ case + else if (g2 === '+') { + result.minimumSignificantDigits = g1.length; + } + // .### case + else if (g1[0] === '#') { + result.maximumSignificantDigits = g1.length; + } + // .@@## or .@@@ case + else { + result.minimumSignificantDigits = g1.length; + result.maximumSignificantDigits = + g1.length + (typeof g2 === 'string' ? g2.length : 0); + } + return ''; + }); + return result; +} +function parseSign(str) { + switch (str) { + case 'sign-auto': + return { + signDisplay: 'auto', + }; + case 'sign-accounting': + case '()': + return { + currencySign: 'accounting', + }; + case 'sign-always': + case '+!': + return { + signDisplay: 'always', + }; + case 'sign-accounting-always': + case '()!': + return { + signDisplay: 'always', + currencySign: 'accounting', + }; + case 'sign-except-zero': + case '+?': + return { + signDisplay: 'exceptZero', + }; + case 'sign-accounting-except-zero': + case '()?': + return { + signDisplay: 'exceptZero', + currencySign: 'accounting', + }; + case 'sign-never': + case '+_': + return { + signDisplay: 'never', + }; + } +} +function parseConciseScientificAndEngineeringStem(stem) { + // Engineering + var result; + if (stem[0] === 'E' && stem[1] === 'E') { + result = { + notation: 'engineering', + }; + stem = stem.slice(2); + } + else if (stem[0] === 'E') { + result = { + notation: 'scientific', + }; + stem = stem.slice(1); + } + if (result) { + var signDisplay = stem.slice(0, 2); + if (signDisplay === '+!') { + result.signDisplay = 'always'; + stem = stem.slice(2); + } + else if (signDisplay === '+?') { + result.signDisplay = 'exceptZero'; + stem = stem.slice(2); + } + if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) { + throw new Error('Malformed concise eng/scientific notation'); + } + result.minimumIntegerDigits = stem.length; + } + return result; +} +function parseNotationOptions(opt) { + var result = {}; + var signOpts = parseSign(opt); + if (signOpts) { + return signOpts; + } + return result; +} +/** + * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options + */ +function parseNumberSkeleton(tokens) { + var result = {}; + for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { + var token = tokens_1[_i]; + switch (token.stem) { + case 'percent': + case '%': + result.style = 'percent'; + continue; + case '%x100': + result.style = 'percent'; + result.scale = 100; + continue; + case 'currency': + result.style = 'currency'; + result.currency = token.options[0]; + continue; + case 'group-off': + case ',_': + result.useGrouping = false; + continue; + case 'precision-integer': + case '.': + result.maximumFractionDigits = 0; + continue; + case 'measure-unit': + case 'unit': + result.style = 'unit'; + result.unit = icuUnitToEcma(token.options[0]); + continue; + case 'compact-short': + case 'K': + result.notation = 'compact'; + result.compactDisplay = 'short'; + continue; + case 'compact-long': + case 'KK': + result.notation = 'compact'; + result.compactDisplay = 'long'; + continue; + case 'scientific': + result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {})); + continue; + case 'engineering': + result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {})); + continue; + case 'notation-simple': + result.notation = 'standard'; + continue; + // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h + case 'unit-width-narrow': + result.currencyDisplay = 'narrowSymbol'; + result.unitDisplay = 'narrow'; + continue; + case 'unit-width-short': + result.currencyDisplay = 'code'; + result.unitDisplay = 'short'; + continue; + case 'unit-width-full-name': + result.currencyDisplay = 'name'; + result.unitDisplay = 'long'; + continue; + case 'unit-width-iso-code': + result.currencyDisplay = 'symbol'; + continue; + case 'scale': + result.scale = parseFloat(token.options[0]); + continue; + case 'rounding-mode-floor': + result.roundingMode = 'floor'; + continue; + case 'rounding-mode-ceiling': + result.roundingMode = 'ceil'; + continue; + case 'rounding-mode-down': + result.roundingMode = 'trunc'; + continue; + case 'rounding-mode-up': + result.roundingMode = 'expand'; + continue; + case 'rounding-mode-half-even': + result.roundingMode = 'halfEven'; + continue; + case 'rounding-mode-half-down': + result.roundingMode = 'halfTrunc'; + continue; + case 'rounding-mode-half-up': + result.roundingMode = 'halfExpand'; + continue; + // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width + case 'integer-width': + if (token.options.length > 1) { + throw new RangeError('integer-width stems only accept a single optional option'); + } + token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) { + if (g1) { + result.minimumIntegerDigits = g2.length; + } + else if (g3 && g4) { + throw new Error('We currently do not support maximum integer digits'); + } + else if (g5) { + throw new Error('We currently do not support exact integer digits'); + } + return ''; + }); + continue; + } + // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width + if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) { + result.minimumIntegerDigits = token.stem.length; + continue; + } + if (FRACTION_PRECISION_REGEX.test(token.stem)) { + // Precision + // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision + // precision-integer case + if (token.options.length > 1) { + throw new RangeError('Fraction-precision stems only accept a single optional option'); + } + token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) { + // .000* case (before ICU67 it was .000+) + if (g2 === '*') { + result.minimumFractionDigits = g1.length; + } + // .### case + else if (g3 && g3[0] === '#') { + result.maximumFractionDigits = g3.length; + } + // .00## case + else if (g4 && g5) { + result.minimumFractionDigits = g4.length; + result.maximumFractionDigits = g4.length + g5.length; + } + else { + result.minimumFractionDigits = g1.length; + result.maximumFractionDigits = g1.length; + } + return ''; + }); + var opt = token.options[0]; + // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display + if (opt === 'w') { + result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' }); + } + else if (opt) { + result = __assign(__assign({}, result), parseSignificantPrecision(opt)); + } + continue; + } + // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision + if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) { + result = __assign(__assign({}, result), parseSignificantPrecision(token.stem)); + continue; + } + var signOpts = parseSign(token.stem); + if (signOpts) { + result = __assign(__assign({}, result), signOpts); + } + var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem); + if (conciseScientificAndEngineeringOpts) { + result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts); + } + } + return result; +} + +// @generated from time-data-gen.ts +// prettier-ignore +var timeData = { + "001": [ + "H", + "h" + ], + "AC": [ + "H", + "h", + "hb", + "hB" + ], + "AD": [ + "H", + "hB" + ], + "AE": [ + "h", + "hB", + "hb", + "H" + ], + "AF": [ + "H", + "hb", + "hB", + "h" + ], + "AG": [ + "h", + "hb", + "H", + "hB" + ], + "AI": [ + "H", + "h", + "hb", + "hB" + ], + "AL": [ + "h", + "H", + "hB" + ], + "AM": [ + "H", + "hB" + ], + "AO": [ + "H", + "hB" + ], + "AR": [ + "H", + "h", + "hB", + "hb" + ], + "AS": [ + "h", + "H" + ], + "AT": [ + "H", + "hB" + ], + "AU": [ + "h", + "hb", + "H", + "hB" + ], + "AW": [ + "H", + "hB" + ], + "AX": [ + "H" + ], + "AZ": [ + "H", + "hB", + "h" + ], + "BA": [ + "H", + "hB", + "h" + ], + "BB": [ + "h", + "hb", + "H", + "hB" + ], + "BD": [ + "h", + "hB", + "H" + ], + "BE": [ + "H", + "hB" + ], + "BF": [ + "H", + "hB" + ], + "BG": [ + "H", + "hB", + "h" + ], + "BH": [ + "h", + "hB", + "hb", + "H" + ], + "BI": [ + "H", + "h" + ], + "BJ": [ + "H", + "hB" + ], + "BL": [ + "H", + "hB" + ], + "BM": [ + "h", + "hb", + "H", + "hB" + ], + "BN": [ + "hb", + "hB", + "h", + "H" + ], + "BO": [ + "H", + "hB", + "h", + "hb" + ], + "BQ": [ + "H" + ], + "BR": [ + "H", + "hB" + ], + "BS": [ + "h", + "hb", + "H", + "hB" + ], + "BT": [ + "h", + "H" + ], + "BW": [ + "H", + "h", + "hb", + "hB" + ], + "BY": [ + "H", + "h" + ], + "BZ": [ + "H", + "h", + "hb", + "hB" + ], + "CA": [ + "h", + "hb", + "H", + "hB" + ], + "CC": [ + "H", + "h", + "hb", + "hB" + ], + "CD": [ + "hB", + "H" + ], + "CF": [ + "H", + "h", + "hB" + ], + "CG": [ + "H", + "hB" + ], + "CH": [ + "H", + "hB", + "h" + ], + "CI": [ + "H", + "hB" + ], + "CK": [ + "H", + "h", + "hb", + "hB" + ], + "CL": [ + "H", + "h", + "hB", + "hb" + ], + "CM": [ + "H", + "h", + "hB" + ], + "CN": [ + "H", + "hB", + "hb", + "h" + ], + "CO": [ + "h", + "H", + "hB", + "hb" + ], + "CP": [ + "H" + ], + "CR": [ + "H", + "h", + "hB", + "hb" + ], + "CU": [ + "H", + "h", + "hB", + "hb" + ], + "CV": [ + "H", + "hB" + ], + "CW": [ + "H", + "hB" + ], + "CX": [ + "H", + "h", + "hb", + "hB" + ], + "CY": [ + "h", + "H", + "hb", + "hB" + ], + "CZ": [ + "H" + ], + "DE": [ + "H", + "hB" + ], + "DG": [ + "H", + "h", + "hb", + "hB" + ], + "DJ": [ + "h", + "H" + ], + "DK": [ + "H" + ], + "DM": [ + "h", + "hb", + "H", + "hB" + ], + "DO": [ + "h", + "H", + "hB", + "hb" + ], + "DZ": [ + "h", + "hB", + "hb", + "H" + ], + "EA": [ + "H", + "h", + "hB", + "hb" + ], + "EC": [ + "H", + "hB", + "h", + "hb" + ], + "EE": [ + "H", + "hB" + ], + "EG": [ + "h", + "hB", + "hb", + "H" + ], + "EH": [ + "h", + "hB", + "hb", + "H" + ], + "ER": [ + "h", + "H" + ], + "ES": [ + "H", + "hB", + "h", + "hb" + ], + "ET": [ + "hB", + "hb", + "h", + "H" + ], + "FI": [ + "H" + ], + "FJ": [ + "h", + "hb", + "H", + "hB" + ], + "FK": [ + "H", + "h", + "hb", + "hB" + ], + "FM": [ + "h", + "hb", + "H", + "hB" + ], + "FO": [ + "H", + "h" + ], + "FR": [ + "H", + "hB" + ], + "GA": [ + "H", + "hB" + ], + "GB": [ + "H", + "h", + "hb", + "hB" + ], + "GD": [ + "h", + "hb", + "H", + "hB" + ], + "GE": [ + "H", + "hB", + "h" + ], + "GF": [ + "H", + "hB" + ], + "GG": [ + "H", + "h", + "hb", + "hB" + ], + "GH": [ + "h", + "H" + ], + "GI": [ + "H", + "h", + "hb", + "hB" + ], + "GL": [ + "H", + "h" + ], + "GM": [ + "h", + "hb", + "H", + "hB" + ], + "GN": [ + "H", + "hB" + ], + "GP": [ + "H", + "hB" + ], + "GQ": [ + "H", + "hB", + "h", + "hb" + ], + "GR": [ + "h", + "H", + "hb", + "hB" + ], + "GT": [ + "H", + "h", + "hB", + "hb" + ], + "GU": [ + "h", + "hb", + "H", + "hB" + ], + "GW": [ + "H", + "hB" + ], + "GY": [ + "h", + "hb", + "H", + "hB" + ], + "HK": [ + "h", + "hB", + "hb", + "H" + ], + "HN": [ + "H", + "h", + "hB", + "hb" + ], + "HR": [ + "H", + "hB" + ], + "HU": [ + "H", + "h" + ], + "IC": [ + "H", + "h", + "hB", + "hb" + ], + "ID": [ + "H" + ], + "IE": [ + "H", + "h", + "hb", + "hB" + ], + "IL": [ + "H", + "hB" + ], + "IM": [ + "H", + "h", + "hb", + "hB" + ], + "IN": [ + "h", + "H" + ], + "IO": [ + "H", + "h", + "hb", + "hB" + ], + "IQ": [ + "h", + "hB", + "hb", + "H" + ], + "IR": [ + "hB", + "H" + ], + "IS": [ + "H" + ], + "IT": [ + "H", + "hB" + ], + "JE": [ + "H", + "h", + "hb", + "hB" + ], + "JM": [ + "h", + "hb", + "H", + "hB" + ], + "JO": [ + "h", + "hB", + "hb", + "H" + ], + "JP": [ + "H", + "K", + "h" + ], + "KE": [ + "hB", + "hb", + "H", + "h" + ], + "KG": [ + "H", + "h", + "hB", + "hb" + ], + "KH": [ + "hB", + "h", + "H", + "hb" + ], + "KI": [ + "h", + "hb", + "H", + "hB" + ], + "KM": [ + "H", + "h", + "hB", + "hb" + ], + "KN": [ + "h", + "hb", + "H", + "hB" + ], + "KP": [ + "h", + "H", + "hB", + "hb" + ], + "KR": [ + "h", + "H", + "hB", + "hb" + ], + "KW": [ + "h", + "hB", + "hb", + "H" + ], + "KY": [ + "h", + "hb", + "H", + "hB" + ], + "KZ": [ + "H", + "hB" + ], + "LA": [ + "H", + "hb", + "hB", + "h" + ], + "LB": [ + "h", + "hB", + "hb", + "H" + ], + "LC": [ + "h", + "hb", + "H", + "hB" + ], + "LI": [ + "H", + "hB", + "h" + ], + "LK": [ + "H", + "h", + "hB", + "hb" + ], + "LR": [ + "h", + "hb", + "H", + "hB" + ], + "LS": [ + "h", + "H" + ], + "LT": [ + "H", + "h", + "hb", + "hB" + ], + "LU": [ + "H", + "h", + "hB" + ], + "LV": [ + "H", + "hB", + "hb", + "h" + ], + "LY": [ + "h", + "hB", + "hb", + "H" + ], + "MA": [ + "H", + "h", + "hB", + "hb" + ], + "MC": [ + "H", + "hB" + ], + "MD": [ + "H", + "hB" + ], + "ME": [ + "H", + "hB", + "h" + ], + "MF": [ + "H", + "hB" + ], + "MG": [ + "H", + "h" + ], + "MH": [ + "h", + "hb", + "H", + "hB" + ], + "MK": [ + "H", + "h", + "hb", + "hB" + ], + "ML": [ + "H" + ], + "MM": [ + "hB", + "hb", + "H", + "h" + ], + "MN": [ + "H", + "h", + "hb", + "hB" + ], + "MO": [ + "h", + "hB", + "hb", + "H" + ], + "MP": [ + "h", + "hb", + "H", + "hB" + ], + "MQ": [ + "H", + "hB" + ], + "MR": [ + "h", + "hB", + "hb", + "H" + ], + "MS": [ + "H", + "h", + "hb", + "hB" + ], + "MT": [ + "H", + "h" + ], + "MU": [ + "H", + "h" + ], + "MV": [ + "H", + "h" + ], + "MW": [ + "h", + "hb", + "H", + "hB" + ], + "MX": [ + "H", + "h", + "hB", + "hb" + ], + "MY": [ + "hb", + "hB", + "h", + "H" + ], + "MZ": [ + "H", + "hB" + ], + "NA": [ + "h", + "H", + "hB", + "hb" + ], + "NC": [ + "H", + "hB" + ], + "NE": [ + "H" + ], + "NF": [ + "H", + "h", + "hb", + "hB" + ], + "NG": [ + "H", + "h", + "hb", + "hB" + ], + "NI": [ + "H", + "h", + "hB", + "hb" + ], + "NL": [ + "H", + "hB" + ], + "NO": [ + "H", + "h" + ], + "NP": [ + "H", + "h", + "hB" + ], + "NR": [ + "H", + "h", + "hb", + "hB" + ], + "NU": [ + "H", + "h", + "hb", + "hB" + ], + "NZ": [ + "h", + "hb", + "H", + "hB" + ], + "OM": [ + "h", + "hB", + "hb", + "H" + ], + "PA": [ + "h", + "H", + "hB", + "hb" + ], + "PE": [ + "H", + "hB", + "h", + "hb" + ], + "PF": [ + "H", + "h", + "hB" + ], + "PG": [ + "h", + "H" + ], + "PH": [ + "h", + "hB", + "hb", + "H" + ], + "PK": [ + "h", + "hB", + "H" + ], + "PL": [ + "H", + "h" + ], + "PM": [ + "H", + "hB" + ], + "PN": [ + "H", + "h", + "hb", + "hB" + ], + "PR": [ + "h", + "H", + "hB", + "hb" + ], + "PS": [ + "h", + "hB", + "hb", + "H" + ], + "PT": [ + "H", + "hB" + ], + "PW": [ + "h", + "H" + ], + "PY": [ + "H", + "h", + "hB", + "hb" + ], + "QA": [ + "h", + "hB", + "hb", + "H" + ], + "RE": [ + "H", + "hB" + ], + "RO": [ + "H", + "hB" + ], + "RS": [ + "H", + "hB", + "h" + ], + "RU": [ + "H" + ], + "RW": [ + "H", + "h" + ], + "SA": [ + "h", + "hB", + "hb", + "H" + ], + "SB": [ + "h", + "hb", + "H", + "hB" + ], + "SC": [ + "H", + "h", + "hB" + ], + "SD": [ + "h", + "hB", + "hb", + "H" + ], + "SE": [ + "H" + ], + "SG": [ + "h", + "hb", + "H", + "hB" + ], + "SH": [ + "H", + "h", + "hb", + "hB" + ], + "SI": [ + "H", + "hB" + ], + "SJ": [ + "H" + ], + "SK": [ + "H" + ], + "SL": [ + "h", + "hb", + "H", + "hB" + ], + "SM": [ + "H", + "h", + "hB" + ], + "SN": [ + "H", + "h", + "hB" + ], + "SO": [ + "h", + "H" + ], + "SR": [ + "H", + "hB" + ], + "SS": [ + "h", + "hb", + "H", + "hB" + ], + "ST": [ + "H", + "hB" + ], + "SV": [ + "H", + "h", + "hB", + "hb" + ], + "SX": [ + "H", + "h", + "hb", + "hB" + ], + "SY": [ + "h", + "hB", + "hb", + "H" + ], + "SZ": [ + "h", + "hb", + "H", + "hB" + ], + "TA": [ + "H", + "h", + "hb", + "hB" + ], + "TC": [ + "h", + "hb", + "H", + "hB" + ], + "TD": [ + "h", + "H", + "hB" + ], + "TF": [ + "H", + "h", + "hB" + ], + "TG": [ + "H", + "hB" + ], + "TH": [ + "H", + "h" + ], + "TJ": [ + "H", + "h" + ], + "TL": [ + "H", + "hB", + "hb", + "h" + ], + "TM": [ + "H", + "h" + ], + "TN": [ + "h", + "hB", + "hb", + "H" + ], + "TO": [ + "h", + "H" + ], + "TR": [ + "H", + "hB" + ], + "TT": [ + "h", + "hb", + "H", + "hB" + ], + "TW": [ + "hB", + "hb", + "h", + "H" + ], + "TZ": [ + "hB", + "hb", + "H", + "h" + ], + "UA": [ + "H", + "hB", + "h" + ], + "UG": [ + "hB", + "hb", + "H", + "h" + ], + "UM": [ + "h", + "hb", + "H", + "hB" + ], + "US": [ + "h", + "hb", + "H", + "hB" + ], + "UY": [ + "H", + "h", + "hB", + "hb" + ], + "UZ": [ + "H", + "hB", + "h" + ], + "VA": [ + "H", + "h", + "hB" + ], + "VC": [ + "h", + "hb", + "H", + "hB" + ], + "VE": [ + "h", + "H", + "hB", + "hb" + ], + "VG": [ + "h", + "hb", + "H", + "hB" + ], + "VI": [ + "h", + "hb", + "H", + "hB" + ], + "VN": [ + "H", + "h" + ], + "VU": [ + "h", + "H" + ], + "WF": [ + "H", + "hB" + ], + "WS": [ + "h", + "H" + ], + "XK": [ + "H", + "hB", + "h" + ], + "YE": [ + "h", + "hB", + "hb", + "H" + ], + "YT": [ + "H", + "hB" + ], + "ZA": [ + "H", + "h", + "hb", + "hB" + ], + "ZM": [ + "h", + "hb", + "H", + "hB" + ], + "ZW": [ + "H", + "h" + ], + "af-ZA": [ + "H", + "h", + "hB", + "hb" + ], + "ar-001": [ + "h", + "hB", + "hb", + "H" + ], + "ca-ES": [ + "H", + "h", + "hB" + ], + "en-001": [ + "h", + "hb", + "H", + "hB" + ], + "es-BO": [ + "H", + "h", + "hB", + "hb" + ], + "es-BR": [ + "H", + "h", + "hB", + "hb" + ], + "es-EC": [ + "H", + "h", + "hB", + "hb" + ], + "es-ES": [ + "H", + "h", + "hB", + "hb" + ], + "es-GQ": [ + "H", + "h", + "hB", + "hb" + ], + "es-PE": [ + "H", + "h", + "hB", + "hb" + ], + "fr-CA": [ + "H", + "h", + "hB" + ], + "gl-ES": [ + "H", + "h", + "hB" + ], + "gu-IN": [ + "hB", + "hb", + "h", + "H" + ], + "hi-IN": [ + "hB", + "h", + "H" + ], + "it-CH": [ + "H", + "h", + "hB" + ], + "it-IT": [ + "H", + "h", + "hB" + ], + "kn-IN": [ + "hB", + "h", + "H" + ], + "ml-IN": [ + "hB", + "h", + "H" + ], + "mr-IN": [ + "hB", + "hb", + "h", + "H" + ], + "pa-IN": [ + "hB", + "hb", + "h", + "H" + ], + "ta-IN": [ + "hB", + "h", + "hb", + "H" + ], + "te-IN": [ + "hB", + "h", + "H" + ], + "zu-ZA": [ + "H", + "hB", + "hb", + "h" + ] +}; + +/** + * Returns the best matching date time pattern if a date time skeleton + * pattern is provided with a locale. Follows the Unicode specification: + * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns + * @param skeleton date time skeleton pattern that possibly includes j, J or C + * @param locale + */ +function getBestPattern(skeleton, locale) { + var skeletonCopy = ''; + for (var patternPos = 0; patternPos < skeleton.length; patternPos++) { + var patternChar = skeleton.charAt(patternPos); + if (patternChar === 'j') { + var extraLength = 0; + while (patternPos + 1 < skeleton.length && + skeleton.charAt(patternPos + 1) === patternChar) { + extraLength++; + patternPos++; + } + var hourLen = 1 + (extraLength & 1); + var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1); + var dayPeriodChar = 'a'; + var hourChar = getDefaultHourSymbolFromLocale(locale); + if (hourChar == 'H' || hourChar == 'k') { + dayPeriodLen = 0; + } + while (dayPeriodLen-- > 0) { + skeletonCopy += dayPeriodChar; + } + while (hourLen-- > 0) { + skeletonCopy = hourChar + skeletonCopy; + } + } + else if (patternChar === 'J') { + skeletonCopy += 'H'; + } + else { + skeletonCopy += patternChar; + } + } + return skeletonCopy; +} +/** + * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle) + * of the given `locale` to the corresponding time pattern. + * @param locale + */ +function getDefaultHourSymbolFromLocale(locale) { + var hourCycle = locale.hourCycle; + if (hourCycle === undefined && + // @ts-ignore hourCycle(s) is not identified yet + locale.hourCycles && + // @ts-ignore + locale.hourCycles.length) { + // @ts-ignore + hourCycle = locale.hourCycles[0]; + } + if (hourCycle) { + switch (hourCycle) { + case 'h24': + return 'k'; + case 'h23': + return 'H'; + case 'h12': + return 'h'; + case 'h11': + return 'K'; + default: + throw new Error('Invalid hourCycle'); + } + } + // TODO: Once hourCycle is fully supported remove the following with data generation + var languageTag = locale.language; + var regionTag; + if (languageTag !== 'root') { + regionTag = locale.maximize().region; + } + var hourCycles = timeData[regionTag || ''] || + timeData[languageTag || ''] || + timeData["".concat(languageTag, "-001")] || + timeData['001']; + return hourCycles[0]; +} + +var _a; +var SPACE_SEPARATOR_START_REGEX = new RegExp("^".concat(SPACE_SEPARATOR_REGEX.source, "*")); +var SPACE_SEPARATOR_END_REGEX = new RegExp("".concat(SPACE_SEPARATOR_REGEX.source, "*$")); +function createLocation(start, end) { + return { start: start, end: end }; +} +// #region Ponyfills +// Consolidate these variables up top for easier toggling during debugging +var hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1); +var hasNativeFromCodePoint = !!String.fromCodePoint; +var hasNativeFromEntries = !!Object.fromEntries; +var hasNativeCodePointAt = !!String.prototype.codePointAt; +var hasTrimStart = !!String.prototype.trimStart; +var hasTrimEnd = !!String.prototype.trimEnd; +var hasNativeIsSafeInteger = !!Number.isSafeInteger; +var isSafeInteger = hasNativeIsSafeInteger + ? Number.isSafeInteger + : function (n) { + return (typeof n === 'number' && + isFinite(n) && + Math.floor(n) === n && + Math.abs(n) <= 0x1fffffffffffff); + }; +// IE11 does not support y and u. +var REGEX_SUPPORTS_U_AND_Y = true; +try { + var re = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu'); + /** + * legacy Edge or Xbox One browser + * Unicode flag support: supported + * Pattern_Syntax support: not supported + * See https://github.com/formatjs/formatjs/issues/2822 + */ + REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a'; +} +catch (_) { + REGEX_SUPPORTS_U_AND_Y = false; +} +var startsWith = hasNativeStartsWith + ? // Native + function startsWith(s, search, position) { + return s.startsWith(search, position); + } + : // For IE11 + function startsWith(s, search, position) { + return s.slice(position, position + search.length) === search; + }; +var fromCodePoint = hasNativeFromCodePoint + ? String.fromCodePoint + : // IE11 + function fromCodePoint() { + var codePoints = []; + for (var _i = 0; _i < arguments.length; _i++) { + codePoints[_i] = arguments[_i]; + } + var elements = ''; + var length = codePoints.length; + var i = 0; + var code; + while (length > i) { + code = codePoints[i++]; + if (code > 0x10ffff) + throw RangeError(code + ' is not a valid code point'); + elements += + code < 0x10000 + ? String.fromCharCode(code) + : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00); + } + return elements; + }; +var fromEntries = +// native +hasNativeFromEntries + ? Object.fromEntries + : // Ponyfill + function fromEntries(entries) { + var obj = {}; + for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { + var _a = entries_1[_i], k = _a[0], v = _a[1]; + obj[k] = v; + } + return obj; + }; +var codePointAt = hasNativeCodePointAt + ? // Native + function codePointAt(s, index) { + return s.codePointAt(index); + } + : // IE 11 + function codePointAt(s, index) { + var size = s.length; + if (index < 0 || index >= size) { + return undefined; + } + var first = s.charCodeAt(index); + var second; + return first < 0xd800 || + first > 0xdbff || + index + 1 === size || + (second = s.charCodeAt(index + 1)) < 0xdc00 || + second > 0xdfff + ? first + : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000; + }; +var trimStart = hasTrimStart + ? // Native + function trimStart(s) { + return s.trimStart(); + } + : // Ponyfill + function trimStart(s) { + return s.replace(SPACE_SEPARATOR_START_REGEX, ''); + }; +var trimEnd = hasTrimEnd + ? // Native + function trimEnd(s) { + return s.trimEnd(); + } + : // Ponyfill + function trimEnd(s) { + return s.replace(SPACE_SEPARATOR_END_REGEX, ''); + }; +// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11. +function RE(s, flag) { + return new RegExp(s, flag); +} +// #endregion +var matchIdentifierAtIndex; +if (REGEX_SUPPORTS_U_AND_Y) { + // Native + var IDENTIFIER_PREFIX_RE_1 = RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu'); + matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) { + var _a; + IDENTIFIER_PREFIX_RE_1.lastIndex = index; + var match = IDENTIFIER_PREFIX_RE_1.exec(s); + return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; + }; +} +else { + // IE11 + matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) { + var match = []; + while (true) { + var c = codePointAt(s, index); + if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) { + break; + } + match.push(c); + index += c >= 0x10000 ? 2 : 1; + } + return fromCodePoint.apply(void 0, match); + }; +} +var Parser = /** @class */ (function () { + function Parser(message, options) { + if (options === void 0) { options = {}; } + this.message = message; + this.position = { offset: 0, line: 1, column: 1 }; + this.ignoreTag = !!options.ignoreTag; + this.locale = options.locale; + this.requiresOtherClause = !!options.requiresOtherClause; + this.shouldParseSkeletons = !!options.shouldParseSkeletons; + } + Parser.prototype.parse = function () { + if (this.offset() !== 0) { + throw Error('parser can only be used once'); + } + return this.parseMessage(0, '', false); + }; + Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) { + var elements = []; + while (!this.isEOF()) { + var char = this.char(); + if (char === 123 /* `{` */) { + var result = this.parseArgument(nestingLevel, expectingCloseTag); + if (result.err) { + return result; + } + elements.push(result.val); + } + else if (char === 125 /* `}` */ && nestingLevel > 0) { + break; + } + else if (char === 35 /* `#` */ && + (parentArgType === 'plural' || parentArgType === 'selectordinal')) { + var position = this.clonePosition(); + this.bump(); + elements.push({ + type: TYPE.pound, + location: createLocation(position, this.clonePosition()), + }); + } + else if (char === 60 /* `<` */ && + !this.ignoreTag && + this.peek() === 47 // char code for '/' + ) { + if (expectingCloseTag) { + break; + } + else { + return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition())); + } + } + else if (char === 60 /* `<` */ && + !this.ignoreTag && + _isAlpha(this.peek() || 0)) { + var result = this.parseTag(nestingLevel, parentArgType); + if (result.err) { + return result; + } + elements.push(result.val); + } + else { + var result = this.parseLiteral(nestingLevel, parentArgType); + if (result.err) { + return result; + } + elements.push(result.val); + } + } + return { val: elements, err: null }; + }; + /** + * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the + * [custom element name][] except that a dash is NOT always mandatory and uppercase letters + * are accepted: + * + * ``` + * tag ::= "<" tagName (whitespace)* "/>" | "<" tagName (whitespace)* ">" message "" + * tagName ::= [a-z] (PENChar)* + * PENChar ::= + * "-" | "." | [0-9] | "_" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] | + * [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] | + * [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] + * ``` + * + * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name + * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do + * since other tag-based engines like React allow it + */ + Parser.prototype.parseTag = function (nestingLevel, parentArgType) { + var startPosition = this.clonePosition(); + this.bump(); // `<` + var tagName = this.parseTagName(); + this.bumpSpace(); + if (this.bumpIf('/>')) { + // Self closing tag + return { + val: { + type: TYPE.literal, + value: "<".concat(tagName, "/>"), + location: createLocation(startPosition, this.clonePosition()), + }, + err: null, + }; + } + else if (this.bumpIf('>')) { + var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true); + if (childrenResult.err) { + return childrenResult; + } + var children = childrenResult.val; + // Expecting a close tag + var endTagStartPosition = this.clonePosition(); + if (this.bumpIf('')) { + return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition())); + } + return { + val: { + type: TYPE.tag, + value: tagName, + children: children, + location: createLocation(startPosition, this.clonePosition()), + }, + err: null, + }; + } + else { + return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition())); + } + } + else { + return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition())); + } + }; + /** + * This method assumes that the caller has peeked ahead for the first tag character. + */ + Parser.prototype.parseTagName = function () { + var startOffset = this.offset(); + this.bump(); // the first tag name character + while (!this.isEOF() && _isPotentialElementNameChar(this.char())) { + this.bump(); + } + return this.message.slice(startOffset, this.offset()); + }; + Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) { + var start = this.clonePosition(); + var value = ''; + while (true) { + var parseQuoteResult = this.tryParseQuote(parentArgType); + if (parseQuoteResult) { + value += parseQuoteResult; + continue; + } + var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType); + if (parseUnquotedResult) { + value += parseUnquotedResult; + continue; + } + var parseLeftAngleResult = this.tryParseLeftAngleBracket(); + if (parseLeftAngleResult) { + value += parseLeftAngleResult; + continue; + } + break; + } + var location = createLocation(start, this.clonePosition()); + return { + val: { type: TYPE.literal, value: value, location: location }, + err: null, + }; + }; + Parser.prototype.tryParseLeftAngleBracket = function () { + if (!this.isEOF() && + this.char() === 60 /* `<` */ && + (this.ignoreTag || + // If at the opening tag or closing tag position, bail. + !_isAlphaOrSlash(this.peek() || 0))) { + this.bump(); // `<` + return '<'; + } + return null; + }; + /** + * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes + * a character that requires quoting (that is, "only where needed"), and works the same in + * nested messages as on the top level of the pattern. The new behavior is otherwise compatible. + */ + Parser.prototype.tryParseQuote = function (parentArgType) { + if (this.isEOF() || this.char() !== 39 /* `'` */) { + return null; + } + // Parse escaped char following the apostrophe, or early return if there is no escaped char. + // Check if is valid escaped character + switch (this.peek()) { + case 39 /* `'` */: + // double quote, should return as a single quote. + this.bump(); + this.bump(); + return "'"; + // '{', '<', '>', '}' + case 123: + case 60: + case 62: + case 125: + break; + case 35: // '#' + if (parentArgType === 'plural' || parentArgType === 'selectordinal') { + break; + } + return null; + default: + return null; + } + this.bump(); // apostrophe + var codePoints = [this.char()]; // escaped char + this.bump(); + // read chars until the optional closing apostrophe is found + while (!this.isEOF()) { + var ch = this.char(); + if (ch === 39 /* `'` */) { + if (this.peek() === 39 /* `'` */) { + codePoints.push(39); + // Bump one more time because we need to skip 2 characters. + this.bump(); + } + else { + // Optional closing apostrophe. + this.bump(); + break; + } + } + else { + codePoints.push(ch); + } + this.bump(); + } + return fromCodePoint.apply(void 0, codePoints); + }; + Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) { + if (this.isEOF()) { + return null; + } + var ch = this.char(); + if (ch === 60 /* `<` */ || + ch === 123 /* `{` */ || + (ch === 35 /* `#` */ && + (parentArgType === 'plural' || parentArgType === 'selectordinal')) || + (ch === 125 /* `}` */ && nestingLevel > 0)) { + return null; + } + else { + this.bump(); + return fromCodePoint(ch); + } + }; + Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) { + var openingBracePosition = this.clonePosition(); + this.bump(); // `{` + this.bumpSpace(); + if (this.isEOF()) { + return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); + } + if (this.char() === 125 /* `}` */) { + this.bump(); + return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); + } + // argument name + var value = this.parseIdentifierIfPossible().value; + if (!value) { + return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); + } + this.bumpSpace(); + if (this.isEOF()) { + return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); + } + switch (this.char()) { + // Simple argument: `{name}` + case 125 /* `}` */: { + this.bump(); // `}` + return { + val: { + type: TYPE.argument, + // value does not include the opening and closing braces. + value: value, + location: createLocation(openingBracePosition, this.clonePosition()), + }, + err: null, + }; + } + // Argument with options: `{name, format, ...}` + case 44 /* `,` */: { + this.bump(); // `,` + this.bumpSpace(); + if (this.isEOF()) { + return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); + } + return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition); + } + default: + return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition())); + } + }; + /** + * Advance the parser until the end of the identifier, if it is currently on + * an identifier character. Return an empty string otherwise. + */ + Parser.prototype.parseIdentifierIfPossible = function () { + var startingPosition = this.clonePosition(); + var startOffset = this.offset(); + var value = matchIdentifierAtIndex(this.message, startOffset); + var endOffset = startOffset + value.length; + this.bumpTo(endOffset); + var endPosition = this.clonePosition(); + var location = createLocation(startingPosition, endPosition); + return { value: value, location: location }; + }; + Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) { + var _a; + // Parse this range: + // {name, type, style} + // ^---^ + var typeStartPosition = this.clonePosition(); + var argType = this.parseIdentifierIfPossible().value; + var typeEndPosition = this.clonePosition(); + switch (argType) { + case '': + // Expecting a style string number, date, time, plural, selectordinal, or select. + return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition)); + case 'number': + case 'date': + case 'time': { + // Parse this range: + // {name, number, style} + // ^-------^ + this.bumpSpace(); + var styleAndLocation = null; + if (this.bumpIf(',')) { + this.bumpSpace(); + var styleStartPosition = this.clonePosition(); + var result = this.parseSimpleArgStyleIfPossible(); + if (result.err) { + return result; + } + var style = trimEnd(result.val); + if (style.length === 0) { + return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition())); + } + var styleLocation = createLocation(styleStartPosition, this.clonePosition()); + styleAndLocation = { style: style, styleLocation: styleLocation }; + } + var argCloseResult = this.tryParseArgumentClose(openingBracePosition); + if (argCloseResult.err) { + return argCloseResult; + } + var location_1 = createLocation(openingBracePosition, this.clonePosition()); + // Extract style or skeleton + if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) { + // Skeleton starts with `::`. + var skeleton = trimStart(styleAndLocation.style.slice(2)); + if (argType === 'number') { + var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation); + if (result.err) { + return result; + } + return { + val: { type: TYPE.number, value: value, location: location_1, style: result.val }, + err: null, + }; + } + else { + if (skeleton.length === 0) { + return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1); + } + var dateTimePattern = skeleton; + // Get "best match" pattern only if locale is passed, if not, let it + // pass as-is where `parseDateTimeSkeleton()` will throw an error + // for unsupported patterns. + if (this.locale) { + dateTimePattern = getBestPattern(skeleton, this.locale); + } + var style = { + type: SKELETON_TYPE.dateTime, + pattern: dateTimePattern, + location: styleAndLocation.styleLocation, + parsedOptions: this.shouldParseSkeletons + ? parseDateTimeSkeleton(dateTimePattern) + : {}, + }; + var type = argType === 'date' ? TYPE.date : TYPE.time; + return { + val: { type: type, value: value, location: location_1, style: style }, + err: null, + }; + } + } + // Regular style or no style. + return { + val: { + type: argType === 'number' + ? TYPE.number + : argType === 'date' + ? TYPE.date + : TYPE.time, + value: value, + location: location_1, + style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null, + }, + err: null, + }; + } + case 'plural': + case 'selectordinal': + case 'select': { + // Parse this range: + // {name, plural, options} + // ^---------^ + var typeEndPosition_1 = this.clonePosition(); + this.bumpSpace(); + if (!this.bumpIf(',')) { + return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1))); + } + this.bumpSpace(); + // Parse offset: + // {name, plural, offset:1, options} + // ^-----^ + // + // or the first option: + // + // {name, plural, one {...} other {...}} + // ^--^ + var identifierAndLocation = this.parseIdentifierIfPossible(); + var pluralOffset = 0; + if (argType !== 'select' && identifierAndLocation.value === 'offset') { + if (!this.bumpIf(':')) { + return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition())); + } + this.bumpSpace(); + var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE); + if (result.err) { + return result; + } + // Parse another identifier for option parsing + this.bumpSpace(); + identifierAndLocation = this.parseIdentifierIfPossible(); + pluralOffset = result.val; + } + var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation); + if (optionsResult.err) { + return optionsResult; + } + var argCloseResult = this.tryParseArgumentClose(openingBracePosition); + if (argCloseResult.err) { + return argCloseResult; + } + var location_2 = createLocation(openingBracePosition, this.clonePosition()); + if (argType === 'select') { + return { + val: { + type: TYPE.select, + value: value, + options: fromEntries(optionsResult.val), + location: location_2, + }, + err: null, + }; + } + else { + return { + val: { + type: TYPE.plural, + value: value, + options: fromEntries(optionsResult.val), + offset: pluralOffset, + pluralType: argType === 'plural' ? 'cardinal' : 'ordinal', + location: location_2, + }, + err: null, + }; + } + } + default: + return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition)); + } + }; + Parser.prototype.tryParseArgumentClose = function (openingBracePosition) { + // Parse: {value, number, ::currency/GBP } + // + if (this.isEOF() || this.char() !== 125 /* `}` */) { + return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition())); + } + this.bump(); // `}` + return { val: true, err: null }; + }; + /** + * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659 + */ + Parser.prototype.parseSimpleArgStyleIfPossible = function () { + var nestedBraces = 0; + var startPosition = this.clonePosition(); + while (!this.isEOF()) { + var ch = this.char(); + switch (ch) { + case 39 /* `'` */: { + // Treat apostrophe as quoting but include it in the style part. + // Find the end of the quoted literal text. + this.bump(); + var apostrophePosition = this.clonePosition(); + if (!this.bumpUntil("'")) { + return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition())); + } + this.bump(); + break; + } + case 123 /* `{` */: { + nestedBraces += 1; + this.bump(); + break; + } + case 125 /* `}` */: { + if (nestedBraces > 0) { + nestedBraces -= 1; + } + else { + return { + val: this.message.slice(startPosition.offset, this.offset()), + err: null, + }; + } + break; + } + default: + this.bump(); + break; + } + } + return { + val: this.message.slice(startPosition.offset, this.offset()), + err: null, + }; + }; + Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) { + var tokens = []; + try { + tokens = parseNumberSkeletonFromString(skeleton); + } + catch (e) { + return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location); + } + return { + val: { + type: SKELETON_TYPE.number, + tokens: tokens, + location: location, + parsedOptions: this.shouldParseSkeletons + ? parseNumberSkeleton(tokens) + : {}, + }, + err: null, + }; + }; + /** + * @param nesting_level The current nesting level of messages. + * This can be positive when parsing message fragment in select or plural argument options. + * @param parent_arg_type The parent argument's type. + * @param parsed_first_identifier If provided, this is the first identifier-like selector of + * the argument. It is a by-product of a previous parsing attempt. + * @param expecting_close_tag If true, this message is directly or indirectly nested inside + * between a pair of opening and closing tags. The nested message will not parse beyond + * the closing tag boundary. + */ + Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) { + var _a; + var hasOtherClause = false; + var options = []; + var parsedSelectors = new Set(); + var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location; + // Parse: + // one {one apple} + // ^--^ + while (true) { + if (selector.length === 0) { + var startPosition = this.clonePosition(); + if (parentArgType !== 'select' && this.bumpIf('=')) { + // Try parse `={number}` selector + var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR); + if (result.err) { + return result; + } + selectorLocation = createLocation(startPosition, this.clonePosition()); + selector = this.message.slice(startPosition.offset, this.offset()); + } + else { + break; + } + } + // Duplicate selector clauses + if (parsedSelectors.has(selector)) { + return this.error(parentArgType === 'select' + ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR + : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation); + } + if (selector === 'other') { + hasOtherClause = true; + } + // Parse: + // one {one apple} + // ^----------^ + this.bumpSpace(); + var openingBracePosition = this.clonePosition(); + if (!this.bumpIf('{')) { + return this.error(parentArgType === 'select' + ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT + : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition())); + } + var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag); + if (fragmentResult.err) { + return fragmentResult; + } + var argCloseResult = this.tryParseArgumentClose(openingBracePosition); + if (argCloseResult.err) { + return argCloseResult; + } + options.push([ + selector, + { + value: fragmentResult.val, + location: createLocation(openingBracePosition, this.clonePosition()), + }, + ]); + // Keep track of the existing selectors + parsedSelectors.add(selector); + // Prep next selector clause. + this.bumpSpace(); + (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location); + } + if (options.length === 0) { + return this.error(parentArgType === 'select' + ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR + : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition())); + } + if (this.requiresOtherClause && !hasOtherClause) { + return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition())); + } + return { val: options, err: null }; + }; + Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) { + var sign = 1; + var startingPosition = this.clonePosition(); + if (this.bumpIf('+')) ; + else if (this.bumpIf('-')) { + sign = -1; + } + var hasDigits = false; + var decimal = 0; + while (!this.isEOF()) { + var ch = this.char(); + if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) { + hasDigits = true; + decimal = decimal * 10 + (ch - 48); + this.bump(); + } + else { + break; + } + } + var location = createLocation(startingPosition, this.clonePosition()); + if (!hasDigits) { + return this.error(expectNumberError, location); + } + decimal *= sign; + if (!isSafeInteger(decimal)) { + return this.error(invalidNumberError, location); + } + return { val: decimal, err: null }; + }; + Parser.prototype.offset = function () { + return this.position.offset; + }; + Parser.prototype.isEOF = function () { + return this.offset() === this.message.length; + }; + Parser.prototype.clonePosition = function () { + // This is much faster than `Object.assign` or spread. + return { + offset: this.position.offset, + line: this.position.line, + column: this.position.column, + }; + }; + /** + * Return the code point at the current position of the parser. + * Throws if the index is out of bound. + */ + Parser.prototype.char = function () { + var offset = this.position.offset; + if (offset >= this.message.length) { + throw Error('out of bound'); + } + var code = codePointAt(this.message, offset); + if (code === undefined) { + throw Error("Offset ".concat(offset, " is at invalid UTF-16 code unit boundary")); + } + return code; + }; + Parser.prototype.error = function (kind, location) { + return { + val: null, + err: { + kind: kind, + message: this.message, + location: location, + }, + }; + }; + /** Bump the parser to the next UTF-16 code unit. */ + Parser.prototype.bump = function () { + if (this.isEOF()) { + return; + } + var code = this.char(); + if (code === 10 /* '\n' */) { + this.position.line += 1; + this.position.column = 1; + this.position.offset += 1; + } + else { + this.position.column += 1; + // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair. + this.position.offset += code < 0x10000 ? 1 : 2; + } + }; + /** + * If the substring starting at the current position of the parser has + * the given prefix, then bump the parser to the character immediately + * following the prefix and return true. Otherwise, don't bump the parser + * and return false. + */ + Parser.prototype.bumpIf = function (prefix) { + if (startsWith(this.message, prefix, this.offset())) { + for (var i = 0; i < prefix.length; i++) { + this.bump(); + } + return true; + } + return false; + }; + /** + * Bump the parser until the pattern character is found and return `true`. + * Otherwise bump to the end of the file and return `false`. + */ + Parser.prototype.bumpUntil = function (pattern) { + var currentOffset = this.offset(); + var index = this.message.indexOf(pattern, currentOffset); + if (index >= 0) { + this.bumpTo(index); + return true; + } + else { + this.bumpTo(this.message.length); + return false; + } + }; + /** + * Bump the parser to the target offset. + * If target offset is beyond the end of the input, bump the parser to the end of the input. + */ + Parser.prototype.bumpTo = function (targetOffset) { + if (this.offset() > targetOffset) { + throw Error("targetOffset ".concat(targetOffset, " must be greater than or equal to the current offset ").concat(this.offset())); + } + targetOffset = Math.min(targetOffset, this.message.length); + while (true) { + var offset = this.offset(); + if (offset === targetOffset) { + break; + } + if (offset > targetOffset) { + throw Error("targetOffset ".concat(targetOffset, " is at invalid UTF-16 code unit boundary")); + } + this.bump(); + if (this.isEOF()) { + break; + } + } + }; + /** advance the parser through all whitespace to the next non-whitespace code unit. */ + Parser.prototype.bumpSpace = function () { + while (!this.isEOF() && _isWhiteSpace(this.char())) { + this.bump(); + } + }; + /** + * Peek at the *next* Unicode codepoint in the input without advancing the parser. + * If the input has been exhausted, then this returns null. + */ + Parser.prototype.peek = function () { + if (this.isEOF()) { + return null; + } + var code = this.char(); + var offset = this.offset(); + var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1)); + return nextCode !== null && nextCode !== void 0 ? nextCode : null; + }; + return Parser; +}()); +/** + * This check if codepoint is alphabet (lower & uppercase) + * @param codepoint + * @returns + */ +function _isAlpha(codepoint) { + return ((codepoint >= 97 && codepoint <= 122) || + (codepoint >= 65 && codepoint <= 90)); +} +function _isAlphaOrSlash(codepoint) { + return _isAlpha(codepoint) || codepoint === 47; /* '/' */ +} +/** See `parseTag` function docs. */ +function _isPotentialElementNameChar(c) { + return (c === 45 /* '-' */ || + c === 46 /* '.' */ || + (c >= 48 && c <= 57) /* 0..9 */ || + c === 95 /* '_' */ || + (c >= 97 && c <= 122) /** a..z */ || + (c >= 65 && c <= 90) /* A..Z */ || + c == 0xb7 || + (c >= 0xc0 && c <= 0xd6) || + (c >= 0xd8 && c <= 0xf6) || + (c >= 0xf8 && c <= 0x37d) || + (c >= 0x37f && c <= 0x1fff) || + (c >= 0x200c && c <= 0x200d) || + (c >= 0x203f && c <= 0x2040) || + (c >= 0x2070 && c <= 0x218f) || + (c >= 0x2c00 && c <= 0x2fef) || + (c >= 0x3001 && c <= 0xd7ff) || + (c >= 0xf900 && c <= 0xfdcf) || + (c >= 0xfdf0 && c <= 0xfffd) || + (c >= 0x10000 && c <= 0xeffff)); +} +/** + * Code point equivalent of regex `\p{White_Space}`. + * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt + */ +function _isWhiteSpace(c) { + return ((c >= 0x0009 && c <= 0x000d) || + c === 0x0020 || + c === 0x0085 || + (c >= 0x200e && c <= 0x200f) || + c === 0x2028 || + c === 0x2029); +} +/** + * Code point equivalent of regex `\p{Pattern_Syntax}`. + * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt + */ +function _isPatternSyntax(c) { + return ((c >= 0x0021 && c <= 0x0023) || + c === 0x0024 || + (c >= 0x0025 && c <= 0x0027) || + c === 0x0028 || + c === 0x0029 || + c === 0x002a || + c === 0x002b || + c === 0x002c || + c === 0x002d || + (c >= 0x002e && c <= 0x002f) || + (c >= 0x003a && c <= 0x003b) || + (c >= 0x003c && c <= 0x003e) || + (c >= 0x003f && c <= 0x0040) || + c === 0x005b || + c === 0x005c || + c === 0x005d || + c === 0x005e || + c === 0x0060 || + c === 0x007b || + c === 0x007c || + c === 0x007d || + c === 0x007e || + c === 0x00a1 || + (c >= 0x00a2 && c <= 0x00a5) || + c === 0x00a6 || + c === 0x00a7 || + c === 0x00a9 || + c === 0x00ab || + c === 0x00ac || + c === 0x00ae || + c === 0x00b0 || + c === 0x00b1 || + c === 0x00b6 || + c === 0x00bb || + c === 0x00bf || + c === 0x00d7 || + c === 0x00f7 || + (c >= 0x2010 && c <= 0x2015) || + (c >= 0x2016 && c <= 0x2017) || + c === 0x2018 || + c === 0x2019 || + c === 0x201a || + (c >= 0x201b && c <= 0x201c) || + c === 0x201d || + c === 0x201e || + c === 0x201f || + (c >= 0x2020 && c <= 0x2027) || + (c >= 0x2030 && c <= 0x2038) || + c === 0x2039 || + c === 0x203a || + (c >= 0x203b && c <= 0x203e) || + (c >= 0x2041 && c <= 0x2043) || + c === 0x2044 || + c === 0x2045 || + c === 0x2046 || + (c >= 0x2047 && c <= 0x2051) || + c === 0x2052 || + c === 0x2053 || + (c >= 0x2055 && c <= 0x205e) || + (c >= 0x2190 && c <= 0x2194) || + (c >= 0x2195 && c <= 0x2199) || + (c >= 0x219a && c <= 0x219b) || + (c >= 0x219c && c <= 0x219f) || + c === 0x21a0 || + (c >= 0x21a1 && c <= 0x21a2) || + c === 0x21a3 || + (c >= 0x21a4 && c <= 0x21a5) || + c === 0x21a6 || + (c >= 0x21a7 && c <= 0x21ad) || + c === 0x21ae || + (c >= 0x21af && c <= 0x21cd) || + (c >= 0x21ce && c <= 0x21cf) || + (c >= 0x21d0 && c <= 0x21d1) || + c === 0x21d2 || + c === 0x21d3 || + c === 0x21d4 || + (c >= 0x21d5 && c <= 0x21f3) || + (c >= 0x21f4 && c <= 0x22ff) || + (c >= 0x2300 && c <= 0x2307) || + c === 0x2308 || + c === 0x2309 || + c === 0x230a || + c === 0x230b || + (c >= 0x230c && c <= 0x231f) || + (c >= 0x2320 && c <= 0x2321) || + (c >= 0x2322 && c <= 0x2328) || + c === 0x2329 || + c === 0x232a || + (c >= 0x232b && c <= 0x237b) || + c === 0x237c || + (c >= 0x237d && c <= 0x239a) || + (c >= 0x239b && c <= 0x23b3) || + (c >= 0x23b4 && c <= 0x23db) || + (c >= 0x23dc && c <= 0x23e1) || + (c >= 0x23e2 && c <= 0x2426) || + (c >= 0x2427 && c <= 0x243f) || + (c >= 0x2440 && c <= 0x244a) || + (c >= 0x244b && c <= 0x245f) || + (c >= 0x2500 && c <= 0x25b6) || + c === 0x25b7 || + (c >= 0x25b8 && c <= 0x25c0) || + c === 0x25c1 || + (c >= 0x25c2 && c <= 0x25f7) || + (c >= 0x25f8 && c <= 0x25ff) || + (c >= 0x2600 && c <= 0x266e) || + c === 0x266f || + (c >= 0x2670 && c <= 0x2767) || + c === 0x2768 || + c === 0x2769 || + c === 0x276a || + c === 0x276b || + c === 0x276c || + c === 0x276d || + c === 0x276e || + c === 0x276f || + c === 0x2770 || + c === 0x2771 || + c === 0x2772 || + c === 0x2773 || + c === 0x2774 || + c === 0x2775 || + (c >= 0x2794 && c <= 0x27bf) || + (c >= 0x27c0 && c <= 0x27c4) || + c === 0x27c5 || + c === 0x27c6 || + (c >= 0x27c7 && c <= 0x27e5) || + c === 0x27e6 || + c === 0x27e7 || + c === 0x27e8 || + c === 0x27e9 || + c === 0x27ea || + c === 0x27eb || + c === 0x27ec || + c === 0x27ed || + c === 0x27ee || + c === 0x27ef || + (c >= 0x27f0 && c <= 0x27ff) || + (c >= 0x2800 && c <= 0x28ff) || + (c >= 0x2900 && c <= 0x2982) || + c === 0x2983 || + c === 0x2984 || + c === 0x2985 || + c === 0x2986 || + c === 0x2987 || + c === 0x2988 || + c === 0x2989 || + c === 0x298a || + c === 0x298b || + c === 0x298c || + c === 0x298d || + c === 0x298e || + c === 0x298f || + c === 0x2990 || + c === 0x2991 || + c === 0x2992 || + c === 0x2993 || + c === 0x2994 || + c === 0x2995 || + c === 0x2996 || + c === 0x2997 || + c === 0x2998 || + (c >= 0x2999 && c <= 0x29d7) || + c === 0x29d8 || + c === 0x29d9 || + c === 0x29da || + c === 0x29db || + (c >= 0x29dc && c <= 0x29fb) || + c === 0x29fc || + c === 0x29fd || + (c >= 0x29fe && c <= 0x2aff) || + (c >= 0x2b00 && c <= 0x2b2f) || + (c >= 0x2b30 && c <= 0x2b44) || + (c >= 0x2b45 && c <= 0x2b46) || + (c >= 0x2b47 && c <= 0x2b4c) || + (c >= 0x2b4d && c <= 0x2b73) || + (c >= 0x2b74 && c <= 0x2b75) || + (c >= 0x2b76 && c <= 0x2b95) || + c === 0x2b96 || + (c >= 0x2b97 && c <= 0x2bff) || + (c >= 0x2e00 && c <= 0x2e01) || + c === 0x2e02 || + c === 0x2e03 || + c === 0x2e04 || + c === 0x2e05 || + (c >= 0x2e06 && c <= 0x2e08) || + c === 0x2e09 || + c === 0x2e0a || + c === 0x2e0b || + c === 0x2e0c || + c === 0x2e0d || + (c >= 0x2e0e && c <= 0x2e16) || + c === 0x2e17 || + (c >= 0x2e18 && c <= 0x2e19) || + c === 0x2e1a || + c === 0x2e1b || + c === 0x2e1c || + c === 0x2e1d || + (c >= 0x2e1e && c <= 0x2e1f) || + c === 0x2e20 || + c === 0x2e21 || + c === 0x2e22 || + c === 0x2e23 || + c === 0x2e24 || + c === 0x2e25 || + c === 0x2e26 || + c === 0x2e27 || + c === 0x2e28 || + c === 0x2e29 || + (c >= 0x2e2a && c <= 0x2e2e) || + c === 0x2e2f || + (c >= 0x2e30 && c <= 0x2e39) || + (c >= 0x2e3a && c <= 0x2e3b) || + (c >= 0x2e3c && c <= 0x2e3f) || + c === 0x2e40 || + c === 0x2e41 || + c === 0x2e42 || + (c >= 0x2e43 && c <= 0x2e4f) || + (c >= 0x2e50 && c <= 0x2e51) || + c === 0x2e52 || + (c >= 0x2e53 && c <= 0x2e7f) || + (c >= 0x3001 && c <= 0x3003) || + c === 0x3008 || + c === 0x3009 || + c === 0x300a || + c === 0x300b || + c === 0x300c || + c === 0x300d || + c === 0x300e || + c === 0x300f || + c === 0x3010 || + c === 0x3011 || + (c >= 0x3012 && c <= 0x3013) || + c === 0x3014 || + c === 0x3015 || + c === 0x3016 || + c === 0x3017 || + c === 0x3018 || + c === 0x3019 || + c === 0x301a || + c === 0x301b || + c === 0x301c || + c === 0x301d || + (c >= 0x301e && c <= 0x301f) || + c === 0x3020 || + c === 0x3030 || + c === 0xfd3e || + c === 0xfd3f || + (c >= 0xfe45 && c <= 0xfe46)); +} + +function pruneLocation(els) { + els.forEach(function (el) { + delete el.location; + if (isSelectElement(el) || isPluralElement(el)) { + for (var k in el.options) { + delete el.options[k].location; + pruneLocation(el.options[k].value); + } + } + else if (isNumberElement(el) && isNumberSkeleton(el.style)) { + delete el.style.location; + } + else if ((isDateElement(el) || isTimeElement(el)) && + isDateTimeSkeleton(el.style)) { + delete el.style.location; + } + else if (isTagElement(el)) { + pruneLocation(el.children); + } + }); +} +function parse(message, opts) { + if (opts === void 0) { opts = {}; } + opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts); + var result = new Parser(message, opts).parse(); + if (result.err) { + var error = SyntaxError(ErrorKind[result.err.kind]); + // @ts-expect-error Assign to error object + error.location = result.err.location; + // @ts-expect-error Assign to error object + error.originalMessage = result.err.message; + throw error; + } + if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) { + pruneLocation(result.val); + } + 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 + ErrorCode["MISSING_VALUE"] = "MISSING_VALUE"; + // When value supplied is invalid + ErrorCode["INVALID_VALUE"] = "INVALID_VALUE"; + // When we need specific Intl API but it's not available + ErrorCode["MISSING_INTL_API"] = "MISSING_INTL_API"; +})(ErrorCode || (ErrorCode = {})); +var FormatError = /** @class */ (function (_super) { + __extends(FormatError, _super); + function FormatError(msg, code, originalMessage) { + var _this = _super.call(this, msg) || this; + _this.code = code; + _this.originalMessage = originalMessage; + return _this; + } + FormatError.prototype.toString = function () { + return "[formatjs Error: ".concat(this.code, "] ").concat(this.message); + }; + return FormatError; +}(Error)); +var InvalidValueError = /** @class */ (function (_super) { + __extends(InvalidValueError, _super); + function InvalidValueError(variableId, value, options, originalMessage) { + return _super.call(this, "Invalid values for \"".concat(variableId, "\": \"").concat(value, "\". Options are \"").concat(Object.keys(options).join('", "'), "\""), ErrorCode.INVALID_VALUE, originalMessage) || this; + } + return InvalidValueError; +}(FormatError)); +var InvalidValueTypeError = /** @class */ (function (_super) { + __extends(InvalidValueTypeError, _super); + function InvalidValueTypeError(value, type, originalMessage) { + return _super.call(this, "Value for \"".concat(value, "\" must be of type ").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this; + } + return InvalidValueTypeError; +}(FormatError)); +var MissingValueError = /** @class */ (function (_super) { + __extends(MissingValueError, _super); + function MissingValueError(variableId, originalMessage) { + return _super.call(this, "The intl string context variable \"".concat(variableId, "\" was not provided to the string \"").concat(originalMessage, "\""), ErrorCode.MISSING_VALUE, originalMessage) || this; + } + return MissingValueError; +}(FormatError)); + +var PART_TYPE; +(function (PART_TYPE) { + PART_TYPE[PART_TYPE["literal"] = 0] = "literal"; + PART_TYPE[PART_TYPE["object"] = 1] = "object"; +})(PART_TYPE || (PART_TYPE = {})); +function mergeLiteral(parts) { + if (parts.length < 2) { + return parts; + } + return parts.reduce(function (all, part) { + var lastPart = all[all.length - 1]; + if (!lastPart || + lastPart.type !== PART_TYPE.literal || + part.type !== PART_TYPE.literal) { + all.push(part); + } + else { + lastPart.value += part.value; + } + return all; + }, []); +} +function isFormatXMLElementFn(el) { + return typeof el === 'function'; +} +// TODO(skeleton): add skeleton support +function formatToParts(els, locales, formatters, formats, values, currentPluralValue, +// For debugging +originalMessage) { + // Hot path for straight simple msg translations + if (els.length === 1 && isLiteralElement(els[0])) { + return [ + { + type: PART_TYPE.literal, + value: els[0].value, + }, + ]; + } + var result = []; + for (var _i = 0, els_1 = els; _i < els_1.length; _i++) { + var el = els_1[_i]; + // Exit early for string parts. + if (isLiteralElement(el)) { + result.push({ + type: PART_TYPE.literal, + value: el.value, + }); + continue; + } + // TODO: should this part be literal type? + // Replace `#` in plural rules with the actual numeric value. + if (isPoundElement(el)) { + if (typeof currentPluralValue === 'number') { + result.push({ + type: PART_TYPE.literal, + value: formatters.getNumberFormat(locales).format(currentPluralValue), + }); + } + continue; + } + var varName = el.value; + // Enforce that all required values are provided by the caller. + if (!(values && varName in values)) { + throw new MissingValueError(varName, originalMessage); + } + var value = values[varName]; + if (isArgumentElement(el)) { + if (!value || typeof value === 'string' || typeof value === 'number') { + value = + typeof value === 'string' || typeof value === 'number' + ? String(value) + : ''; + } + result.push({ + type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object, + value: value, + }); + continue; + } + // Recursively format plural and select parts' option — which can be a + // nested pattern structure. The choosing of the option to use is + // abstracted-by and delegated-to the part helper object. + if (isDateElement(el)) { + var style = typeof el.style === 'string' + ? formats.date[el.style] + : isDateTimeSkeleton(el.style) + ? el.style.parsedOptions + : undefined; + result.push({ + type: PART_TYPE.literal, + value: formatters + .getDateTimeFormat(locales, style) + .format(value), + }); + continue; + } + if (isTimeElement(el)) { + var style = typeof el.style === 'string' + ? formats.time[el.style] + : isDateTimeSkeleton(el.style) + ? el.style.parsedOptions + : formats.time.medium; + result.push({ + type: PART_TYPE.literal, + value: formatters + .getDateTimeFormat(locales, style) + .format(value), + }); + continue; + } + if (isNumberElement(el)) { + var style = typeof el.style === 'string' + ? formats.number[el.style] + : isNumberSkeleton(el.style) + ? el.style.parsedOptions + : undefined; + if (style && style.scale) { + value = + value * + (style.scale || 1); + } + result.push({ + type: PART_TYPE.literal, + value: formatters + .getNumberFormat(locales, style) + .format(value), + }); + continue; + } + if (isTagElement(el)) { + var children = el.children, value_1 = el.value; + var formatFn = values[value_1]; + if (!isFormatXMLElementFn(formatFn)) { + throw new InvalidValueTypeError(value_1, 'function', originalMessage); + } + var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue); + var chunks = formatFn(parts.map(function (p) { return p.value; })); + if (!Array.isArray(chunks)) { + chunks = [chunks]; + } + result.push.apply(result, chunks.map(function (c) { + return { + type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object, + value: c, + }; + })); + } + if (isSelectElement(el)) { + var opt = el.options[value] || el.options.other; + if (!opt) { + throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage); + } + result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values)); + continue; + } + if (isPluralElement(el)) { + var opt = el.options["=".concat(value)]; + if (!opt) { + if (!Intl.PluralRules) { + throw new FormatError("Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n", ErrorCode.MISSING_INTL_API, originalMessage); + } + var rule = formatters + .getPluralRules(locales, { type: el.pluralType }) + .select(value - (el.offset || 0)); + opt = el.options[rule] || el.options.other; + } + if (!opt) { + throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage); + } + result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0))); + continue; + } + } + return mergeLiteral(result); +} + +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ +// -- MessageFormat -------------------------------------------------------- +function mergeConfig(c1, c2) { + if (!c2) { + return c1; + } + return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) { + all[k] = __assign(__assign({}, c1[k]), (c2[k] || {})); + return all; + }, {})); +} +function mergeConfigs(defaultConfig, configs) { + if (!configs) { + return defaultConfig; + } + return Object.keys(defaultConfig).reduce(function (all, k) { + all[k] = mergeConfig(defaultConfig[k], configs[k]); + return all; + }, __assign({}, defaultConfig)); +} +function createFastMemoizeCache(store) { + return { + create: function () { + return { + get: function (key) { + return store[key]; + }, + set: function (key, value) { + store[key] = value; + }, + }; + }, + }; +} +function createDefaultFormatters(cache) { + if (cache === void 0) { cache = { + number: {}, + dateTime: {}, + pluralRules: {}, + }; } + return { + getNumberFormat: memoize(function () { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))(); + }, { + cache: createFastMemoizeCache(cache.number), + strategy: strategies.variadic, + }), + getDateTimeFormat: memoize(function () { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))(); + }, { + cache: createFastMemoizeCache(cache.dateTime), + strategy: strategies.variadic, + }), + getPluralRules: memoize(function () { + var _a; + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))(); + }, { + cache: createFastMemoizeCache(cache.pluralRules), + strategy: strategies.variadic, + }), + }; +} +var IntlMessageFormat$1 = /** @class */ (function () { + function IntlMessageFormat(message, locales, overrideFormats, opts) { + var _this = this; + if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; } + this.formatterCache = { + number: {}, + dateTime: {}, + pluralRules: {}, + }; + this.format = function (values) { + var parts = _this.formatToParts(values); + // Hot path for straight simple msg translations + if (parts.length === 1) { + return parts[0].value; + } + var result = parts.reduce(function (all, part) { + if (!all.length || + part.type !== PART_TYPE.literal || + typeof all[all.length - 1] !== 'string') { + all.push(part.value); + } + else { + all[all.length - 1] += part.value; + } + return all; + }, []); + if (result.length <= 1) { + return result[0] || ''; + } + return result; + }; + this.formatToParts = function (values) { + return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message); + }; + this.resolvedOptions = function () { + var _a; + return ({ + locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) || + Intl.NumberFormat.supportedLocalesOf(_this.locales)[0], + }); + }; + this.getAst = function () { return _this.ast; }; + // Defined first because it's used to build the format pattern. + this.locales = locales; + this.resolvedLocale = IntlMessageFormat.resolveLocale(locales); + if (typeof message === 'string') { + this.message = message; + if (!IntlMessageFormat.__parse) { + throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`'); + } + var _a = opts || {}; _a.formatters; var parseOpts = __rest(_a, ["formatters"]); + // Parse string messages into an AST. + this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale })); + } + else { + this.ast = message; + } + if (!Array.isArray(this.ast)) { + throw new TypeError('A message must be provided as a String or AST.'); + } + // Creates a new object with the specified `formats` merged with the default + // formats. + this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats); + this.formatters = + (opts && opts.formatters) || createDefaultFormatters(this.formatterCache); + } + Object.defineProperty(IntlMessageFormat, "defaultLocale", { + get: function () { + if (!IntlMessageFormat.memoizedDefaultLocale) { + IntlMessageFormat.memoizedDefaultLocale = + new Intl.NumberFormat().resolvedOptions().locale; + } + return IntlMessageFormat.memoizedDefaultLocale; + }, + enumerable: false, + configurable: true + }); + IntlMessageFormat.memoizedDefaultLocale = null; + IntlMessageFormat.resolveLocale = function (locales) { + if (typeof Intl.Locale === 'undefined') { + return; + } + var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales); + if (supportedLocales.length > 0) { + return new Intl.Locale(supportedLocales[0]); + } + return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]); + }; + IntlMessageFormat.__parse = parse; + // Default format options used as the prototype of the `formats` provided to the + // constructor. These are used when constructing the internal Intl.NumberFormat + // and Intl.DateTimeFormat instances. + IntlMessageFormat.formats = { + number: { + integer: { + maximumFractionDigits: 0, + }, + currency: { + style: 'currency', + }, + percent: { + style: 'percent', + }, + }, + date: { + short: { + month: 'numeric', + day: 'numeric', + year: '2-digit', + }, + medium: { + month: 'short', + day: 'numeric', + year: 'numeric', + }, + long: { + month: 'long', + day: 'numeric', + year: 'numeric', + }, + full: { + weekday: 'long', + month: 'long', + day: 'numeric', + year: 'numeric', + }, + }, + time: { + short: { + hour: 'numeric', + minute: 'numeric', + }, + medium: { + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + }, + long: { + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + timeZoneName: 'short', + }, + full: { + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + timeZoneName: 'short', + }, + }, + }; + return IntlMessageFormat; +}()); + +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ +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]; +// Falk - Adapted the central translator to check if a localStorage key is existing. +var 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); + } + else { + locales = [navigator.language || navigator.userLanguage || defaultLocale]; + } +} +function parseLocale(s) { + var 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 }; + } + 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() }; + } + catch (e) { + log.error("Parse locale:".concat(locale, " failed."), e); + } +} +function parseLocales(list) { + return list.map(parseLocale).filter(function (t) { return t; }); +} +var fallbackLocaleInfos = parseLocales(locales.includes(defaultLocale) ? locales : __spreadArray(__spreadArray([], locales, true), [defaultLocale], false)); +var i18n = __assign({ locales: 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); + if (t !== undefined) { + return t; + } + } + return defaultValue; +} +function getDataByLocale(fileData, suffix, filterLocales, targetLocales) { + var localeInfos = __spreadArray([], fallbackLocaleInfos, true); + var 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 [ + 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]; + if (data !== undefined) { + return { data: data, language: name_1.slice(0, 2) }; + } + } + console.error("Not found ".concat(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; + 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) { + 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); + if (Array.isArray(node)) { + return node.map(function (n, i) { return jsxRuntimeExports.jsx(reactExports.Fragment, { children: n }, i); }); + } + return node; + }; + Translator.prototype.getMessage = function (key) { + var 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) { + message = "oups! ".concat(key); + viewMode() !== "view" ? console.warn("Translation missing for key: ".concat(key)) : null; + } + return message; + }; + Translator.prototype.getNestedMessage = function (obj, key) { + for (var _i = 0, _a = key.split("."); _i < _a.length; _i++) { + var k = _a[_i]; + 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; +} + +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-core/rollup.config.js b/client/packages/lowcoder-core/rollup.config.js index f2da77284..f80c4f718 100644 --- a/client/packages/lowcoder-core/rollup.config.js +++ b/client/packages/lowcoder-core/rollup.config.js @@ -2,18 +2,20 @@ import commonjs from "@rollup/plugin-commonjs"; import resolve from "@rollup/plugin-node-resolve"; import typescript from "@rollup/plugin-typescript"; import dts from "rollup-plugin-dts"; +import { visualizer } from 'rollup-plugin-visualizer'; +import { terser } from 'rollup-plugin-terser'; const config = [ { input: "src/index.ts", - plugins: [resolve({ browser: true }), commonjs(), typescript()], + plugins: [resolve({ browser: true }), commonjs(), typescript(), terser(), visualizer({ open: true })], output: { dir: "lib", format: "esm", }, external: ["lodash", "stylis"], }, - { + /* { input: "src/index.ts", plugins: [ resolve({ browser: true }), @@ -25,7 +27,7 @@ const config = [ file: "lib/index.cjs", }, external: ["lodash", "stylis"], - }, + }, */ { input: "lib/dts/index.d.ts", plugins: [ @@ -40,4 +42,4 @@ const config = [ }, ]; -export default config; +export default config; \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/components/CustomModal.tsx b/client/packages/lowcoder-design/src/components/CustomModal.tsx index 9c72ee150..21dbb6812 100644 --- a/client/packages/lowcoder-design/src/components/CustomModal.tsx +++ b/client/packages/lowcoder-design/src/components/CustomModal.tsx @@ -6,9 +6,10 @@ import styled from "styled-components"; import { TacoButtonType, TacoButton } from "components/button"; import Draggable from "react-draggable"; import { DarkActiveTextColor, GreyTextColor } from "constants/style"; -import { CloseIcon, ErrorIcon, SuccessIcon, WarningIcon, WarningWhiteIcon } from "icons"; import { trans } from "i18n/design"; import { modalInstance } from "components/GlobalInstances"; +import {MultiIconDisplay} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {CloseIcon, ErrorIcon, SuccessIcon, WarningIcon, WarningWhiteIcon} from "../icons"; type ModalWrapperProps = { $width?: string | number; @@ -130,7 +131,7 @@ function ModalHeader(props: { )} {props.title} - + ); @@ -264,10 +265,10 @@ function CustomModal(props: CustomModalProps) { } const TitleIcon = { - error: , - warn: , - info: , - success: , + error: , + warn: , + info: , + success: , }; CustomModal.confirm = (props: { diff --git a/client/packages/lowcoder-design/src/components/ExternalLink.tsx b/client/packages/lowcoder-design/src/components/ExternalLink.tsx index 51fcb3c8e..7ac7f7320 100644 --- a/client/packages/lowcoder-design/src/components/ExternalLink.tsx +++ b/client/packages/lowcoder-design/src/components/ExternalLink.tsx @@ -1,6 +1,7 @@ import { ActiveTextColor, GreyTextColor } from "constants/style"; -import { DocIcon } from "icons"; import styled from "styled-components"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {DocIcon} from "../icons"; export const ExternalLink = styled.a` font-size: 13px; @@ -14,7 +15,7 @@ export const ExternalLink = styled.a` } `; -const StyledDocIcon = styled(DocIcon)` +const StyledDocIcon = styled(MultiIcon(DocIcon))` height: 12px; width: 12px; margin-right: 4px; diff --git a/client/packages/lowcoder-design/src/components/MenuItem.tsx b/client/packages/lowcoder-design/src/components/MenuItem.tsx index 9510c13d9..cb45ff2a0 100644 --- a/client/packages/lowcoder-design/src/components/MenuItem.tsx +++ b/client/packages/lowcoder-design/src/components/MenuItem.tsx @@ -1,7 +1,8 @@ import React from "react"; import styled, { css } from "styled-components"; -import { PointIcon, DragIcon, PencilIcon } from "icons"; import { labelCss } from "./Label"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {DragIcon, PencilIcon, PointIcon} from "../icons"; interface IItem { $width?: number; @@ -26,7 +27,7 @@ const IconCss = css` cursor: pointer; } `; -const StyledDragIcon = styled(DragIcon)` +const StyledDragIcon = styled(MultiIcon(DragIcon))` ${IconCss} margin-left: 12px; margin-top: 8px; @@ -79,12 +80,12 @@ const GrayText = styled.span` color: #8b8fa3; margin-left: 8px; `; -const StyledPencilIcon = styled(PencilIcon)` +const StyledPencilIcon = styled(MultiIcon(PencilIcon))` ${IconCss} margin-top: 8px; float: right; `; -const StyledPointIcon = styled(PointIcon)` +const StyledPointIcon = styled(MultiIcon(PointIcon))` ${IconCss} margin-left: 16px; margin-top: 8px; diff --git a/client/packages/lowcoder-design/src/components/eventHandler.tsx b/client/packages/lowcoder-design/src/components/eventHandler.tsx index f7209ebe8..13f7cbfb7 100644 --- a/client/packages/lowcoder-design/src/components/eventHandler.tsx +++ b/client/packages/lowcoder-design/src/components/eventHandler.tsx @@ -1,9 +1,10 @@ import styled from "styled-components"; -import { BluePlusIcon } from "icons"; import { EllipsisTextCss, labelCss } from "./Label"; import { LinkButton } from "./button"; import { ReactNode } from "react"; import { trans } from "i18n/design"; +import {MultiIcon, MultiIconDisplay} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {BluePlusIcon} from "../icons"; const InlineEventFormWrapper = styled.div` display: flex; @@ -112,12 +113,13 @@ const AddLine = (props: { title: ReactNode; add: () => void }) => { return ( {props.title} - } text={trans("addItem")} onClick={props.add} /> + } text={trans("addItem")} onClick={props.add} /> ); }; +const Blueplus = MultiIcon(BluePlusIcon) export { - BluePlusIcon as AddEventIcon, + Blueplus as AddEventIcon, EventDiv, EventContent, EventTitle, diff --git a/client/packages/lowcoder-design/src/components/iconSelect/index.tsx b/client/packages/lowcoder-design/src/components/iconSelect/index.tsx index 6eac2f7b6..19e1f4101 100644 --- a/client/packages/lowcoder-design/src/components/iconSelect/index.tsx +++ b/client/packages/lowcoder-design/src/components/iconSelect/index.tsx @@ -19,8 +19,9 @@ import { import Draggable from "react-draggable"; import { default as List, type ListRowProps } from "react-virtualized/dist/es/List"; import styled from "styled-components"; -import { CloseIcon, SearchIcon } from "icons"; import { ANTDICON } from "icons/antIcon"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {CloseIcon, SearchIcon} from "../../icons"; const PopupContainer = styled.div` width: 580px; @@ -42,7 +43,7 @@ const TitleText = styled.span` color: #222222; line-height: 16px; `; -const StyledCloseIcon = styled(CloseIcon)` +const StyledCloseIcon = styled(MultiIcon(CloseIcon))` width: 16px; height: 16px; cursor: pointer; @@ -60,7 +61,7 @@ const SearchDiv = styled.div` display: flex; justify-content: space-between; `; -const StyledSearchIcon = styled(SearchIcon)` +const StyledSearchIcon = styled(MultiIcon(SearchIcon))` position: absolute; top: 6px; left: 12px; diff --git a/client/packages/lowcoder-design/src/components/keyValueList.tsx b/client/packages/lowcoder-design/src/components/keyValueList.tsx index 7bd9f317a..327432b18 100644 --- a/client/packages/lowcoder-design/src/components/keyValueList.tsx +++ b/client/packages/lowcoder-design/src/components/keyValueList.tsx @@ -2,8 +2,9 @@ import styled from "styled-components"; import { ReactComponent as Bin } from "icons/v1/icon-recycle-bin.svg"; import { TacoButton } from "./button"; import { ReactNode } from "react"; -import { BluePlusIcon } from "icons"; import { trans } from "i18n/design"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {BluePlusIcon} from "../icons"; const KeyValueListItem = styled.div` display: flex; @@ -33,7 +34,7 @@ const DelIcon = styled(Bin)<{ } `; -const AddIcon = styled(BluePlusIcon)` +const AddIcon = styled(MultiIcon(BluePlusIcon))` height: 8px; width: 8px; margin-right: 4px; diff --git a/client/packages/lowcoder-design/src/components/option.tsx b/client/packages/lowcoder-design/src/components/option.tsx index 4e62301f8..d91689349 100644 --- a/client/packages/lowcoder-design/src/components/option.tsx +++ b/client/packages/lowcoder-design/src/components/option.tsx @@ -1,5 +1,4 @@ import styled, { css } from "styled-components"; -import { DragIcon, PointIcon } from "icons"; import { EllipsisTextCss, labelCss } from "./Label"; import { EditPopover, SimplePopover } from "./popover"; import { ToolTipLabel } from "./toolTip"; @@ -13,6 +12,8 @@ import { DndContext } from "@dnd-kit/core"; import { restrictToVerticalAxis } from "@dnd-kit/modifiers"; import { ActiveTextColor, GreyTextColor } from "constants/style"; import { trans } from "i18n/design"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {DragIcon, PointIcon} from "../icons"; const OptionDiv = styled.div` width: 100%; @@ -103,7 +104,7 @@ const EmptyOptionSpan = styled.span` } `; -const StyledDragIcon = styled(DragIcon)` +const StyledDragIcon = styled(MultiIcon(DragIcon))` ${IconCss}; margin-top: 8px; margin-left: 8px; @@ -120,7 +121,7 @@ const StyledDragIcon = styled(DragIcon)` } `; -const StyledPointIcon = styled(PointIcon)` +const StyledPointIcon = styled(MultiIcon(PointIcon))` ${IconCss}; color: ${GreyTextColor}; diff --git a/client/packages/lowcoder-design/src/components/popover.tsx b/client/packages/lowcoder-design/src/components/popover.tsx index c7e745d06..1dfbf34ca 100644 --- a/client/packages/lowcoder-design/src/components/popover.tsx +++ b/client/packages/lowcoder-design/src/components/popover.tsx @@ -4,7 +4,8 @@ import { Children, cloneElement, MouseEvent, ReactNode, useState } from "react"; import styled from "styled-components"; import { ActiveTextColor, GreyTextColor } from "constants/style"; import { trans } from "i18n/design"; -import { PointIcon } from "icons"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {PointIcon} from "../icons"; const Wedge = styled.div` height: 8px; @@ -36,7 +37,7 @@ const Handle = styled.div` } `; -const StyledPointIcon = styled(PointIcon)` +const StyledPointIcon = styled(MultiIcon(PointIcon))` cursor: pointer; color: ${GreyTextColor}; diff --git a/client/packages/lowcoder-design/src/components/popupCard.tsx b/client/packages/lowcoder-design/src/components/popupCard.tsx index 5307ba9e9..c1a2a40aa 100644 --- a/client/packages/lowcoder-design/src/components/popupCard.tsx +++ b/client/packages/lowcoder-design/src/components/popupCard.tsx @@ -3,7 +3,8 @@ import { default as Card } from "antd/es/card"; import { CopyTextButton } from "./copyTextButton"; import { CSSProperties, ReactNode, useState } from "react"; import styled from "styled-components"; -import { ErrorIcon, SuccessIcon } from "icons"; +import {MultiIconDisplay} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {ErrorIcon, SuccessIcon} from "../icons"; const StyledCard = styled(Card)<{ $backcolor: string }>` z-index: 3; @@ -126,7 +127,7 @@ export function PopupCard(props: PopupCardProps) { message={props.title} type={props.hasError ? "error" : "success"} showIcon - icon={props.hasError ? : } + icon={props.hasError ? : } /> } extra={} diff --git a/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx b/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx index a4a71964b..f6f88bf6c 100644 --- a/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx +++ b/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx @@ -24,9 +24,10 @@ import { type ListRowProps, } from "react-virtualized/dist/es/List"; import styled from "styled-components"; -import { CloseIcon, SearchIcon } from "icons"; import { ANTDICON } from "icons/antIcon"; import { JSX } from "react/jsx-runtime"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; +import {CloseIcon, SearchIcon} from "../../icons"; const PopupContainer = styled.div` width: 580px; @@ -48,7 +49,7 @@ const TitleText = styled.span` color: #222222; line-height: 16px; `; -const StyledCloseIcon = styled(CloseIcon)` +const StyledCloseIcon = styled(MultiIcon(CloseIcon))` width: 16px; height: 16px; cursor: pointer; @@ -66,7 +67,7 @@ const SearchDiv = styled.div` display: flex; justify-content: space-between; `; -const StyledSearchIcon = styled(SearchIcon)` +const StyledSearchIcon = styled(MultiIcon(SearchIcon))` position: absolute; top: 6px; left: 12px; diff --git a/client/packages/lowcoder-design/src/components/video.tsx b/client/packages/lowcoder-design/src/components/video.tsx index db7945912..83f8385b1 100644 --- a/client/packages/lowcoder-design/src/components/video.tsx +++ b/client/packages/lowcoder-design/src/components/video.tsx @@ -1,6 +1,7 @@ // import ReactPlayer from "react-player"; import { lazy } from 'react'; import styled from "styled-components"; +import {MultiIcon} from "lowcoder/src/comps/comps/multiIconDisplay"; import { VideoCompIcon } from "icons"; const ReactPlayer = lazy(() => import("react-player")); @@ -28,7 +29,7 @@ export const Container = styled.div` } } `; -const PlayTriangle = styled(VideoCompIcon)` +const PlayTriangle = styled(MultiIcon(VideoCompIcon))` position: absolute; left: 0; top: 0; diff --git a/client/packages/lowcoder-design/src/i18n/design/index.ts b/client/packages/lowcoder-design/src/i18n/design/index.ts index fd1812796..47ba65378 100644 --- a/client/packages/lowcoder-design/src/i18n/design/index.ts +++ b/client/packages/lowcoder-design/src/i18n/design/index.ts @@ -1,4 +1,29 @@ -import { Translator } from "lowcoder-core"; + +import { Translator } from "lowcoder-core"; import * as localeData from "./locales"; +import { ReactNode } from "react"; +import {getLanguage} from "lowcoder/src/util/editor"; + +type transType = (key: any, variables?: any) => string; +type transToNodeType = (key: any, variables?: any) => ReactNode; + +let trans: transType; +let transToNode: transToNodeType; +const availableLanguages = ['en', 'zh', 'de', 'pt']; +let language: string = getLanguage() || 'en' ; + +export const initTranslator = async (lang?: string) => { + let langJson = await (localeData as any)[lang || availableLanguages.includes(language) ? language : 'en'](); + langJson = {[lang || language]: langJson} + const translator = new Translator( + langJson, + REACT_APP_LANGUAGES, + [lang || language] + ); + + language = translator.language; + transToNode = (key: any, variables?: any) => translator.transToNode?.(key, variables); + trans = (key: any, variables?: any) => translator.trans?.(key, variables); +} -export const { trans } = new Translator(localeData, REACT_APP_LANGUAGES); +export { language, trans, transToNode }; diff --git a/client/packages/lowcoder-design/src/i18n/design/locales/de.ts b/client/packages/lowcoder-design/src/i18n/design/locales/de.ts index 4fa309fd7..629153e2a 100644 --- a/client/packages/lowcoder-design/src/i18n/design/locales/de.ts +++ b/client/packages/lowcoder-design/src/i18n/design/locales/de.ts @@ -1,3 +1,81 @@ -import { en } from "./en"; -export const de: typeof en = {...en}; +export const de = { + addItem: "Add", + duplicate: "Duplicate", + rename: "Rename", + delete: "Delete", + edit: "Edit", + ok: "OK", + cancel: "Cancel", + previousStep: "Previous", + nextStep: "Next", + finish: "Finish", + country: { + china: "China", + }, + notification: { + copySuccess: "Copy success", + copyFail: "Copy failed", + }, + prop: { + basic: "Basic", + resources: "Resources", + interaction: "Interaction", + advanced: "Advanced", + validation: "Validation", + layout: "Layout", + animationStyle:"Animation Style", + labelStyle: "Label Style", + style: "Style", + meetings: "Meeting Settings", + data: "Data", + field: 'Field', + inputFieldStyle: 'Input Field Style', + childrenInputFieldStyle: 'Children Input Field Style', + avatarStyle: 'Avatar Style', + captionStyle: 'Caption Style', + startButtonStyle: 'Start Button Style', + resetButtonStyle: 'Reset Button Style', + headerStyle: 'Header Style', + bodyStyle: 'Body Style', + badgeStyle: 'Badge Style', + columnStyle: 'Column Style', + modalStyle: 'Modal Style', + }, + passwordInput: { + label: "Password:", + placeholder: "Please enter your password", + inconsistentPassword: "Two passwords are inconsistent", + confirmPasswordLabel: "Confirm password:", + confirmPasswordPlaceholder: "Please enter your password again", + }, + verifyCodeInput: { + label: "Verification code:", + errorMsg: "Code should be {digitNum} digits", + placeholder: "Please enter {digitNum} digits code", + sendCode: "Send code", + }, + iconSelect: { + title: "Select icon", + searchPlaceholder: "Search icon", + }, + shapeSelect: { + title: "Select shape", + searchPlaceholder: "Search shape", + }, + eventHandler: { + advanced: "Advanced", + }, + comp: { + selectedCompsTitle: "{selectCompNum} components are selected", + selectedCompsDetail: "Click component to view its properties", + batchDelete: "Batch delete", + }, + optionsControl: { + optionItemErrorMSg: `Found duplicate option value "{value}". Only the first item will be displayed. Please change to a unique value.`, + emptyList: "No options", + }, + container: { + hintPlaceHolder: "Drag components from the right panel", + }, +}; diff --git a/client/packages/lowcoder-design/src/i18n/design/locales/index.ts b/client/packages/lowcoder-design/src/i18n/design/locales/index.ts index a7ba5832c..6205cc283 100644 --- a/client/packages/lowcoder-design/src/i18n/design/locales/index.ts +++ b/client/packages/lowcoder-design/src/i18n/design/locales/index.ts @@ -1,6 +1,5 @@ -// file examples: en, enGB, zh, zhHK -// fallback example: current locale is zh-HK, fallback order is zhHK => zh => en -export * from "./en"; -export * from "./zh"; -export * from "./de"; -export * from "./pt" \ No newline at end of file + +export const en = async () : Promise => await import("./en").then(module => module.en); +export const zh = async () : Promise => await import("./zh").then(module => module.zh); +export const de = async () : Promise => await import("./de").then(module => module.de); +export const pt = async () : Promise => await import("./pt").then(module => module.pt); diff --git a/client/packages/lowcoder-design/src/i18n/design/locales/pt.ts b/client/packages/lowcoder-design/src/i18n/design/locales/pt.ts index 846faa31d..81895d1c3 100644 --- a/client/packages/lowcoder-design/src/i18n/design/locales/pt.ts +++ b/client/packages/lowcoder-design/src/i18n/design/locales/pt.ts @@ -1,90 +1,80 @@ -import {en} from "./en"; - -export const pt: typeof en = { - ...en, - addItem: "Adicionar", - duplicate: "Duplicar", - rename: "Renomear", - delete: "Deletar", - edit: "Editar", - ok: "OK", - cancel: "Cancelar", - previousStep: "Anterior", - nextStep: "Próximo", - finish: "Finalizar", - country: { - ...en.country, - china: "China", +export const pt = { + "addItem": "Adicionar", + "duplicate": "Duplicar", + "rename": "Renomear", + "delete": "Deletar", + "edit": "Editar", + "ok": "OK", + "cancel": "Cancelar", + "previousStep": "Anterior", + "nextStep": "Próximo", + "finish": "Finalizar", + "country": { + "china": "China" }, - notification: { - ...en.notification, - copySuccess: "Sucesso ao Copiar", - copyFail: "Falha ao Copiar", + "notification": { + "copySuccess": "Sucesso ao Copiar", + "copyFail": "Falha ao Copiar" }, - prop: { - ...en.prop, - basic: "Básico", - resources: "Recursos", - interaction: "Interação", - advanced: "Avançado", - validation: "Validação", - layout: "Layout", - labelStyle: "Estilo do Rótulo", - style: "Estilo", - meetings: "Configurações da Reunião", - data: "Dados", - field: 'Campo', - inputFieldStyle: 'Estilo do Campo de Entrada', - avatarStyle: 'Estilo do Avatar', - captionStyle: 'Estilo da Legenda', - startButtonStyle: 'Estilo do Botão de Começar', - resetButtonStyle: 'Estilo do Botão de Resetar', - headerStyle: 'Estilo do Cabeçalho', - bodyStyle: 'Estilo do Corpo', - badgeStyle: 'Estilo do Emblema', + "prop": { + "basic": "Básico", + "resources": "Recursos", + "interaction": "Interação", + "advanced": "Avançado", + "validation": "Validação", + "layout": "Layout", + "animationStyle": "Animation Style", + "labelStyle": "Estilo do Rótulo", + "style": "Estilo", + "meetings": "Configurações da Reunião", + "data": "Dados", + "field": "Campo", + "inputFieldStyle": "Estilo do Campo de Entrada", + "childrenInputFieldStyle": "Children Input Field Style", + "avatarStyle": "Estilo do Avatar", + "captionStyle": "Estilo da Legenda", + "startButtonStyle": "Estilo do Botão de Começar", + "resetButtonStyle": "Estilo do Botão de Resetar", + "headerStyle": "Estilo do Cabeçalho", + "bodyStyle": "Estilo do Corpo", + "badgeStyle": "Estilo do Emblema", + "columnStyle": "Column Style", + "modalStyle": "Modal Style" }, - passwordInput: { - ...en.passwordInput, - label: "Senha:", - placeholder: "Insira sua senha", - inconsistentPassword: "As duas senhas não são iguais", - confirmPasswordLabel: "Confirme a senha:", - confirmPasswordPlaceholder: "Por favor insira a senha novamente", + "passwordInput": { + "label": "Senha:", + "placeholder": "Insira sua senha", + "inconsistentPassword": "As duas senhas não são iguais", + "confirmPasswordLabel": "Confirme a senha:", + "confirmPasswordPlaceholder": "Por favor insira a senha novamente" }, - verifyCodeInput: { - ...en.verifyCodeInput, - label: "Código de verificação:", - errorMsg: "O código deve ter {digitNum} digitos", - placeholder: "Por favor insira {digitNum} digitos", - sendCode: "Enviar Código", + "verifyCodeInput": { + "label": "Código de verificação:", + "errorMsg": "O código deve ter {digitNum} digitos", + "placeholder": "Por favor insira {digitNum} digitos", + "sendCode": "Enviar Código" }, - iconSelect: { - ...en.iconSelect, - title: "Selecionar Ícone", - searchPlaceholder: "Pesquisar Ícone", + "iconSelect": { + "title": "Selecionar Ícone", + "searchPlaceholder": "Pesquisar Ícone" }, - shapeSelect: { - ...en.shapeSelect, - title: "Selecionar Forma", - searchPlaceholder: "Pesquisar Forma", + "shapeSelect": { + "title": "Selecionar Forma", + "searchPlaceholder": "Pesquisar Forma" }, - eventHandler: { - ...en.eventHandler, - advanced: "Avançado", + "eventHandler": { + "advanced": "Avançado" }, - comp: { - ...en.comp, - selectedCompsTitle: "{selectCompNum} componentes selecionados", - selectedCompsDetail: "Clique no componente para ver suas propriedades", - batchDelete: "Deletar em massa", + "comp": { + "selectedCompsTitle": "{selectCompNum} componentes selecionados", + "selectedCompsDetail": "Clique no componente para ver suas propriedades", + "batchDelete": "Deletar em massa" }, - optionsControl: { - ...en.optionsControl, - optionItemErrorMSg: `Opção de valor encontrada duplicada "{value}". Somente o primeiro item será mostrado. Por favor, troque para um valor único.`, - emptyList: "Sem opções", + "optionsControl": { + "optionItemErrorMSg": "Opção de valor encontrada duplicada \"{value}\". Somente o primeiro item será mostrado. Por favor, troque para um valor único.", + "emptyList": "Sem opções" }, - container: { - ...en.container, - hintPlaceHolder: "Arraste componentes do painel da direita", - }, -}; + "container": { + "hintPlaceHolder": "Arraste componentes do painel da direita" + } +} \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/i18n/design/locales/zh.ts b/client/packages/lowcoder-design/src/i18n/design/locales/zh.ts index d1567e624..ae8531764 100644 --- a/client/packages/lowcoder-design/src/i18n/design/locales/zh.ts +++ b/client/packages/lowcoder-design/src/i18n/design/locales/zh.ts @@ -1,77 +1,81 @@ -import {en} from "./en"; -export const zh: typeof en = { - ...en, - addItem: "添加", - duplicate: "复制", - rename: "重命名", - delete: "删除", - edit: "编辑", - ok: "确定", - cancel: "取消", - previousStep: "上一步", - nextStep: "下一步", - finish: "完成", - country: { - ...en.country, - china: "中国", +export const zh = { + "addItem": "添加", + "duplicate": "复制", + "rename": "重命名", + "delete": "删除", + "edit": "编辑", + "ok": "确定", + "cancel": "取消", + "previousStep": "上一步", + "nextStep": "下一步", + "finish": "完成", + "country": { + "china": "中国" }, - notification: { - ...en.notification, - copySuccess: "复制成功", - copyFail: "复制失败", + "notification": { + "copySuccess": "复制成功", + "copyFail": "复制失败" }, - prop: { - ...en.prop, - basic: "基础", - resources: "资源", - interaction: "交互", - advanced: "高级", - validation: "验证", - layout: "布局", - labelStyle:"标签样式", - style: "样式", - meetings: "会议", - data: "数据", + "prop": { + "basic": "基础", + "resources": "资源", + "interaction": "交互", + "advanced": "高级", + "validation": "验证", + "layout": "布局", + "animationStyle": "Animation Style", + "labelStyle": "标签样式", + "style": "样式", + "meetings": "会议", + "data": "数据", + "field": "Field", + "inputFieldStyle": "Input Field Style", + "childrenInputFieldStyle": "Children Input Field Style", + "avatarStyle": "Avatar Style", + "captionStyle": "Caption Style", + "startButtonStyle": "Start Button Style", + "resetButtonStyle": "Reset Button Style", + "headerStyle": "Header Style", + "bodyStyle": "Body Style", + "badgeStyle": "Badge Style", + "columnStyle": "Column Style", + "modalStyle": "Modal Style" }, - passwordInput: { - ...en.passwordInput, - label: "密码:", - placeholder: "请输入密码", - inconsistentPassword: "两次密码输入不一致", - confirmPasswordLabel: "确认密码:", - confirmPasswordPlaceholder: "请再次输入密码", + "passwordInput": { + "label": "密码:", + "placeholder": "请输入密码", + "inconsistentPassword": "两次密码输入不一致", + "confirmPasswordLabel": "确认密码:", + "confirmPasswordPlaceholder": "请再次输入密码" }, - verifyCodeInput: { - ...en.verifyCodeInput, - label: "验证码:", - errorMsg: "验证码应为 {digitNum} 位数字", - placeholder: "请输入 {digitNum} 位数字验证码", - sendCode: "发送验证码", + "verifyCodeInput": { + "label": "验证码:", + "errorMsg": "验证码应为 {digitNum} 位数字", + "placeholder": "请输入 {digitNum} 位数字验证码", + "sendCode": "发送验证码" }, - iconSelect: { - ...en.iconSelect, - title: "选择图标", - searchPlaceholder: "搜索图标", + "iconSelect": { + "title": "选择图标", + "searchPlaceholder": "搜索图标" }, - eventHandler: { - ...en.eventHandler, - advanced: "高级", + "shapeSelect": { + "title": "Select shape", + "searchPlaceholder": "Search shape" }, - comp: { - ...en.comp, - selectedCompsTitle: "已选择 {selectCompNum} 个组件", - selectedCompsDetail: "点击组件查看其属性", - batchDelete: "批量删除", + "eventHandler": { + "advanced": "高级" }, - optionsControl: { - ...en.optionsControl, - optionItemErrorMSg: `发现重复的选项值 "{value}",只会显示第一项,请更改为唯一值.`, - emptyList: "无选项", + "comp": { + "selectedCompsTitle": "已选择 {selectCompNum} 个组件", + "selectedCompsDetail": "点击组件查看其属性", + "batchDelete": "批量删除" }, - container: { - ...en.container, - hintPlaceHolder: "从右侧面板拖动组件", + "optionsControl": { + "optionItemErrorMSg": "发现重复的选项值 \"{value}\",只会显示第一项,请更改为唯一值.", + "emptyList": "无选项" }, - }; - + "container": { + "hintPlaceHolder": "从右侧面板拖动组件" + } +} \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/index.tsx b/client/packages/lowcoder-design/src/icons/index.tsx index 687d3516b..93e783719 100644 --- a/client/packages/lowcoder-design/src/icons/index.tsx +++ b/client/packages/lowcoder-design/src/icons/index.tsx @@ -1,729 +1,702 @@ -export { ReactComponent as AppSnapshotIcon } from "./v1/app-snapshot.svg"; -export { ReactComponent as HookCompDropIcon } from "./v1/hook-comp-drop.svg"; -export { ReactComponent as HookCompIcon } from "./v1/hook-comp.svg"; +import React from 'react'; -export { ReactComponent as JsGrayIcon } from "./v1/icon-Js-Gray.svg"; -export { ReactComponent as JsColorsIcon } from "./v1/icon-Js-colors.svg"; -export { ReactComponent as AdminIcon } from "./v1/icon-admin.svg"; -export { ReactComponent as AlignVerticalCent } from "./v1/icon-align-vertical-center.svg"; -export { ReactComponent as AppEditIcon } from "./v1/icon-app-edit.svg"; -export { ReactComponent as AuditAppIcon } from "./v1/icon-audit-app.svg"; -export { ReactComponent as AuditDbIcon } from "./v1/icon-audit-db.svg"; -export { ReactComponent as TreeFoldIcon } from "./v1/icon-audit-fold.svg"; -export { ReactComponent as AuditQueryIcon } from "./v1/icon-audit-query.svg"; -export { ReactComponent as AuditUserIcon } from "./v1/icon-audit-user.svg"; -export { ReactComponent as AuditFolderIcon } from "./v1/icon-audit-folder.svg"; +const createSvgComponent = (modulePromise: () => Promise) => React.lazy(() => modulePromise().then(module=> ({default: (props: any) => { + const Comp = module.ReactComponent; + return ; + }}))); -export { ReactComponent as CaptchaIcon } from "./v1/icon-captcha.svg"; -export { ReactComponent as CheckboxIcon } from "./v1/icon-checkbox.svg"; -export { ReactComponent as CheckoutIcon } from "./v1/icon-checkout.svg"; -export { ReactComponent as ClickLinkIcon } from "./v1/icon-clickLink.svg"; -export { ReactComponent as CloseEyeIcon } from "./v1/icon-closeEye.svg"; -export { ReactComponent as CodeEditorCloseIcon } from "./v1/icon-code-editor-close.svg"; -export { ReactComponent as CodeEditorOpenIcon } from "./v1/icon-code-editor-open.svg"; -export { ReactComponent as CodeEditorPinnedIcon} from "./remix/pushpin-2-fill.svg" -export { ReactComponent as CodeEditorUnPinnedIcon} from "./remix/pushpin-line.svg" -export { ReactComponent as ColorHexIcon } from "./v1/icon-colorHex.svg"; -export { ReactComponent as ContainerDragIcon } from "./v1/icon-container-drag.svg"; -export { ReactComponent as CopyIcon } from "./v1/icon-copy.svg"; -export { ReactComponent as CreateModuleIcon } from "./v1/icon-create-module.svg"; -export { ReactComponent as PrevIcon } from "./v1/icon-date-prev.svg"; -export { ReactComponent as SuperPrevIcon } from "./v1/icon-date-super-prev.svg"; -export { ReactComponent as DragWhiteIcon } from "./v1/icon-drag-white.svg"; -export { ReactComponent as EmptyDataIcon } from "./v1/icon-empty-data.svg"; -export { ReactComponent as FlokcloseIcon } from "./v1/icon-flokclose.svg"; -export { ReactComponent as FoldedIcon } from "./v1/icon-folded.svg"; -export { ReactComponent as GroupIcon } from "./v1/icon-group.svg"; -export { ReactComponent as HelpIcon } from "./v1/icon-help.svg"; -export { ReactComponent as LockIcon } from "./v1/icon-lock.svg"; -export { ReactComponent as MembersIcon } from "./v1/icon-members.svg"; -export { ReactComponent as MoreActionIcon } from "./v1/icon-more-action.svg"; -export { ReactComponent as MultiselectTagIcon } from "./v1/icon-multiselect-tag.svg"; -export { ReactComponent as MustFillStarIcon } from "./v1/icon-must-fill-star.svg"; -export { ReactComponent as NofileIcon } from "./v1/icon-nofile.svg"; -export { ReactComponent as OmitIcon } from "./v1/icon-omit.svg"; -export { ReactComponent as OpenEyeIcon } from "./v1/icon-openEye.svg"; -export { ReactComponent as PasswordIcon } from "./v1/icon-password.svg"; -export { ReactComponent as RadioCheckedIcon } from "./v1/icon-radio-checked.svg"; -export { ReactComponent as RequiredIcon } from "./v1/icon-required.svg"; -export { ReactComponent as AttributeIcon } from "./v1/icon-right-attribute.svg"; -export { ReactComponent as InsertIcon } from "./v1/icon-right-insert.svg"; -export { ReactComponent as ShowBorderIcon } from "./v1/icon-show-border.svg"; -export { ReactComponent as SpaceIcon } from "./v1/icon-space.svg"; -export { ReactComponent as StarIcon } from "./v1/icon-star.svg"; -export { ReactComponent as SuperUserIcon } from "./v1/icon-super-user.svg"; -export { ReactComponent as SwitchCheckedIcon } from "./v1/icon-switch-checked.svg"; -export { ReactComponent as TextEditIcon } from "./v1/icon-text-edit.svg"; -export { ReactComponent as TriangleIcon } from "./v1/icon-triangle.svg"; -export { ReactComponent as TypographyIcon } from "./v1/icon-typography.svg"; -export { ReactComponent as UnfoldWhiteIcon } from "./v1/icon-unfold-white.svg"; -export { ReactComponent as UnfoldIcon } from "./v1/icon-unfold.svg"; -export { ReactComponent as WarningWhiteIcon } from "./v1/icon-warning-white.svg"; -export { ReactComponent as WarningIcon } from "./v1/icon-warning.svg"; -export { ReactComponent as WidthDragIcon } from "./v1/icon-widthDrag.svg"; -export { ReactComponent as ManyCheckboxIcon } from "./v1/icon-many-checkbox.svg"; -export { ReactComponent as Layout } from "./v1/icon-ShowLayout.svg"; -export { ReactComponent as Left } from "./v1/icon-ShowLeft.svg"; -export { ReactComponent as Middle } from "./v1/icon-ShowMiddle.svg"; -export { ReactComponent as Right } from "./v1/icon-ShowRight.svg"; -export { ReactComponent as DeployIcon } from "./v1/icon-rocket.svg"; -export { ReactComponent as ExportIcon } from "./v1/icon-export.svg"; -export { ReactComponent as BluePlusIcon } from "./v1/icon-blue-add.svg"; -export { ReactComponent as PencilIcon } from "./v1/icon-pencil.svg"; -export { ReactComponent as DragIcon } from "./v1/icon-drag.svg"; -export { ReactComponent as PointIcon } from "./v1/icon-three-point.svg"; -export { ReactComponent as AlignJustify } from "./v1/icon-align-justify.svg"; -export { ReactComponent as AlignRight } from "./v1/icon-align-right.svg"; -export { ReactComponent as AlignCenter } from "./v1/icon-align-center.svg"; -export { ReactComponent as AlignLeft } from "./v1/icon-align-left.svg"; -export { ReactComponent as AlignClose } from "./v1/icon-align-close.svg"; -export { ReactComponent as AlignTop } from "./v1/icon-align-top.svg"; -export { ReactComponent as AlignBottom } from "./v1/icon-align-bottom.svg"; -export { ReactComponent as AddIcon } from "./v1/icon-add.svg"; -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 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"; -export { ReactComponent as IconRadius } from "./v1/icon-style-border-radius.svg"; -export { ReactComponent as IconReset } from "./v1/icon-style-reset.svg"; -export { ReactComponent as PackUpIcon } from "./v1/icon-Pack-up.svg"; -export { ReactComponent as SearchIcon } from "./v1/icon-Search.svg"; -export { ReactComponent as SearchOutlinedIcon } from "./v1/icon-SearchOutlined.svg"; -export { ReactComponent as FilterIcon } from "./v1/icon-filter.svg"; -export { ReactComponent as DownloadIcon } from "./v1/icon-download.svg"; -export { ReactComponent as DownloadBoldIcon } from "./v1/icon-download-bold.svg"; -export { ReactComponent as DownloadedIcon } from "./v1/icon-downloaded.svg"; -export { ReactComponent as SettingIcon } from "./v1/icon-setting.svg"; -export { ReactComponent as RefreshIcon } from "./v1/icon-refresh.svg"; -export { ReactComponent as DeleteIcon } from "./v1/icon-recycle-bin.svg"; -export { ReactComponent as DeleteInputIcon } from "./v1/icon-deleteinput.svg"; -export { ReactComponent as UpgradeIcon } from "./v1/icon-upgrade.svg"; -export { ReactComponent as QuestionIcon } from "./v1/icon-question.svg"; -export { ReactComponent as CloseIcon } from "./v1/icon-close.svg"; -export { ReactComponent as SuccessIcon } from "./v1/icon-success.svg"; -export { ReactComponent as ErrorIcon } from "./v1/icon-err-warning.svg"; -export { ReactComponent as DocIcon } from "./v1/icon-tutorial.svg"; -export { ReactComponent as DocBoldIcon } from "./v1/icon-tutorial-bold.svg"; -export { ReactComponent as LabIcon } from "./v1/icon-laboratory.svg"; -export { ReactComponent as ArrowIcon } from "./v1/icon-arrow.svg"; -export { ReactComponent as ArrowSolidIcon } from "./v1/icon-arrow-solid.svg"; +export const AppSnapshotIcon =createSvgComponent(() => import("./v1/app-snapshot.svg")); +export const HookCompDropIcon =createSvgComponent(() => import("./v1/hook-comp-drop.svg")); +export const HookCompIcon =createSvgComponent(() => import("./v1/hook-comp.svg")); +export const JsGrayIcon =createSvgComponent(() => import("./v1/icon-Js-Gray.svg")); +export const JsColorsIcon =createSvgComponent(() => import("./v1/icon-Js-colors.svg")); +export const AdminIcon =createSvgComponent(() => import("./v1/icon-admin.svg")); +export const AlignVerticalCent =createSvgComponent(() => import("./v1/icon-align-vertical-center.svg")); +export const AppEditIcon =createSvgComponent(() => import("./v1/icon-app-edit.svg")); +export const AuditAppIcon =createSvgComponent(() => import("./v1/icon-audit-app.svg")); +export const AuditDbIcon =createSvgComponent(() => import("./v1/icon-audit-db.svg")); +export const TreeFoldIcon =createSvgComponent(() => import("./v1/icon-audit-fold.svg")); +export const AuditQueryIcon =createSvgComponent(() => import("./v1/icon-audit-query.svg")); +export const AuditUserIcon =createSvgComponent(() => import("./v1/icon-audit-user.svg")); +export const AuditFolderIcon =createSvgComponent(() => import("./v1/icon-audit-folder.svg")); +export const CaptchaIcon =createSvgComponent(() => import("./v1/icon-captcha.svg")); +export const CheckboxIcon =createSvgComponent(() => import("./v1/icon-checkbox.svg")); +export const CheckoutIcon =createSvgComponent(() => import("./v1/icon-checkout.svg")); +export const ClickLinkIcon =createSvgComponent(() => import("./v1/icon-clickLink.svg")); +export const CloseEyeIcon =createSvgComponent(() => import("./v1/icon-closeEye.svg")); +export const CodeEditorCloseIcon =createSvgComponent(() => import("./v1/icon-code-editor-close.svg")); +export const CodeEditorOpenIcon =createSvgComponent(() => import("./v1/icon-code-editor-open.svg")); +export const CodeEditorPinnedIcon =createSvgComponent(() => import("./remix/pushpin-2-fill.svg")); +export const CodeEditorUnPinnedIcon =createSvgComponent(() => import("./remix/pushpin-line.svg")); +export const ColorHexIcon =createSvgComponent(() => import("./v1/icon-colorHex.svg")); +export const ContainerDragIcon =createSvgComponent(() => import("./v1/icon-container-drag.svg")); +export const CopyIcon =createSvgComponent(() => import("./v1/icon-copy.svg")); +export const CreateModuleIcon =createSvgComponent(() => import("./v1/icon-create-module.svg")); +export const PrevIcon =createSvgComponent(() => import("./v1/icon-date-prev.svg")); +export const SuperPrevIcon =createSvgComponent(() => import("./v1/icon-date-super-prev.svg")); +export const DragWhiteIcon =createSvgComponent(() => import("./v1/icon-drag-white.svg")); +export const EmptyDataIcon =createSvgComponent(() => import("./v1/icon-empty-data.svg")); +export const FlokcloseIcon =createSvgComponent(() => import("./v1/icon-flokclose.svg")); +export const FoldedIcon =createSvgComponent(() => import("./v1/icon-folded.svg")); +export const GroupIcon =createSvgComponent(() => import("./v1/icon-group.svg")); +export const HelpIcon =createSvgComponent(() => import("./v1/icon-help.svg")); +export const LockIcon =createSvgComponent(() => import("./v1/icon-lock.svg")); +export const MembersIcon =createSvgComponent(() => import("./v1/icon-members.svg")); +export const MoreActionIcon =createSvgComponent(() => import("./v1/icon-more-action.svg")); +export const MultiselectTagIcon =createSvgComponent(() => import("./v1/icon-multiselect-tag.svg")); +export const MustFillStarIcon =createSvgComponent(() => import("./v1/icon-must-fill-star.svg")); +export const NofileIcon =createSvgComponent(() => import("./v1/icon-nofile.svg")); +export const OmitIcon =createSvgComponent(() => import("./v1/icon-omit.svg")); +export const OpenEyeIcon =createSvgComponent(() => import("./v1/icon-openEye.svg")); +export const PasswordIcon =createSvgComponent(() => import("./v1/icon-password.svg")); +export const RadioCheckedIcon =createSvgComponent(() => import("./v1/icon-radio-checked.svg")); +export const RequiredIcon =createSvgComponent(() => import("./v1/icon-required.svg")); +export const AttributeIcon =createSvgComponent(() => import("./v1/icon-right-attribute.svg")); +export const InsertIcon =createSvgComponent(() => import("./v1/icon-right-insert.svg")); +export const ShowBorderIcon =createSvgComponent(() => import("./v1/icon-show-border.svg")); +export const SpaceIcon =createSvgComponent(() => import("./v1/icon-space.svg")); +export const StarIcon =createSvgComponent(() => import("./v1/icon-star.svg")); +export const SuperUserIcon =createSvgComponent(() => import("./v1/icon-super-user.svg")); +export const SwitchCheckedIcon =createSvgComponent(() => import("./v1/icon-switch-checked.svg")); +export const TextEditIcon =createSvgComponent(() => import("./v1/icon-text-edit.svg")); +export const TriangleIcon =createSvgComponent(() => import("./v1/icon-triangle.svg")); +export const TypographyIcon =createSvgComponent(() => import("./v1/icon-typography.svg")); +export const UnfoldWhiteIcon =createSvgComponent(() => import("./v1/icon-unfold-white.svg")); +export const UnfoldIcon =createSvgComponent(() => import("./v1/icon-unfold.svg")); +export const WarningWhiteIcon =createSvgComponent(() => import("./v1/icon-warning-white.svg")); +export const WarningIcon =createSvgComponent(() => import("./v1/icon-warning.svg")); +export const WidthDragIcon =createSvgComponent(() => import("./v1/icon-widthDrag.svg")); +export const ManyCheckboxIcon =createSvgComponent(() => import("./v1/icon-many-checkbox.svg")); +export const Layout =createSvgComponent(() => import("./v1/icon-ShowLayout.svg")); +export const Left =createSvgComponent(() => import("./v1/icon-ShowLeft.svg")); +export const Middle =createSvgComponent(() => import("./v1/icon-ShowMiddle.svg")); +export const Right =createSvgComponent(() => import("./v1/icon-ShowRight.svg")); +export const DeployIcon =createSvgComponent(() => import("./v1/icon-rocket.svg")); +export const ExportIcon =createSvgComponent(() => import("./v1/icon-export.svg")); +export const BluePlusIcon =createSvgComponent(() => import("./v1/icon-blue-add.svg")); +export const PencilIcon =createSvgComponent(() => import("./v1/icon-pencil.svg")); +export const DragIcon =createSvgComponent(() => import("./v1/icon-drag.svg")); +export const PointIcon =createSvgComponent(() => import("./v1/icon-three-point.svg")); +export const AlignJustify =createSvgComponent(() => import("./v1/icon-align-justify.svg")); +export const AlignRight =createSvgComponent(() => import("./v1/icon-align-right.svg")); +export const AlignCenter =createSvgComponent(() => import("./v1/icon-align-center.svg")); +export const AlignLeft =createSvgComponent(() => import("./v1/icon-align-left.svg")); +export const AlignClose =createSvgComponent(() => import("./v1/icon-align-close.svg")); +export const AlignTop =createSvgComponent(() => import("./v1/icon-align-top.svg")); +export const AlignBottom =createSvgComponent(() => import("./v1/icon-align-bottom.svg")); +export const AddIcon =createSvgComponent(() => import("./v1/icon-add.svg")); +export const ImportAppIcon =createSvgComponent(() => import("./v1/icon-app-import.svg")); +export const ImportIcon =createSvgComponent(() => import("./v1/icon-import.svg")); +export const ImportIconV2 =createSvgComponent(() => import("./v1/icon-import-v2.svg")); +export const DatasourceIcon =createSvgComponent(() => import("./v1/icon-datasource.svg")); +export const QueryLibraryIcon =createSvgComponent(() => import("./v1/icon-query-library.svg")); +export const TransformerIcon =createSvgComponent(() => import("./v1/icon-transformer.svg")); +export const TempStateIcon =createSvgComponent(() => import("./v1/icon-temp-state.svg")); +export const IconDep =createSvgComponent(() => import("./v1/icon-style-dep.svg")); +export const IconRadius =createSvgComponent(() => import("./v1/icon-style-border-radius.svg")); +export const IconReset =createSvgComponent(() => import("./v1/icon-style-reset.svg")); +export const PackUpIcon =createSvgComponent(() => import("./v1/icon-Pack-up.svg")); +export const SearchIcon =createSvgComponent(() => import("./v1/icon-Search.svg")); +export const SearchOutlinedIcon =createSvgComponent(() => import("./v1/icon-SearchOutlined.svg")); +export const FilterIcon =createSvgComponent(() => import("./v1/icon-filter.svg")); +export const DownloadIcon =createSvgComponent(() => import("./v1/icon-download.svg")); +export const DownloadBoldIcon =createSvgComponent(() => import("./v1/icon-download-bold.svg")); +export const DownloadedIcon =createSvgComponent(() => import("./v1/icon-downloaded.svg")); +export const SettingIcon =createSvgComponent(() => import("./v1/icon-setting.svg")); +export const RefreshIcon =createSvgComponent(() => import("./v1/icon-refresh.svg")); +export const DeleteIcon =createSvgComponent(() => import("./v1/icon-recycle-bin.svg")); +export const DeleteInputIcon =createSvgComponent(() => import("./v1/icon-deleteinput.svg")); +export const UpgradeIcon =createSvgComponent(() => import("./v1/icon-upgrade.svg")); +export const QuestionIcon =createSvgComponent(() => import("./v1/icon-question.svg")); +export const CloseIcon =createSvgComponent(() => import("./v1/icon-close.svg")); +export const SuccessIcon =createSvgComponent(() => import("./v1/icon-success.svg")); +export const ErrorIcon =createSvgComponent(() => import("./v1/icon-err-warning.svg")); +export const DocIcon =createSvgComponent(() => import("./v1/icon-tutorial.svg")); +export const DocBoldIcon =createSvgComponent(() => import("./v1/icon-tutorial-bold.svg")); +export const LabIcon =createSvgComponent(() => import("./v1/icon-laboratory.svg")); +export const ArrowIcon =createSvgComponent(() => import("./v1/icon-arrow.svg")); +export const ArrowSolidIcon =createSvgComponent(() => import("./v1/icon-arrow-solid.svg")); +export const PlusIcon =createSvgComponent(() => import("./v1/icon-plus.svg")); +export const ApplicationDocIcon =createSvgComponent(() => import("./v2/app-m.svg")); +export const ModuleMenuIcon =createSvgComponent(() => import("./v2/module-m.svg")); +export const ModuleIcon =createSvgComponent(() => import("./v2/module-m.svg")); +export const ModuleDocIcon =createSvgComponent(() => import("./v2/module-m.svg")); +export const NavDocIcon =createSvgComponent(() => import("./v2/entry-page-m.svg")); +export const FolderIcon =createSvgComponent(() => import("./remix/folder-6-line.svg")); +export const AllTypesIcon =createSvgComponent(() => import("./v1/icon-application-all.svg")); +export const InviteUserIcon =createSvgComponent(() => import("./v1/icon-application-invite-user.svg")); +export const HomeEmptyIcon =createSvgComponent(() => import("./v1/icon-application-empty.svg")); +export const HomeListIcon =createSvgComponent(() => import("./v1/icon-application-list.svg")); +export const HomeCardIcon =createSvgComponent(() => import("./v1/icon-application-card.svg")); +export const APIDocsIcon =createSvgComponent(() => import("./remix/instance-line.svg")); +export const SubscriptionIcon =createSvgComponent(() => import("./remix/award-fill.svg")); +export const SupportIcon =createSvgComponent(() => import("./remix/user-heart-line.svg")); +export const MysqlIcon =createSvgComponent(() => import("./v1/icon-query-MySQL.svg")); +export const MongoIcon =createSvgComponent(() => import("./v1/icon-query-MongoDB.svg")); +export const PostgresIcon =createSvgComponent(() => import("./v1/icon-query-postgres.svg")); +export const RedisIcon =createSvgComponent(() => import("./v1/icon-query-Redis.svg")); +export const MSSQLIcon =createSvgComponent(() => import("./v1/icon-query-mssql.svg")); +export const SMTPIcon =createSvgComponent(() => import("./v1/icon-query-SMTP.svg")); +export const OracleIcon =createSvgComponent(() => import("./v1/icon-query-OracleDB.svg")); +export const ClickHouseIcon =createSvgComponent(() => import("./v1/icon-query-ClickHouse.svg")); +export const GoogleSheetsIcon =createSvgComponent(() => import("./v1/icon-query-GoogleSheets.svg")); +export const GraphqlIcon =createSvgComponent(() => import("./v1/icon-query-Graphql.svg")); +export const SnowflakeIcon =createSvgComponent(() => import("./v1/icon-query-snowflake.svg")); +export const MariaDBIcon =createSvgComponent(() => import("./v1/icon-query-MariaDB.svg")); +export const DataResponderIcon =createSvgComponent(() => import("./v1/icon-query-data-responder.svg")); +export const RestApiIcon =createSvgComponent(() => import("./v1/icon-query-API.svg")); +export const DeleteApiIcon =createSvgComponent(() => import("./v1/icon-query-delete.svg")); +export const GetApiIcon =createSvgComponent(() => import("./v1/icon-query-get.svg")); +export const PatchApiIcon =createSvgComponent(() => import("./v1/icon-query-patch.svg")); +export const PostApiIcon =createSvgComponent(() => import("./v1/icon-query-post.svg")); +export const PutApiIcon =createSvgComponent(() => import("./v1/icon-query-put.svg")); +export const OptionsApiIcon =createSvgComponent(() => import("./v1/icon-query-options.svg")); +export const HeadApiIcon =createSvgComponent(() => import("./v1/icon-query-head.svg")); +export const TraceApiIcon =createSvgComponent(() => import("./v1/icon-query-trace.svg")); +export const JSIcon =createSvgComponent(() => import("./v1/icon-query-JS.svg")); +export const LowcoderQueryIcon =createSvgComponent(() => import("./v1/icon-query-lowcoder.svg")); +export const EsIcon =createSvgComponent(() => import("./v1/icon-query-ElasticSearch.svg")); +export const ResetIcon =createSvgComponent(() => import("./v1/icon-style-reset.svg")); +export const EditIcon =createSvgComponent(() => import("./v1/icon-edit.svg")); +export const EditableIcon =createSvgComponent(() => import("./v1/icon-editable.svg")); +export const LeftStateIcon =createSvgComponent(() => import("./remix/node-tree.svg")); +export const StarSmileIcon =createSvgComponent(() => import("./remix/star-smile-line.svg")); +export const Timer2Icon =createSvgComponent(() => import("./remix/timer-2-line.svg")); +export const TimerFlashIcon =createSvgComponent(() => import("./remix/timer-flash-line.svg")); +export const RefreshLineIcon =createSvgComponent(() => import("./remix/refresh-line.svg")); +export const LeftSettingIcon =createSvgComponent(() => import("./remix/tools-fill.svg")); +export const LeftLayersIcon =createSvgComponent(() => import("./remix/stack-line.svg")); +export const LeftHelpIcon =createSvgComponent(() => import("./v1/icon-left-help.svg")); +export const LeftPreloadIcon =createSvgComponent(() => import("./v1/icon-left-preload.svg")); +export const HomeSettingsIcon =createSvgComponent(() => import("./v1/icon-home-settings.svg")); +export const HomeSettingsActiveIcon =createSvgComponent(() => import("./v1/icon-home-settings-active.svg")); +export const HelpGithubIcon =createSvgComponent(() => import("./v1/icon-help-github.svg")); +export const HelpDiscordIcon =createSvgComponent(() => import("./v1/icon-help-discord.svg")); +export const LeftOpen =createSvgComponent(() => import("./v1/icon-left-comp-open.svg")); +export const LeftColorPaletteIcon =createSvgComponent(() => import("./remix/palette-line.svg")); +export const LeftJSSettingIcon =createSvgComponent(() => import("./remix/javascript-line.svg")); +export const LeftClose =createSvgComponent(() => import("./v1/icon-left-comp-close.svg")); +export const MaterialUploadIcon =createSvgComponent(() => import("./v1/icon-material-upload.svg")); +export const UndoIcon =createSvgComponent(() => import("./v1/icon-undo.svg")); +export const ManualIcon =createSvgComponent(() => import("./v1/icon-manual.svg")); +export const WarnIcon =createSvgComponent(() => import("./v1/icon-warn.svg")); +export const SyncManualIcon =createSvgComponent(() => import("./v1/icon-sync-manual.svg")); +export const DangerIcon =createSvgComponent(() => import("./v1/icon-danger.svg")); +export const TableMinusIcon =createSvgComponent(() => import("./v1/icon-table-minus.svg")); +export const TablePlusIcon =createSvgComponent(() => import("./v1/icon-table-plus.svg")); +export const MobileAppIcon =createSvgComponent(() => import("./v1/icon-mobile-app.svg")); +export const MobileNavIcon =createSvgComponent(() => import("./v1/icon-navigation-mobile.svg")); +export const PcNavIcon =createSvgComponent(() => import("./v1/icon-navigation-pc.svg")); +export const UnLockIcon =createSvgComponent(() => import("./v1/icon-unlock.svg")); +export const CalendarDeleteIcon =createSvgComponent(() => import("./v1/icon-calendar-delete.svg")); +export const TableCheckedIcon =createSvgComponent(() => import("./v1/icon-table-checked.svg")); +export const TableUnCheckedIcon =createSvgComponent(() => import("./v1/icon-table-boolean-false.svg")); +export const FileFolderIcon =createSvgComponent(() => import("./v1/icon-editor-folder.svg")); +export const ExpandIcon =createSvgComponent(() => import("./v1/icon-expand.svg")); +export const CompressIcon =createSvgComponent(() => import("./v1/icon-compress.svg")); +export const TableCellsIcon =createSvgComponent(() => import("./v1/icon-table-cells.svg")); +export const TableColumnVisibilityIcon =createSvgComponent(() => import("./remix/layout-column-line.svg")); +export const WidthIcon =createSvgComponent(() => import("./v1/icon-width.svg")); +export const TextSizeIcon =createSvgComponent(() => import("./remix/font-size.svg")); +export const TextTransformationIcon =createSvgComponent(() => import("./remix/font-size-2.svg")); +export const FontFamilyIcon =createSvgComponent(() => import("./remix/font-sans-serif.svg")); +export const TextWeightIcon =createSvgComponent(() => import("./remix/bold.svg")); +export const TextDecorationIcon =createSvgComponent(() => import("./remix/underline.svg")); +export const TextStyleIcon =createSvgComponent(() => import("./remix/italic.svg")); +export const BorderWidthIcon =createSvgComponent(() => import("./remix/space.svg")); +export const BorderStyleIcon =createSvgComponent(() => import("./remix/separator.svg")); +export const RotationIcon =createSvgComponent(() => import("./remix/clockwise-line.svg")); +export const BorderRadiusIcon =createSvgComponent(() => import("./remix/rounded-corner.svg")); +export const ShadowIcon =createSvgComponent(() => import("./remix/shadow-line.svg")); +export const OpacityIcon =createSvgComponent(() => import("./remix/contrast-drop-2-line.svg")); +export const AnimationIcon =createSvgComponent(() => import("./remix/loader-line.svg")); +export const LineHeightIcon =createSvgComponent(() => import("./remix/line-height.svg")); +export const LeftInfoLine =createSvgComponent(() => import("./remix/information-line.svg")); +export const LeftInfoFill =createSvgComponent(() => import("./remix/information-fill.svg")); +export const LeftShow =createSvgComponent(() => import("./remix/eye-off-line.svg")); +export const LeftHide =createSvgComponent(() => import("./remix/eye-line.svg")); +export const LeftLock =createSvgComponent(() => import("./remix/lock-line.svg")); +export const LeftUnlock =createSvgComponent(() => import("./remix/lock-unlock-line.svg")); +export const UserGroupIcon =createSvgComponent(() => import("./remix/group-line.svg")); +export const UserIcon =createSvgComponent(() => import("./remix/user-line.svg")); +export const UserAddIcon =createSvgComponent(() => import("./remix/user-add-line.svg")); +export const UserDeleteIcon =createSvgComponent(() => import("./remix/user-unfollow-line.svg")); +export const UserShieldIcon =createSvgComponent(() => import("./remix/shield-user-line.svg")); +export const ThemeIcon =createSvgComponent(() => import("./remix/palette-line.svg")); +export const AppsIcon =createSvgComponent(() => import("./remix/apps-2-line.svg")); +export const WorkspacesIcon =createSvgComponent(() => import("./remix/hotel-line.svg")); +export const HomeIcon =createSvgComponent(() => import("./remix/home-3-line.svg")); +export const NewsIcon =createSvgComponent(() => import("./remix/megaphone-line.svg")); +export const HomeModuleIcon =createSvgComponent(() => import("./remix/focus-mode.svg")); +export const HomeQueryLibraryIcon =createSvgComponent(() => import("./remix/braces-line.svg")); +export const HomeDataSourceIcon =createSvgComponent(() => import("./remix/database-2-line.svg")); +export const RecyclerIcon =createSvgComponent(() => import("./remix/delete-bin-line.svg")); +export const MarketplaceIcon =createSvgComponent(() => import("./v1/icon-application-marketplace.svg")); +export const FavoritesIcon =createSvgComponent(() => import("./v1/icon-application-favorites.svg")); +export const HomeSettingIcon =createSvgComponent(() => import("./remix/settings-4-line.svg")); +export const EnterpriseIcon =createSvgComponent(() => import("./remix/earth-line.svg")); +export const LeftCommon =createSvgComponent(() => import("./v1/icon-left-comp-common.svg")); +export const AvatarCompIconSmall =createSvgComponent(() => import("./v2/avatar-s.svg")); +export const AvatarGroupCompIconSmall =createSvgComponent(() => import("./v2/avatargroup-s.svg")); +export const AudioCompIconSmall =createSvgComponent(() => import("./v2/audio-player-s.svg")); +export const AutoCompleteCompIconSmall =createSvgComponent(() => import("./v2/auto-complete-input-s.svg")); +export const ButtonCompIconSmall =createSvgComponent(() => import("./v2/button-s.svg")); +export const IconButtonCompIconSmall =createSvgComponent(() => import("./v2/icon-button-s.svg")); +export const CardCompIconSmall =createSvgComponent(() => import("./v2/card-layout-s.svg")); +export const CalendarCompIconSmall =createSvgComponent(() => import("./v2/calendar-s.svg")); +export const CascaderCompIconSmall =createSvgComponent(() => import("./v2/cascader-s.svg")); +export const CarouselCompIconSmall =createSvgComponent(() => import("./v2/image-carousel-s.svg")); +export const ChartCompIconSmall =createSvgComponent(() => import("./v2/pie-chart-s.svg")); +export const CheckboxCompIconSmall =createSvgComponent(() => import("./v2/checkbox-s.svg")); +export const ColorPickerCompIconSmall =createSvgComponent(() => import("./v2/colorpicker-s.svg")); +export const CollapsibleContainerCompIconSmall =createSvgComponent(() => import("./v2/collapsible-container-s.svg")); +export const ColumnLayoutCompIconSmall =createSvgComponent(() => import("./v2/column-layout-s.svg")); +export const CommentCompIconSmall =createSvgComponent(() => import("./v2/comment-s.svg")); +export const ContainerCompIconSmall =createSvgComponent(() => import("./v2/container-s.svg")); +export const CustomCompIconSmall =createSvgComponent(() => import("./v2/custom-code-s.svg")); +export const DateCompIconSmall =createSvgComponent(() => import("./v2/date-select-s.svg")); +export const DateRangeCompIconSmall =createSvgComponent(() => import("./v2/date-range-select-s.svg")); +export const DividerCompIconSmall =createSvgComponent(() => import("./v2/divider-s.svg")); +export const DrawerCompIconSmall =createSvgComponent(() => import("./v2/drawer-s.svg")); +export const DropdownCompIconSmall =createSvgComponent(() => import("./v2/dropdown-s.svg")); +export const UploadCompIconSmall =createSvgComponent(() => import("./v2/file-upload-s.svg")); +export const FileViewerCompIconSmall =createSvgComponent(() => import("./v2/file-viewer-s.svg")); +export const FloatingButtonCompIconSmall =createSvgComponent(() => import("./v2/floating-button-s.svg")); +export const FloatingTextCompIconSmall =createSvgComponent(() => import("./v2/floating-text-layout-s.svg")); +export const FormCompIconSmall =createSvgComponent(() => import("./v2/form-s.svg")); +export const GridCompIconSmall =createSvgComponent(() => import("./v2/grid-view-s.svg")); +export const IconCompIconSmall =createSvgComponent(() => import("./v2/icon-s.svg")); +export const IFrameCompIconSmall =createSvgComponent(() => import("./v2/iframe-s.svg")); +export const ImageEditorCompIconSmall =createSvgComponent(() => import("./v2/image-editor-s.svg")); +export const ImageCompIconSmall =createSvgComponent(() => import("./v2/image-s.svg")); +export const InputCompIconSmall =createSvgComponent(() => import("./v2/input-s.svg")); +export const JsonEditorCompIconSmall =createSvgComponent(() => import("./v2/json-editor-s.svg")); +export const JsonExplorerCompIconSmall =createSvgComponent(() => import("./v2/json-viewer-s.svg")); +export const JsonFormCompIconSmall =createSvgComponent(() => import("./v2/json-schema-form-s.svg")); +export const PageLayoutCompIconSmall =createSvgComponent(() => import("./v2/page-layout-s.svg")); +export const LinkCompIconSmall =createSvgComponent(() => import("./v2/link-s.svg")); +export const ListViewCompIconSmall =createSvgComponent(() => import("./v2/list-view-s.svg")); +export const LottieAnimationCompIconSmall =createSvgComponent(() => import("./v2/lottie-animation-s.svg")); +export const MentionCompIconSmall =createSvgComponent(() => import("./v2/mention-s.svg")); +export const MermaidCompIconSmall =createSvgComponent(() => import("./v2/mermaid-chart-s.svg")); +export const ModalCompIconSmall =createSvgComponent(() => import("./v2/modal-s.svg")); +export const ModuleIconSmall =createSvgComponent(() => import("./v2/module-s.svg")); +export const MultiSelectCompIconSmall =createSvgComponent(() => import("./v2/multiselect-s.svg")); +export const NavComIconSmall =createSvgComponent(() => import("./v2/navigation-s.svg")); +export const NumberInputCompIconSmall =createSvgComponent(() => import("./v2/number-input-s.svg")); +export const PasswordCompIconSmall =createSvgComponent(() => import("./v2/password-s.svg")); +export const ProgressCompIconSmall =createSvgComponent(() => import("./v2/progress-s.svg")); +export const ProcessCircleCompIconSmall =createSvgComponent(() => import("./v2/progress-circle-s.svg")); +export const QRCodeCompIconSmall =createSvgComponent(() => import("./v2/qr-code-display-s.svg")); +export const RadioCompIconSmall =createSvgComponent(() => import("./v2/radio-button-s.svg")); +export const RangeSliderCompIconSmall =createSvgComponent(() => import("./v2/range-slider-s.svg")); +export const RatingCompIconSmall =createSvgComponent(() => import("./v2/rating-s.svg")); +export const ResponsiveLayoutCompIconSmall =createSvgComponent(() => import("./v2/resposive-layout-s.svg")); +export const RichTextEditorCompIconSmall =createSvgComponent(() => import("./v2/rich-text-editor-s.svg")); +export const ScannerCompIconSmall =createSvgComponent(() => import("./v2/scanner-s.svg")); +export const ShapesCompIconSmall =createSvgComponent(() => import("./v2/shapes-s.svg")); +export const SegmentedCompIconSmall =createSvgComponent(() => import("./v2/segmented-control-s.svg")); +export const SelectCompIconSmall =createSvgComponent(() => import("./v2/select-s.svg")); +export const SliderCompIconSmall =createSvgComponent(() => import("./v2/slider-s.svg")); +export const SwitchCompIconSmall =createSvgComponent(() => import("./v2/switch-s.svg")); +export const TabbedContainerCompIconSmall =createSvgComponent(() => import("./v2/tabbed-container-s.svg")); +export const TableCompIconSmall =createSvgComponent(() => import("./v2/table-s.svg")); +export const TextAreaCompIconSmall =createSvgComponent(() => import("./v2/text-area-input-s.svg")); +export const TextCompIconSmall =createSvgComponent(() => import("./v2/text-display-s.svg")); +export const TimeCompIconSmall =createSvgComponent(() => import("./v2/time-select-s.svg")); +export const TimeLineCompIconSmall =createSvgComponent(() => import("./v2/timeline-s.svg")); +export const TimeRangeCompIconSmall =createSvgComponent(() => import("./v2/time-range-select-s.svg")); +export const ToggleButtonCompIconSmall =createSvgComponent(() => import("./v2/toggle-button-s.svg")); +export const TourCompIconSmall =createSvgComponent(() => import("./v2/modal-s.svg")); +export const TransferCompIconSmall =createSvgComponent(() => import("./v2/transfer-list-s.svg")); +export const TreeDisplayCompIconSmall =createSvgComponent(() => import("./v2/tree-display-s.svg")); +export const TreeSelectCompIconSmall =createSvgComponent(() => import("./v2/tree-select-s.svg")); +export const VideoCompIconSmall =createSvgComponent(() => import("./v2/video-player-s.svg")); +export const VideoMeetingRoomCompIconSmall =createSvgComponent(() => import("./v2/meeting-room-s.svg")); +export const VideoCameraStreamCompIconSmall =createSvgComponent(() => import("./v2/camera-stream-s.svg")); +export const VideoScreenshareCompIconSmall =createSvgComponent(() => import("./v2/screen-share-stream-s.svg")); +export const SignatureCompIconSmall =createSvgComponent(() => import("./v2/signature-s.svg")); +export const StepCompIconSmall =createSvgComponent(() => import("./v2/steps-s.svg")); +export const KanbanCompIconSmall =createSvgComponent(() => import("./v2/kanban-s.svg")); +export const CandlestickChartCompIconSmall =createSvgComponent(() => import("./v2/candlestick-chart-s.svg")); +export const FunnelChartCompIconSmall =createSvgComponent(() => import("./v2/funnel-chart-s.svg")); +export const GaugeChartCompIconSmall =createSvgComponent(() => import("./v2/gauge-chart-s.svg")); +export const GraphChartCompIconSmall =createSvgComponent(() => import("./v2/graph-chart-s.svg")); +export const HeatmapChartCompIconSmall =createSvgComponent(() => import("./v2/heatmap-chart-s.svg")); +export const RadarChartCompIconSmall =createSvgComponent(() => import("./v2/radar-chart-s.svg")); +export const SankeyChartCompIconSmall =createSvgComponent(() => import("./v2/sankey-chart-s.svg")); +export const SunburstChartCompIconSmall =createSvgComponent(() => import("./v2/sunburst-chart-s.svg")); +export const ThemeriverChartCompIconSmall =createSvgComponent(() => import("./v2/themeriver-chart-s.svg")); +export const TreeChartCompIconSmall =createSvgComponent(() => import("./v2/tree-chart-s.svg")); +export const TreemapChartCompIconSmall =createSvgComponent(() => import("./v2/treemap-chart-s.svg")); +export const BPMNEditorCompIconSmall =createSvgComponent(() => import("./v2/bpmn-editor-s.svg")); +export const GeoMapChartsCompIconSmall =createSvgComponent(() => import("./v2/geomap-charts-s.svg")); +export const GeoMapLayersCompIconSmall =createSvgComponent(() => import("./v2/geomap-layers-s.svg")); +export const HillchartCompIconSmall =createSvgComponent(() => import("./v2/hillchart-s.svg")); +export const PivotTableCompIconSmall =createSvgComponent(() => import("./v2/pivot-table-s.svg")); +export const TurnstileCaptchaCompIconSmall =createSvgComponent(() => import("./v2/turnstile-captcha-s.svg")); +export const GanttCompIconSmall =createSvgComponent(() => import("./v2/gantt-chart-s.svg")); +export const AudioCompIcon =createSvgComponent(() => import("./v2/audio-player-m.svg")); +export const AutoCompleteCompIcon =createSvgComponent(() => import("./v2/auto-complete-input-m.svg")); +export const AvatarCompIcon =createSvgComponent(() => import("./v2/avatar-m.svg")); +export const ButtonCompIcon =createSvgComponent(() => import("./v2/button-m.svg")); +export const AvatarGroupCompIcon =createSvgComponent(() => import("./v2/avatargroup-m.svg")); +export const IconButtonCompIcon =createSvgComponent(() => import("./v2/icon-button-m.svg")); +export const CalendarCompIcon =createSvgComponent(() => import("./v2/calendar-m.svg")); +export const CardCompIcon =createSvgComponent(() => import("./v2/card-layout-m.svg")); +export const CarouselCompIcon =createSvgComponent(() => import("./v2/image-carousel-m.svg")); +export const CascaderCompIcon =createSvgComponent(() => import("./v2/cascader-m.svg")); +export const ChartCompIcon =createSvgComponent(() => import("./v2/pie-chart-m.svg")); +export const CheckboxCompIcon =createSvgComponent(() => import("./v2/checkbox-m.svg")); +export const CollapsibleContainerCompIcon =createSvgComponent(() => import("./v2/collapsible-container-m.svg")); +export const ColumnLayoutCompIcon =createSvgComponent(() => import("./v2/column-layout-m.svg")); +export const CommentCompIcon =createSvgComponent(() => import("./v2/comment-m.svg")); +export const ColorPickerCompIcon =createSvgComponent(() => import("./v2/colorpicker-m.svg")); +export const ContainerCompIcon =createSvgComponent(() => import("./v2/container-m.svg")); +export const CustomCompIcon =createSvgComponent(() => import("./v2/custom-code-m.svg")); +export const DateCompIcon =createSvgComponent(() => import("./v2/date-select-m.svg")); +export const DateRangeCompIcon =createSvgComponent(() => import("./v2/date-range-select-m.svg")); +export const DividerCompIcon =createSvgComponent(() => import("./v2/divider-m.svg")); +export const DrawerCompIcon =createSvgComponent(() => import("./v2/drawer-m.svg")); +export const DropdownCompIcon =createSvgComponent(() => import("./v2/dropdown-m.svg")); +export const FileViewerCompIcon =createSvgComponent(() => import("./v2/file-viewer-m.svg")); +export const FloatingButtonCompIcon =createSvgComponent(() => import("./v2/floating-button-m.svg")); +export const FloatingTextCompIcon =createSvgComponent(() => import("./v2/floating-text-layout-m.svg")); +export const FormCompIcon =createSvgComponent(() => import("./v2/form-m.svg")); +export const GridCompIcon =createSvgComponent(() => import("./v2/grid-view-m.svg")); +export const IconCompIcon =createSvgComponent(() => import("./v2/icon-m.svg")); +export const IFrameCompIcon =createSvgComponent(() => import("./v2/iframe-m.svg")); +export const ImageEditorCompIcon =createSvgComponent(() => import("./v2/image-editor-m.svg")); +export const ImageCompIcon =createSvgComponent(() => import("./v2/image-m.svg")); +export const InputCompIcon =createSvgComponent(() => import("./v2/input-m.svg")); +export const JsonEditorCompIcon =createSvgComponent(() => import("./v2/json-editor-m.svg")); +export const JsonExplorerCompIcon =createSvgComponent(() => import("./v2/json-viewer-m.svg")); +export const JsonFormCompIcon =createSvgComponent(() => import("./v2/json-schema-form-m.svg")); +export const PageLayoutCompIcon =createSvgComponent(() => import("./v2/page-layout-m.svg")); +export const LinkCompIcon =createSvgComponent(() => import("./v2/link-m.svg")); +export const ListViewCompIcon =createSvgComponent(() => import("./v2/list-view-m.svg")); +export const LottieAnimationCompIcon =createSvgComponent(() => import("./v2/lottie-animation-m.svg")); +export const MentionCompIcon =createSvgComponent(() => import("./v2/mention-m.svg")); +export const MermaidCompIcon =createSvgComponent(() => import("./v2/mermaid-chart-m.svg")); +export const ModalCompIcon =createSvgComponent(() => import("./v2/modal-m.svg")); +export const MultiSelectCompIcon =createSvgComponent(() => import("./v2/multiselect-m.svg")); +export const NavComIcon =createSvgComponent(() => import("./v2/navigation-m.svg")); +export const NumberInputCompIcon =createSvgComponent(() => import("./v2/number-input-m.svg")); +export const PasswordCompIcon =createSvgComponent(() => import("./v2/password-m.svg")); +export const ProcessCircleCompIcon =createSvgComponent(() => import("./v2/progress-circle-m.svg")); +export const ProgressCompIcon =createSvgComponent(() => import("./v2/progress-m.svg")); +export const QRCodeCompIcon =createSvgComponent(() => import("./v2/qr-code-display-m.svg")); +export const RadioCompIcon =createSvgComponent(() => import("./v2/radio-button-m.svg")); +export const RangeSliderCompIcon =createSvgComponent(() => import("./v2/range-slider-m.svg")); +export const RatingCompIcon =createSvgComponent(() => import("./v2/rating-m.svg")); +export const ResponsiveLayoutCompIcon =createSvgComponent(() => import("./v2/resposive-layout-m.svg")); +export const RichTextEditorCompIcon =createSvgComponent(() => import("./v2/rich-text-editor-m.svg")); +export const ScannerCompIcon =createSvgComponent(() => import("./v2/scanner-m.svg")); +export const ShapesCompIcon =createSvgComponent(() => import("./v2/shapes-m.svg")); +export const SegmentedCompIcon =createSvgComponent(() => import("./v2/segmented-control-m.svg")); +export const SelectCompIcon =createSvgComponent(() => import("./v2/select-m.svg")); +export const SliderCompIcon =createSvgComponent(() => import("./v2/slider-m.svg")); +export const SwitchCompIcon =createSvgComponent(() => import("./v2/switch-m.svg")); +export const TabbedContainerCompIcon =createSvgComponent(() => import("./v2/tabbed-container-m.svg")); +// export const =createSvgComponent(() =>); +export const TableCompIcon =createSvgComponent(() => import("./v2/mighty-table-m.svg")); +export const TextAreaCompIcon =createSvgComponent(() => import("./v2/text-area-input-m.svg")); +export const TextCompIcon =createSvgComponent(() => import("./v2/text-display-m.svg")); +export const TimeCompIcon =createSvgComponent(() => import("./v2/time-select-m.svg")); +export const TimerCompIcon =createSvgComponent(() => import("./v2/timer-m.svg")); +export const TimeLineCompIcon =createSvgComponent(() => import("./v2/timeline-m.svg")); +export const TimeRangeCompIcon =createSvgComponent(() => import("./v2/time-range-select-m.svg")); +export const ToggleButtonCompIcon =createSvgComponent(() => import("./v2/toggle-button-m.svg")); +export const TourCompIcon =createSvgComponent(() => import("./v2/modal-m.svg")); +export const TransferCompIcon =createSvgComponent(() => import("./v2/transfer-list-m.svg")); +export const TreeDisplayCompIcon =createSvgComponent(() => import("./v2/tree-display-m.svg")); +export const TreeSelectCompIcon =createSvgComponent(() => import("./v2/tree-select-m.svg")); +export const UploadCompIcon =createSvgComponent(() => import("./v2/file-upload-m.svg")); +export const VideoCompIcon =createSvgComponent(() => import("./v2/video-player-m.svg")); +export const VideoMeetingRoomCompIcon =createSvgComponent(() => import("./v2/meeting-room-m.svg")); +export const VideoCameraStreamCompIcon =createSvgComponent(() => import("./v2/camera-stream-m.svg")); +export const VideoScreenshareCompIcon =createSvgComponent(() => import("./v2/screen-share-stream-m.svg")); +export const StepCompIcon =createSvgComponent(() => import("./v2/steps-m.svg")); +export const SignatureCompIcon =createSvgComponent(() => import("./v2/signature-m.svg")); +export const GanttCompIcon =createSvgComponent(() => import("./v2/gantt-chart-m.svg")); +export const KanbanCompIcon =createSvgComponent(() => import("./v2/kanban-m.svg")); +export const CandlestickChartCompIcon =createSvgComponent(() => import("./v2/candlestick-chart-m.svg")); +export const FunnelChartCompIcon =createSvgComponent(() => import("./v2/funnel-chart-m.svg")); +export const GaugeChartCompIcon =createSvgComponent(() => import("./v2/gauge-chart-m.svg")); +export const GraphChartCompIcon =createSvgComponent(() => import("./v2/graph-chart-m.svg")); +export const HeatmapChartCompIcon =createSvgComponent(() => import("./v2/heatmap-chart-m.svg")); +export const RadarChartCompIcon =createSvgComponent(() => import("./v2/radar-chart-m.svg")); +export const SankeyChartCompIcon =createSvgComponent(() => import("./v2/sankey-chart-m.svg")); +export const SunburstChartCompIcon =createSvgComponent(() => import("./v2/sunburst-chart-m.svg")); +export const ThemeriverChartCompIcon =createSvgComponent(() => import("./v2/themeriver-chart-m.svg")); +export const TreeChartCompIcon =createSvgComponent(() => import("./v2/tree-chart-m.svg")); +export const TreemapChartCompIcon =createSvgComponent(() => import("./v2/treemap-chart-m.svg")); +export const BPMNEditorCompIcon =createSvgComponent(() => import("./v2/bpmn-editor-m.svg")); +export const GeoMapChartsCompIcon =createSvgComponent(() => import("./v2/geomap-charts-m.svg")); +export const GeoMapLayersCompIcon =createSvgComponent(() => import("./v2/geomap-layers-m.svg")); +export const HillchartCompIcon =createSvgComponent(() => import("./v2/hillchart-m.svg")); +export const TurnstileCaptchaCompIcon =createSvgComponent(() => import("./v2/turnstile-captcha-m.svg")); +export const PivotTableCompIcon =createSvgComponent(() => import("./v2/pivot-table-m.svg")); -// Home Section -export { ReactComponent as PlusIcon } from "./v1/icon-plus.svg"; -export { ReactComponent as ApplicationDocIcon } from "./v2/app-m.svg"; -export { ReactComponent as ModuleMenuIcon } from "./v2/module-m.svg"; -export { ReactComponent as ModuleIcon } from "./v2/module-m.svg"; -export { ReactComponent as ModuleDocIcon } from "./v2/module-m.svg"; -export { ReactComponent as NavDocIcon } from "./v2/entry-page-m.svg"; -export { ReactComponent as FolderIcon } from "./remix/folder-6-line.svg"; -export { ReactComponent as AllTypesIcon } from "./v1/icon-application-all.svg"; -export { ReactComponent as InviteUserIcon } from "./v1/icon-application-invite-user.svg"; -export { ReactComponent as HomeEmptyIcon } from "./v1/icon-application-empty.svg"; -export { ReactComponent as HomeListIcon } from "./v1/icon-application-list.svg"; -export { ReactComponent as HomeCardIcon } from "./v1/icon-application-card.svg"; -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"; - -// Data Sources -export { ReactComponent as MysqlIcon } from "./v1/icon-query-MySQL.svg"; -export { ReactComponent as MongoIcon } from "./v1/icon-query-MongoDB.svg"; -export { ReactComponent as PostgresIcon } from "./v1/icon-query-postgres.svg"; -export { ReactComponent as RedisIcon } from "./v1/icon-query-Redis.svg"; -export { ReactComponent as MSSQLIcon } from "./v1/icon-query-mssql.svg"; -export { ReactComponent as SMTPIcon } from "./v1/icon-query-SMTP.svg"; -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 SnowflakeIcon } from "./v1/icon-query-snowflake.svg"; -export { ReactComponent as MariaDBIcon } from "./v1/icon-query-MariaDB.svg"; - -// Data Queries -export { ReactComponent as DataResponderIcon } from "./v1/icon-query-data-responder.svg"; -export { ReactComponent as RestApiIcon } from "./v1/icon-query-API.svg"; -export { ReactComponent as DeleteApiIcon } from "./v1/icon-query-delete.svg"; -export { ReactComponent as GetApiIcon } from "./v1/icon-query-get.svg"; -export { ReactComponent as PatchApiIcon } from "./v1/icon-query-patch.svg"; -export { ReactComponent as PostApiIcon } from "./v1/icon-query-post.svg"; -export { ReactComponent as PutApiIcon } from "./v1/icon-query-put.svg"; -export { ReactComponent as OptionsApiIcon } from "./v1/icon-query-options.svg"; -export { ReactComponent as HeadApiIcon } from "./v1/icon-query-head.svg"; -export { ReactComponent as TraceApiIcon } from "./v1/icon-query-trace.svg"; -export { ReactComponent as JSIcon } from "./v1/icon-query-JS.svg"; -export { ReactComponent as LowcoderQueryIcon } from "./v1/icon-query-lowcoder.svg"; -export { ReactComponent as EsIcon } from "./v1/icon-query-ElasticSearch.svg"; - -export { ReactComponent as ResetIcon } from "./v1/icon-style-reset.svg"; -export { ReactComponent as EditIcon } from "./v1/icon-edit.svg"; -export { ReactComponent as EditableIcon } from "./v1/icon-editable.svg"; -export { ReactComponent as LeftStateIcon } from "./remix/node-tree.svg"; -export {ReactComponent as StarSmileIcon} from "./remix/star-smile-line.svg"; -export {ReactComponent as Timer2Icon} from "./remix/timer-2-line.svg"; -export {ReactComponent as TimerFlashIcon} from "./remix/timer-flash-line.svg"; -export {ReactComponent as RefreshLineIcon} from "./remix/refresh-line.svg"; -export { ReactComponent as LeftSettingIcon } from "./remix/tools-fill.svg"; -export { ReactComponent as LeftLayersIcon } from "./remix/stack-line.svg"; -export { ReactComponent as LeftHelpIcon } from "./v1/icon-left-help.svg"; -export { ReactComponent as LeftPreloadIcon } from "./v1/icon-left-preload.svg"; -export { ReactComponent as LeftColorPaletteIcon } from "./remix/palette-line.svg"; -export { ReactComponent as LeftJSSettingIcon } from "./remix/javascript-line.svg"; - - -export { ReactComponent as HomeSettingsIcon } from "./v1/icon-home-settings.svg"; -export { ReactComponent as HomeSettingsActiveIcon } from "./v1/icon-home-settings-active.svg"; -export { ReactComponent as HelpGithubIcon } from "./v1/icon-help-github.svg"; -export { ReactComponent as HelpDiscordIcon } from "./v1/icon-help-discord.svg"; -export { ReactComponent as LeftOpen } from "./v1/icon-left-comp-open.svg"; -export { ReactComponent as LeftClose } from "./v1/icon-left-comp-close.svg"; -export { ReactComponent as MaterialUploadIcon } from "./v1/icon-material-upload.svg"; -export { ReactComponent as UndoIcon } from "./v1/icon-undo.svg"; - -export { ReactComponent as ManualIcon } from "./v1/icon-manual.svg"; -export { ReactComponent as WarnIcon } from "./v1/icon-warn.svg"; -export { ReactComponent as SyncManualIcon } from "./v1/icon-sync-manual.svg"; -export { ReactComponent as DangerIcon } from "./v1/icon-danger.svg"; -export { ReactComponent as TableMinusIcon } from "./v1/icon-table-minus.svg"; -export { ReactComponent as TablePlusIcon } from "./v1/icon-table-plus.svg"; -export { ReactComponent as MobileAppIcon } from "./v1/icon-mobile-app.svg"; -export { ReactComponent as MobileNavIcon } from "./v1/icon-navigation-mobile.svg"; -export { ReactComponent as PcNavIcon } from "./v1/icon-navigation-pc.svg"; -export { ReactComponent as UnLockIcon } from "./v1/icon-unlock.svg"; -export { ReactComponent as CalendarDeleteIcon } from "./v1/icon-calendar-delete.svg"; -export { ReactComponent as TableCheckedIcon } from "./v1/icon-table-checked.svg"; -export { ReactComponent as TableUnCheckedIcon } from "./v1/icon-table-boolean-false.svg"; -export { ReactComponent as FileFolderIcon } from "./v1/icon-editor-folder.svg"; -export { ReactComponent as ExpandIcon } from "./v1/icon-expand.svg"; -export { ReactComponent as CompressIcon } from "./v1/icon-compress.svg"; -export { ReactComponent as TableCellsIcon } from "./v1/icon-table-cells.svg"; -export { ReactComponent as TableColumnVisibilityIcon } from "./remix/layout-column-line.svg"; - -// Style Props -export { ReactComponent as WidthIcon } from "./v1/icon-width.svg"; -export { ReactComponent as TextSizeIcon } from "./remix/font-size.svg"; -export { ReactComponent as TextTransformationIcon } from "./remix/font-size-2.svg"; -export { ReactComponent as FontFamilyIcon } from "./remix/font-sans-serif.svg"; -export { ReactComponent as TextWeightIcon } from "./remix/bold.svg"; -export { ReactComponent as TextDecorationIcon } from "./remix/underline.svg"; -export { ReactComponent as TextStyleIcon } from "./remix/italic.svg"; -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"; -export { ReactComponent as LineHeightIcon } from "./remix/line-height.svg"; - - -export { ReactComponent as LeftInfoLine } from "./remix/information-line.svg"; -export { ReactComponent as LeftInfoFill } from "./remix/information-fill.svg"; -export { ReactComponent as LeftShow } from "./remix/eye-off-line.svg"; -export { ReactComponent as LeftHide } from "./remix/eye-line.svg"; -export { ReactComponent as LeftLock } from "./remix/lock-line.svg"; -export { ReactComponent as LeftUnlock } from "./remix/lock-unlock-line.svg"; -export { ReactComponent as UserGroupIcon } from "./remix/group-line.svg"; -export { ReactComponent as UserIcon } from "./remix/user-line.svg"; -export { ReactComponent as UserAddIcon } from "./remix/user-add-line.svg"; -export { ReactComponent as UserDeleteIcon } from "./remix/user-unfollow-line.svg"; -export { ReactComponent as UserShieldIcon } from "./remix/shield-user-line.svg"; -export { ReactComponent as ThemeIcon } from "./remix/palette-line.svg"; -export { ReactComponent as AppsIcon } from "./remix/apps-2-line.svg"; -export { ReactComponent as WorkspacesIcon } from "./remix/hotel-line.svg"; - -export { ReactComponent as HomeIcon } from "./remix/home-3-line.svg"; -export { ReactComponent as NewsIcon } from "./remix/megaphone-line.svg"; -export { ReactComponent as HomeModuleIcon } from "./remix/focus-mode.svg"; -export { ReactComponent as HomeQueryLibraryIcon } from "./remix/braces-line.svg"; -export { ReactComponent as HomeDataSourceIcon } from "./remix/database-2-line.svg"; -export { ReactComponent as RecyclerIcon } from "./remix/delete-bin-line.svg"; -export { ReactComponent as MarketplaceIcon } from "./v1/icon-application-marketplace.svg"; -export { ReactComponent as FavoritesIcon } from "./v1/icon-application-favorites.svg"; -export { ReactComponent as HomeSettingIcon } from "./remix/settings-4-line.svg"; -export { ReactComponent as EnterpriseIcon } from "./remix/earth-line.svg"; - - -// components - -// small -export { ReactComponent as LeftCommon } from "./v1/icon-left-comp-common.svg"; // generic - -export { ReactComponent as AvatarCompIconSmall } from "./v2/avatar-s.svg"; -export { ReactComponent as AvatarGroupCompIconSmall } from "./v2/avatargroup-s.svg"; -export { ReactComponent as AudioCompIconSmall } from "./v2/audio-player-s.svg"; -export { ReactComponent as AutoCompleteCompIconSmall } from "./v2/auto-complete-input-s.svg"; // new -export { ReactComponent as ButtonCompIconSmall } from "./v2/button-s.svg"; -export { ReactComponent as IconButtonCompIconSmall } from "./v2/icon-button-s.svg"; // new -export { ReactComponent as CardCompIconSmall } from "./v2/card-layout-s.svg"; -export { ReactComponent as CalendarCompIconSmall } from "./v2/calendar-s.svg"; -export { ReactComponent as CascaderCompIconSmall } from "./v2/cascader-s.svg"; -export { ReactComponent as CarouselCompIconSmall } from "./v2/image-carousel-s.svg"; // new -export { ReactComponent as ChartCompIconSmall } from "./v2/pie-chart-s.svg"; -export { ReactComponent as CheckboxCompIconSmall } from "./v2/checkbox-s.svg"; -export { ReactComponent as ColorPickerCompIconSmall } from "./v2/colorpicker-s.svg"; // new -export { ReactComponent as CollapsibleContainerCompIconSmall } from "./v2/collapsible-container-s.svg"; // new -export { ReactComponent as ColumnLayoutCompIconSmall } from "./v2/column-layout-s.svg"; // new -export { ReactComponent as CommentCompIconSmall } from "./v2/comment-s.svg"; -export { ReactComponent as ContainerCompIconSmall } from "./v2/container-s.svg"; -export { ReactComponent as CustomCompIconSmall } from "./v2/custom-code-s.svg"; // new -export { ReactComponent as DateCompIconSmall } from "./v2/date-select-s.svg"; -export { ReactComponent as DateRangeCompIconSmall } from "./v2/date-range-select-s.svg"; // new -export { ReactComponent as DividerCompIconSmall } from "./v2/divider-s.svg"; -export { ReactComponent as DrawerCompIconSmall } from "./v2/drawer-s.svg"; -export { ReactComponent as DropdownCompIconSmall } from "./v2/dropdown-s.svg"; // new -export { ReactComponent as UploadCompIconSmall } from "./v2/file-upload-s.svg"; -export { ReactComponent as FileViewerCompIconSmall } from "./v2/file-viewer-s.svg"; -export { ReactComponent as FloatingButtonCompIconSmall } from "./v2/floating-button-s.svg"; // new -export { ReactComponent as FloatingTextCompIconSmall } from "./v2/floating-text-layout-s.svg"; // new -export { ReactComponent as FormCompIconSmall } from "./v2/form-s.svg"; -export { ReactComponent as GridCompIconSmall } from "./v2/grid-view-s.svg"; // new -export { ReactComponent as IconCompIconSmall } from "./v2/icon-s.svg"; // new -export { ReactComponent as IFrameCompIconSmall } from "./v2/iframe-s.svg"; -export { ReactComponent as ImageEditorCompIconSmall } from "./v2/image-editor-s.svg"; // new -export { ReactComponent as ImageCompIconSmall } from "./v2/image-s.svg"; -export { ReactComponent as InputCompIconSmall } from "./v2/input-s.svg"; -export { ReactComponent as JsonEditorCompIconSmall } from "./v2/json-editor-s.svg"; -export { ReactComponent as JsonExplorerCompIconSmall } from "./v2/json-viewer-s.svg"; // new -export { ReactComponent as JsonFormCompIconSmall } from "./v2/json-schema-form-s.svg"; // new -export { ReactComponent as PageLayoutCompIconSmall } from "./v2/page-layout-s.svg"; // new -export { ReactComponent as LinkCompIconSmall } from "./v2/link-s.svg"; -export { ReactComponent as ListViewCompIconSmall } from "./v2/list-view-s.svg"; -export { ReactComponent as LottieAnimationCompIconSmall } from "./v2/lottie-animation-s.svg"; // new -export { ReactComponent as MentionCompIconSmall } from "./v2/mention-s.svg"; // new -export { ReactComponent as MermaidCompIconSmall } from "./v2/mermaid-chart-s.svg"; // new -export { ReactComponent as ModalCompIconSmall } from "./v2/modal-s.svg"; -export { ReactComponent as ModuleIconSmall } from "./v2/module-s.svg"; -export { ReactComponent as MultiSelectCompIconSmall } from "./v2/multiselect-s.svg"; // new -export { ReactComponent as NavComIconSmall } from "./v2/navigation-s.svg"; -export { ReactComponent as NumberInputCompIconSmall } from "./v2/number-input-s.svg"; -export { ReactComponent as PasswordCompIconSmall } from "./v2/password-s.svg"; -export { ReactComponent as ProgressCompIconSmall } from "./v2/progress-s.svg"; -export { ReactComponent as ProcessCircleCompIconSmall } from "./v2/progress-circle-s.svg"; // new -export { ReactComponent as QRCodeCompIconSmall } from "./v2/qr-code-display-s.svg"; -export { ReactComponent as RadioCompIconSmall } from "./v2/radio-button-s.svg"; -export { ReactComponent as RangeSliderCompIconSmall } from "./v2/range-slider-s.svg"; // new -export { ReactComponent as RatingCompIconSmall } from "./v2/rating-s.svg"; -export { ReactComponent as ResponsiveLayoutCompIconSmall } from "./v2/resposive-layout-s.svg"; // new -export { ReactComponent as RichTextEditorCompIconSmall } from "./v2/rich-text-editor-s.svg"; // new -export { ReactComponent as ScannerCompIconSmall } from "./v2/scanner-s.svg"; // new -export { ReactComponent as ShapesCompIconSmall } from "./v2/shapes-s.svg"; // new -export { ReactComponent as SegmentedCompIconSmall } from "./v2/segmented-control-s.svg"; -export { ReactComponent as SelectCompIconSmall } from "./v2/select-s.svg"; -export { ReactComponent as SliderCompIconSmall } from "./v2/slider-s.svg"; -// export { ReactComponent as StepsTextIconSmall } from "./v1/icon-steps-comp.svg"; // new -export { ReactComponent as SwitchCompIconSmall } from "./v2/switch-s.svg"; -export { ReactComponent as TabbedContainerCompIconSmall } from "./v2/tabbed-container-s.svg"; // new -export { ReactComponent as TableCompIconSmall } from "./v2/table-s.svg"; -export { ReactComponent as TextAreaCompIconSmall } from "./v2/text-area-input-s.svg"; // new -export { ReactComponent as TextCompIconSmall } from "./v2/text-display-s.svg"; -export { ReactComponent as TimeCompIconSmall } from "./v2/time-select-s.svg"; -export { ReactComponent as TimeLineCompIconSmall } from "./v2/timeline-s.svg"; // new -export { ReactComponent as TimeRangeCompIconSmall } from "./v2/time-range-select-s.svg"; // new -export { ReactComponent as ToggleButtonCompIconSmall } from "./v2/toggle-button-s.svg"; // new -export { ReactComponent as TourCompIconSmall } from "./v2/modal-s.svg"; // new -export { ReactComponent as TransferCompIconSmall } from "./v2/transfer-list-s.svg"; // new -export { ReactComponent as TreeDisplayCompIconSmall } from "./v2/tree-display-s.svg"; -export { ReactComponent as TreeSelectCompIconSmall } from "./v2/tree-select-s.svg"; // new -export { ReactComponent as VideoCompIconSmall } from "./v2/video-player-s.svg"; -export { ReactComponent as VideoMeetingRoomCompIconSmall } from "./v2/meeting-room-s.svg"; -export { ReactComponent as VideoCameraStreamCompIconSmall } from "./v2/camera-stream-s.svg"; // new -export { ReactComponent as VideoScreenshareCompIconSmall } from "./v2/screen-share-stream-s.svg"; // new -export { ReactComponent as SignatureCompIconSmall } from "./v2/signature-s.svg"; -export { ReactComponent as StepCompIconSmall } from "./v2/steps-s.svg"; - -export { ReactComponent as CandlestickChartCompIconSmall } from "./v2/candlestick-chart-s.svg"; // new -export { ReactComponent as FunnelChartCompIconSmall } from "./v2/funnel-chart-s.svg"; // new -export { ReactComponent as GaugeChartCompIconSmall } from "./v2/gauge-chart-s.svg"; // new -export { ReactComponent as GraphChartCompIconSmall } from "./v2/graph-chart-s.svg"; // new -export { ReactComponent as HeatmapChartCompIconSmall } from "./v2/heatmap-chart-s.svg"; // new -export { ReactComponent as RadarChartCompIconSmall } from "./v2/radar-chart-s.svg"; // new -export { ReactComponent as SankeyChartCompIconSmall } from "./v2/sankey-chart-s.svg"; // new -export { ReactComponent as SunburstChartCompIconSmall } from "./v2/sunburst-chart-s.svg"; // new -export { ReactComponent as ThemeriverChartCompIconSmall } from "./v2/themeriver-chart-s.svg"; // new -export { ReactComponent as TreeChartCompIconSmall } from "./v2/tree-chart-s.svg"; // new -export { ReactComponent as TreemapChartCompIconSmall } from "./v2/treemap-chart-s.svg"; // new -export { ReactComponent as BPMNEditorCompIconSmall } from "./v2/bpmn-editor-s.svg"; // new -export { ReactComponent as GeoMapChartsCompIconSmall } from "./v2/geomap-charts-s.svg"; // new -export { ReactComponent as GeoMapLayersCompIconSmall } from "./v2/geomap-layers-s.svg"; // new -export { ReactComponent as HillchartCompIconSmall } from "./v2/hillchart-s.svg"; // new -export { ReactComponent as PivotTableCompIconSmall } from "./v2/pivot-table-s.svg"; // new -export { ReactComponent as TurnstileCaptchaCompIconSmall } from "./v2/turnstile-captcha-s.svg"; // new -export { ReactComponent as GanttCompIconSmall } from "./v2/gantt-chart-s.svg"; // new - - -// medium -export { ReactComponent as AudioCompIcon } from "./v2/audio-player-m.svg"; -export { ReactComponent as AutoCompleteCompIcon } from "./v2/auto-complete-input-m.svg"; -export { ReactComponent as AvatarCompIcon } from "./v2/avatar-m.svg"; -export { ReactComponent as ButtonCompIcon } from "./v2/button-m.svg"; -export { ReactComponent as AvatarGroupCompIcon } from "./v2/avatargroup-m.svg"; -export { ReactComponent as IconButtonCompIcon } from "./v2/icon-button-m.svg"; -export { ReactComponent as CalendarCompIcon } from "./v2/calendar-m.svg"; -export { ReactComponent as CardCompIcon } from "./v2/card-layout-m.svg"; -export { ReactComponent as CarouselCompIcon } from "./v2/image-carousel-m.svg"; -export { ReactComponent as CascaderCompIcon } from "./v2/cascader-m.svg"; -export { ReactComponent as ChartCompIcon } from "./v2/pie-chart-m.svg"; -export { ReactComponent as CheckboxCompIcon } from "./v2/checkbox-m.svg"; -export { ReactComponent as CollapsibleContainerCompIcon } from "./v2/collapsible-container-m.svg"; -export { ReactComponent as ColumnLayoutCompIcon } from "./v2/column-layout-m.svg"; -export { ReactComponent as CommentCompIcon } from "./v2/comment-m.svg"; -export { ReactComponent as ColorPickerCompIcon } from "./v2/colorpicker-m.svg"; -export { ReactComponent as ContainerCompIcon } from "./v2/container-m.svg"; -export { ReactComponent as CustomCompIcon } from "./v2/custom-code-m.svg"; -export { ReactComponent as DateCompIcon } from "./v2/date-select-m.svg"; -export { ReactComponent as DateRangeCompIcon } from "./v2/date-range-select-m.svg"; -export { ReactComponent as DividerCompIcon } from "./v2/divider-m.svg"; -export { ReactComponent as DrawerCompIcon } from "./v2/drawer-m.svg"; -export { ReactComponent as DropdownCompIcon } from "./v2/dropdown-m.svg"; -export { ReactComponent as FileViewerCompIcon } from "./v2/file-viewer-m.svg"; -export { ReactComponent as FloatingButtonCompIcon } from "./v2/floating-button-m.svg"; -export { ReactComponent as FloatingTextCompIcon } from "./v2/floating-text-layout-m.svg"; -export { ReactComponent as FormCompIcon } from "./v2/form-m.svg"; -export { ReactComponent as GridCompIcon } from "./v2/grid-view-m.svg"; -export { ReactComponent as IconCompIcon } from "./v2/icon-m.svg"; -export { ReactComponent as IFrameCompIcon } from "./v2/iframe-m.svg"; -export { ReactComponent as ImageEditorCompIcon } from "./v2/image-editor-m.svg"; -export { ReactComponent as ImageCompIcon } from "./v2/image-m.svg"; -export { ReactComponent as InputCompIcon } from "./v2/input-m.svg"; -export { ReactComponent as JsonEditorCompIcon } from "./v2/json-editor-m.svg"; -export { ReactComponent as JsonExplorerCompIcon } from "./v2/json-viewer-m.svg"; -export { ReactComponent as JsonFormCompIcon } from "./v2/json-schema-form-m.svg"; -export { ReactComponent as PageLayoutCompIcon } from "./v2/page-layout-m.svg"; -export { ReactComponent as LinkCompIcon } from "./v2/link-m.svg"; -export { ReactComponent as ListViewCompIcon } from "./v2/list-view-m.svg"; -export { ReactComponent as LottieAnimationCompIcon } from "./v2/lottie-animation-m.svg"; -export { ReactComponent as MentionCompIcon } from "./v2/mention-m.svg"; -export { ReactComponent as MermaidCompIcon } from "./v2/mermaid-chart-m.svg"; -export { ReactComponent as ModalCompIcon } from "./v2/modal-m.svg"; -export { ReactComponent as MultiSelectCompIcon } from "./v2/multiselect-m.svg"; -export { ReactComponent as NavComIcon } from "./v2/navigation-m.svg"; -export { ReactComponent as NumberInputCompIcon } from "./v2/number-input-m.svg"; -export { ReactComponent as PasswordCompIcon } from "./v2/password-m.svg"; -export { ReactComponent as ProcessCircleCompIcon } from "./v2/progress-circle-m.svg"; -export { ReactComponent as ProgressCompIcon } from "./v2/progress-m.svg"; -export { ReactComponent as QRCodeCompIcon } from "./v2/qr-code-display-m.svg"; -export { ReactComponent as RadioCompIcon } from "./v2/radio-button-m.svg"; -export { ReactComponent as RangeSliderCompIcon } from "./v2/range-slider-m.svg"; -export { ReactComponent as RatingCompIcon } from "./v2/rating-m.svg"; -export { ReactComponent as ResponsiveLayoutCompIcon } from "./v2/resposive-layout-m.svg"; -export { ReactComponent as RichTextEditorCompIcon } from "./v2/rich-text-editor-m.svg"; -export { ReactComponent as ScannerCompIcon } from "./v2/scanner-m.svg"; -export { ReactComponent as ShapesCompIcon } from "./v2/shapes-m.svg"; -export { ReactComponent as SegmentedCompIcon } from "./v2/segmented-control-m.svg"; -export { ReactComponent as SelectCompIcon } from "./v2/select-m.svg"; -export { ReactComponent as SliderCompIcon } from "./v2/slider-m.svg"; -// export { ReactComponent as StepsTextIcon } from "./v1/icon-steps-comp.svg"; // to check -export { ReactComponent as SwitchCompIcon } from "./v2/switch-m.svg"; -export { ReactComponent as TabbedContainerCompIcon } from "./v2/tabbed-container-m.svg"; -export { ReactComponent as TableCompIcon } from "./v2/mighty-table-m.svg"; -export { ReactComponent as TextAreaCompIcon } from "./v2/text-area-input-m.svg"; -export { ReactComponent as TextCompIcon } from "./v2/text-display-m.svg"; -export { ReactComponent as TimeCompIcon } from "./v2/time-select-m.svg"; -export { ReactComponent as TimerCompIcon } from "./v2/timer-m.svg"; -export { ReactComponent as TimeLineCompIcon } from "./v2/timeline-m.svg"; -export { ReactComponent as TimeRangeCompIcon } from "./v2/time-range-select-m.svg"; -export { ReactComponent as ToggleButtonCompIcon } from "./v2/toggle-button-m.svg"; -export { ReactComponent as TourCompIcon } from "./v2/modal-m.svg"; -export { ReactComponent as TransferCompIcon } from "./v2/transfer-list-m.svg"; -export { ReactComponent as TreeDisplayCompIcon } from "./v2/tree-display-m.svg"; -export { ReactComponent as TreeSelectCompIcon } from "./v2/tree-select-m.svg"; -export { ReactComponent as UploadCompIcon } from "./v2/file-upload-m.svg"; -export { ReactComponent as VideoCompIcon } from "./v2/video-player-m.svg"; -export { ReactComponent as VideoMeetingRoomCompIcon } from "./v2/meeting-room-m.svg"; -export { ReactComponent as VideoCameraStreamCompIcon } from "./v2/camera-stream-m.svg"; -export { ReactComponent as VideoScreenshareCompIcon } from "./v2/screen-share-stream-m.svg"; -export { ReactComponent as StepCompIcon } from "./v2/steps-m.svg"; -export { ReactComponent as SignatureCompIcon } from "./v2/signature-m.svg"; -export { ReactComponent as GanttCompIcon } from "./v2/gantt-chart-m.svg"; -export { ReactComponent as KanbanCompIconSmall } from "./v2/kanban-s.svg"; -export { ReactComponent as KanbanCompIcon } from "./v2/kanban-m.svg"; - -export { ReactComponent as CandlestickChartCompIcon } from "./v2/candlestick-chart-m.svg"; -export { ReactComponent as FunnelChartCompIcon } from "./v2/funnel-chart-m.svg"; -export { ReactComponent as GaugeChartCompIcon } from "./v2/gauge-chart-m.svg"; -export { ReactComponent as GraphChartCompIcon } from "./v2/graph-chart-m.svg"; -export { ReactComponent as HeatmapChartCompIcon } from "./v2/heatmap-chart-m.svg"; -export { ReactComponent as RadarChartCompIcon } from "./v2/radar-chart-m.svg"; -export { ReactComponent as SankeyChartCompIcon } from "./v2/sankey-chart-m.svg"; -export { ReactComponent as SunburstChartCompIcon } from "./v2/sunburst-chart-m.svg"; -export { ReactComponent as ThemeriverChartCompIcon } from "./v2/themeriver-chart-m.svg"; -export { ReactComponent as TreeChartCompIcon } from "./v2/tree-chart-m.svg"; -export { ReactComponent as TreemapChartCompIcon } from "./v2/treemap-chart-m.svg"; - -export { ReactComponent as BPMNEditorCompIcon } from "./v2/bpmn-editor-m.svg"; -export { ReactComponent as GeoMapChartsCompIcon } from "./v2/geomap-charts-m.svg"; -export { ReactComponent as GeoMapLayersCompIcon } from "./v2/geomap-layers-m.svg"; -export { ReactComponent as HillchartCompIcon } from "./v2/hillchart-m.svg"; -export { ReactComponent as TurnstileCaptchaCompIcon } from "./v2/turnstile-captcha-m.svg"; -export { ReactComponent as PivotTableCompIcon } from "./v2/pivot-table-m.svg"; - -// flags - -export { ReactComponent as Flag_af } from './flags/4x3/af.svg'; -export { ReactComponent as Flag_ax } from './flags/4x3/ax.svg'; -export { ReactComponent as Flag_al } from './flags/4x3/al.svg'; -export { ReactComponent as Flag_dz } from './flags/4x3/dz.svg'; -export { ReactComponent as Flag_as } from './flags/4x3/as.svg'; -export { ReactComponent as Flag_ad } from './flags/4x3/ad.svg'; -export { ReactComponent as Flag_ao } from './flags/4x3/ao.svg'; -export { ReactComponent as Flag_ai } from './flags/4x3/ai.svg'; -export { ReactComponent as Flag_aq } from './flags/4x3/aq.svg'; -export { ReactComponent as Flag_ag } from './flags/4x3/ag.svg'; -export { ReactComponent as Flag_ar } from './flags/4x3/ar.svg'; -export { ReactComponent as Flag_am } from './flags/4x3/am.svg'; -export { ReactComponent as Flag_aw } from './flags/4x3/aw.svg'; -export { ReactComponent as Flag_sh_ac } from './flags/4x3/sh-ac.svg'; -export { ReactComponent as Flag_au } from './flags/4x3/au.svg'; -export { ReactComponent as Flag_at } from './flags/4x3/at.svg'; -export { ReactComponent as Flag_az } from './flags/4x3/az.svg'; -export { ReactComponent as Flag_bs } from './flags/4x3/bs.svg'; -export { ReactComponent as Flag_bh } from './flags/4x3/bh.svg'; -export { ReactComponent as Flag_bd } from './flags/4x3/bd.svg'; -export { ReactComponent as Flag_bb } from './flags/4x3/bb.svg'; -export { ReactComponent as Flag_by } from './flags/4x3/by.svg'; -export { ReactComponent as Flag_be } from './flags/4x3/be.svg'; -export { ReactComponent as Flag_bz } from './flags/4x3/bz.svg'; -export { ReactComponent as Flag_bj } from './flags/4x3/bj.svg'; -export { ReactComponent as Flag_bm } from './flags/4x3/bm.svg'; -export { ReactComponent as Flag_bt } from './flags/4x3/bt.svg'; -export { ReactComponent as Flag_bo } from './flags/4x3/bo.svg'; -export { ReactComponent as Flag_bq } from './flags/4x3/bq.svg'; -export { ReactComponent as Flag_ba } from './flags/4x3/ba.svg'; -export { ReactComponent as Flag_bw } from './flags/4x3/bw.svg'; -export { ReactComponent as Flag_bv } from './flags/4x3/bv.svg'; -export { ReactComponent as Flag_br } from './flags/4x3/br.svg'; -export { ReactComponent as Flag_io } from './flags/4x3/io.svg'; -export { ReactComponent as Flag_bn } from './flags/4x3/bn.svg'; -export { ReactComponent as Flag_bg } from './flags/4x3/bg.svg'; -export { ReactComponent as Flag_bf } from './flags/4x3/bf.svg'; -export { ReactComponent as Flag_bi } from './flags/4x3/bi.svg'; -export { ReactComponent as Flag_cv } from './flags/4x3/cv.svg'; -export { ReactComponent as Flag_kh } from './flags/4x3/kh.svg'; -export { ReactComponent as Flag_cm } from './flags/4x3/cm.svg'; -export { ReactComponent as Flag_ca } from './flags/4x3/ca.svg'; -export { ReactComponent as Flag_ic } from './flags/4x3/ic.svg'; -export { ReactComponent as Flag_es_ct } from './flags/4x3/es-ct.svg'; -export { ReactComponent as Flag_ky } from './flags/4x3/ky.svg'; -export { ReactComponent as Flag_cf } from './flags/4x3/cf.svg'; -export { ReactComponent as Flag_td } from './flags/4x3/td.svg'; -export { ReactComponent as Flag_cl } from './flags/4x3/cl.svg'; -export { ReactComponent as Flag_cn } from './flags/4x3/cn.svg'; -export { ReactComponent as Flag_cx } from './flags/4x3/cx.svg'; -export { ReactComponent as Flag_cc } from './flags/4x3/cc.svg'; -export { ReactComponent as Flag_co } from './flags/4x3/co.svg'; -export { ReactComponent as Flag_km } from './flags/4x3/km.svg'; -export { ReactComponent as Flag_ck } from './flags/4x3/ck.svg'; -export { ReactComponent as Flag_cr } from './flags/4x3/cr.svg'; -export { ReactComponent as Flag_hr } from './flags/4x3/hr.svg'; -export { ReactComponent as Flag_cu } from './flags/4x3/cu.svg'; -export { ReactComponent as Flag_cw } from './flags/4x3/cw.svg'; -export { ReactComponent as Flag_cy } from './flags/4x3/cy.svg'; -export { ReactComponent as Flag_cz } from './flags/4x3/cz.svg'; -export { ReactComponent as Flag_ci } from './flags/4x3/ci.svg'; -export { ReactComponent as Flag_cd } from './flags/4x3/cd.svg'; -export { ReactComponent as Flag_dk } from './flags/4x3/dk.svg'; -export { ReactComponent as Flag_dj } from './flags/4x3/dj.svg'; -export { ReactComponent as Flag_dm } from './flags/4x3/dm.svg'; -export { ReactComponent as Flag_do } from './flags/4x3/do.svg'; -export { ReactComponent as Flag_ec } from './flags/4x3/ec.svg'; -export { ReactComponent as Flag_eg } from './flags/4x3/eg.svg'; -export { ReactComponent as Flag_sv } from './flags/4x3/sv.svg'; -export { ReactComponent as Flag_gq } from './flags/4x3/gq.svg'; -export { ReactComponent as Flag_er } from './flags/4x3/er.svg'; -export { ReactComponent as Flag_ee } from './flags/4x3/ee.svg'; -export { ReactComponent as Flag_sz } from './flags/4x3/sz.svg'; -export { ReactComponent as Flag_et } from './flags/4x3/et.svg'; -export { ReactComponent as Flag_eu } from './flags/4x3/eu.svg'; -export { ReactComponent as Flag_fk } from './flags/4x3/fk.svg'; -export { ReactComponent as Flag_fo } from './flags/4x3/fo.svg'; -export { ReactComponent as Flag_fm } from './flags/4x3/fm.svg'; -export { ReactComponent as Flag_fj } from './flags/4x3/fj.svg'; -export { ReactComponent as Flag_fi } from './flags/4x3/fi.svg'; -export { ReactComponent as Flag_fr } from './flags/4x3/fr.svg'; -export { ReactComponent as Flag_gf } from './flags/4x3/gf.svg'; -export { ReactComponent as Flag_pf } from './flags/4x3/pf.svg'; -export { ReactComponent as Flag_tf } from './flags/4x3/tf.svg'; -export { ReactComponent as Flag_ga } from './flags/4x3/ga.svg'; -export { ReactComponent as Flag_gm } from './flags/4x3/gm.svg'; -export { ReactComponent as Flag_ge } from './flags/4x3/ge.svg'; -export { ReactComponent as Flag_de } from './flags/4x3/de.svg'; -export { ReactComponent as Flag_gh } from './flags/4x3/gh.svg'; -export { ReactComponent as Flag_gi } from './flags/4x3/gi.svg'; -export { ReactComponent as Flag_gr } from './flags/4x3/gr.svg'; -export { ReactComponent as Flag_gl } from './flags/4x3/gl.svg'; -export { ReactComponent as Flag_gd } from './flags/4x3/gd.svg'; -export { ReactComponent as Flag_gp } from './flags/4x3/gp.svg'; -export { ReactComponent as Flag_gu } from './flags/4x3/gu.svg'; -export { ReactComponent as Flag_gt } from './flags/4x3/gt.svg'; -export { ReactComponent as Flag_gg } from './flags/4x3/gg.svg'; -export { ReactComponent as Flag_gn } from './flags/4x3/gn.svg'; -export { ReactComponent as Flag_gw } from './flags/4x3/gw.svg'; -export { ReactComponent as Flag_gy } from './flags/4x3/gy.svg'; -export { ReactComponent as Flag_ht } from './flags/4x3/ht.svg'; -export { ReactComponent as Flag_hm } from './flags/4x3/hm.svg'; -export { ReactComponent as Flag_va } from './flags/4x3/va.svg'; -export { ReactComponent as Flag_hn } from './flags/4x3/hn.svg'; -export { ReactComponent as Flag_hk } from './flags/4x3/hk.svg'; -export { ReactComponent as Flag_hu } from './flags/4x3/hu.svg'; -export { ReactComponent as Flag_is } from './flags/4x3/is.svg'; -export { ReactComponent as Flag_in } from './flags/4x3/in.svg'; -export { ReactComponent as Flag_id } from './flags/4x3/id.svg'; -export { ReactComponent as Flag_ir } from './flags/4x3/ir.svg'; -export { ReactComponent as Flag_iq } from './flags/4x3/iq.svg'; -export { ReactComponent as Flag_ie } from './flags/4x3/ie.svg'; -export { ReactComponent as Flag_im } from './flags/4x3/im.svg'; -export { ReactComponent as Flag_il } from './flags/4x3/il.svg'; -export { ReactComponent as Flag_it } from './flags/4x3/it.svg'; -export { ReactComponent as Flag_jm } from './flags/4x3/jm.svg'; -export { ReactComponent as Flag_jp } from './flags/4x3/jp.svg'; -export { ReactComponent as Flag_je } from './flags/4x3/je.svg'; -export { ReactComponent as Flag_jo } from './flags/4x3/jo.svg'; -export { ReactComponent as Flag_kz } from './flags/4x3/kz.svg'; -export { ReactComponent as Flag_ke } from './flags/4x3/ke.svg'; -export { ReactComponent as Flag_ki } from './flags/4x3/ki.svg'; -export { ReactComponent as Flag_xk } from './flags/4x3/xk.svg'; -export { ReactComponent as Flag_kw } from './flags/4x3/kw.svg'; -export { ReactComponent as Flag_kg } from './flags/4x3/kg.svg'; -export { ReactComponent as Flag_la } from './flags/4x3/la.svg'; -export { ReactComponent as Flag_lv } from './flags/4x3/lv.svg'; -export { ReactComponent as Flag_lb } from './flags/4x3/lb.svg'; -export { ReactComponent as Flag_ls } from './flags/4x3/ls.svg'; -export { ReactComponent as Flag_lr } from './flags/4x3/lr.svg'; -export { ReactComponent as Flag_ly } from './flags/4x3/ly.svg'; -export { ReactComponent as Flag_li } from './flags/4x3/li.svg'; -export { ReactComponent as Flag_lt } from './flags/4x3/lt.svg'; -export { ReactComponent as Flag_lu } from './flags/4x3/lu.svg'; -export { ReactComponent as Flag_mo } from './flags/4x3/mo.svg'; -export { ReactComponent as Flag_mg } from './flags/4x3/mg.svg'; -export { ReactComponent as Flag_mw } from './flags/4x3/mw.svg'; -export { ReactComponent as Flag_my } from './flags/4x3/my.svg'; -export { ReactComponent as Flag_mv } from './flags/4x3/mv.svg'; -export { ReactComponent as Flag_ml } from './flags/4x3/ml.svg'; -export { ReactComponent as Flag_mt } from './flags/4x3/mt.svg'; -export { ReactComponent as Flag_mh } from './flags/4x3/mh.svg'; -export { ReactComponent as Flag_mq } from './flags/4x3/mq.svg'; -export { ReactComponent as Flag_mr } from './flags/4x3/mr.svg'; -export { ReactComponent as Flag_mu } from './flags/4x3/mu.svg'; -export { ReactComponent as Flag_yt } from './flags/4x3/yt.svg'; -export { ReactComponent as Flag_mx } from './flags/4x3/mx.svg'; -export { ReactComponent as Flag_md } from './flags/4x3/md.svg'; -export { ReactComponent as Flag_mc } from './flags/4x3/mc.svg'; -export { ReactComponent as Flag_mn } from './flags/4x3/mn.svg'; -export { ReactComponent as Flag_me } from './flags/4x3/me.svg'; -export { ReactComponent as Flag_ms } from './flags/4x3/ms.svg'; -export { ReactComponent as Flag_ma } from './flags/4x3/ma.svg'; -export { ReactComponent as Flag_mz } from './flags/4x3/mz.svg'; -export { ReactComponent as Flag_mm } from './flags/4x3/mm.svg'; -export { ReactComponent as Flag_na } from './flags/4x3/na.svg'; -export { ReactComponent as Flag_nr } from './flags/4x3/nr.svg'; -export { ReactComponent as Flag_np } from './flags/4x3/np.svg'; -export { ReactComponent as Flag_nl } from './flags/4x3/nl.svg'; -export { ReactComponent as Flag_nc } from './flags/4x3/nc.svg'; -export { ReactComponent as Flag_nz } from './flags/4x3/nz.svg'; -export { ReactComponent as Flag_ni } from './flags/4x3/ni.svg'; -export { ReactComponent as Flag_ne } from './flags/4x3/ne.svg'; -export { ReactComponent as Flag_ng } from './flags/4x3/ng.svg'; -export { ReactComponent as Flag_nu } from './flags/4x3/nu.svg'; -export { ReactComponent as Flag_nf } from './flags/4x3/nf.svg'; -export { ReactComponent as Flag_kp } from './flags/4x3/kp.svg'; -export { ReactComponent as Flag_mk } from './flags/4x3/mk.svg'; -export { ReactComponent as Flag_gb_nir } from './flags/4x3/gb-nir.svg'; -export { ReactComponent as Flag_mp } from './flags/4x3/mp.svg'; -export { ReactComponent as Flag_no } from './flags/4x3/no.svg'; -export { ReactComponent as Flag_om } from './flags/4x3/om.svg'; -export { ReactComponent as Flag_pk } from './flags/4x3/pk.svg'; -export { ReactComponent as Flag_pw } from './flags/4x3/pw.svg'; -export { ReactComponent as Flag_pa } from './flags/4x3/pa.svg'; -export { ReactComponent as Flag_pg } from './flags/4x3/pg.svg'; -export { ReactComponent as Flag_py } from './flags/4x3/py.svg'; -export { ReactComponent as Flag_pe } from './flags/4x3/pe.svg'; -export { ReactComponent as Flag_ph } from './flags/4x3/ph.svg'; -export { ReactComponent as Flag_pn } from './flags/4x3/pn.svg'; -export { ReactComponent as Flag_pl } from './flags/4x3/pl.svg'; -export { ReactComponent as Flag_pt } from './flags/4x3/pt.svg'; -export { ReactComponent as Flag_pr } from './flags/4x3/pr.svg'; -export { ReactComponent as Flag_qa } from './flags/4x3/qa.svg'; -export { ReactComponent as Flag_cg } from './flags/4x3/cg.svg'; -export { ReactComponent as Flag_ro } from './flags/4x3/ro.svg'; -export { ReactComponent as Flag_ru } from './flags/4x3/ru.svg'; -export { ReactComponent as Flag_rw } from './flags/4x3/rw.svg'; -export { ReactComponent as Flag_re } from './flags/4x3/re.svg'; -export { ReactComponent as Flag_bl } from './flags/4x3/bl.svg'; -export { ReactComponent as Flag_sh_hl } from './flags/4x3/sh-hl.svg'; -export { ReactComponent as Flag_sh } from './flags/4x3/sh.svg'; -export { ReactComponent as Flag_kn } from './flags/4x3/kn.svg'; -export { ReactComponent as Flag_lc } from './flags/4x3/lc.svg'; -export { ReactComponent as Flag_mf } from './flags/4x3/mf.svg'; -export { ReactComponent as Flag_pm } from './flags/4x3/pm.svg'; -export { ReactComponent as Flag_vc } from './flags/4x3/vc.svg'; -export { ReactComponent as Flag_ws } from './flags/4x3/ws.svg'; -export { ReactComponent as Flag_sm } from './flags/4x3/sm.svg'; -export { ReactComponent as Flag_st } from './flags/4x3/st.svg'; -export { ReactComponent as Flag_sa } from './flags/4x3/sa.svg'; -export { ReactComponent as Flag_gb_sct } from './flags/4x3/gb-sct.svg'; -export { ReactComponent as Flag_sn } from './flags/4x3/sn.svg'; -export { ReactComponent as Flag_rs } from './flags/4x3/rs.svg'; -export { ReactComponent as Flag_sc } from './flags/4x3/sc.svg'; -export { ReactComponent as Flag_sl } from './flags/4x3/sl.svg'; -export { ReactComponent as Flag_sg } from './flags/4x3/sg.svg'; -export { ReactComponent as Flag_sx } from './flags/4x3/sx.svg'; -export { ReactComponent as Flag_sk } from './flags/4x3/sk.svg'; -export { ReactComponent as Flag_si } from './flags/4x3/si.svg'; -export { ReactComponent as Flag_sb } from './flags/4x3/sb.svg'; -export { ReactComponent as Flag_so } from './flags/4x3/so.svg'; -export { ReactComponent as Flag_za } from './flags/4x3/za.svg'; -export { ReactComponent as Flag_gs } from './flags/4x3/gs.svg'; -export { ReactComponent as Flag_kr } from './flags/4x3/kr.svg'; -export { ReactComponent as Flag_ss } from './flags/4x3/ss.svg'; -export { ReactComponent as Flag_es } from './flags/4x3/es.svg'; -export { ReactComponent as Flag_lk } from './flags/4x3/lk.svg'; -export { ReactComponent as Flag_ps } from './flags/4x3/ps.svg'; -export { ReactComponent as Flag_sd } from './flags/4x3/sd.svg'; -export { ReactComponent as Flag_sr } from './flags/4x3/sr.svg'; -export { ReactComponent as Flag_sj } from './flags/4x3/sj.svg'; -export { ReactComponent as Flag_se } from './flags/4x3/se.svg'; -export { ReactComponent as Flag_ch } from './flags/4x3/ch.svg'; -export { ReactComponent as Flag_sy } from './flags/4x3/sy.svg'; -export { ReactComponent as Flag_tw } from './flags/4x3/tw.svg'; -export { ReactComponent as Flag_tj } from './flags/4x3/tj.svg'; -export { ReactComponent as Flag_tz } from './flags/4x3/tz.svg'; -export { ReactComponent as Flag_th } from './flags/4x3/th.svg'; -export { ReactComponent as Flag_tl } from './flags/4x3/tl.svg'; -export { ReactComponent as Flag_tg } from './flags/4x3/tg.svg'; -export { ReactComponent as Flag_tk } from './flags/4x3/tk.svg'; -export { ReactComponent as Flag_to } from './flags/4x3/to.svg'; -export { ReactComponent as Flag_tt } from './flags/4x3/tt.svg'; -export { ReactComponent as Flag_sh_ta } from './flags/4x3/sh-ta.svg'; -export { ReactComponent as Flag_tn } from './flags/4x3/tn.svg'; -export { ReactComponent as Flag_tm } from './flags/4x3/tm.svg'; -export { ReactComponent as Flag_tc } from './flags/4x3/tc.svg'; -export { ReactComponent as Flag_tv } from './flags/4x3/tv.svg'; -export { ReactComponent as Flag_tr } from './flags/4x3/tr.svg'; -export { ReactComponent as Flag_ug } from './flags/4x3/ug.svg'; -export { ReactComponent as Flag_ua } from './flags/4x3/ua.svg'; -export { ReactComponent as Flag_ae } from './flags/4x3/ae.svg'; -export { ReactComponent as Flag_gb } from './flags/4x3/gb.svg'; -export { ReactComponent as Flag_un } from './flags/4x3/un.svg'; -export { ReactComponent as Flag_um } from './flags/4x3/um.svg'; -export { ReactComponent as Flag_us } from './flags/4x3/us.svg'; -export { ReactComponent as Flag_uy } from './flags/4x3/uy.svg'; -export { ReactComponent as Flag_uz } from './flags/4x3/uz.svg'; -export { ReactComponent as Flag_vu } from './flags/4x3/vu.svg'; -export { ReactComponent as Flag_ve } from './flags/4x3/ve.svg'; -export { ReactComponent as Flag_vn } from './flags/4x3/vn.svg'; -export { ReactComponent as Flag_vg } from './flags/4x3/vg.svg'; -export { ReactComponent as Flag_vi } from './flags/4x3/vi.svg'; -export { ReactComponent as Flag_gb_wls } from './flags/4x3/gb-wls.svg'; -export { ReactComponent as Flag_wf } from './flags/4x3/wf.svg'; -export { ReactComponent as Flag_eh } from './flags/4x3/eh.svg'; -export { ReactComponent as Flag_ye } from './flags/4x3/ye.svg'; -export { ReactComponent as Flag_zm } from './flags/4x3/zm.svg'; -export { ReactComponent as Flag_zw } from './flags/4x3/zw.svg'; \ No newline at end of file +export const Flag_gb =createSvgComponent(() => import('./flags/4x3/gb.svg')); +export const Flag_br =createSvgComponent(() => import('./flags/4x3/br.svg')); +export const Flag_it =createSvgComponent(() => import('./flags/4x3/it.svg')); +export const Flag_cn =createSvgComponent(() => import('./flags/4x3/cn.svg')); +export const Flag_de =createSvgComponent(() => import('./flags/4x3/de.svg')); +export const Flag_ru =createSvgComponent(() => import('./flags/4x3/ru.svg')); +export const Flag_es =createSvgComponent(() => import('./flags/4x3/es.svg')); +// export const Flag_af =createSvgComponent(() => import('./flags/4x3/af.svg')); +// export const Flag_ax =createSvgComponent(() => import('./flags/4x3/ax.svg')); +// export const Flag_al =createSvgComponent(() => import('./flags/4x3/al.svg')); +// export const Flag_dz =createSvgComponent(() => import('./flags/4x3/dz.svg')); +// export const Flag_as =createSvgComponent(() => import('./flags/4x3/as.svg')); +// export const Flag_ad =createSvgComponent(() => import('./flags/4x3/ad.svg')); +// export const Flag_ao =createSvgComponent(() => import('./flags/4x3/ao.svg')); +// export const Flag_ai =createSvgComponent(() => import('./flags/4x3/ai.svg')); +// export const Flag_aq =createSvgComponent(() => import('./flags/4x3/aq.svg')); +// export const Flag_ag =createSvgComponent(() => import('./flags/4x3/ag.svg')); +// export const Flag_ar =createSvgComponent(() => import('./flags/4x3/ar.svg')); +// export const Flag_am =createSvgComponent(() => import('./flags/4x3/am.svg')); +// export const Flag_aw =createSvgComponent(() => import('./flags/4x3/aw.svg')); +// export const Flag_sh_ac =createSvgComponent(() => import('./flags/4x3/sh-ac.svg')); +// export const Flag_au =createSvgComponent(() => import('./flags/4x3/au.svg')); +// export const Flag_at =createSvgComponent(() => import('./flags/4x3/at.svg')); +// export const Flag_az =createSvgComponent(() => import('./flags/4x3/az.svg')); +// export const Flag_bs =createSvgComponent(() => import('./flags/4x3/bs.svg')); +// export const Flag_bh =createSvgComponent(() => import('./flags/4x3/bh.svg')); +// export const Flag_bd =createSvgComponent(() => import('./flags/4x3/bd.svg')); +// export const Flag_bb =createSvgComponent(() => import('./flags/4x3/bb.svg')); +// export const Flag_by =createSvgComponent(() => import('./flags/4x3/by.svg')); +// export const Flag_be =createSvgComponent(() => import('./flags/4x3/be.svg')); +// export const Flag_bz =createSvgComponent(() => import('./flags/4x3/bz.svg')); +// export const Flag_bj =createSvgComponent(() => import('./flags/4x3/bj.svg')); +// export const Flag_bm =createSvgComponent(() => import('./flags/4x3/bm.svg')); +// export const Flag_bt =createSvgComponent(() => import('./flags/4x3/bt.svg')); +// export const Flag_bo =createSvgComponent(() => import('./flags/4x3/bo.svg')); +// export const Flag_bq =createSvgComponent(() => import('./flags/4x3/bq.svg')); +// export const Flag_ba =createSvgComponent(() => import('./flags/4x3/ba.svg')); +// export const Flag_bw =createSvgComponent(() => import('./flags/4x3/bw.svg')); +// export const Flag_bv =createSvgComponent(() => import('./flags/4x3/bv.svg')); +// export const Flag_io =createSvgComponent(() => import('./flags/4x3/io.svg')); +// export const Flag_bn =createSvgComponent(() => import('./flags/4x3/bn.svg')); +// export const Flag_bg =createSvgComponent(() => import('./flags/4x3/bg.svg')); +// export const Flag_bf =createSvgComponent(() => import('./flags/4x3/bf.svg')); +// export const Flag_bi =createSvgComponent(() => import('./flags/4x3/bi.svg')); +// export const Flag_cv =createSvgComponent(() => import('./flags/4x3/cv.svg')); +// export const Flag_kh =createSvgComponent(() => import('./flags/4x3/kh.svg')); +// export const Flag_cm =createSvgComponent(() => import('./flags/4x3/cm.svg')); +// export const Flag_ca =createSvgComponent(() => import('./flags/4x3/ca.svg')); +// export const Flag_ic =createSvgComponent(() => import('./flags/4x3/ic.svg')); +// export const Flag_es_ct =createSvgComponent(() => import('./flags/4x3/es-ct.svg')); +// export const Flag_ky =createSvgComponent(() => import('./flags/4x3/ky.svg')); +// export const Flag_cf =createSvgComponent(() => import('./flags/4x3/cf.svg')); +// export const Flag_td =createSvgComponent(() => import('./flags/4x3/td.svg')); +// export const Flag_cl =createSvgComponent(() => import('./flags/4x3/cl.svg')); +// export const Flag_cx =createSvgComponent(() => import('./flags/4x3/cx.svg')); +// export const Flag_cc =createSvgComponent(() => import('./flags/4x3/cc.svg')); +// export const Flag_co =createSvgComponent(() => import('./flags/4x3/co.svg')); +// export const Flag_km =createSvgComponent(() => import('./flags/4x3/km.svg')); +// export const Flag_ck =createSvgComponent(() => import('./flags/4x3/ck.svg')); +// export const Flag_cr =createSvgComponent(() => import('./flags/4x3/cr.svg')); +// export const Flag_hr =createSvgComponent(() => import('./flags/4x3/hr.svg')); +// export const Flag_cu =createSvgComponent(() => import('./flags/4x3/cu.svg')); +// export const Flag_cw =createSvgComponent(() => import('./flags/4x3/cw.svg')); +// export const Flag_cy =createSvgComponent(() => import('./flags/4x3/cy.svg')); +// export const Flag_cz =createSvgComponent(() => import('./flags/4x3/cz.svg')); +// export const Flag_ci =createSvgComponent(() => import('./flags/4x3/ci.svg')); +// export const Flag_cd =createSvgComponent(() => import('./flags/4x3/cd.svg')); +// export const Flag_dk =createSvgComponent(() => import('./flags/4x3/dk.svg')); +// export const Flag_dj =createSvgComponent(() => import('./flags/4x3/dj.svg')); +// export const Flag_dm =createSvgComponent(() => import('./flags/4x3/dm.svg')); +// export const Flag_do =createSvgComponent(() => import('./flags/4x3/do.svg')); +// export const Flag_ec =createSvgComponent(() => import('./flags/4x3/ec.svg')); +// export const Flag_eg =createSvgComponent(() => import('./flags/4x3/eg.svg')); +// export const Flag_sv =createSvgComponent(() => import('./flags/4x3/sv.svg')); +// export const Flag_gq =createSvgComponent(() => import('./flags/4x3/gq.svg')); +// export const Flag_er =createSvgComponent(() => import('./flags/4x3/er.svg')); +// export const Flag_ee =createSvgComponent(() => import('./flags/4x3/ee.svg')); +// export const Flag_sz =createSvgComponent(() => import('./flags/4x3/sz.svg')); +// export const Flag_et =createSvgComponent(() => import('./flags/4x3/et.svg')); +// export const Flag_eu =createSvgComponent(() => import('./flags/4x3/eu.svg')); +// export const Flag_fk =createSvgComponent(() => import('./flags/4x3/fk.svg')); +// export const Flag_fo =createSvgComponent(() => import('./flags/4x3/fo.svg')); +// export const Flag_fm =createSvgComponent(() => import('./flags/4x3/fm.svg')); +// export const Flag_fj =createSvgComponent(() => import('./flags/4x3/fj.svg')); +// export const Flag_fi =createSvgComponent(() => import('./flags/4x3/fi.svg')); +// export const Flag_fr =createSvgComponent(() => import('./flags/4x3/fr.svg')); +// export const Flag_gf =createSvgComponent(() => import('./flags/4x3/gf.svg')); +// export const Flag_pf =createSvgComponent(() => import('./flags/4x3/pf.svg')); +// export const Flag_tf =createSvgComponent(() => import('./flags/4x3/tf.svg')); +// export const Flag_ga =createSvgComponent(() => import('./flags/4x3/ga.svg')); +// export const Flag_gm =createSvgComponent(() => import('./flags/4x3/gm.svg')); +// export const Flag_ge =createSvgComponent(() => import('./flags/4x3/ge.svg')); +// export const Flag_gh =createSvgComponent(() => import('./flags/4x3/gh.svg')); +// export const Flag_gi =createSvgComponent(() => import('./flags/4x3/gi.svg')); +// export const Flag_gr =createSvgComponent(() => import('./flags/4x3/gr.svg')); +// export const Flag_gl =createSvgComponent(() => import('./flags/4x3/gl.svg')); +// export const Flag_gd =createSvgComponent(() => import('./flags/4x3/gd.svg')); +// export const Flag_gp =createSvgComponent(() => import('./flags/4x3/gp.svg')); +// export const Flag_gu =createSvgComponent(() => import('./flags/4x3/gu.svg')); +// export const Flag_gt =createSvgComponent(() => import('./flags/4x3/gt.svg')); +// export const Flag_gg =createSvgComponent(() => import('./flags/4x3/gg.svg')); +// export const Flag_gn =createSvgComponent(() => import('./flags/4x3/gn.svg')); +// export const Flag_gw =createSvgComponent(() => import('./flags/4x3/gw.svg')); +// export const Flag_gy =createSvgComponent(() => import('./flags/4x3/gy.svg')); +// export const Flag_ht =createSvgComponent(() => import('./flags/4x3/ht.svg')); +// export const Flag_hm =createSvgComponent(() => import('./flags/4x3/hm.svg')); +// export const Flag_va =createSvgComponent(() => import('./flags/4x3/va.svg')); +// export const Flag_hn =createSvgComponent(() => import('./flags/4x3/hn.svg')); +// export const Flag_hk =createSvgComponent(() => import('./flags/4x3/hk.svg')); +// export const Flag_hu =createSvgComponent(() => import('./flags/4x3/hu.svg')); +// export const Flag_is =createSvgComponent(() => import('./flags/4x3/is.svg')); +// export const Flag_in =createSvgComponent(() => import('./flags/4x3/in.svg')); +// export const Flag_id =createSvgComponent(() => import('./flags/4x3/id.svg')); +// export const Flag_ir =createSvgComponent(() => import('./flags/4x3/ir.svg')); +// export const Flag_iq =createSvgComponent(() => import('./flags/4x3/iq.svg')); +// export const Flag_ie =createSvgComponent(() => import('./flags/4x3/ie.svg')); +// export const Flag_im =createSvgComponent(() => import('./flags/4x3/im.svg')); +// export const Flag_il =createSvgComponent(() => import('./flags/4x3/il.svg')); +// export const Flag_jm =createSvgComponent(() => import('./flags/4x3/jm.svg')); +// export const Flag_jp =createSvgComponent(() => import('./flags/4x3/jp.svg')); +// export const Flag_je =createSvgComponent(() => import('./flags/4x3/je.svg')); +// export const Flag_jo =createSvgComponent(() => import('./flags/4x3/jo.svg')); +// export const Flag_kz =createSvgComponent(() => import('./flags/4x3/kz.svg')); +// export const Flag_ke =createSvgComponent(() => import('./flags/4x3/ke.svg')); +// export const Flag_ki =createSvgComponent(() => import('./flags/4x3/ki.svg')); +// export const Flag_xk =createSvgComponent(() => import('./flags/4x3/xk.svg')); +// export const Flag_kw =createSvgComponent(() => import('./flags/4x3/kw.svg')); +// export const Flag_kg =createSvgComponent(() => import('./flags/4x3/kg.svg')); +// export const Flag_la =createSvgComponent(() => import('./flags/4x3/la.svg')); +// export const Flag_lv =createSvgComponent(() => import('./flags/4x3/lv.svg')); +// export const Flag_lb =createSvgComponent(() => import('./flags/4x3/lb.svg')); +// export const Flag_ls =createSvgComponent(() => import('./flags/4x3/ls.svg')); +// export const Flag_lr =createSvgComponent(() => import('./flags/4x3/lr.svg')); +// export const Flag_ly =createSvgComponent(() => import('./flags/4x3/ly.svg')); +// export const Flag_li =createSvgComponent(() => import('./flags/4x3/li.svg')); +// export const Flag_lt =createSvgComponent(() => import('./flags/4x3/lt.svg')); +// export const Flag_lu =createSvgComponent(() => import('./flags/4x3/lu.svg')); +// export const Flag_mo =createSvgComponent(() => import('./flags/4x3/mo.svg')); +// export const Flag_mg =createSvgComponent(() => import('./flags/4x3/mg.svg')); +// export const Flag_mw =createSvgComponent(() => import('./flags/4x3/mw.svg')); +// export const Flag_my =createSvgComponent(() => import('./flags/4x3/my.svg')); +// export const Flag_mv =createSvgComponent(() => import('./flags/4x3/mv.svg')); +// export const Flag_ml =createSvgComponent(() => import('./flags/4x3/ml.svg')); +// export const Flag_mt =createSvgComponent(() => import('./flags/4x3/mt.svg')); +// export const Flag_mh =createSvgComponent(() => import('./flags/4x3/mh.svg')); +// export const Flag_mq =createSvgComponent(() => import('./flags/4x3/mq.svg')); +// export const Flag_mr =createSvgComponent(() => import('./flags/4x3/mr.svg')); +// export const Flag_mu =createSvgComponent(() => import('./flags/4x3/mu.svg')); +// export const Flag_yt =createSvgComponent(() => import('./flags/4x3/yt.svg')); +// export const Flag_mx =createSvgComponent(() => import('./flags/4x3/mx.svg')); +// export const Flag_md =createSvgComponent(() => import('./flags/4x3/md.svg')); +// export const Flag_mc =createSvgComponent(() => import('./flags/4x3/mc.svg')); +// export const Flag_mn =createSvgComponent(() => import('./flags/4x3/mn.svg')); +// export const Flag_me =createSvgComponent(() => import('./flags/4x3/me.svg')); +// export const Flag_ms =createSvgComponent(() => import('./flags/4x3/ms.svg')); +// export const Flag_ma =createSvgComponent(() => import('./flags/4x3/ma.svg')); +// export const Flag_mz =createSvgComponent(() => import('./flags/4x3/mz.svg')); +// export const Flag_mm =createSvgComponent(() => import('./flags/4x3/mm.svg')); +// export const Flag_na =createSvgComponent(() => import('./flags/4x3/na.svg')); +// export const Flag_nr =createSvgComponent(() => import('./flags/4x3/nr.svg')); +// export const Flag_np =createSvgComponent(() => import('./flags/4x3/np.svg')); +// export const Flag_nl =createSvgComponent(() => import('./flags/4x3/nl.svg')); +// export const Flag_nc =createSvgComponent(() => import('./flags/4x3/nc.svg')); +// export const Flag_nz =createSvgComponent(() => import('./flags/4x3/nz.svg')); +// export const Flag_ni =createSvgComponent(() => import('./flags/4x3/ni.svg')); +// export const Flag_ne =createSvgComponent(() => import('./flags/4x3/ne.svg')); +// export const Flag_ng =createSvgComponent(() => import('./flags/4x3/ng.svg')); +// export const Flag_nu =createSvgComponent(() => import('./flags/4x3/nu.svg')); +// export const Flag_nf =createSvgComponent(() => import('./flags/4x3/nf.svg')); +// export const Flag_kp =createSvgComponent(() => import('./flags/4x3/kp.svg')); +// export const Flag_mk =createSvgComponent(() => import('./flags/4x3/mk.svg')); +// export const Flag_gb_nir =createSvgComponent(() => import('./flags/4x3/gb-nir.svg')); +// export const Flag_mp =createSvgComponent(() => import('./flags/4x3/mp.svg')); +// export const Flag_no =createSvgComponent(() => import('./flags/4x3/no.svg')); +// export const Flag_om =createSvgComponent(() => import('./flags/4x3/om.svg')); +// export const Flag_pk =createSvgComponent(() => import('./flags/4x3/pk.svg')); +// export const Flag_pw =createSvgComponent(() => import('./flags/4x3/pw.svg')); +// export const Flag_pa =createSvgComponent(() => import('./flags/4x3/pa.svg')); +// export const Flag_pg =createSvgComponent(() => import('./flags/4x3/pg.svg')); +// export const Flag_py =createSvgComponent(() => import('./flags/4x3/py.svg')); +// export const Flag_pe =createSvgComponent(() => import('./flags/4x3/pe.svg')); +// export const Flag_ph =createSvgComponent(() => import('./flags/4x3/ph.svg')); +// export const Flag_pn =createSvgComponent(() => import('./flags/4x3/pn.svg')); +// export const Flag_pl =createSvgComponent(() => import('./flags/4x3/pl.svg')); +// export const Flag_pt =createSvgComponent(() => import('./flags/4x3/pt.svg')); +// export const Flag_pr =createSvgComponent(() => import('./flags/4x3/pr.svg')); +// export const Flag_qa =createSvgComponent(() => import('./flags/4x3/qa.svg')); +// export const Flag_cg =createSvgComponent(() => import('./flags/4x3/cg.svg')); +// export const Flag_ro =createSvgComponent(() => import('./flags/4x3/ro.svg')); +// export const Flag_rw =createSvgComponent(() => import('./flags/4x3/rw.svg')); +// export const Flag_re =createSvgComponent(() => import('./flags/4x3/re.svg')); +// export const Flag_bl =createSvgComponent(() => import('./flags/4x3/bl.svg')); +// export const Flag_sh_hl =createSvgComponent(() => import('./flags/4x3/sh-hl.svg')); +// export const Flag_sh =createSvgComponent(() => import('./flags/4x3/sh.svg')); +// export const Flag_kn =createSvgComponent(() => import('./flags/4x3/kn.svg')); +// export const Flag_lc =createSvgComponent(() => import('./flags/4x3/lc.svg')); +// export const Flag_mf =createSvgComponent(() => import('./flags/4x3/mf.svg')); +// export const Flag_pm =createSvgComponent(() => import('./flags/4x3/pm.svg')); +// export const Flag_vc =createSvgComponent(() => import('./flags/4x3/vc.svg')); +// export const Flag_ws =createSvgComponent(() => import('./flags/4x3/ws.svg')); +// export const Flag_sm =createSvgComponent(() => import('./flags/4x3/sm.svg')); +// export const Flag_st =createSvgComponent(() => import('./flags/4x3/st.svg')); +// export const Flag_sa =createSvgComponent(() => import('./flags/4x3/sa.svg')); +// export const Flag_gb_sct =createSvgComponent(() => import('./flags/4x3/gb-sct.svg')); +// export const Flag_sn =createSvgComponent(() => import('./flags/4x3/sn.svg')); +// export const Flag_rs =createSvgComponent(() => import('./flags/4x3/rs.svg')); +// export const Flag_sc =createSvgComponent(() => import('./flags/4x3/sc.svg')); +// export const Flag_sl =createSvgComponent(() => import('./flags/4x3/sl.svg')); +// export const Flag_sg =createSvgComponent(() => import('./flags/4x3/sg.svg')); +// export const Flag_sx =createSvgComponent(() => import('./flags/4x3/sx.svg')); +// export const Flag_sk =createSvgComponent(() => import('./flags/4x3/sk.svg')); +// export const Flag_si =createSvgComponent(() => import('./flags/4x3/si.svg')); +// export const Flag_sb =createSvgComponent(() => import('./flags/4x3/sb.svg')); +// export const Flag_so =createSvgComponent(() => import('./flags/4x3/so.svg')); +// export const Flag_za =createSvgComponent(() => import('./flags/4x3/za.svg')); +// export const Flag_gs =createSvgComponent(() => import('./flags/4x3/gs.svg')); +// export const Flag_kr =createSvgComponent(() => import('./flags/4x3/kr.svg')); +// export const Flag_ss =createSvgComponent(() => import('./flags/4x3/ss.svg')); +// export const Flag_lk =createSvgComponent(() => import('./flags/4x3/lk.svg')); +// export const Flag_ps =createSvgComponent(() => import('./flags/4x3/ps.svg')); +// export const Flag_sd =createSvgComponent(() => import('./flags/4x3/sd.svg')); +// export const Flag_sr =createSvgComponent(() => import('./flags/4x3/sr.svg')); +// export const Flag_sj =createSvgComponent(() => import('./flags/4x3/sj.svg')); +// export const Flag_se =createSvgComponent(() => import('./flags/4x3/se.svg')); +// export const Flag_ch =createSvgComponent(() => import('./flags/4x3/ch.svg')); +// export const Flag_sy =createSvgComponent(() => import('./flags/4x3/sy.svg')); +// export const Flag_tw =createSvgComponent(() => import('./flags/4x3/tw.svg')); +// export const Flag_tj =createSvgComponent(() => import('./flags/4x3/tj.svg')); +// export const Flag_tz =createSvgComponent(() => import('./flags/4x3/tz.svg')); +// export const Flag_th =createSvgComponent(() => import('./flags/4x3/th.svg')); +// export const Flag_tl =createSvgComponent(() => import('./flags/4x3/tl.svg')); +// export const Flag_tg =createSvgComponent(() => import('./flags/4x3/tg.svg')); +// export const Flag_tk =createSvgComponent(() => import('./flags/4x3/tk.svg')); +// export const Flag_to =createSvgComponent(() => import('./flags/4x3/to.svg')); +// export const Flag_tt =createSvgComponent(() => import('./flags/4x3/tt.svg')); +// export const Flag_sh_ta =createSvgComponent(() => import('./flags/4x3/sh-ta.svg')); +// export const Flag_tn =createSvgComponent(() => import('./flags/4x3/tn.svg')); +// export const Flag_tm =createSvgComponent(() => import('./flags/4x3/tm.svg')); +// export const Flag_tc =createSvgComponent(() => import('./flags/4x3/tc.svg')); +// export const Flag_tv =createSvgComponent(() => import('./flags/4x3/tv.svg')); +// export const Flag_tr =createSvgComponent(() => import('./flags/4x3/tr.svg')); +// export const Flag_ug =createSvgComponent(() => import('./flags/4x3/ug.svg')); +// export const Flag_ua =createSvgComponent(() => import('./flags/4x3/ua.svg')); +// export const Flag_ae =createSvgComponent(() => import('./flags/4x3/ae.svg')); +// +// export const Flag_un =createSvgComponent(() => import('./flags/4x3/un.svg')); +// export const Flag_um =createSvgComponent(() => import('./flags/4x3/um.svg')); +// export const Flag_us =createSvgComponent(() => import('./flags/4x3/us.svg')); +// export const Flag_uy =createSvgComponent(() => import('./flags/4x3/uy.svg')); +// export const Flag_uz =createSvgComponent(() => import('./flags/4x3/uz.svg')); +// export const Flag_vu =createSvgComponent(() => import('./flags/4x3/vu.svg')); +// export const Flag_ve =createSvgComponent(() => import('./flags/4x3/ve.svg')); +// export const Flag_vn =createSvgComponent(() => import('./flags/4x3/vn.svg')); +// export const Flag_vg =createSvgComponent(() => import('./flags/4x3/vg.svg')); +// export const Flag_vi =createSvgComponent(() => import('./flags/4x3/vi.svg')); +// export const Flag_gb_wls =createSvgComponent(() => import('./flags/4x3/gb-wls.svg')); +// export const Flag_wf =createSvgComponent(() => import('./flags/4x3/wf.svg')); +// export const Flag_eh =createSvgComponent(() => import('./flags/4x3/eh.svg')); +// export const Flag_ye =createSvgComponent(() => import('./flags/4x3/ye.svg')); +// export const Flag_zm =createSvgComponent(() => import('./flags/4x3/zm.svg')); +// export const Flag_zw =createSvgComponent(() => import('./flags/4x3/zw.svg')); \ No newline at end of file diff --git a/client/packages/lowcoder-design/tsconfig.json b/client/packages/lowcoder-design/tsconfig.json index b2bbca4d1..f574287d7 100644 --- a/client/packages/lowcoder-design/tsconfig.json +++ b/client/packages/lowcoder-design/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "esnext", "experimentalDecorators": true, "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, diff --git a/client/packages/lowcoder-sdk/package.json b/client/packages/lowcoder-sdk/package.json index ed81c3ba7..3c0d73b4f 100644 --- a/client/packages/lowcoder-sdk/package.json +++ b/client/packages/lowcoder-sdk/package.json @@ -29,7 +29,8 @@ }, "scripts": { "build": "NODE_OPTIONS=--max_old_space_size=6442 vite build", - "start": "NODE_OPTIONS=--max_old_space_size=2048 vite" + "start": "NODE_OPTIONS=--max_old_space_size=2048 vite", + "build:view": "REACT_APP_VIEW_MODE=view yarn build" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", diff --git a/client/packages/lowcoder-sdk/src/dev-utils/buildVars.js b/client/packages/lowcoder-sdk/src/dev-utils/buildVars.js index 73c7c1b2b..6fc1ef939 100644 --- a/client/packages/lowcoder-sdk/src/dev-utils/buildVars.js +++ b/client/packages/lowcoder-sdk/src/dev-utils/buildVars.js @@ -55,4 +55,8 @@ export const buildVars = [ name: "REACT_APP_DISABLE_JS_SANDBOX", defaultValue: "", }, + { + name: "REACT_APP_VIEW_MODE", + defaultValue: "admin" + } ]; diff --git a/client/packages/lowcoder/index.html b/client/packages/lowcoder/index.html index 2c3d6cd34..72c726c3b 100644 --- a/client/packages/lowcoder/index.html +++ b/client/packages/lowcoder/index.html @@ -28,6 +28,8 @@ display: flex; pointer-events: none; flex-direction: column; + top: 0; + z-index: 10000; } #loading svg { animation: breath 1s linear infinite; diff --git a/client/packages/lowcoder/src/app-env.d.ts b/client/packages/lowcoder/src/app-env.d.ts index 5205d43a8..1b8f21a1a 100644 --- a/client/packages/lowcoder/src/app-env.d.ts +++ b/client/packages/lowcoder/src/app-env.d.ts @@ -33,6 +33,7 @@ declare var numbro: any; declare var uuid: any; declare var PUBLIC_URL: string; declare var REACT_APP_EDITION: string; +declare var REACT_APP_VIEW_MODE: string; declare var REACT_APP_LANGUAGES: string; declare var REACT_APP_COMMIT_ID: string; declare var REACT_APP_API_SERVICE_URL: string; diff --git a/client/packages/lowcoder/src/app.tsx b/client/packages/lowcoder/src/app.tsx deleted file mode 100644 index 539844834..000000000 --- a/client/packages/lowcoder/src/app.tsx +++ /dev/null @@ -1,462 +0,0 @@ -import { default as App } from "antd/es/app"; -import { default as ConfigProvider } from "antd/es/config-provider"; -import { - USER_PROFILE_URL, - NEWS_URL, - ORG_HOME_URL, - ALL_APPLICATIONS_URL, - APP_EDITOR_URL, - APPLICATION_VIEW_URL, - BASE_URL, - COMPONENT_DOC_URL, - DATASOURCE_CREATE_URL, - DATASOURCE_EDIT_URL, - DATASOURCE_URL, - SUPPORT_URL, - FOLDER_URL, - FOLDERS_URL, - IMPORT_APP_FROM_TEMPLATE_URL, - INVITE_LANDING_URL, - isAuthUnRequired, - MARKETPLACE_URL, - ORG_AUTH_LOGIN_URL, - ORG_AUTH_REGISTER_URL, - QUERY_LIBRARY_URL, - SETTING_URL, - TRASH_URL, - USER_AUTH_URL, - ADMIN_APP_URL, - ORG_AUTH_FORGOT_PASSWORD_URL, - ORG_AUTH_RESET_PASSWORD_URL, - ADMIN_AUTH_URL, -} from "constants/routesURL"; -import React 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 type { AppState } from "redux/reducers"; -import { fetchConfigAction } from "redux/reduxActions/configActions"; -import { fetchUserAction } from "redux/reduxActions/userActions"; -import { reduxStore } from "redux/store/store"; -import { developEnv } from "util/envUtils"; -import history from "util/history"; -import LazyRoute from "components/LazyRoute"; -import { getAntdLocale } from "i18n/antdLocale"; -import { ProductLoading } from "components/ProductLoading"; -import { trans } from "i18n"; // language -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 { getIsCommonSettingFetched } from "redux/selectors/commonSettingSelectors"; -import { SystemWarning } from "./components/SystemWarning"; -import { getBrandingConfig } 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"; - -const LazyUserAuthComp = React.lazy(() => import("pages/userAuth")); -const LazyInviteLanding = React.lazy(() => import("pages/common/inviteLanding")); -const LazyComponentDoc = React.lazy(() => import("pages/ComponentDoc")); -const LazyComponentPlayground = React.lazy(() => import("pages/ComponentPlayground")); -const LazyAppEditor = React.lazy(() => import("pages/editor/AppEditor")); -const LazyAppFromTemplate = React.lazy(() => import("pages/ApplicationV2/AppFromTemplate")); -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 }) => ( - - - - {props.children} - - -); - -type AppIndexProps = { - isFetchUserFinished: boolean; - getIsCommonSettingFetched: boolean; - currentOrgId?: string; - currentUserId: string; - currentUserAnonymous: boolean; - orgDev: boolean; - defaultHomePage: string | null | undefined; - fetchHomeDataFinished: boolean; - fetchConfig: (orgId?: string) => void; - fetchHomeData: (currentUserAnonymous?: boolean | undefined) => void; - fetchLowcoderCompVersions: () => void; - getCurrentUser: () => void; - fetchServerSettings: () => void; - favicon: string; - brandName: string; - uiLanguage: string; -}; - -class AppIndex extends React.Component { - componentDidMount() { - this.props.getCurrentUser(); - this.props.fetchServerSettings(); - // if (!this.props.currentUserAnonymous) { - // this.props.fetchHomeData(this.props.currentUserAnonymous); - // } - } - - componentDidUpdate(prevProps: AppIndexProps) { - if ( - prevProps.currentOrgId !== this.props.currentOrgId && - this.props.currentOrgId !== '' - ) { - this.props.fetchConfig(this.props.currentOrgId); - if (!this.props.currentUserAnonymous) { - this.props.fetchHomeData(this.props.currentUserAnonymous); - this.props.fetchLowcoderCompVersions(); - } - } - } - render() { - const isTemplate = hasQueryParam('template'); - const pathname = history.location.pathname; - - // we check if we are on the public cloud - const isLowCoderDomain = window.location.hostname === 'app.lowcoder.cloud'; - const isLocalhost = window.location.hostname === 'localhost'; - - /* if (isLocalhost || isLowCoderDomain) { - posthog.init('phc_lD36OXeppUehLgI33YFhioTpXqThZ5QqR8IWeKvXP7f', { api_host: 'https://eu.i.posthog.com', person_profiles: 'always' }); - } */ - - // make sure all users in this app have checked login info - if (!this.props.isFetchUserFinished || (this.props.currentUserId && !this.props.fetchHomeDataFinished)) { - const hideLoadingHeader = isTemplate || isAuthUnRequired(pathname); - return ; - } - else { - // if the user just logged in, we send the event to posthog - if (isLocalhost || isLowCoderDomain) { - if (sessionStorage.getItem('_just_logged_in_')) { - // posthog.identify(this.props.currentUserId); - sessionStorage.removeItem('_just_logged_in_'); - } - } - } - - // persisting the language in local storage - localStorage.setItem('lowcoder_uiLanguage', this.props.uiLanguage); - - return ( - - - {{this.props.brandName}} - {} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* }, */} - - - {isLowCoderDomain || isLocalhost && [ - // Adding Support for iframely to be able to embedd the component explorer in the docu - , - , - , - - , - , - , - // adding Clearbit Support for Analytics - , - ]} - - - - - - - - - - - - - - - - - - {this.props.isFetchUserFinished && this.props.defaultHomePage? ( - !this.props.orgDev ? ( - - ) : ( - - ) - ) : ( - - )} - - - - {developEnv() && ( - <> - - - - - - )} - - - - ); - } -} - -const mapStateToProps = (state: AppState) => ({ - isFetchUserFinished: isFetchUserFinished(state), - getIsCommonSettingFetched: getIsCommonSettingFetched(state), - orgDev: state.ui.users.user.orgDev, - currentUserId: state.ui.users.currentUser.id, - currentUserAnonymous: state.ui.users.user.isAnonymous, - currentOrgId: state.ui.users.user.currentOrgId, - defaultHomePage: state.ui.application.homeOrg?.commonSettings.defaultHomePage, - fetchHomeDataFinished: Boolean(state.ui.application.homeOrg?.commonSettings), - favicon: getBrandingConfig(state)?.favicon - ? buildMaterialPreviewURL(getBrandingConfig(state)?.favicon!) - : favicon, - brandName: getBrandingConfig(state)?.brandName ?? trans("productName"), - uiLanguage: state.ui.users.user.uiLanguage, -}); - -const mapDispatchToProps = (dispatch: any) => ({ - getCurrentUser: () => { - dispatch(fetchUserAction()); - }, - fetchConfig: (orgId?: string) => dispatch(fetchConfigAction(orgId)), - fetchHomeData: (currentUserAnonymous: boolean | undefined) => { - dispatch(fetchHomeData({})); - }, - fetchLowcoderCompVersions: async () => { - try { - dispatch(setLowcoderCompsLoading(true)); - const packageMeta = await getNpmPackageMeta('lowcoder-comps'); - if (packageMeta?.versions) { - dispatch(packageMetaReadyAction('lowcoder-comps', packageMeta)); - } - dispatch(setLowcoderCompsLoading(false)); - } catch (_) { - dispatch(setLowcoderCompsLoading(false)); - } - }, - fetchServerSettings: () => { - dispatch(fetchServerSettingsAction()); - } -}); - -const AppIndexWithProps = connect(mapStateToProps, mapDispatchToProps)(AppIndex); - -export function bootstrap() { - initApp(); - loadComps(); - - const container = document.getElementById("root"); - const root = createRoot(container!); - root.render( - - - - ); -} diff --git a/client/packages/lowcoder/src/appView/bootstrapAt.tsx b/client/packages/lowcoder/src/appView/bootstrapAt.tsx index 1ba424eb3..c3be74e43 100644 --- a/client/packages/lowcoder/src/appView/bootstrapAt.tsx +++ b/client/packages/lowcoder/src/appView/bootstrapAt.tsx @@ -1,14 +1,16 @@ -import { loadComps } from "comps"; import type { AppViewInstanceOptions } from "./AppViewInstance"; import { createRoot } from "react-dom/client"; - -loadComps(); +import {viewMode} from "@lowcoder-ee/util/editor"; export async function bootstrapAppAt( appId: string, node: Element | null, options: AppViewInstanceOptions = {} ) { + let loadComps: any; + if(viewMode() !== "view") loadComps = await import("bootstrap/admin"); + else loadComps = await import("bootstrap/view"); + await loadComps(); if (!node) { console.error("node must be not null."); return; diff --git a/client/packages/lowcoder/src/bootstrap/admin/app.tsx b/client/packages/lowcoder/src/bootstrap/admin/app.tsx new file mode 100644 index 000000000..9c406c712 --- /dev/null +++ b/client/packages/lowcoder/src/bootstrap/admin/app.tsx @@ -0,0 +1,452 @@ +import { default as App } from "antd/es/app"; +import { default as ConfigProvider } from "antd/es/config-provider"; +import { + USER_PROFILE_URL, + NEWS_URL, + ORG_HOME_URL, + ALL_APPLICATIONS_URL, + APP_EDITOR_URL, + APPLICATION_VIEW_URL, + BASE_URL, + COMPONENT_DOC_URL, + DATASOURCE_CREATE_URL, + DATASOURCE_EDIT_URL, + DATASOURCE_URL, + SUPPORT_URL, + FOLDER_URL, + FOLDERS_URL, + IMPORT_APP_FROM_TEMPLATE_URL, + INVITE_LANDING_URL, + isAuthUnRequired, + MARKETPLACE_URL, + ORG_AUTH_LOGIN_URL, + ORG_AUTH_REGISTER_URL, + QUERY_LIBRARY_URL, + SETTING_URL, + TRASH_URL, + USER_AUTH_URL, + ADMIN_APP_URL, + ORG_AUTH_FORGOT_PASSWORD_URL, + ORG_AUTH_RESET_PASSWORD_URL, +} from "constants/routesURL"; +import React 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 type { AppState } from "redux/reducers"; +import { fetchConfigAction } from "redux/reduxActions/configActions"; +import { fetchUserAction } from "redux/reduxActions/userActions"; +import { reduxStore } from "redux/store/store"; +import { developEnv } from "util/envUtils"; +import history from "util/history"; +import LazyRoute from "components/LazyRoute"; +import { getAntdLocale } from "i18n/antdLocale"; +import { ProductLoading } from "components/ProductLoading"; +import { trans } from "i18n"; // language +import { loadComps } from "@lowcoder-ee/bootstrap/admin/index"; +import { initApp } from "util/commonUtils"; +import { favicon } from "assets/images"; +import { hasQueryParam } from "util/urlUtils"; +import { isFetchUserFinished } from "redux/selectors/usersSelectors"; // getCurrentUser, +import { getIsCommonSettingFetched } from "redux/selectors/commonSettingSelectors"; +import { SystemWarning } from "../../components/SystemWarning"; +import { getBrandingConfig } from "../../redux/selectors/configSelectors"; +import { buildMaterialPreviewURL } from "../../util/materialUtils"; +import GlobalInstances from 'components/GlobalInstances'; +// import posthog from 'posthog-js' +import { fetchHomeData } from "../../redux/reduxActions/applicationActions"; +import { getNpmPackageMeta } from "../../comps/utils/remote"; +import { packageMetaReadyAction, setLowcoderCompsLoading } from "../../redux/reduxActions/npmPluginActions"; + +const LazyUserAuthComp = React.lazy(() => import("pages/userAuth")); +const LazyInviteLanding = React.lazy(() => import("pages/common/inviteLanding")); +const LazyComponentDoc = React.lazy(() => import("pages/ComponentDoc")); +const LazyComponentPlayground = React.lazy(() => import("pages/ComponentPlayground")); +const LazyAppEditor = React.lazy(() => import("pages/editor/AppEditor")); +const LazyAppFromTemplate = React.lazy(() => import("pages/ApplicationV2/AppFromTemplate")); +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 }) => ( + + + + {props.children} + + +); + +type AppIndexProps = { + isFetchUserFinished: boolean; + getIsCommonSettingFetched: boolean; + currentOrgId?: string; + currentUserId: string; + currentUserAnonymous: boolean; + orgDev: boolean; + defaultHomePage: string | null | undefined; + fetchHomeDataFinished: boolean; + fetchConfig: (orgId?: string) => void; + fetchHomeData: (currentUserAnonymous?: boolean | undefined) => void; + fetchLowcoderCompVersions: () => void; + getCurrentUser: () => void; + favicon: string; + brandName: string; + uiLanguage: string; +}; + +class AppIndex extends React.Component { + componentDidMount() { + this.props.getCurrentUser(); + // if (!this.props.currentUserAnonymous) { + // this.props.fetchHomeData(this.props.currentUserAnonymous); + // } + } + + componentDidUpdate(prevProps: AppIndexProps) { + if ( + prevProps.currentOrgId !== this.props.currentOrgId && + this.props.currentOrgId !== '' + ) { + this.props.fetchConfig(this.props.currentOrgId); + if (!this.props.currentUserAnonymous) { + this.props.fetchHomeData(this.props.currentUserAnonymous); + this.props.fetchLowcoderCompVersions(); + } + } + } + render() { + const isTemplate = hasQueryParam('template'); + const pathname = history.location.pathname; + + // we check if we are on the public cloud + const isLowCoderDomain = window.location.hostname === 'app.lowcoder.cloud'; + const isLocalhost = window.location.hostname === 'localhost'; + + /* if (isLocalhost || isLowCoderDomain) { + posthog.init('phc_lD36OXeppUehLgI33YFhioTpXqThZ5QqR8IWeKvXP7f', { api_host: 'https://eu.i.posthog.com', person_profiles: 'always' }); + } */ + + // make sure all users in this app have checked login info + if (!this.props.isFetchUserFinished || (this.props.currentUserId && !this.props.fetchHomeDataFinished)) { + const hideLoadingHeader = isTemplate || isAuthUnRequired(pathname); + return ; + } + else { + // if the user just logged in, we send the event to posthog + if (isLocalhost || isLowCoderDomain) { + if (sessionStorage.getItem('_just_logged_in_')) { + // posthog.identify(this.props.currentUserId); + sessionStorage.removeItem('_just_logged_in_'); + } + } + } + + return ( + + + {{this.props.brandName}} + {} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* }, */} + + + {isLowCoderDomain || isLocalhost && [ + // Adding Support for iframely to be able to embedd the component explorer in the docu + , + , + , + + , + , + , + // adding Clearbit Support for Analytics + , + ]} + + + + + + + + + + + + + + + + + {this.props.isFetchUserFinished && this.props.defaultHomePage? ( + !this.props.orgDev ? ( + + ) : ( + + ) + ) : ( + + )} + + + + {developEnv() && ( + <> + + + + + + )} + + + + ); + } +} + +const mapStateToProps = (state: AppState) => ({ + isFetchUserFinished: isFetchUserFinished(state), + getIsCommonSettingFetched: getIsCommonSettingFetched(state), + orgDev: state.ui.users.user.orgDev, + currentUserId: state.ui.users.currentUser.id, + currentUserAnonymous: state.ui.users.user.isAnonymous, + currentOrgId: state.ui.users.user.currentOrgId, + defaultHomePage: state.ui.application.homeOrg?.commonSettings.defaultHomePage, + fetchHomeDataFinished: Boolean(state.ui.application.homeOrg?.commonSettings), + favicon: getBrandingConfig(state)?.favicon + ? buildMaterialPreviewURL(getBrandingConfig(state)?.favicon!) + : favicon, + brandName: getBrandingConfig(state)?.brandName ?? trans("productName"), + uiLanguage: state.ui.users.user.uiLanguage, +}); + +const mapDispatchToProps = (dispatch: any) => ({ + getCurrentUser: () => { + dispatch(fetchUserAction()); + }, + fetchConfig: (orgId?: string) => dispatch(fetchConfigAction(orgId)), + fetchHomeData: (currentUserAnonymous: boolean | undefined) => { + dispatch(fetchHomeData({})); + }, + fetchLowcoderCompVersions: async () => { + try { + dispatch(setLowcoderCompsLoading(true)); + const packageMeta = await getNpmPackageMeta('lowcoder-comps'); + if (packageMeta?.versions) { + dispatch(packageMetaReadyAction('lowcoder-comps', packageMeta)); + } + dispatch(setLowcoderCompsLoading(false)); + } catch (_) { + dispatch(setLowcoderCompsLoading(false)); + } + }, +}); + +const AppIndexWithProps = connect(mapStateToProps, mapDispatchToProps)(AppIndex); + +export function bootstrap() { + initApp(); + loadComps(); + + const container = document.getElementById("root"); + const root = createRoot(container!); + root.render( + + + + ); +} diff --git a/client/packages/lowcoder/src/comps/index.tsx b/client/packages/lowcoder/src/bootstrap/admin/index.tsx similarity index 90% rename from client/packages/lowcoder/src/comps/index.tsx rename to client/packages/lowcoder/src/bootstrap/admin/index.tsx index a90262fd7..2b360324a 100644 --- a/client/packages/lowcoder/src/comps/index.tsx +++ b/client/packages/lowcoder/src/bootstrap/admin/index.tsx @@ -1,13 +1,13 @@ import cnchar from "cnchar"; -import { trans } from "i18n"; -import { remoteComp } from "./comps/remoteComp/remoteComp"; +import { trans } from "@lowcoder-ee/i18n"; +import { remoteComp } from "../../comps/comps/remoteComp/remoteComp"; import { registerComp, type UICompManifest, type UICompType, -} from "./uiCompRegistry"; -import { RemoteCompInfo } from "types/remoteComp"; - +} from "../../comps/uiCompRegistry"; +import { RemoteCompInfo } from "@lowcoder-ee/types/remoteComp"; +import { MultiIcon } from "@lowcoder-ee/comps/comps/multiIconDisplay"; import { AvatarCompIcon, AvatarGroupCompIcon, @@ -134,7 +134,7 @@ export var uiCompMap: Registry = { enName: "Chart", description: trans("uiComp.chartCompDesc"), categories: ["dashboards"], - icon: ChartCompIcon, + icon: MultiIcon(ChartCompIcon), comp: remoteComp({ ...builtInRemoteComps, compName: "chart" }), keywords: trans("uiComp.chartCompKeywords"), layoutInfo: { @@ -148,7 +148,7 @@ export var uiCompMap: Registry = { enName: "Basic Chart", description: trans("uiComp.basicChartCompDesc"), categories: ["dashboards"], - icon: ChartCompIcon, + icon: MultiIcon(ChartCompIcon), comp: remoteComp({ ...builtInRemoteComps, compName: "basicChart" }), keywords: trans("uiComp.basicChartCompKeywords"), layoutInfo: { @@ -162,7 +162,7 @@ export var uiCompMap: Registry = { enName: "Candlestick Chart", description: trans("uiComp.candleStickChartCompDesc"), categories: ["dashboards"], - icon: CandlestickChartCompIcon, + icon: MultiIcon(CandlestickChartCompIcon), keywords: trans("uiComp.candleStickChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "candleStickChart" }), layoutInfo: { @@ -175,7 +175,7 @@ export var uiCompMap: Registry = { enName: "Sankey Chart", description: trans("uiComp.funnelChartCompDesc"), categories: ["dashboards"], - icon: FunnelChartCompIcon, + icon: MultiIcon(FunnelChartCompIcon), keywords: trans("uiComp.funnelChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "funnelChart" }), layoutInfo: { @@ -188,7 +188,7 @@ export var uiCompMap: Registry = { enName: "Candlestick Chart", description: trans("uiComp.gaugeChartCompDesc"), categories: ["dashboards"], - icon: GaugeChartCompIcon, + icon: MultiIcon(GaugeChartCompIcon), keywords: trans("uiComp.gaugeChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "gaugeChart" }), layoutInfo: { @@ -201,7 +201,7 @@ export var uiCompMap: Registry = { enName: "Graph Chart", description: trans("uiComp.graphChartCompDesc"), categories: ["dashboards"], - icon: GraphChartCompIcon, + icon: MultiIcon(GraphChartCompIcon), keywords: trans("uiComp.graphChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "graphChart" }), layoutInfo: { @@ -214,7 +214,7 @@ export var uiCompMap: Registry = { enName: "Heatmap Chart", description: trans("uiComp.heatmapChartCompDesc"), categories: ["dashboards"], - icon: HeatmapChartCompIcon, + icon: MultiIcon(HeatmapChartCompIcon), keywords: trans("uiComp.heatmapChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "heatmapChart" }), layoutInfo: { @@ -227,7 +227,7 @@ export var uiCompMap: Registry = { enName: "Radar Chart", description: trans("uiComp.radarChartCompDesc"), categories: ["dashboards"], - icon: RadarChartCompIcon, + icon: MultiIcon(RadarChartCompIcon), keywords: trans("uiComp.radarChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "radarChart" }), layoutInfo: { @@ -240,7 +240,7 @@ export var uiCompMap: Registry = { enName: "Sankey Chart", description: trans("uiComp.sankeyChartCompDesc"), categories: ["dashboards"], - icon: SankeyChartCompIcon, + icon: MultiIcon(SankeyChartCompIcon), keywords: trans("uiComp.sankeyChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "sankeyChart" }), layoutInfo: { @@ -253,7 +253,7 @@ export var uiCompMap: Registry = { enName: "Sunburst Chart", description: trans("uiComp.sunburstChartCompDesc"), categories: ["dashboards"], - icon: SunburstChartCompIcon, + icon: MultiIcon(SunburstChartCompIcon), keywords: trans("uiComp.sunburstChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "sunburstChart" }), layoutInfo: { @@ -266,7 +266,7 @@ export var uiCompMap: Registry = { enName: "Theme River Chart", description: trans("uiComp.themeriverChartCompDesc"), categories: ["dashboards"], - icon: ThemeriverChartCompIcon, + icon: MultiIcon(ThemeriverChartCompIcon), keywords: trans("uiComp.themeriverChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "themeriverChart" }), layoutInfo: { @@ -279,7 +279,7 @@ export var uiCompMap: Registry = { enName: "Tree Chart", description: trans("uiComp.treeChartCompDesc"), categories: ["dashboards"], - icon: TreeChartCompIcon, + icon: MultiIcon(TreeChartCompIcon), keywords: trans("uiComp.treeChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "treeChart" }), layoutInfo: { @@ -292,7 +292,7 @@ export var uiCompMap: Registry = { enName: "Treemap Chart", description: trans("uiComp.treemapChartCompDesc"), categories: ["dashboards"], - icon: TreemapChartCompIcon, + icon: MultiIcon(TreemapChartCompIcon), keywords: trans("uiComp.treemapChartCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "treemapChart" }), layoutInfo: { @@ -308,7 +308,7 @@ export var uiCompMap: Registry = { enName: "OpenLayersGeoMap", description: trans("uiComp.openLayersGeoMapCompDesc"), categories: ["dashboards"], - icon: GeoMapLayersCompIcon, + icon: MultiIcon(GeoMapLayersCompIcon), keywords: trans("uiComp.openLayersGeoMapCompKeywords"), comp: remoteComp({ compName: "geo", @@ -327,7 +327,7 @@ export var uiCompMap: Registry = { enName: "GeoMap", description: trans("uiComp.chartsGeoMapCompDesc"), categories: ["dashboards"], - icon: GeoMapChartsCompIcon, + icon: MultiIcon(GeoMapChartsCompIcon), keywords: trans("uiComp.chartsGeoMapCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "chartsGeoMap" }), layoutInfo: { @@ -341,7 +341,7 @@ export var uiCompMap: Registry = { enName: "Table", description: trans("uiComp.tableCompDesc"), categories: ["dashboards"], - icon: TableCompIcon, + icon:MultiIcon(TableCompIcon), keywords: trans("uiComp.tableCompKeywords"), lazyLoad: true, compName: "TableComp", @@ -360,7 +360,7 @@ export var uiCompMap: Registry = { enName: "pivotTable", description: trans("uiComp.pivotTableCompDesc"), categories: ["dashboards"], - icon: PivotTableCompIcon, + icon: MultiIcon(PivotTableCompIcon), keywords: trans("uiComp.pivotTableCompKeywords"), comp: remoteComp({ compName: "pivottable", @@ -381,7 +381,7 @@ export var uiCompMap: Registry = { comp: remoteComp({ ...builtInRemoteComps, compName: "mermaid" }), description: trans("uiComp.mermaidCompDesc"), categories: ["dashboards"], - icon: MermaidCompIcon, + icon: MultiIcon(MermaidCompIcon), keywords: trans("uiComp.mermaidCompKeywords"), layoutInfo: { w: 12, @@ -393,7 +393,7 @@ export var uiCompMap: Registry = { enName: "timeline", description: trans("uiComp.timelineCompDesc"), categories: ["dashboards"], - icon: TimeLineCompIcon, + icon: MultiIcon(TimeLineCompIcon), keywords: trans("uiComp.timelineCompKeywords"), lazyLoad: true, compName: "TimeLineComp", @@ -411,7 +411,7 @@ export var uiCompMap: Registry = { enName: "Responsive Layout", description: trans("uiComp.responsiveLayoutCompDesc"), categories: ["layout"], - icon: ResponsiveLayoutCompIcon, + icon: MultiIcon(ResponsiveLayoutCompIcon), keywords: trans("uiComp.responsiveLayoutCompKeywords"), lazyLoad: true, compName: "ResponsiveLayoutComp", @@ -428,7 +428,7 @@ export var uiCompMap: Registry = { enName: "Page Layout Container", description: trans("uiComp.pageLayoutCompDesc"), categories: ["layout"], - icon: PageLayoutCompIcon, + icon: MultiIcon(PageLayoutCompIcon), keywords: trans("uiComp.pageLayoutCompKeywords"), lazyLoad: true, compName: "PageLayoutComp", @@ -448,7 +448,7 @@ export var uiCompMap: Registry = { enName: "Column Layout", description: trans("uiComp.responsiveLayoutCompDesc"), categories: ["layout"], - icon: ColumnLayoutCompIcon, + icon: MultiIcon(ColumnLayoutCompIcon), keywords: trans("uiComp.responsiveLayoutCompKeywords"), lazyLoad: true, compName: "ColumnLayoutComp", @@ -465,7 +465,7 @@ export var uiCompMap: Registry = { enName: "Container", description: trans("uiComp.floatTextContainerCompDesc"), categories: ["layout"], - icon: FloatingTextCompIcon, + icon: MultiIcon(FloatingTextCompIcon), keywords: trans("uiComp.floatTextContainerCompKeywords"), lazyLoad: true, compName: "ContainerComp", @@ -483,7 +483,7 @@ export var uiCompMap: Registry = { card: { name: trans("uiComp.cardCompName"), enName: "card", - icon: CardCompIcon, + icon: MultiIcon(CardCompIcon), description: trans("uiComp.cardCompDesc"), categories: ["layout"], keywords: trans("uiComp.cardCompKeywords"), @@ -500,7 +500,7 @@ export var uiCompMap: Registry = { enName: "Tabbed Container", description: trans("uiComp.tabbedContainerCompDesc"), categories: ["layout"], - icon: TabbedContainerCompIcon, + icon: MultiIcon(TabbedContainerCompIcon), keywords: trans("uiComp.tabbedContainerCompKeywords"), lazyLoad: true, compName: "TabbedContainerComp", @@ -518,7 +518,7 @@ export var uiCompMap: Registry = { enName: "Collapsible Container", description: trans("uiComp.collapsibleContainerCompDesc"), categories: ["layout"], - icon: CollapsibleContainerCompIcon, + icon: MultiIcon(CollapsibleContainerCompIcon), keywords: trans("uiComp.collapsibleContainerCompKeywords"), lazyLoad: true, compName: "ContainerComp", @@ -538,7 +538,7 @@ export var uiCompMap: Registry = { enName: "Container", description: trans("uiComp.containerCompDesc"), categories: ["layout"], - icon: ContainerCompIcon, + icon: MultiIcon(ContainerCompIcon), keywords: trans("uiComp.containerCompKeywords"), lazyLoad: true, compName: "ContainerComp", @@ -556,7 +556,7 @@ export var uiCompMap: Registry = { listView: { name: trans("uiComp.listViewCompName"), enName: "List View", - icon: ListViewCompIcon, + icon: MultiIcon(ListViewCompIcon), description: trans("uiComp.listViewCompDesc"), categories: ["layout"], keywords: trans("uiComp.listViewCompKeywords"), @@ -574,7 +574,7 @@ export var uiCompMap: Registry = { grid: { name: trans("uiComp.gridCompName"), enName: "Grid", - icon: GridCompIcon, + icon: MultiIcon(GridCompIcon), description: trans("uiComp.gridCompDesc"), categories: ["layout"], keywords: trans("uiComp.gridCompKeywords"), @@ -592,7 +592,7 @@ export var uiCompMap: Registry = { modal: { name: trans("uiComp.modalCompName"), enName: "Modal", - icon: ModalCompIcon, + icon: MultiIcon(ModalCompIcon), description: trans("uiComp.modalCompDesc"), categories: ["layout"], keywords: trans("uiComp.modalCompKeywords"), @@ -606,7 +606,7 @@ export var uiCompMap: Registry = { enName: "Drawer", description: trans("uiComp.drawerCompDesc"), categories: ["layout"], - icon: DrawerCompIcon, + icon: MultiIcon(DrawerCompIcon), keywords: trans("uiComp.drawerCompKeywords"), lazyLoad: true, compName: "DrawerComp", @@ -618,7 +618,7 @@ export var uiCompMap: Registry = { enName: "Divider", description: trans("uiComp.dividerCompDesc"), categories: ["layout"], - icon: DividerCompIcon, + icon: MultiIcon(DividerCompIcon), keywords: trans("uiComp.dividerCompKeywords"), lazyLoad: true, compName: "DividerComp", @@ -632,7 +632,7 @@ export var uiCompMap: Registry = { name: trans("uiComp.navigationCompName"), enName: "Navigation", description: trans("uiComp.navigationCompDesc"), - icon: NavComIcon, + icon: MultiIcon(NavComIcon), categories: ["layout"], keywords: trans("uiComp.navigationCompKeywords"), lazyLoad: true, @@ -648,7 +648,7 @@ export var uiCompMap: Registry = { enName: "Steps Control", description: trans("uiComp.stepControlCompDesc"), categories: ["layout"], - icon: StepCompIcon, + icon: MultiIcon(StepCompIcon), keywords: trans("uiComp.stepControlCompKeywords"), lazyLoad: true, compName: "StepComp", @@ -663,7 +663,7 @@ export var uiCompMap: Registry = { enName: "Cascader", description: trans("uiComp.cascaderCompDesc"), categories: ["layout"], - icon: CascaderCompIcon, + icon: MultiIcon(CascaderCompIcon), keywords: trans("uiComp.cascaderCompKeywords"), lazyLoad: true, compName: "CascaderWithDefault", @@ -678,7 +678,7 @@ export var uiCompMap: Registry = { enName: "Link", description: trans("uiComp.linkCompDesc"), categories: ["layout"], - icon: LinkCompIcon, + icon: MultiIcon(LinkCompIcon), keywords: trans("uiComp.linkCompKeywords"), lazyLoad: true, compName: "LinkComp", @@ -693,7 +693,7 @@ export var uiCompMap: Registry = { enName: "floatingButton", description: trans("uiComp.floatButtonCompDesc"), categories: ["layout"], - icon: FloatingButtonCompIcon, + icon: MultiIcon(FloatingButtonCompIcon), keywords: trans("uiComp.floatButtonCompKeywords"), lazyLoad: true, compName: "FloatButtonComp", @@ -712,7 +712,7 @@ export var uiCompMap: Registry = { enName: "Calendar", description: trans("uiComp.calendarCompDesc"), categories: ["scheduling", "projectmanagement"], - icon: CalendarCompIcon, + icon: MultiIcon(CalendarCompIcon), keywords: trans("uiComp.calendarCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "calendar" }), layoutInfo: { @@ -723,7 +723,7 @@ export var uiCompMap: Registry = { timer: { name: trans("uiComp.timerCompName"), enName: "timer", - icon: TimerCompIcon, + icon: MultiIcon(TimerCompIcon), description: trans("uiComp.timerCompDesc"), categories: ["scheduling", "projectmanagement"], keywords: trans("uiComp.timerCompKeywords"), @@ -743,7 +743,7 @@ export var uiCompMap: Registry = { enName: "Sharing", description: trans("meeting.sharingCompName"), categories: ["collaboration"], - icon: VideoScreenshareCompIcon, + icon: MultiIcon(VideoScreenshareCompIcon), keywords: trans("meeting.meetingCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "meetingSharing" }), withoutLoading: true, @@ -757,7 +757,7 @@ export var uiCompMap: Registry = { enName: "Video", description: trans("meeting.videoCompName"), categories: ["collaboration"], - icon: VideoCameraStreamCompIcon, + icon: MultiIcon(VideoCameraStreamCompIcon), keywords: trans("meeting.meetingCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "meetingStream" }), withoutLoading: true, @@ -772,7 +772,7 @@ export var uiCompMap: Registry = { comp: remoteComp({ ...builtInRemoteComps, compName: "meetingController" }), description: trans("meeting.meetingCompDesc"), categories: ["collaboration"], - icon: VideoMeetingRoomCompIcon, + icon: MultiIcon(VideoMeetingRoomCompIcon), keywords: trans("meeting.meetingCompKeywords"), withoutLoading: true, }, @@ -783,7 +783,7 @@ export var uiCompMap: Registry = { enName: "avatar", description: trans("uiComp.avatarCompDesc"), categories: ["collaboration"], - icon: AvatarCompIcon, + icon: MultiIcon(AvatarCompIcon), keywords: trans("uiComp.avatarCompKeywords"), lazyLoad: true, compName: "AvatarComp", @@ -797,7 +797,7 @@ export var uiCompMap: Registry = { avatarGroup: { name: trans("uiComp.avatarGroupCompName"), enName: "avatarGroup", - icon: AvatarGroupCompIcon, + icon: MultiIcon(AvatarGroupCompIcon), description: trans("uiComp.avatarGroupCompDesc"), categories: ["collaboration"], keywords: trans("uiComp.avatarGroupCompKeywords"), @@ -816,7 +816,7 @@ export var uiCompMap: Registry = { enName: "comment", description: trans("uiComp.commentCompDesc"), categories: ["collaboration"], - icon: CommentCompIcon, + icon: MultiIcon(CommentCompIcon), keywords: trans("uiComp.commentCompKeywords"), lazyLoad: true, compName: "CommentComp", @@ -831,7 +831,7 @@ export var uiCompMap: Registry = { enName: "mention", description: trans("uiComp.mentionCompDesc"), categories: ["collaboration"], - icon: MentionCompIcon, + icon: MultiIcon(MentionCompIcon), keywords: trans("uiComp.mentionCompKeywords"), lazyLoad: true, compName: "MentionComp", @@ -845,7 +845,7 @@ export var uiCompMap: Registry = { enName: "Form", description: trans("uiComp.formCompDesc"), categories: ["forms"], - icon: FormCompIcon, + icon: MultiIcon(FormCompIcon), keywords: trans("uiComp.formCompKeywords"), lazyLoad: true, compName: "FormComp", @@ -865,7 +865,7 @@ export var uiCompMap: Registry = { enName: "JSON Schema Form", description: trans("uiComp.jsonSchemaFormCompDesc"), categories: ["forms"], - icon: JsonFormCompIcon, + icon: MultiIcon(JsonFormCompIcon), keywords: trans("uiComp.jsonSchemaFormCompKeywords"), lazyLoad: true, compName: "JsonSchemaFormComp", @@ -880,7 +880,7 @@ export var uiCompMap: Registry = { enName: "JSON Editor", description: trans("uiComp.jsonEditorCompDesc"), categories: ["forms"], - icon: JsonEditorCompIcon, + icon: MultiIcon(JsonEditorCompIcon), keywords: trans("uiComp.jsonEditorCompKeywords"), lazyLoad: true, compName: "JsonEditorComp", @@ -895,7 +895,7 @@ export var uiCompMap: Registry = { enName: "JSON Explorer", description: trans("uiComp.jsonExplorerCompDesc"), categories: ["forms"], - icon: JsonExplorerCompIcon, + icon: MultiIcon(JsonExplorerCompIcon), keywords: trans("uiComp.jsonExplorerCompKeywords"), lazyLoad: true, compName: "JsonExplorerComp", @@ -910,7 +910,7 @@ export var uiCompMap: Registry = { enName: "Rich Text Editor", categories: ["forms"], description: trans("uiComp.richTextEditorCompDesc"), - icon: RichTextEditorCompIcon, + icon: MultiIcon(RichTextEditorCompIcon), keywords: trans("uiComp.richTextEditorCompKeywords"), lazyLoad: true, compName: "RichTextEditorComp", @@ -925,7 +925,7 @@ export var uiCompMap: Registry = { enName: "Input", description: trans("uiComp.inputCompDesc"), categories: ["forms"], - icon: InputCompIcon, + icon: MultiIcon(InputCompIcon), keywords: trans("uiComp.inputCompKeywords"), lazyLoad: true, compName: "InputComp", @@ -940,7 +940,7 @@ export var uiCompMap: Registry = { enName: "Password", description: trans("uiComp.passwordCompDesc"), categories: ["forms"], - icon: PasswordCompIcon, + icon: MultiIcon(PasswordCompIcon), keywords: trans("uiComp.passwordCompKeywords"), lazyLoad: true, compName: "PasswordComp", @@ -955,7 +955,7 @@ export var uiCompMap: Registry = { enName: "Number Input", description: trans("uiComp.numberInputCompDesc"), categories: ["forms"], - icon: NumberInputCompIcon, + icon: MultiIcon(NumberInputCompIcon), keywords: trans("uiComp.numberInputCompKeywords"), lazyLoad: true, compName: "NumberInputComp", @@ -970,7 +970,7 @@ export var uiCompMap: Registry = { enName: "Text Area", description: trans("uiComp.textAreaCompDesc"), categories: ["forms"], - icon: TextAreaCompIcon, + icon: MultiIcon(TextAreaCompIcon), keywords: trans("uiComp.textAreaCompKeywords"), lazyLoad: true, compName: "TextAreaComp", @@ -985,10 +985,10 @@ export var uiCompMap: Registry = { enName: "autoComplete", description: trans("uiComp.autoCompleteCompDesc"), categories: ["forms"], - icon: AutoCompleteCompIcon, + icon: MultiIcon(AutoCompleteCompIcon), keywords: cnchar - .spell(trans("uiComp.autoCompleteCompName"), "first", "low") - .toString(), + .spell(trans("uiComp.autoCompleteCompName"), "first", "low") + .toString(), lazyLoad: true, compName: "AutoCompleteComp", compPath: "comps/autoCompleteComp/autoCompleteComp", @@ -1002,7 +1002,7 @@ export var uiCompMap: Registry = { enName: "Switch", description: trans("uiComp.switchCompDesc"), categories: ["forms"], - icon: SwitchCompIcon, + icon: MultiIcon(SwitchCompIcon), keywords: trans("uiComp.switchCompKeywords"), lazyLoad: true, compName: "SwitchComp", @@ -1017,7 +1017,7 @@ export var uiCompMap: Registry = { enName: "Checkbox", description: trans("uiComp.checkboxCompDesc"), categories: ["forms"], - icon: CheckboxCompIcon, + icon: MultiIcon(CheckboxCompIcon), keywords: trans("uiComp.checkboxCompKeywords"), lazyLoad: true, compName: "CheckboxComp", @@ -1032,7 +1032,7 @@ export var uiCompMap: Registry = { enName: "Radio", description: trans("uiComp.radioCompDesc"), categories: ["forms"], - icon: RadioCompIcon, + icon: MultiIcon(RadioCompIcon), keywords: trans("uiComp.radioCompKeywords"), lazyLoad: true, compName: "RadioComp", @@ -1047,7 +1047,7 @@ export var uiCompMap: Registry = { enName: "Date", description: trans("uiComp.dateCompDesc"), categories: ["forms", "scheduling"], - icon: DateCompIcon, + icon: MultiIcon(DateCompIcon), keywords: trans("uiComp.dateCompKeywords"), lazyLoad: true, compName: "DatePickerComp", @@ -1062,7 +1062,7 @@ export var uiCompMap: Registry = { enName: "Date Range", description: trans("uiComp.dateRangeCompDesc"), categories: ["forms", "scheduling"], - icon: DateRangeCompIcon, + icon: MultiIcon(DateRangeCompIcon), keywords: trans("uiComp.dateRangeCompKeywords"), lazyLoad: true, compName: "DateRangeComp", @@ -1077,7 +1077,7 @@ export var uiCompMap: Registry = { enName: "Time", description: trans("uiComp.timeCompDesc"), categories: ["forms", "scheduling"], - icon: TimeCompIcon, + icon: MultiIcon(TimeCompIcon), keywords: trans("uiComp.timeCompKeywords"), lazyLoad: true, compName: "TimePickerComp", @@ -1092,7 +1092,7 @@ export var uiCompMap: Registry = { enName: "Time Range", categories: ["forms", "scheduling"], description: trans("uiComp.timeRangeCompDesc"), - icon: TimeRangeCompIcon, + icon: MultiIcon(TimeRangeCompIcon), keywords: trans("uiComp.timeRangeCompKeywords"), lazyLoad: true, compName: "TimeRangeComp", @@ -1108,7 +1108,7 @@ export var uiCompMap: Registry = { enName: "Slider", description: trans("uiComp.sliderCompDesc"), categories: ["forms"], - icon: SliderCompIcon, + icon: MultiIcon(SliderCompIcon), keywords: trans("uiComp.sliderCompKeywords"), lazyLoad: true, compName: "SliderComp", @@ -1123,7 +1123,7 @@ export var uiCompMap: Registry = { enName: "Range Slider", description: trans("uiComp.rangeSliderCompDesc"), categories: ["forms"], - icon: RangeSliderCompIcon, + icon: MultiIcon(RangeSliderCompIcon), keywords: trans("uiComp.rangeSliderCompKeywords"), lazyLoad: true, compName: "RangeSliderComp", @@ -1139,7 +1139,7 @@ export var uiCompMap: Registry = { enName: "Button", description: trans("uiComp.buttonCompDesc"), categories: ["forms"], - icon: ButtonCompIcon, + icon: MultiIcon(ButtonCompIcon), keywords: trans("uiComp.buttonCompKeywords"), lazyLoad: true, compName: "ButtonComp", @@ -1155,7 +1155,7 @@ export var uiCompMap: Registry = { enName: "Controls", description: trans("uiComp.meetingCompDesc"), categories: ["forms", "collaboration"], - icon: IconButtonCompIcon, + icon: MultiIcon(IconButtonCompIcon), keywords: trans("uiComp.meetingCompKeywords"), lazyLoad: true, compName: "ControlButton", @@ -1171,7 +1171,7 @@ export var uiCompMap: Registry = { enName: "Dropdown", description: trans("uiComp.dropdownCompDesc"), categories: ["forms"], - icon: DropdownCompIcon, + icon: MultiIcon(DropdownCompIcon), keywords: trans("uiComp.dropdownCompKeywords"), lazyLoad: true, compName: "DropdownComp", @@ -1186,7 +1186,7 @@ export var uiCompMap: Registry = { enName: "Toggle Button", description: trans("uiComp.toggleButtonCompDesc"), categories: ["forms"], - icon: ToggleButtonCompIcon, + icon: MultiIcon(ToggleButtonCompIcon), keywords: trans("uiComp.toggleButtonCompKeywords"), lazyLoad: true, compName: "ToggleButtonComp", @@ -1201,7 +1201,7 @@ export var uiCompMap: Registry = { enName: "Segmented Control", description: trans("uiComp.segmentedControlCompDesc"), categories: ["forms"], - icon: SegmentedCompIcon, + icon: MultiIcon(SegmentedCompIcon), keywords: trans("uiComp.segmentedControlCompKeywords"), lazyLoad: true, compName: "SegmentedControlComp", @@ -1217,7 +1217,7 @@ export var uiCompMap: Registry = { enName: "Rating", description: trans("uiComp.ratingCompDesc"), categories: ["forms"], - icon: RatingCompIcon, + icon: MultiIcon(RatingCompIcon), keywords: trans("uiComp.ratingCompKeywords"), lazyLoad: true, compName: "RatingComp", @@ -1235,7 +1235,7 @@ export var uiCompMap: Registry = { enName: "ganttChart", description: trans("uiComp.ganttChartCompDesc"), categories: ["projectmanagement"], - icon: GanttCompIcon, + icon: MultiIcon(GanttCompIcon), keywords: trans("uiComp.ganttChartCompKeywords"), comp: remoteComp({ compName: "ganttchart", @@ -1255,7 +1255,7 @@ export var uiCompMap: Registry = { enName: "Kanban", description: trans("uiComp.kanbanCompDesc"), categories: ["projectmanagement"], - icon: KanbanCompIcon, + icon: MultiIcon(KanbanCompIcon), keywords: trans("uiComp.kanbanCompKeywords"), comp: remoteComp({ compName: "kanban", @@ -1275,7 +1275,7 @@ export var uiCompMap: Registry = { enName: "Hillchart", description: trans("uiComp.hillchartCompDesc"), categories: ["projectmanagement"], - icon: HillchartCompIcon, + icon: MultiIcon(HillchartCompIcon), keywords: trans("uiComp.hillchartCompKeywords"), comp: remoteComp({ compName: "hillcharts", @@ -1294,7 +1294,7 @@ export var uiCompMap: Registry = { enName: "BPMN Editor", description: trans("uiComp.bpmnEditorCompDesc"), categories: ["projectmanagement", "documents"], - icon: BPMNEditorCompIcon, + icon: MultiIcon(BPMNEditorCompIcon), keywords: trans("uiComp.bpmnEditorCompKeywords"), comp: remoteComp({ compName: "bpmn", @@ -1313,7 +1313,7 @@ export var uiCompMap: Registry = { enName: "Progress", description: trans("uiComp.progressCompDesc"), categories: ["dashboards", "projectmanagement"], - icon: ProgressCompIcon, + icon: MultiIcon(ProgressCompIcon), keywords: trans("uiComp.progressCompKeywords"), lazyLoad: true, compName: "ProgressComp", @@ -1328,7 +1328,7 @@ export var uiCompMap: Registry = { enName: "Process Circle", description: trans("uiComp.progressCircleCompDesc"), categories: ["dashboards", "projectmanagement"], - icon: ProcessCircleCompIcon, + icon: MultiIcon(ProcessCircleCompIcon), keywords: trans("uiComp.progressCircleCompKeywords"), lazyLoad: true, compName: "ProgressCircleComp", @@ -1346,7 +1346,7 @@ export var uiCompMap: Registry = { enName: "File Upload", description: trans("uiComp.fileUploadCompDesc"), categories: ["documents"], - icon: UploadCompIcon, + icon: MultiIcon(UploadCompIcon), keywords: trans("uiComp.fileUploadCompKeywords"), lazyLoad: true, compName: "FileComp", @@ -1361,7 +1361,7 @@ export var uiCompMap: Registry = { enName: "File Viewer", description: trans("uiComp.fileViewerCompDesc"), categories: ["documents"], - icon: FileViewerCompIcon, + icon: MultiIcon(FileViewerCompIcon), keywords: trans("uiComp.fileViewerCompKeywords"), lazyLoad: true, compName: "FileViewerComp", @@ -1379,7 +1379,7 @@ export var uiCompMap: Registry = { enName: "Image", description: trans("uiComp.imageCompDesc"), categories: ["multimedia"], - icon: ImageCompIcon, + icon: MultiIcon(ImageCompIcon), keywords: trans("uiComp.imageCompKeywords"), lazyLoad: true, compName: "ImageComp", @@ -1394,7 +1394,7 @@ export var uiCompMap: Registry = { enName: "Carousel", description: trans("uiComp.carouselCompDesc"), categories: ["multimedia"], - icon: CarouselCompIcon, + icon: MultiIcon(CarouselCompIcon), keywords: trans("uiComp.drawerCompKeywords"), lazyLoad: true, compName: "CarouselComp", @@ -1410,7 +1410,7 @@ export var uiCompMap: Registry = { enName: "Audio", description: trans("uiComp.audioCompDesc"), categories: ["multimedia"], - icon: AudioCompIcon, + icon: MultiIcon(AudioCompIcon), keywords: trans("uiComp.audioCompKeywords"), lazyLoad: true, compName: "AudioComp", @@ -1425,7 +1425,7 @@ export var uiCompMap: Registry = { enName: "Video", description: trans("uiComp.videoCompDesc"), categories: ["multimedia"], - icon: VideoCompIcon, + icon: MultiIcon(VideoCompIcon), keywords: trans("uiComp.videoCompKeywords"), lazyLoad: true, compName: "VideoComp", @@ -1441,7 +1441,7 @@ export var uiCompMap: Registry = { enName: "Shape", description: trans("uiComp.shapeCompDesc"), categories: ["multimedia", "dashboards"], - icon: ShapesCompIcon, + icon: MultiIcon(ShapesCompIcon), keywords: trans("uiComp.shapeCompKeywords"), lazyLoad: true, compName: "ShapeComp", @@ -1457,7 +1457,7 @@ export var uiCompMap: Registry = { enName: "Lottie Animation", description: trans("uiComp.jsonLottieCompDesc"), categories: ["multimedia"], - icon: LottieAnimationCompIcon, + icon: MultiIcon(LottieAnimationCompIcon), keywords: trans("uiComp.jsonLottieCompKeywords"), lazyLoad: true, compName: "JsonLottieComp", @@ -1472,7 +1472,7 @@ export var uiCompMap: Registry = { enName: "icon", description: trans("uiComp.iconCompDesc"), categories: ["multimedia"], - icon: IconCompIcon, + icon: MultiIcon(IconCompIcon), keywords: trans("uiComp.iconCompKeywords"), lazyLoad: true, compName: "IconComp", @@ -1488,7 +1488,7 @@ export var uiCompMap: Registry = { comp: remoteComp({ ...builtInRemoteComps, compName: "imageEditor" }), description: trans("uiComp.imageEditorCompDesc"), categories: ["multimedia"], - icon: ImageEditorCompIcon, + icon: MultiIcon(ImageEditorCompIcon), keywords: trans("uiComp.imageEditorCompKeywords"), layoutInfo: { w: 12, @@ -1502,7 +1502,7 @@ export var uiCompMap: Registry = { enName: "colorPicker", description: trans("uiComp.colorPickerCompDesc"), categories: ["multimedia"], - icon: ColorPickerCompIcon, + icon: MultiIcon(ColorPickerCompIcon), keywords: trans("uiComp.colorPickerCompKeywords"), lazyLoad: true, compName: "ColorPickerComp", @@ -1516,7 +1516,7 @@ export var uiCompMap: Registry = { enName: "QR Code", description: trans("uiComp.qrCodeCompDesc"), categories: ["itemHandling", "documents"], - icon: QRCodeCompIcon, + icon: MultiIcon(QRCodeCompIcon), keywords: trans("uiComp.qrCodeCompKeywords"), lazyLoad: true, compName: "QRCodeComp", @@ -1531,7 +1531,7 @@ export var uiCompMap: Registry = { enName: "Scanner", description: trans("uiComp.scannerCompDesc"), categories: ["itemHandling"], - icon: ScannerCompIcon, + icon: MultiIcon(ScannerCompIcon), keywords: trans("uiComp.scannerCompKeywords"), lazyLoad: true, compName: "ScannerComp", @@ -1546,7 +1546,7 @@ export var uiCompMap: Registry = { enName: "Signature", description: trans("uiComp.signatureCompDesc"), categories: ["itemHandling"], - icon: SignatureCompIcon, + icon: MultiIcon(SignatureCompIcon), keywords: trans("uiComp.signatureCompKeywords"), lazyLoad: true, compName: "SignatureComp", @@ -1561,7 +1561,7 @@ export var uiCompMap: Registry = { enName: "Select", description: trans("uiComp.selectCompDesc"), categories: ["forms", "itemHandling"], - icon: SelectCompIcon, + icon: MultiIcon(SelectCompIcon), keywords: trans("uiComp.selectCompKeywords"), lazyLoad: true, compName: "SelectComp", @@ -1576,7 +1576,7 @@ export var uiCompMap: Registry = { enName: "Tour", description: trans("uiComp.tourCompDesc"), categories: ["multimedia", "itemHandling"], - icon: TourCompIcon, + icon: MultiIcon(TourCompIcon), keywords: trans("uiComp.tourCompKeywords"), lazyLoad: true, compName: "TourComp", @@ -1591,7 +1591,7 @@ export var uiCompMap: Registry = { enName: "Multiselect", description: trans("uiComp.multiSelectCompDesc"), categories: ["forms", "itemHandling"], - icon: MultiSelectCompIcon, + icon: MultiIcon(MultiSelectCompIcon), keywords: trans("uiComp.multiSelectCompKeywords"), lazyLoad: true, compName: "MultiSelectComp", @@ -1606,7 +1606,7 @@ export var uiCompMap: Registry = { enName: "Tree", description: trans("uiComp.treeCompDesc"), categories: ["layout", "itemHandling", "documents"], - icon: TreeDisplayCompIcon, + icon: MultiIcon(TreeDisplayCompIcon), keywords: trans("uiComp.treeCompKeywords"), lazyLoad: true, compName: "TreeComp", @@ -1621,7 +1621,7 @@ export var uiCompMap: Registry = { enName: "Tree Select", description: trans("uiComp.treeSelectCompDesc"), categories: ["layout", "itemHandling", "documents"], - icon: TreeSelectCompIcon, + icon: MultiIcon(TreeSelectCompIcon), keywords: trans("uiComp.treeSelectCompKeywords"), lazyLoad: true, compName: "TreeSelectComp", @@ -1634,7 +1634,7 @@ export var uiCompMap: Registry = { transfer: { name: trans("uiComp.transferName"), enName: "transfer", - icon: TransferCompIcon, + icon: MultiIcon(TransferCompIcon), description: trans("uiComp.transferDesc"), categories: ["itemHandling", "documents"], keywords: trans("uiComp.transferKeywords"), @@ -1651,7 +1651,7 @@ export var uiCompMap: Registry = { enName: "Cloudflare Turnstile", description: trans("uiComp.turnstileCaptchaCompDesc"), categories: ["itemHandling"], - icon: TurnstileCaptchaCompIcon, + icon: MultiIcon(TurnstileCaptchaCompIcon), keywords: trans("uiComp.turnstileCaptchaCompKeywords"), comp: remoteComp({ compName: "cloudflareTurnstile", @@ -1672,7 +1672,7 @@ export var uiCompMap: Registry = { name: trans("uiComp.iframeCompName"), enName: "IFrame", description: trans("uiComp.iframeCompDesc"), - icon: IFrameCompIcon, + icon: MultiIcon(IFrameCompIcon), categories: ["integration"], keywords: trans("uiComp.iframeCompKeywords"), lazyLoad: true, @@ -1687,7 +1687,7 @@ export var uiCompMap: Registry = { name: trans("uiComp.customCompName"), enName: "Custom Component", description: trans("uiComp.customCompDesc"), - icon: CustomCompIcon, + icon: MultiIcon(CustomCompIcon), categories: ["integration"], keywords: trans("uiComp.customCompKeywords"), lazyLoad: true, @@ -1701,7 +1701,7 @@ export var uiCompMap: Registry = { module: { name: trans("uiComp.moduleCompName"), enName: "Module", - icon: CustomCompIcon, + icon: MultiIcon(CustomCompIcon), description: trans("uiComp.moduleCompDesc"), categories: [], keywords: trans("uiComp.moduleCompKeywords"), @@ -1721,7 +1721,7 @@ export var uiCompMap: Registry = { enName: "Text", description: trans("uiComp.textCompDesc"), categories: ["dashboards", "layout", "multimedia"], - icon: TextCompIcon, + icon: MultiIcon(TextCompIcon), keywords: trans("uiComp.textCompKeywords"), compName: "TextComp", lazyLoad: true, diff --git a/client/packages/lowcoder/src/bootstrap/view/app.tsx b/client/packages/lowcoder/src/bootstrap/view/app.tsx new file mode 100644 index 000000000..39f77b712 --- /dev/null +++ b/client/packages/lowcoder/src/bootstrap/view/app.tsx @@ -0,0 +1,334 @@ +import { loadComps } from "bootstrap/view"; +import { initApp } from "util/commonUtils"; +import { connect, Provider } from "react-redux"; +import { createRoot } from "react-dom/client"; +import type {AppState} from "@lowcoder-ee/redux/reducers"; +import {isFetchUserFinished} from "@lowcoder-ee/redux/selectors/usersSelectors"; +import {getIsCommonSettingFetched} from "@lowcoder-ee/redux/selectors/commonSettingSelectors"; +import {getBrandingConfig} from "@lowcoder-ee/redux/selectors/configSelectors"; +import {buildMaterialPreviewURL} from "@lowcoder-ee/util/materialUtils"; +import {favicon} from "@lowcoder-ee/assets/images"; +import {trans} from "@lowcoder-ee/i18n"; +import {fetchUserAction} from "@lowcoder-ee/redux/reduxActions/userActions"; +import {fetchConfigAction} from "@lowcoder-ee/redux/reduxActions/configActions"; +import {fetchHomeData} from "@lowcoder-ee/redux/reduxActions/applicationActions"; +import {packageMetaReadyAction, setLowcoderCompsLoading} from "@lowcoder-ee/redux/reduxActions/npmPluginActions"; +import {getNpmPackageMeta} from "@lowcoder-ee/comps/utils/remote"; +import { reduxStore } from "redux/store/store"; +import React from "react"; +import {hasQueryParam} from "@lowcoder-ee/util/urlUtils"; +import history from "@lowcoder-ee/util/history"; +import { + APP_EDITOR_URL, + isAuthUnRequired, +} from "@lowcoder-ee/constants/routesURL"; +import {ProductLoading} from "@lowcoder-ee/components/ProductLoading"; +import {Helmet} from "react-helmet"; +import {SystemWarning} from "@lowcoder-ee/components/SystemWarning"; +import {Router, Switch} from "react-router-dom"; +import LazyRoute from "@lowcoder-ee/components/LazyRoute"; +import {default as ConfigProvider} from "antd/es/config-provider"; +import {getAntdLocale} from "@lowcoder-ee/i18n/antdLocale"; +import {default as App} from "antd/es/app"; +import GlobalInstances from "components/GlobalInstances"; +const LazyAppEditor = React.lazy(() => import("pages/editor/AppEditor")); + + + +const mapStateToProps = (state: AppState) => ({ + isFetchUserFinished: isFetchUserFinished(state), + getIsCommonSettingFetched: getIsCommonSettingFetched(state), + orgDev: state.ui.users.user.orgDev, + currentUserId: state.ui.users.currentUser.id, + currentUserAnonymous: state.ui.users.user.isAnonymous, + currentOrgId: state.ui.users.user.currentOrgId, + defaultHomePage: state.ui.application.homeOrg?.commonSettings.defaultHomePage, + fetchHomeDataFinished: Boolean(state.ui.application.homeOrg?.commonSettings), + favicon: getBrandingConfig(state)?.favicon + ? buildMaterialPreviewURL(getBrandingConfig(state)?.favicon!) + : favicon, + brandName: getBrandingConfig(state)?.brandName ?? trans("productName"), + uiLanguage: state.ui.users.user.uiLanguage, +}); + + +const mapDispatchToProps = (dispatch: any) => ({ + getCurrentUser: () => { + dispatch(fetchUserAction()); + }, + fetchConfig: (orgId?: string) => dispatch(fetchConfigAction(orgId)), + fetchHomeData: (currentUserAnonymous: boolean | undefined) => { + dispatch(fetchHomeData({})); + }, + fetchLowcoderCompVersions: async () => { + try { + dispatch(setLowcoderCompsLoading(true)); + const packageMeta = await getNpmPackageMeta('lowcoder-comps'); + if (packageMeta?.versions) { + dispatch(packageMetaReadyAction('lowcoder-comps', packageMeta)); + } + dispatch(setLowcoderCompsLoading(false)); + } catch (_) { + dispatch(setLowcoderCompsLoading(false)); + } + }, +}); + +const Wrapper = (props: { children: React.ReactNode, language: string }) => ( + + + + {props.children} + + +); + +type AppIndexProps = { + isFetchUserFinished: boolean; + getIsCommonSettingFetched: boolean; + currentOrgId?: string; + currentUserId: string; + currentUserAnonymous: boolean; + orgDev: boolean; + defaultHomePage: string | null | undefined; + fetchHomeDataFinished: boolean; + fetchConfig: (orgId?: string) => void; + fetchHomeData: (currentUserAnonymous?: boolean | undefined) => void; + fetchLowcoderCompVersions: () => void; + getCurrentUser: () => void; + favicon: string; + brandName: string; + uiLanguage: string; +}; + +class AppIndex extends React.Component { + componentDidMount() { + this.props.getCurrentUser(); + // if (!this.props.currentUserAnonymous) { + // this.props.fetchHomeData(this.props.currentUserAnonymous); + // } + } + componentDidUpdate(prevProps: AppIndexProps) { + if ( + prevProps.currentOrgId !== this.props.currentOrgId && + this.props.currentOrgId !== '' + ) { + this.props.fetchConfig(this.props.currentOrgId); + if (!this.props.currentUserAnonymous) { + this.props.fetchHomeData(this.props.currentUserAnonymous); + this.props.fetchLowcoderCompVersions(); + } + } + } + render() { + const isTemplate = hasQueryParam('template'); + const pathname = history.location.pathname; + + // we check if we are on the public cloud + const isLowCoderDomain = window.location.hostname === 'app.lowcoder.cloud'; + const isLocalhost = window.location.hostname === 'localhost'; + + /* if (isLocalhost || isLowCoderDomain) { + posthog.init('phc_lD36OXeppUehLgI33YFhioTpXqThZ5QqR8IWeKvXP7f', { api_host: 'https://eu.i.posthog.com', person_profiles: 'always' }); + } */ + + // make sure all users in this app have checked login info + if (!this.props.isFetchUserFinished || (this.props.currentUserId && !this.props.fetchHomeDataFinished)) { + const hideLoadingHeader = isTemplate || isAuthUnRequired(pathname); + return ; + } + else { + // if the user just logged in, we send the event to posthog + if (isLocalhost || isLowCoderDomain) { + if (sessionStorage.getItem('_just_logged_in_')) { + // posthog.identify(this.props.currentUserId); + sessionStorage.removeItem('_just_logged_in_'); + } + } + } + + return ( + + + {{this.props.brandName}} + {} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* }, */} + + + {isLowCoderDomain || isLocalhost && [ + // Adding Support for iframely to be able to embedd the component explorer in the docu + , + , + , + + , + , + , + // adding Clearbit Support for Analytics + , + ]} + + + + + + + + + ); + } +} + +const AppIndexWithProps = connect(mapStateToProps, mapDispatchToProps)(AppIndex); + +export function bootstrap() { + initApp(); + loadComps(); + + const container = document.getElementById("root"); + const root = createRoot(container!); + root.render( + + + + ); +} diff --git a/client/packages/lowcoder/src/bootstrap/view/index.tsx b/client/packages/lowcoder/src/bootstrap/view/index.tsx new file mode 100644 index 000000000..2feeb9c17 --- /dev/null +++ b/client/packages/lowcoder/src/bootstrap/view/index.tsx @@ -0,0 +1,1644 @@ +import { remoteComp } from "../../comps/comps/remoteComp/remoteComp"; +import { + registerComp, + type UICompType, + type UICompManifest +} from "../../comps/uiCompRegistry"; +import { RemoteCompInfo } from "../../types/remoteComp"; + +import {TableComp} from "../../comps/comps/tableComp"; +import {TextComp} from "../../comps/comps/textComp"; +import {InputComp} from "../../comps/comps/textInputComp/inputComp"; +import {TextAreaComp} from "../../comps/comps/textInputComp/textAreaComp"; +import {ButtonComp} from "../../comps/comps/buttonComp/buttonComp"; +import {ImageComp} from "../../comps/comps/imageComp"; + +type Registry = { + [key in UICompType]?: UICompManifest; +}; + +const builtInRemoteComps: Omit = { + source: "npm", + isRemote: true, + packageName: "lowcoder-comps", +}; + +export var uiCompMap: Registry = { + // Dashboards + + // charts + chart: { + name: "", + enName: "Chart", + description: "", + categories: ["dashboards"], + icon: null, + comp: remoteComp({ ...builtInRemoteComps, compName: "chart" }), + keywords: "", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + basicChart: { + name: "", + enName: "Basic Chart", + description: "", + categories: ["dashboards"], + icon: null, + comp: remoteComp({ ...builtInRemoteComps, compName: "basicChart" }), + keywords: "", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + candleStickChart: { + name: "", + enName: "Candlestick Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "candleStickChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + funnelChart: { + name: "", + enName: "Sankey Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "funnelChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + gaugeChart: { + name: "", + enName: "Candlestick Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "gaugeChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + graphChart: { + name: "", + enName: "Graph Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "graphChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + heatmapChart: { + name: "", + enName: "Heatmap Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "heatmapChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + radarChart: { + name: "", + enName: "Radar Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "radarChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + sankeyChart: { + name: "", + enName: "Sankey Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "sankeyChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + sunburstChart: { + name: "", + enName: "Sunburst Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "sunburstChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + themeriverChart: { + name: "", + enName: "Theme River Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "themeriverChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + treeChart: { + name: "", + enName: "Tree Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "treeChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + treemapChart: { + name: "", + enName: "Treemap Chart", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "treemapChart" }), + layoutInfo: { + w: 12, + h: 40, + }, + }, + + // GeoMap + + openLayersGeoMap: { + name: "", + enName: "OpenLayersGeoMap", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "geo", + packageName: "lowcoder-comp-geo", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-geo", + layoutInfo: { + w: 12, + h: 50, + }, + }, + chartsGeoMap: { + name: "", + enName: "GeoMap", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "chartsGeoMap" }), + layoutInfo: { + w: 19, + h: 60, + }, + }, + + table: { + name: "", + enName: "Table", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + lazyLoad: false, + comp: TableComp, + compName: "TableComp", + compPath: "comps/tableComp/index", + layoutInfo: { + w: 12, + h: 40, + }, + withoutLoading: true, + defaultDataFnName: "defaultTableData", + defaultDataFnPath: "comps/tableComp/mockTableComp", + }, + + pivotTable: { + name: "", + enName: "pivotTable", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "pivottable", + packageName: "lowcoder-comp-reactpivottable", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-reactpivottable", + layoutInfo: { + w: 12, + h: 50, + }, + }, + + mermaid: { + name: "", + enName: "Mermaid Charts", + comp: remoteComp({ ...builtInRemoteComps, compName: "mermaid" }), + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + layoutInfo: { + w: 12, + h: 40, + }, + }, + timeline: { + name: "", + enName: "timeline", + description: "", + categories: ["dashboards"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "TimeLineComp", + compPath: "comps/timelineComp/timelineComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + // Layout + + responsiveLayout: { + name: "", + enName: "Responsive Layout", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ResponsiveLayoutComp", + compPath: "comps/responsiveLayout/index", + withoutLoading: true, + layoutInfo: { + w: 24, + h: 25, + delayCollision: true, + }, + }, + pageLayout: { + name: "", + enName: "Page Layout Container", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "PageLayoutComp", + compPath: "comps/containerComp/pageLayoutComp", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 50, + // static: true, + delayCollision: true, + }, + defaultDataFnName: "defaultPageLayoutData", + defaultDataFnPath: "comps/tableComp/mockTableComp", + }, + columnLayout: { + name: "Column Layout", + enName: "Column Layout", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ColumnLayoutComp", + compPath: "comps/columnLayout/index", + withoutLoading: true, + layoutInfo: { + w: 24, + h: 25, + delayCollision: true, + }, + }, + floatTextContainer: { + name: "", + enName: "Container", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ContainerComp", + compPath: "comps/containerComp/textContainerComp", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 25, + // static: true, + delayCollision: true, + }, + defaultDataFnName: "defaultContainerData", + defaultDataFnPath: "comps/containerComp/containerComp", + }, + card: { + name: "", + enName: "card", + icon: null, + description: "", + categories: ["layout"], + keywords: "", + lazyLoad: true, + compName: "CardComp", + compPath: "comps/containerComp/cardComp", + layoutInfo: { + h: 44, + w: 6, + }, + }, + tabbedContainer: { + name: "", + enName: "Tabbed Container", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "TabbedContainerComp", + compPath: "comps/tabs/index", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 25, + // static: true, + delayCollision: true, + }, + }, + collapsibleContainer: { + name: "", + enName: "Collapsible Container", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ContainerComp", + compPath: "comps/containerComp/containerComp", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 25, + // static: true, + delayCollision: true, + }, + defaultDataFnName: "defaultCollapsibleContainerData", + defaultDataFnPath: "comps/containerComp/collapsibleContainerComp", + }, + container: { + name: "", + enName: "Container", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ContainerComp", + compPath: "comps/containerComp/containerComp", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 25, + // static: true, + delayCollision: true, + }, + defaultDataFnName: "defaultContainerData", + defaultDataFnPath: "comps/containerComp/containerComp", + }, + listView: { + name: "", + enName: "List View", + icon: null, + description: "", + categories: ["layout"], + keywords: "", + lazyLoad: true, + compName: "ListViewComp", + compPath: "comps/listViewComp/index", + layoutInfo: { + w: 12, + h: 40, + delayCollision: true, + }, + defaultDataFnName: "defaultListViewData", + defaultDataFnPath: "comps/listViewComp/index", + }, + grid: { + name: "", + enName: "Grid", + icon: null, + description: "", + categories: ["layout"], + keywords: "", + lazyLoad: true, + compName: "GridComp", + compPath: "comps/listViewComp/index", + layoutInfo: { + w: 12, + h: 40, + delayCollision: true, + }, + defaultDataFnName: "defaultGridData", + defaultDataFnPath: "comps/listViewComp/index", + }, + modal: { + name: "", + enName: "Modal", + icon: null, + description: "", + categories: ["layout"], + keywords: "", + lazyLoad: true, + compName: "ModalComp", + compPath: "hooks/modalComp", + withoutLoading: true, + }, + drawer: { + name: "", + enName: "Drawer", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "DrawerComp", + compPath: "hooks/drawerComp", + withoutLoading: true, + }, + divider: { + name: "", + enName: "Divider", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "DividerComp", + compPath: "comps/dividerComp", + layoutInfo: { + w: 12, + h: 1, + }, + }, + navigation: { + name: "", + enName: "Navigation", + description: "", + icon: null, + categories: ["layout"], + keywords: "", + lazyLoad: true, + compName: "NavComp", + compPath: "comps/navComp/navComp", + layoutInfo: { + w: 24, + h: 5, + }, + }, + step: { + name: "", + enName: "Steps Control", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "StepComp", + compPath: "comps/selectInputComp/stepControl", + layoutInfo: { + w: 19, + h: 6, + }, + }, + cascader: { + name: "", + enName: "Cascader", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "CascaderWithDefault", + compPath: "comps/selectInputComp/cascaderComp", + layoutInfo: { + w: 9, + h: 5, + }, + }, + link: { + name: "", + enName: "Link", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "LinkComp", + compPath: "comps/buttonComp/linkComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + floatingButton: { + name: "", + enName: "floatingButton", + description: "", + categories: ["layout"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "FloatButtonComp", + compPath: "comps/buttonComp/floatButtonComp", + layoutInfo: { + w: 1, + h: 1, + }, + withoutLoading: true, + }, + + // Scheduling + + calendar: { + name: "", + enName: "Calendar", + description: "", + categories: ["scheduling", "projectmanagement"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "calendar" }), + layoutInfo: { + w: 19, + h: 60, + }, + }, + timer: { + name: "", + enName: "timer", + icon: null, + description: "", + categories: ["scheduling", "projectmanagement"], + keywords: "", + lazyLoad: true, + compName: "TimerComp", + compPath: "comps/timerComp", + layoutInfo: { + h: 14, + w: 6, + }, + }, + + // Meeting & Collaboration + + sharingcomponent: { + name: "", + enName: "Sharing", + description: "", + categories: ["collaboration"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "meetingSharing" }), + withoutLoading: true, + layoutInfo: { + w: 12, + h: 50, + }, + }, + videocomponent: { + name: "", + enName: "Video", + description: "", + categories: ["collaboration"], + icon: null, + keywords: "", + comp: remoteComp({ ...builtInRemoteComps, compName: "meetingStream" }), + withoutLoading: true, + layoutInfo: { + w: 6, + h: 32, + }, + }, + meeting: { + name: "", + enName: "Drawer", + comp: remoteComp({ ...builtInRemoteComps, compName: "meetingController" }), + description: "", + categories: ["collaboration"], + icon: null, + keywords: "", + withoutLoading: true, + }, + + // added by Mousheng + avatar: { + name: "", + enName: "avatar", + description: "", + categories: ["collaboration"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "AvatarComp", + compPath: "comps/avatar", + layoutInfo: { + w: 6, + h: 6, + }, + }, + + avatarGroup: { + name: "", + enName: "avatarGroup", + icon: null, + description: "", + categories: ["collaboration"], + keywords: "", + lazyLoad: true, + compName: "AvatarGroupComp", + compPath: "comps/avatarGroup", + withoutLoading: true, + layoutInfo: { + w: 6, + h: 6, + }, + }, + + comment: { + name: "", + enName: "comment", + description: "", + categories: ["collaboration"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "CommentComp", + compPath: "comps/commentComp/commentComp", + layoutInfo: { + w: 12, + h: 55, + }, + }, + mention: { + name: "", + enName: "mention", + description: "", + categories: ["collaboration"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "MentionComp", + compPath: "comps/textInputComp/mentionComp", + }, + + // Forms + + form: { + name: "", + enName: "Form", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "FormComp", + compPath: "comps/formComp/formComp", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 50, + // static: true, + delayCollision: true, + }, + defaultDataFnName: "defaultFormData", + defaultDataFnPath: "comps/formComp/formComp", + }, + jsonSchemaForm: { + name: "", + enName: "JSON Schema Form", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "JsonSchemaFormComp", + compPath: "comps/jsonSchemaFormComp/jsonSchemaFormComp", + layoutInfo: { + w: 12, + h: 50, + }, + }, + jsonEditor: { + name: "", + enName: "JSON Editor", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "JsonEditorComp", + compPath: "comps/jsonComp/jsonEditorComp", + layoutInfo: { + w: 12, + h: 50, + }, + }, + jsonExplorer: { + name: "", + enName: "JSON Explorer", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "JsonExplorerComp", + compPath: "comps/jsonComp/jsonExplorerComp", + layoutInfo: { + w: 12, + h: 50, + }, + }, + richTextEditor: { + name: "", + enName: "Rich Text Editor", + categories: ["forms"], + description: "", + icon: null, + keywords: "", + lazyLoad: true, + compName: "RichTextEditorComp", + compPath: "comps/richTextEditorComp", + layoutInfo: { + w: 12, + h: 50, + }, + }, + input: { + name: "", + enName: "Input", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: false, + compName: "InputComp", + comp: InputComp, + compPath: "comps/textInputComp/inputComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + password: { + name: "", + enName: "Password", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "PasswordComp", + compPath: "comps/textInputComp/passwordComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + numberInput: { + name: "", + enName: "Number Input", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "NumberInputComp", + compPath: "comps/numberInputComp/numberInputComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + textArea: { + name: "", + enName: "Text Area", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: false, + compName: "TextAreaComp", + comp: TextAreaComp, + compPath: "comps/textInputComp/textAreaComp", + layoutInfo: { + w: 6, + h: 12, + }, + }, + autocomplete: { + name: "", + enName: "autoComplete", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "AutoCompleteComp", + compPath: "comps/autoCompleteComp/autoCompleteComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + switch: { + name: "", + enName: "Switch", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "SwitchComp", + compPath: "comps/switchComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + checkbox: { + name: "", + enName: "Checkbox", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "CheckboxComp", + compPath: "comps/selectInputComp/checkboxComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + radio: { + name: "", + enName: "Radio", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "RadioComp", + compPath: "comps/selectInputComp/radioComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + date: { + name: "", + enName: "Date", + description: "", + categories: ["forms", "scheduling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "DatePickerComp", + compPath: "comps/dateComp/dateComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + dateRange: { + name: "", + enName: "Date Range", + description: "", + categories: ["forms", "scheduling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "DateRangeComp", + compPath: "comps/dateComp/dateComp", + layoutInfo: { + w: 12, + h: 6, + }, + }, + time: { + name: "", + enName: "Time", + description: "", + categories: ["forms", "scheduling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "TimePickerComp", + compPath: "comps/dateComp/timeComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + timeRange: { + name: "", + enName: "Time Range", + categories: ["forms", "scheduling"], + description: "", + icon: null, + keywords: "", + lazyLoad: true, + compName: "TimeRangeComp", + compPath: "comps/dateComp/timeComp", + layoutInfo: { + w: 12, + h: 6, + }, + }, + + slider: { + name: "", + enName: "Slider", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "SliderComp", + compPath: "comps/numberInputComp/sliderComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + rangeSlider: { + name: "", + enName: "Range Slider", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "RangeSliderComp", + compPath: "comps/numberInputComp/rangeSliderComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + + button: { + name: "", + enName: "Button", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: false, + compName: "ButtonComp", + comp: ButtonComp, + compPath: "comps/buttonComp/buttonComp", + layoutInfo: { + w: 6, + h: 6, + }, + withoutLoading: true, + }, + controlButton: { + name: "", + enName: "Controls", + description: "", + categories: ["forms", "collaboration"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ControlButton", + compPath: "comps/meetingComp/controlButton", + withoutLoading: true, + layoutInfo: { + w: 3, + h: 6, + }, + }, + dropdown: { + name: "", + enName: "Dropdown", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "DropdownComp", + compPath: "comps/buttonComp/dropdownComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + toggleButton: { + name: "", + enName: "Toggle Button", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ToggleButtonComp", + compPath: "comps/buttonComp/toggleButtonComp", + layoutInfo: { + w: 3, + h: 6, + }, + }, + segmentedControl: { + name: "", + enName: "Segmented Control", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "SegmentedControlComp", + compPath: "comps/selectInputComp/segmentedControl", + layoutInfo: { + w: 6, + h: 6, + }, + }, + + rating: { + name: "", + enName: "Rating", + description: "", + categories: ["forms"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "RatingComp", + compPath: "comps/ratingComp", + layoutInfo: { + w: 6, + h: 6, + }, + }, + + // Project Management + + ganttChart: { + name: "", + enName: "ganttChart", + description: "", + categories: ["projectmanagement"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "ganttchart", + packageName: "lowcoder-comp-gantt-chart", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-gantt-chart", + layoutInfo: { + w: 20, + h: 60, + }, + }, + + kanban: { + name: "", + enName: "Kanban", + description: "", + categories: ["projectmanagement"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "kanban", + packageName: "lowcoder-comp-kanban", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-kanban", + layoutInfo: { + w: 20, + h: 60, + }, + }, + + hillchart: { + name: "", + enName: "Hillchart", + description: "", + categories: ["projectmanagement"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "hillcharts", + packageName: "lowcoder-comp-hillcharts", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-hillcharts", + layoutInfo: { + w: 12, + h: 50, + }, + }, + bpmnEditor: { + name: "", + enName: "BPMN Editor", + description: "", + categories: ["projectmanagement", "documents"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "bpmn", + packageName: "lowcoder-comp-bpmn-io", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-bpmn-io", + layoutInfo: { + w: 19, + h: 60, + }, + }, + progress: { + name: "", + enName: "Progress", + description: "", + categories: ["dashboards", "projectmanagement"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ProgressComp", + compPath: "comps/progressComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + progressCircle: { + name: "", + enName: "Process Circle", + description: "", + categories: ["dashboards", "projectmanagement"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ProgressCircleComp", + compPath: "comps/progressCircleComp", + layoutInfo: { + w: 6, + h: 20, + }, + }, + + // Document handling + + file: { + name: "", + enName: "File Upload", + description: "", + categories: ["documents"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "FileComp", + compPath: "comps/fileComp/fileComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + fileViewer: { + name: "", + enName: "File Viewer", + description: "", + categories: ["documents"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "FileViewerComp", + compPath: "comps/fileViewerComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + // Multimedia + + image: { + name: "", + enName: "Image", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: false, + compName: "ImageComp", + comp: ImageComp, + compPath: "comps/imageComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + carousel: { + name: "", + enName: "Carousel", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "CarouselComp", + compPath: "comps/carouselComp", + withoutLoading: true, + layoutInfo: { + w: 12, + h: 40, + }, + }, + audio: { + name: "", + enName: "Audio", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "AudioComp", + compPath: "comps/mediaComp/audioComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + video: { + name: "", + enName: "Video", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "VideoComp", + compPath: "comps/mediaComp/videoComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + shape: { + name: "", + enName: "Shape", + description: "", + categories: ["multimedia", "dashboards"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ShapeComp", + compPath: "comps/shapeComp/shapeComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + jsonLottie: { + name: "", + enName: "", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "JsonLottieComp", + compPath: "comps/jsonComp/jsonLottieComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + icon: { + name: "", + enName: "icon", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "IconComp", + compPath: "comps/iconComp", + layoutInfo: { + w: 2, + h: 10, + }, + }, + imageEditor: { + name: "", + enName: "Image Editor", + comp: remoteComp({ ...builtInRemoteComps, compName: "imageEditor" }), + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + // added by Mousheng + colorPicker: { + name: "", + enName: "colorPicker", + description: "", + categories: ["multimedia"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ColorPickerComp", + compPath: "comps/mediaComp/colorPickerComp", + }, + + // item Handling + + qrCode: { + name: "", + enName: "QR Code", + description: "", + categories: ["itemHandling", "documents"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "QRCodeComp", + compPath: "comps/qrCodeComp", + layoutInfo: { + w: 6, + h: 32, + }, + }, + scanner: { + name: "", + enName: "Scanner", + description: "", + categories: ["itemHandling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "ScannerComp", + compPath: "comps/buttonComp/scannerComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + signature: { + name: "", + enName: "Signature", + description: "", + categories: ["itemHandling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "SignatureComp", + compPath: "comps/signatureComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + select: { + name: "", + enName: "Select", + description: "", + categories: ["forms", "itemHandling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "SelectComp", + compPath: "comps/selectInputComp/selectComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + tour: { + name: "", + enName: "Tour", + description: "", + categories: ["multimedia", "itemHandling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "TourComp", + compPath: "comps/tourComp/tourComp", + layoutInfo: { + w: 1, + h: 1, + }, + }, + multiSelect: { + name: "", + enName: "Multiselect", + description: "", + categories: ["forms", "itemHandling"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "MultiSelectComp", + compPath: "comps/selectInputComp/multiSelectComp", + layoutInfo: { + w: 6, + h: 5, + }, + }, + tree: { + name: "", + enName: "Tree", + description: "", + categories: ["layout", "itemHandling", "documents"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "TreeComp", + compPath: "comps/treeComp/treeComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + treeSelect: { + name: "", + enName: "Tree Select", + description: "", + categories: ["layout", "itemHandling", "documents"], + icon: null, + keywords: "", + lazyLoad: true, + compName: "TreeSelectComp", + compPath: "comps/treeComp/treeSelectComp", + layoutInfo: { + w: 12, + h: 5, + }, + }, + transfer: { + name: "", + enName: "transfer", + icon: null, + description: "", + categories: ["itemHandling", "documents"], + keywords: "", + lazyLoad: true, + compName: "transferComp", + compPath: "comps/transferComp", + layoutInfo: { + w: 12, + h: 50, + }, + }, + turnstileCaptcha: { + name: "", + enName: "Cloudflare Turnstile", + description: "", + categories: ["itemHandling"], + icon: null, + keywords: "", + comp: remoteComp({ + compName: "cloudflareTurnstile", + packageName: "lowcoder-comp-cf-turnstile", + source: "npm", + isRemote: true, + }), + compName: "lowcoder-comp-cf-turnstile", + layoutInfo: { + w: 8, + h: 20, + }, + }, + + // Integration + + iframe: { + name: "", + enName: "IFrame", + description: "", + icon: null, + categories: ["integration"], + keywords: "", + lazyLoad: true, + compName: "IFrameComp", + compPath: "comps/iframeComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + custom: { + name: "", + enName: "Custom Component", + description: "", + icon: null, + categories: ["integration"], + keywords: "", + lazyLoad: true, + compName: "CustomComp", + compPath: "comps/customComp/customComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + module: { + name: "", + enName: "Module", + icon: null, + description: "", + categories: [], + keywords: "", + lazyLoad: true, + compName: "ModuleComp", + compPath: "comps/moduleComp/moduleComp", + layoutInfo: { + w: 12, + h: 40, + }, + }, + + // mixed + + text: { + name: "", + enName: "Text", + description: "", + categories: ["dashboards", "layout", "multimedia"], + icon: null, + keywords: "", + compName: "TextComp", + lazyLoad: false, + comp: TextComp, + compPath: "comps/textComp", + layoutInfo: { + w: 6, + h: 24, + }, + }, +}; + +export function loadComps() { + if (!uiCompMap) return; + const entries = Object.entries(uiCompMap); + for (const [compType, manifest] of entries) { + registerComp(compType as UICompType, manifest); + } +} diff --git a/client/packages/lowcoder/src/components/CompName.tsx b/client/packages/lowcoder/src/components/CompName.tsx index 0e11d10e2..248813c36 100644 --- a/client/packages/lowcoder/src/components/CompName.tsx +++ b/client/packages/lowcoder/src/components/CompName.tsx @@ -1,9 +1,8 @@ import { useContext, useEffect, useState } from "react"; import styled from "styled-components"; -import { PointIcon, SearchOutlinedIcon } from "lowcoder-design/src/icons"; import type { EditPopoverItemType } from 'lowcoder-design/src/components/popover'; import { Search } from 'lowcoder-design/src/components/Search'; -import { EditPopover } from "lowcoder-design"; +import {EditPopover, PointIcon, SearchOutlinedIcon} from "lowcoder-design"; import { EditorContext } from "comps/editorState"; import { GridCompOperator } from "comps/utils/gridCompOperator"; import { PopupCard } from "lowcoder-design/src/components/popupCard"; @@ -15,6 +14,7 @@ import { trans } from "i18n"; import { getComponentDocUrl } from "comps/utils/compDocUtil"; import { getComponentPlaygroundUrl } from "comps/utils/compDocUtil"; import { parseCompType } from "comps/utils/remote"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const CompDiv = styled.div<{ $width?: number; $hasSearch?: boolean; $showSearch?: boolean }>` width: ${(props) => (props.$width ? props.$width : 312)}px; @@ -49,7 +49,7 @@ const CompDiv = styled.div<{ $width?: number; $hasSearch?: boolean; $showSearch? } } `; -const Icon = styled(PointIcon)` +const Icon = styled(MultiIcon(PointIcon))` margin-right: 16px; cursor: pointer; color: ${GreyTextColor}; @@ -59,7 +59,7 @@ const Icon = styled(PointIcon)` } `; -const SearchIcon = styled(SearchOutlinedIcon)` +const SearchIcon = styled(MultiIcon(SearchOutlinedIcon))` font-size: 20px; margin-left: 6px; margin-right: 16px; diff --git a/client/packages/lowcoder/src/components/InputList.tsx b/client/packages/lowcoder/src/components/InputList.tsx index 6fd4e8c7b..55c4f0bdb 100644 --- a/client/packages/lowcoder/src/components/InputList.tsx +++ b/client/packages/lowcoder/src/components/InputList.tsx @@ -5,10 +5,11 @@ import { TacoButton } from "lowcoder-design/src/components/button" import { Input } from "lowcoder-design/src/components/Input"; import styled from "styled-components"; import LinkPlusButton from "./LinkPlusButton"; -import { BluePlusIcon } from "lowcoder-design/src/icons"; import { useEffect } from "react"; import { useForm } from "antd/es/form/Form"; import { trans } from "i18n"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {BluePlusIcon} from "icons"; const StyledItem = styled(FormItem)` margin-bottom: 8px; @@ -77,7 +78,7 @@ export default function InputList(props: Omit) { ))} - add("")} icon={}> + add("")} icon={}> {addBtnText} diff --git a/client/packages/lowcoder/src/components/JSLibraryModal.tsx b/client/packages/lowcoder/src/components/JSLibraryModal.tsx index edbc8f547..4e60708b4 100644 --- a/client/packages/lowcoder/src/components/JSLibraryModal.tsx +++ b/client/packages/lowcoder/src/components/JSLibraryModal.tsx @@ -10,19 +10,14 @@ import { useDispatch, useSelector } from "react-redux"; import { recommendJSLibrarySelector } from "redux/selectors/jsLibrarySelector"; import { JSLibraryInfo, JSLibraryLabel } from "components/JSLibraryTree"; import { fetchJSLibraryRecommendsAction } from "redux/reduxActions/jsLibraryActions"; -import { - CalendarDeleteIcon, - DocBoldIcon, - DownloadBoldIcon, - DownloadedIcon, - ErrorIcon, -} from "icons"; import { ActiveTextColor, GreyTextColor } from "constants/style"; import { default as LoadingOutlined } from "@ant-design/icons/LoadingOutlined"; import { RecommendedJSLibraryMeta } from "api/jsLibraryApi"; import log from "loglevel"; import { TacoMarkDown } from "components/markdown"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {CalendarDeleteIcon, DocBoldIcon, DownloadBoldIcon, DownloadedIcon, ErrorIcon} from "icons"; const ModalLabel = styled.div` display: flex; @@ -48,7 +43,7 @@ const JSLibraryCardWrapper = styled.div` width: 280px; margin-bottom: -1px; `; -const StyledDocIcon = styled(DocBoldIcon)` +const StyledDocIcon = styled(MultiIcon(DocBoldIcon))` margin-right: 16px; cursor: pointer; color: ${GreyTextColor}; @@ -59,7 +54,7 @@ const StyledDocIcon = styled(DocBoldIcon)` } } `; -const StyledDownloadIcon = styled(DownloadBoldIcon)` +const StyledDownloadIcon = styled(MultiIcon(DownloadBoldIcon))` cursor: pointer; &:hover { @@ -129,7 +124,7 @@ const JSLibraryCard = ( {loading ? ( } /> ) : !props.onCheck(meta.downloadUrl) ? ( - + ) : ( @@ -200,10 +195,10 @@ const Error = (props: {
- + {props.title}
- props.setError(undefined)} /> + props.setError(undefined)} />
{props.description}
diff --git a/client/packages/lowcoder/src/components/JSLibraryTree.tsx b/client/packages/lowcoder/src/components/JSLibraryTree.tsx index e7c464c60..7e16dcd46 100644 --- a/client/packages/lowcoder/src/components/JSLibraryTree.tsx +++ b/client/packages/lowcoder/src/components/JSLibraryTree.tsx @@ -3,13 +3,14 @@ import React, { useEffect, useMemo } from "react"; import { EditPopover } from "components/popover"; import { trans } from "i18n"; import styled, { css } from "styled-components"; -import { PointIcon } from "icons"; import { EllipsisTextCss } from "components/Label"; import { useDispatch, useSelector } from "react-redux"; import { parseJSLibraryURL } from "util/jsLibraryUtils"; import { jsLibrarySelector } from "redux/selectors/jsLibrarySelector"; import { fetchJSLibraryMetasAction } from "redux/reduxActions/jsLibraryActions"; import { default as TypographyParagraph } from "antd/es/typography/Paragraph"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {PointIcon} from "icons"; const InfoWrapper = styled.div` color: #8b8fa3; @@ -63,7 +64,7 @@ export const JSLibraryLabel = (props: { name: string; version: string }) => ( ); -const Icon = styled(PointIcon)` +const Icon = styled(MultiIcon(PointIcon))` cursor: pointer; flex-shrink: 0; color: #8b8fa3; diff --git a/client/packages/lowcoder/src/components/KeyValueItemList.tsx b/client/packages/lowcoder/src/components/KeyValueItemList.tsx index 38db30910..ac8238472 100644 --- a/client/packages/lowcoder/src/components/KeyValueItemList.tsx +++ b/client/packages/lowcoder/src/components/KeyValueItemList.tsx @@ -9,8 +9,7 @@ import { import { BluePlusIcon, EditPopover, - EditPopoverProps, - PointIcon, + EditPopoverProps, PointIcon, SimplePopover, } from "lowcoder-design"; import { trans } from "i18n"; @@ -18,6 +17,7 @@ import { Children, PropsWithChildren, ReactNode, useState } from "react"; import styled from "styled-components"; import EmptyItem from "./EmptyItem"; import LinkPlusButton from "./LinkPlusButton"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const col1Width = "108px"; @@ -108,7 +108,7 @@ const ItemWrapper = styled.div<{ $popover: boolean; $active: boolean; $hasValue: } `; -const StyledPointIcon = styled(PointIcon)` +const StyledPointIcon = styled(MultiIcon(PointIcon))` color: ${GreyTextColor}; &:hover { @@ -225,7 +225,7 @@ export function KeyValueItemListWithNewCreateState( {...props} onEmptyClick={handleAdd} extra={ - } onClick={handleAdd}> + } onClick={handleAdd}> {trans("addItem")} } diff --git a/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx b/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx index dd591145f..cd22b5ea5 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx @@ -1,8 +1,8 @@ import { - CheckoutIcon, - CloseIcon, CommonTextLabel, CustomSelect, + CheckoutIcon, + CloseIcon, TacoButton, } from "lowcoder-design"; import { useEffect, useRef, useState } from "react"; @@ -27,6 +27,8 @@ import { getUser } from "redux/selectors/usersSelectors"; import { EmptyContent } from "pages/common/styledComponent"; import { trans } from "i18n"; import { PermissionItem } from "./PermissionList"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; + const AddAppUserContent = styled.div` display: flex; @@ -284,7 +286,7 @@ function PermissionTagRender(props: CustomTagProps) { const { label, value, closable, onClose } = props; return ( } + closeIcon={} color={value} closable={closable} onClose={onClose} @@ -335,7 +337,7 @@ const PermissionSelector = (props: { optionLabelProp="label" tagRender={PermissionTagRender} listHeight={240} - menuItemSelectedIcon={} + menuItemSelectedIcon={} notFoundContent={} onSelect={(value: any, option: any) => { setSelectedItems( diff --git a/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx b/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx index 0834cf2d9..5d56714c2 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx @@ -3,10 +3,11 @@ import { PermissionItemsType, PermissionList } from "./PermissionList"; import StepModal from "../StepModal"; import { trans } from "../../i18n"; import { TacoButton } from "components/button"; -import { AddIcon } from "icons"; import { GreyTextColor } from "constants/style"; import { Permission, PermissionRole } from "./Permission"; import styled from "styled-components"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {AddIcon} from "icons"; const BottomWrapper = styled.div` margin: 12px 16px 0 16px; @@ -89,7 +90,7 @@ export const PermissionDialog = (props: { } + icon={} onClick={() => { props.next(); }} diff --git a/client/packages/lowcoder/src/components/PermissionDialog/commonComponents.tsx b/client/packages/lowcoder/src/components/PermissionDialog/commonComponents.tsx index f5a9f884a..a9946bc0d 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/commonComponents.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/commonComponents.tsx @@ -1,6 +1,7 @@ import styled from "styled-components"; -import { AdminIcon, CustomSelect, GroupIcon, WhiteLoading } from "lowcoder-design"; import React from "react"; +import {AdminIcon, CustomSelect, GroupIcon, WhiteLoading} from "lowcoder-design"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export const StyledRoleSelect = styled(CustomSelect)` margin-left: auto; @@ -41,7 +42,7 @@ export const RoleSelectOptionWrapper = styled.div` height: fit-content; `; -export const StyledGroupIcon = styled(GroupIcon)<{ +export const StyledGroupIcon = styled(() => )<{ $color: string; $side?: number; }>` @@ -53,7 +54,7 @@ export const StyledGroupIcon = styled(GroupIcon)<{ } `; -export const StyledAdminIcon = styled(AdminIcon)<{ $color: string }>` +export const StyledAdminIcon = styled(() => )<{ $color: string }>` width: 16px; height: 16px; diff --git a/client/packages/lowcoder/src/components/ResCreatePanel.tsx b/client/packages/lowcoder/src/components/ResCreatePanel.tsx index 388927948..e54592dff 100644 --- a/client/packages/lowcoder/src/components/ResCreatePanel.tsx +++ b/client/packages/lowcoder/src/components/ResCreatePanel.tsx @@ -1,4 +1,3 @@ -import { AddIcon, CloseIcon, ImportIconV2 } from "lowcoder-design/src/icons"; import type { CustomModalProps } from "lowcoder-design/src/components/CustomModal"; import { ScrollBar } from "lowcoder-design/src/components/ScrollBar"; import { BottomShadow, GreyTextColor, TabActiveColor } from "constants/style"; @@ -26,6 +25,8 @@ import { useSelector } from "react-redux"; import { getUser } from "../redux/selectors/usersSelectors"; import DataSourceIcon from "./DataSourceIcon"; import { genRandomKey } from "comps/utils/idGenerator"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {AddIcon, CloseIcon, ImportIconV2} from "icons"; const Wrapper = styled.div<{ $placement: PageType }>` width: 100%; @@ -251,7 +252,7 @@ export function ResCreatePanel(props: ResCreateModalProps) { {trans("query.newQuery")}
- +
@@ -314,7 +315,7 @@ export function ResCreatePanel(props: ResCreateModalProps) { multiple={false} > - + {trans("query.importFromFile")} @@ -340,7 +341,7 @@ export function ResCreatePanel(props: ResCreateModalProps) { {user.orgDev && ( setVisible(true)}> - + {trans("query.newDatasource")} diff --git a/client/packages/lowcoder/src/components/ThemeSettingsCompStyles.tsx b/client/packages/lowcoder/src/components/ThemeSettingsCompStyles.tsx index c34f5e5c8..d36a3508e 100644 --- a/client/packages/lowcoder/src/components/ThemeSettingsCompStyles.tsx +++ b/client/packages/lowcoder/src/components/ThemeSettingsCompStyles.tsx @@ -1,34 +1,28 @@ import { useEffect, useMemo, useState } from "react"; -import { ConfigItem, Radius, Margin, Padding, GridColumns, BorderWidth, BorderStyle } from "../pages/setting/theme/styledComponents"; -import { isValidColor, toHex } from "components/colorSelect/colorUtils"; +import { ConfigItem} from "../pages/setting/theme/styledComponents"; import { ColorSelect } from "components/colorSelect"; import { TacoInput } from "components/tacoInput"; -import { Slider } from "antd"; -import { - ExpandIcon, - CompressIcon, +import { trans } from "i18n"; +import { debounce } from "lodash"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import { BorderRadiusIcon, - BorderWidthIcon, BorderStyleIcon, - TableCellsIcon, - RefreshLineIcon, + BorderWidthIcon, + CompressIcon, + ExpandIcon, + FontFamilyIcon, ImageCompIconSmall, LineHeightIcon, OpacityIcon, + RefreshLineIcon, RotationIcon, ShadowIcon, StarSmileIcon, - TimerFlashIcon, - Timer2Icon, - TextSizeIcon, - TextWeightIcon, - FontFamilyIcon, - TextTransformationIcon, TextDecorationIcon, - TextStyleIcon, - ImageCompIconSmall, - RotationIcon, - LineHeightIcon - } from "lowcoder-design/src/icons"; -import { trans } from "i18n"; -import { debounce } from "lodash"; + TextSizeIcon, TextStyleIcon, + TextTransformationIcon, + TextWeightIcon, + Timer2Icon, + TimerFlashIcon +} from "icons"; export type configChangeParams = { themeSettingKey: string; @@ -285,19 +279,19 @@ export default function ThemeSettingsCompStyles(props: CompStyleProps) { case 'radius': case 'cardRadius': case 'gap': { - icon = ; + icon = ; break; } case 'borderWidth': { - icon = ; + icon = ; break; } case 'borderStyle': { - icon = ; + icon = ; break; } case 'margin': { - icon = ; + icon = ; break; } case 'padding': @@ -305,79 +299,79 @@ export default function ThemeSettingsCompStyles(props: CompStyleProps) { case 'containerSiderPadding': case 'containerFooterPadding': case 'containerBodyPadding': { - icon = ; + icon = ; break; } case 'opacity': { - icon = ; + icon = ; break; } case 'boxShadowColor': { - icon = ; + icon = ; break; } case 'boxShadow': { - icon = ; + icon = ; break; } case 'animationIterationCount': { - icon = ; + icon = ; break; } case 'animation': { - icon = ; + icon = ; break; } case 'animationDelay': { - icon = ; + icon = ; break; } case 'animationDuration': { - icon = ; + icon = ; break; } case 'textSize': { - icon = ; + icon = ; break; } case 'textWeight': { - icon = ; + icon = ; break; } case 'fontFamily': { - icon = ; + icon = ; break; } case 'textDecoration': { - icon = ; + icon = ; break; } case 'textTransform': { - icon = ; + icon = ; break; } case 'fontStyle': { - icon = ; + icon = ; break; } case 'backgroundImage': case 'headerBackgroundImage': case 'footerBackgroundImage': { - icon = ; + icon = ; break; } case 'backgroundImageRepeat': case 'headerBackgroundImageRepeat': case 'footerBackgroundImageRepeat': { - icon = ; + icon = ; break; } case 'rotation': { - icon = ; + icon = ; break; } case 'lineHeight': { - icon = ; + icon = ; break; } } diff --git a/client/packages/lowcoder/src/components/ThemeSettingsSelector.tsx b/client/packages/lowcoder/src/components/ThemeSettingsSelector.tsx index 50f13ffdc..80f7fc6da 100644 --- a/client/packages/lowcoder/src/components/ThemeSettingsSelector.tsx +++ b/client/packages/lowcoder/src/components/ThemeSettingsSelector.tsx @@ -5,14 +5,15 @@ import { isValidColor, isValidGradient, toHex } from "components/colorSelect/col import { ColorSelect } from "components/colorSelect"; import { TacoInput } from "components/tacoInput"; import { Slider, Switch } from "antd"; -import { - ExpandIcon, +import { + ExpandIcon, CompressIcon, BorderRadiusIcon, BorderWidthIcon, BorderStyleIcon, TableCellsIcon, - } from "lowcoder-design/src/icons"; +} from "lowcoder-design/src/icons"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export type configChangeParams = { themeSettingKey: string; @@ -110,16 +111,16 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) { const [fontFamily, setFontFamily] = useState(defaultFontFamily); const [showComponentLoaders, setComponentLoaders] = useState(defaultShowComponentLoaders); const [showDataLoaders, setDataLoaders] = useState(defaultShowDataLoaders); - const [gridColumns, setGridColumns] = useState(defaultGridColumns); - const [gridRowHeight, setGridRowHeight] = useState(defaultGridRowHeight); - const [gridRowCount, setGridRowCount] = useState(defaultGridRowCount); - const [gridPaddingX, setGridPaddingX] = useState(defaultGridPaddingX); - const [gridPaddingY, setGridPaddingY] = useState(defaultGridPaddingY); - const [gridBgImage, setGridBgImage] = useState(defaultGridBgImage); - const [gridBgImageRepeat, setGridBgImageRepeat] = useState(defaultGridBgImageRepeat); - const [gridBgImageSize, setGridBgImageSize] = useState(defaultGridBgImageSize); - const [gridBgImagePosition, setGridBgImagePosition] = useState(defaultGridBgImagePosition); - const [gridBgImageOrigin, setGridBgImageOrigin] = useState(defaultGridBgImageOrigin); + const [gridColumns, setGridColumns] = useState(defaultGridColumns); + const [gridRowHeight, setGridRowHeight] = useState(defaultGridRowHeight); + const [gridRowCount, setGridRowCount] = useState(defaultGridRowCount); + const [gridPaddingX, setGridPaddingX] = useState(defaultGridPaddingX); + const [gridPaddingY, setGridPaddingY] = useState(defaultGridPaddingY); + const [gridBgImage, setGridBgImage] = useState(defaultGridBgImage); + const [gridBgImageRepeat, setGridBgImageRepeat] = useState(defaultGridBgImageRepeat); + const [gridBgImageSize, setGridBgImageSize] = useState(defaultGridBgImageSize); + const [gridBgImagePosition, setGridBgImagePosition] = useState(defaultGridBgImagePosition); + const [gridBgImageOrigin, setGridBgImageOrigin] = useState(defaultGridBgImageOrigin); const varName = `(${themeSettingKey})`; @@ -239,29 +240,29 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) { configChange({ themeSettingKey, gridColumns: result }); }; - const gridRowCountInputBlur = (value: string) => { + const gridRowCountInputBlur = (value: string) => { let result = Infinity; if (value !== '') { result = Number(value); } - setGridRowCount(result); + setGridRowCount(result); configChange({ themeSettingKey, gridRowCount: result }); }; - const gridPaddingInputBlur = (padding: string) => { - let result = 20; - if (padding !== '') { - result = Number(padding); + const gridPaddingInputBlur = (padding: string) => { + let result = 20; + if (padding !== '') { + result = Number(padding); } if (themeSettingKey === 'gridPaddingX') { - setGridPaddingX(result); + setGridPaddingX(result); configChange({ themeSettingKey, gridPaddingX: result }); return; } if (themeSettingKey === 'gridPaddingY') { - setGridPaddingY(result); + setGridPaddingY(result); configChange({ themeSettingKey, gridPaddingY: result }); return; } @@ -369,7 +370,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) { {themeSettingKey !== "radius" && themeSettingKey !== "margin" && - themeSettingKey !== "padding" && + themeSettingKey !== "padding" && themeSettingKey !== "borderStyle" && themeSettingKey !== "borderWidth" && themeSettingKey !== "fontFamily" && @@ -425,7 +426,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) {
- +
- +
- +
- +
- +
-
+
- -
+
- -
+
{ if (e.target.value === '') { - return setGridRowCount(Infinity); + return setGridRowCount(Infinity); } setGridRowCount(Number(e.target.value)) }} @@ -613,7 +614,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) { {themeSettingKey === "gridPaddingX" && (
-
+
{ if (e.target.value === '') { - return setGridPaddingX(undefined); + return setGridPaddingX(undefined); } setGridPaddingX(Number(e.target.value)) }} @@ -637,7 +638,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) { {themeSettingKey === "gridPaddingY" && (
-
+
{ if (e.target.value === '') { - return setGridPaddingY(undefined); + return setGridPaddingY(undefined); } setGridPaddingY(Number(e.target.value)) }} diff --git a/client/packages/lowcoder/src/components/resultPanel/index.tsx b/client/packages/lowcoder/src/components/resultPanel/index.tsx index 69c405228..9ebf38060 100644 --- a/client/packages/lowcoder/src/components/resultPanel/index.tsx +++ b/client/packages/lowcoder/src/components/resultPanel/index.tsx @@ -8,7 +8,8 @@ import { trans } from "../../i18n"; import { DarkActiveTextColor, GreyTextColor } from "../../constants/style"; import { default as AntdTable } from "antd/es/table"; import { Switch } from "components/Switch"; -import { CloseIcon, ErrorIcon, SuccessIcon } from "icons"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {CloseIcon, ErrorIcon, SuccessIcon} from "icons"; export const HeaderWrapper = styled.div` display: flex; @@ -235,7 +236,7 @@ export function useResultPanel(params: BottomResCompResult & { onClose: () => vo header: ( <> - {success ? : } + {success ? : } {title} {runTime ? ( @@ -253,7 +254,7 @@ export function useResultPanel(params: BottomResCompResult & { onClose: () => vo )} - + ), diff --git a/client/packages/lowcoder/src/comps/comps/allComp.test.tsx b/client/packages/lowcoder/src/comps/comps/allComp.test.tsx index c77d37fe5..2fd1aea9d 100644 --- a/client/packages/lowcoder/src/comps/comps/allComp.test.tsx +++ b/client/packages/lowcoder/src/comps/comps/allComp.test.tsx @@ -1,5 +1,5 @@ import { QueryMap } from "@lowcoder-ee/constants/queryConstants"; -import { loadComps } from "comps"; +import { loadComps } from "bootstrap/admin"; import { ColumnComp, RenderComp } from "comps/comps/tableComp/column/tableColumnComp"; import { InputComp } from "comps/comps/textInputComp/inputComp"; import { BoolControl } from "comps/controls/boolControl"; diff --git a/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx b/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx index a2b54ddc8..7656dcf0b 100644 --- a/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx @@ -22,6 +22,7 @@ import { BoolControl } from "../controls/boolControl"; import { getNpmPackageMeta } from "../utils/remote"; import { getPromiseAfterDispatch } from "@lowcoder-ee/util/promiseUtils"; import type { AppState } from "@lowcoder-ee/redux/reducers"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; import { ColorControl } from "../controls/colorControl"; import { DEFAULT_ROW_COUNT } from "@lowcoder-ee/layout/calculateUtils"; import { AppSettingContext } from "../utils/appSettingContext"; @@ -156,7 +157,7 @@ const DivStyled = styled.div` } `; -const StyledAddIcon = styled(AddIcon)` +const StyledAddIcon = styled(MultiIcon(AddIcon))` height: 16px; width: 16px; margin-right: 4px; @@ -243,7 +244,7 @@ function AppGeneralSettingsModal(props: ChildrenInstance) { showHeaderInPublic, lowcoderCompVersion, } = props; - + useEffect(() => { setLowcoderCompVersions([ 'latest', diff --git a/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx b/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx index 4ab79a2ea..b0fac58bc 100644 --- a/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx @@ -1,5 +1,5 @@ -import React, { useContext, useEffect, useState } from "react"; -import { Input, Section, sectionNames } from "lowcoder-design"; +import React, { useEffect, useState } from "react"; +import { Input } from "lowcoder-design"; import { BoolControl } from "comps/controls/boolControl"; import { styleControl } from "comps/controls/styleControl"; import { @@ -16,23 +16,15 @@ import { withExposingConfigs, } from "comps/generators/withExposing"; import styled, { css } from "styled-components"; -import { UICompBuilder, withDefault } from "../../generators"; -import { FormDataPropertyView } from "../formComp/formDataConstants"; +import { UICompBuilder} from "../../generators"; import { jsonControl } from "comps/controls/codeControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { getStyle, - TextInputBasicSection, textInputChildren, TextInputConfigs, - TextInputInteractionSection, textInputValidate, - TextInputValidationSection, } from "../textInputComp/textInputConstants"; -import { - allowClearPropertyView, - hiddenPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; @@ -47,7 +39,6 @@ import { import { getDayJSLocale } from "i18n/dayjsLocale"; import { autoCompleteDate, - itemsDataTooltip, convertAutoCompleteData, valueOrLabelOption, autoCompleteRefMethods, @@ -55,7 +46,8 @@ import { autocompleteIconColor, componentSize, } from "./autoCompleteConstants"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const InputStyle = styled(Input) <{ $style: InputLikeStyleType }>` box-shadow: ${props=>`${props.$style?.boxShadow} ${props.$style?.boxShadowColor}`}; ${(props) => css` @@ -102,150 +94,112 @@ const getValidate = (value: any): "" | "warning" | "error" | undefined => { }; let AutoCompleteCompBase = (function () { - return new UICompBuilder(childrenMap, (props) => { - const { - items, - onEvent, - placeholder, - searchFirstPY, - searchCompletePY, - searchLabelOnly, - ignoreCase, - valueOrLabel, - autoCompleteType, - autocompleteIconColor, - componentSize, - } = props; - + let builder = new UICompBuilder(childrenMap, (props) => { + const { + items, + onEvent, + placeholder, + searchFirstPY, + searchCompletePY, + searchLabelOnly, + ignoreCase, + valueOrLabel, + autoCompleteType, + autocompleteIconColor, + componentSize, + } = props; - const getTextInputValidate = () => { - return { - value: { value: props.value.value }, - required: props.required, - minLength: props?.minLength ?? 0, - maxLength: props?.maxLength ?? 0, - validationType: props.validationType, - regex: props.regex, - customRule: props.customRule, + + const getTextInputValidate = () => { + return { + value: { value: props.value.value }, + required: props.required, + minLength: props?.minLength ?? 0, + maxLength: props?.maxLength ?? 0, + validationType: props.validationType, + regex: props.regex, + customRule: props.customRule, + }; }; - }; - const [activationFlag, setActivationFlag] = useState(false); - const [searchtext, setsearchtext] = useState(props.value.value); - const [validateState, setvalidateState] = useState({}); + const [activationFlag, setActivationFlag] = useState(false); + const [searchtext, setsearchtext] = useState(props.value.value); + const [validateState, setvalidateState] = useState({}); - // 是否中文环境 - const [chineseEnv, setChineseEnv] = useState(getDayJSLocale() === "zh-cn"); + // 是否中文环境 + const [chineseEnv, setChineseEnv] = useState(getDayJSLocale() === "zh-cn"); - useEffect(() => { - setsearchtext(props.value.value); - activationFlag && - setvalidateState(textInputValidate(getTextInputValidate())); - }, [ - props.value.value, - props.required, - props?.minLength, - props?.maxLength, - props.validationType, - props.regex, - props.customRule, - ]); + useEffect(() => { + setsearchtext(props.value.value); + activationFlag && + setvalidateState(textInputValidate(getTextInputValidate())); + }, [ + props.value.value, + props.required, + props?.minLength, + props?.maxLength, + props.validationType, + props.regex, + props.customRule, + ]); - return props.label({ - required: props.required, - children: ( - <> - - { - props.valueInItems.onChange(false); - setvalidateState(textInputValidate(getTextInputValidate())); - setsearchtext(value); - props.value.onChange(value); - props.onEvent("change") - }} - onFocus={() => { - setActivationFlag(true) - props.onEvent("focus") - }} - onBlur={() => props.onEvent("blur")} - onSelect={(data: string, option) => { - setsearchtext(option[valueOrLabel]); - props.valueInItems.onChange(true); - props.value.onChange(option[valueOrLabel]); - props.onEvent("submit"); + return props.label({ + required: props.required, + children: ( + <> + { - if (ignoreCase) { - if ( - option?.label && - option?.label - .toUpperCase() - .indexOf(inputValue.toUpperCase()) !== -1 - ) - return true; - } else { - if (option?.label && option?.label.indexOf(inputValue) !== -1) - return true; - } - if ( - chineseEnv && - searchFirstPY && - option?.label && - option.label - .spell("first") - .toString() - .toLowerCase() - .indexOf(inputValue.toLowerCase()) >= 0 - ) - return true; - if ( - chineseEnv && - searchCompletePY && - option?.label && - option.label - .spell() - .toString() - .toLowerCase() - .indexOf(inputValue.toLowerCase()) >= 0 - ) - return true; - if (!searchLabelOnly) { + > + { + props.valueInItems.onChange(false); + setvalidateState(textInputValidate(getTextInputValidate())); + setsearchtext(value); + props.value.onChange(value); + props.onEvent("change") + }} + onFocus={() => { + setActivationFlag(true) + props.onEvent("focus") + }} + onBlur={() => props.onEvent("blur")} + onSelect={(data: string, option) => { + setsearchtext(option[valueOrLabel]); + props.valueInItems.onChange(true); + props.value.onChange(option[valueOrLabel]); + props.onEvent("submit"); + }} + filterOption={(inputValue: string, option) => { if (ignoreCase) { if ( - option?.value && - option?.value + option?.label && + option?.label .toUpperCase() .indexOf(inputValue.toUpperCase()) !== -1 ) return true; } else { - if ( - option?.value && - option?.value.indexOf(inputValue) !== -1 - ) + if (option?.label && option?.label.indexOf(inputValue) !== -1) return true; } if ( chineseEnv && searchFirstPY && - option?.value && - option.value + option?.label && + option.label .spell("first") .toString() .toLowerCase() @@ -255,119 +209,91 @@ let AutoCompleteCompBase = (function () { if ( chineseEnv && searchCompletePY && - option?.value && - option.value + option?.label && + option.label .spell() .toString() .toLowerCase() .indexOf(inputValue.toLowerCase()) >= 0 ) return true; - } - return false; - }} - > - - - - - ), - style: props.style, - labelStyle: props.labelStyle, - inputFieldStyle:props.inputFieldStyle, - animationStyle: props.animationStyle, - showValidationWhenEmpty: props.showValidationWhenEmpty, - ...validateState, - }); - }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.autoCompleteType.getView() === 'normal' && - children.prefixIcon.propertyView({ - label: trans('button.prefixIcon'), - })} - {children.autoCompleteType.getView() === 'normal' && - children.suffixIcon.propertyView({ - label: trans('button.suffixIcon'), - })} - {allowClearPropertyView(children)} -
-
- {children.items.propertyView({ - label: trans('autoComplete.value'), - tooltip: itemsDataTooltip, - placeholder: '[]', - })} - {getDayJSLocale() === 'zh-cn' && - children.searchFirstPY.propertyView({ - label: trans('autoComplete.searchFirstPY'), - })} - {getDayJSLocale() === 'zh-cn' && - children.searchCompletePY.propertyView({ - label: trans('autoComplete.searchCompletePY'), - })} - {children.searchLabelOnly.propertyView({ - label: trans('autoComplete.searchLabelOnly'), - })} - {children.ignoreCase.propertyView({ - label: trans('autoComplete.ignoreCase'), - })} - {children.valueOrLabel.propertyView({ - label: trans('autoComplete.checkedValueFrom'), - radioButton: true, - })} -
- - - - {children.label.getPropertyView()} - - - - {} - -
- {hiddenPropertyView(children)} -
- -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - ); + if (!searchLabelOnly) { + if (ignoreCase) { + if ( + option?.value && + option?.value + .toUpperCase() + .indexOf(inputValue.toUpperCase()) !== -1 + ) + return true; + } else { + if ( + option?.value && + option?.value.indexOf(inputValue) !== -1 + ) + return true; + } + if ( + chineseEnv && + searchFirstPY && + option?.value && + option.value + .spell("first") + .toString() + .toLowerCase() + .indexOf(inputValue.toLowerCase()) >= 0 + ) + return true; + if ( + chineseEnv && + searchCompletePY && + option?.value && + option.value + .spell() + .toString() + .toLowerCase() + .indexOf(inputValue.toLowerCase()) >= 0 + ) + return true; + } + return false; + }} + > + +
+
+ + ), + style: props.style, + labelStyle: props.labelStyle, + inputFieldStyle:props.inputFieldStyle, + animationStyle: props.animationStyle, + showValidationWhenEmpty: props.showValidationWhenEmpty, + ...validateState, + }); }) - .setExposeMethodConfigs(autoCompleteRefMethods) - .setExposeStateConfigs([ - new NameConfig("value", trans("export.inputValueDesc")), - new NameConfig("valueInItems", trans("autoComplete.valueInItems")), - NameConfigPlaceHolder, - NameConfigRequired, - ...TextInputConfigs, - ]) - .build(); + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .setExposeMethodConfigs(autoCompleteRefMethods) + .setExposeStateConfigs([ + new NameConfig("value", trans("export.inputValueDesc")), + new NameConfig("valueInItems", trans("autoComplete.valueInItems")), + NameConfigPlaceHolder, + NameConfigRequired, + ...TextInputConfigs, + ]) + .build(); })(); AutoCompleteCompBase = class extends AutoCompleteCompBase { diff --git a/client/packages/lowcoder/src/comps/comps/autoCompleteComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/autoCompleteComp/propertyView.tsx new file mode 100644 index 000000000..d23e9440f --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/autoCompleteComp/propertyView.tsx @@ -0,0 +1,85 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {allowClearPropertyView, hiddenPropertyView} from "lowcoder-sdk"; +import {itemsDataTooltip} from "@lowcoder-ee/comps/comps/autoCompleteComp/autoCompleteConstants"; +import {getDayJSLocale} from "@lowcoder-ee/i18n/dayjsLocale"; +import { + TextInputBasicSection, + TextInputInteractionSection, TextInputValidationSection +} from "@lowcoder-ee/comps/comps/textInputComp/textInputConstants"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import React from "react"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.autoCompleteType.getView() === 'normal' && + children.prefixIcon.propertyView({ + label: trans('button.prefixIcon'), + })} + {children.autoCompleteType.getView() === 'normal' && + children.suffixIcon.propertyView({ + label: trans('button.suffixIcon'), + })} + {allowClearPropertyView(children)} +
+
+ {children.items.propertyView({ + label: trans('autoComplete.value'), + tooltip: itemsDataTooltip, + placeholder: '[]', + })} + {getDayJSLocale() === 'zh-cn' && + children.searchFirstPY.propertyView({ + label: trans('autoComplete.searchFirstPY'), + })} + {getDayJSLocale() === 'zh-cn' && + children.searchCompletePY.propertyView({ + label: trans('autoComplete.searchCompletePY'), + })} + {children.searchLabelOnly.propertyView({ + label: trans('autoComplete.searchLabelOnly'), + })} + {children.ignoreCase.propertyView({ + label: trans('autoComplete.ignoreCase'), + })} + {children.valueOrLabel.propertyView({ + label: trans('autoComplete.checkedValueFrom'), + radioButton: true, + })} +
+ + + + {children.label.getPropertyView()} + + + + {} + +
+ {hiddenPropertyView(children)} +
+ +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + ); +}) + + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/avatar.tsx b/client/packages/lowcoder/src/comps/comps/avatar.tsx index 356392405..e0f5471c0 100644 --- a/client/packages/lowcoder/src/comps/comps/avatar.tsx +++ b/client/packages/lowcoder/src/comps/comps/avatar.tsx @@ -1,7 +1,6 @@ import styled from "styled-components"; import { RecordConstructorToView } from "lowcoder-core"; import { styleControl } from "comps/controls/styleControl"; -import _ from "lodash"; import { avatarContainerStyle, AvatarContainerStyleType, @@ -17,8 +16,6 @@ import { NameConfigHidden, withExposingConfigs, } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { NumberControl } from "comps/controls/codeControl"; import { IconControl } from "comps/controls/iconControl"; @@ -30,10 +27,12 @@ import { Avatar, AvatarProps, Badge, Dropdown, Menu } from "antd"; import { LeftRightControl, dropdownControl } from "../controls/dropdownControl"; import { stringExposingStateControl } from "../controls/codeStateControl"; import { BoolControl } from "../controls/boolControl"; -import { BadgeBasicSection, badgeChildren } from "./badgeComp/badgeConstants"; +import { badgeChildren } from "./badgeComp/badgeConstants"; import { DropdownOptionControl } from "../controls/optionsControl"; -import { ReactElement, useContext, useEffect } from "react"; +import React, { ReactElement, useContext } from "react"; import { CompNameContext, EditorContext } from "../editorState"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/avatar")); const AvatarWrapper = styled(Avatar) ` background: ${(props) => props.$style.background}; @@ -197,80 +196,12 @@ const AvatarView = (props: RecordConstructorToView) => { }; let AvatarBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return()}) - .setPropertyViewFn((children) => ( - <> -
- {children.src.propertyView({ - label: trans("avatarComp.src"), - placeholder: "http://xxxx/xx.jpg", - tooltip: trans("avatarComp.avatarCompTooltip"), - })} - {children.title.propertyView({ - label: trans("avatarComp.title"), - tooltip: trans("avatarComp.avatarCompTooltip"), - })} - {children.icon.propertyView({ - label: trans("avatarComp.icon"), - IconType: "All", - tooltip: trans("avatarComp.avatarCompTooltip"), - })} - {children.shape.propertyView({ - label: trans("avatarComp.shape"), - radioButton: true, - })} - { - children.iconSize.propertyView({ - label: trans("avatarComp.iconSize"), - })} - { - children.enableDropdownMenu.propertyView({ - label: trans("avatarComp.enableDropDown") - })} - {children.enableDropdownMenu.getView() && children.options.propertyView({})} -
-
- { - children.avatarLabel.propertyView({ - label: trans("avatarComp.label"), - })} - { - children.avatarCatption.propertyView({ - label: trans("avatarComp.caption"), - })} - { - children.labelPosition.propertyView({ - label: trans("avatarComp.labelPosition"), - radioButton: true, - })} - { - children.alignmentPosition.propertyView({ - label: trans("avatarComp.alignmentPosition"), - radioButton: true, - })} -
- {} -
- {children.onEvent.getPropertyView()} -
-
- {hiddenPropertyView(children)} -
-
- {children.style.getPropertyView()} -
-
- {children.avatarStyle.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.captionStyle.getPropertyView()} -
- - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/avatarGroup.tsx b/client/packages/lowcoder/src/comps/comps/avatarGroup.tsx index cba007ee1..73801cc33 100644 --- a/client/packages/lowcoder/src/comps/comps/avatarGroup.tsx +++ b/client/packages/lowcoder/src/comps/comps/avatarGroup.tsx @@ -1,25 +1,26 @@ import { CompAction, RecordConstructorToView, changeChildAction } from "lowcoder-core"; import { styleControl } from "comps/controls/styleControl"; -import { QRCodeStyle, QRCodeStyleType, avatarGroupStyle, AvatarGroupStyleType, avatarContainerStyle, AvatarContainerStyleType } from "comps/controls/styleControlConstants"; +import { avatarGroupStyle, avatarContainerStyle, AvatarContainerStyleType } from "comps/controls/styleControlConstants"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { AlignCenter, AlignLeft, AlignRight, Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; +import {AlignCenter, AlignLeft, AlignRight} from "lowcoder-design"; import { trans } from "i18n"; import { NumberControl, StringControl } from "comps/controls/codeControl"; import { Avatar, Tooltip } from "antd"; import { clickEvent, eventHandlerControl, refreshEvent } from "../controls/eventHandlerControl"; import styled from "styled-components"; -import { useContext, ReactElement, useEffect } from "react"; +import React, { ReactElement } from "react"; import { MultiCompBuilder, stateComp, withDefault } from "../generators"; -import { EditorContext } from "comps/editorState"; import { IconControl } from "../controls/iconControl"; import { ColorControl } from "../controls/colorControl"; import { optionsControl } from "../controls/optionsControl"; import { BoolControl } from "../controls/boolControl"; import { dropdownControl } from "../controls/dropdownControl"; import { JSONObject } from "util/jsonTypes"; - +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewAvatarGroup1 = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/avatarGroup").then(module => ({default: module.PropertyViewAvatarGroup1}))) +const PropertyViewAvatarGroup2 = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/avatarGroup").then(module => ({default: module.PropertyViewAvatarGroup2}))) const MacaroneList = [ '#fde68a', '#eecff3', @@ -47,7 +48,7 @@ const Container = styled.div<{ $style: AvatarContainerStyleType | undefined, ali border-width: ${props => props?.$style?.borderWidth}; `; -const DropdownOption = new MultiCompBuilder( +let DropdownOption = new MultiCompBuilder( { src: StringControl, AvatarIcon: IconControl, @@ -58,31 +59,17 @@ const DropdownOption = new MultiCompBuilder( }, (props) => props ) - .setPropertyViewFn((children) => ( - <> - {children.src.propertyView({ label: trans("avatarComp.src"), placeholder: "", tooltip: trans("avatarComp.avatarCompTooltip") })} - {children.label.propertyView({ - label: trans("avatarComp.title"), - tooltip: trans("avatarComp.avatarCompTooltip"), - })} - {children.AvatarIcon.propertyView({ - label: trans("avatarComp.icon"), - IconType: "All", - tooltip: trans("avatarComp.avatarCompTooltip"), - })} - {children.color.propertyView({ label: trans("style.fill") })} - {children.backgroundColor.propertyView({ label: trans("style.background") })} - {children.Tooltip.propertyView({ label: trans("badge.tooltip") })} - - )) - .build(); +if (viewMode() === "admin") { + DropdownOption.setPropertyViewFn((children) => ); +} +const DropdownOptionBuilder = DropdownOption.build(); const EventOptions = [clickEvent, refreshEvent] as const; export const alignOptions = [ - { label: , value: "flex-start" }, - { label: , value: "center" }, - { label: , value: "flex-end" }, + { label: , value: "flex-start" }, + { label: , value: "center" }, + { label: , value: "flex-end" }, ] as const; const childrenMap = { @@ -94,7 +81,7 @@ const childrenMap = { autoColor: BoolControl.DEFAULT_TRUE, onEvent: eventHandlerControl(EventOptions), currentAvatar: stateComp({}), - avatars: optionsControl(DropdownOption, { + avatars: optionsControl(DropdownOptionBuilder, { initOptions: [ { src: "https://api.dicebear.com/7.x/miniavs/svg?seed=1", label: String.fromCharCode(65 + Math.ceil(Math.random() * 25)) }, { AvatarIcon: "/icon:antd/startwotone" }, @@ -142,48 +129,13 @@ const AvatarGroupView = (props: RecordConstructorToView & { }; let AvatarGroupBasicComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return( -)}) - .setPropertyViewFn((children) => ( - <> - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.avatars.propertyView({})} - {children.maxCount.propertyView({ - label: trans("avatarGroup.maxCount") - })} - {children.avatarSize.propertyView({ - label: trans("avatarGroup.avatarSize") - })} - {children.autoColor.propertyView({ - label: trans("avatarGroup.autoColor") - })} - {children.alignment.propertyView({ - label: trans("avatarGroup.alignment"), - radioButton: true, - })} -
-
- {hiddenPropertyView(children)} - {children.onEvent.propertyView()} -
- - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.avatar.getPropertyView()} -
-
- {children.style.getPropertyView()} -
- - )} - - )) +)}) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx index 8b03c0492..9948c3e6a 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx @@ -5,12 +5,7 @@ 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 { - disabledPropertyView, - hiddenPropertyView, - loadingPropertyView, -} from "comps/utils/propertyUtils"; -import { CommonBlueLabel, controlItem, Dropdown, Section, sectionNames } from "lowcoder-design"; +import { CommonBlueLabel, controlItem, Dropdown } from "lowcoder-design"; import { trans } from "i18n"; import styled from "styled-components"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; @@ -24,10 +19,12 @@ import { } from "./buttonCompConstants"; import { RefControl } from "comps/controls/refControl"; -import React, { useContext, useEffect } from "react"; +import React from "react"; import { AnimationStyle } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewButtonComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewButtonComp}))) const FormLabel = styled(CommonBlueLabel)` font-size: 13px; margin-right: 4px; @@ -134,7 +131,7 @@ const ButtonTmpComp = (function () { animationStyle: styleControl(AnimationStyle, 'animationStyle'), viewRef: RefControl, }; - return new UICompBuilder(childrenMap, (props) => { + const builder = new UICompBuilder(childrenMap, (props) => { return( @@ -160,40 +157,14 @@ const ButtonTmpComp = (function () { )} - ); + ) }) - .setPropertyViewFn((children) => ( - <> -
- {children.text.propertyView({ label: trans("text") })} -
- {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {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()} -
- - )} + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} -
-
{children.style.getPropertyView()}
- - )} - - )) + return builder .setExposeMethodConfigs(buttonRefMethods) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx index a27c4ab83..e1bcf32cf 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx @@ -6,11 +6,8 @@ import { BoolCodeControl, StringControl } from "comps/controls/codeControl"; import { DropdownStyle, DropdownStyleType } from "comps/controls/styleControlConstants"; import { withDefault } from "comps/generators"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; -import { Section, sectionNames } from "lowcoder-design"; import { trans } from "i18n"; -import React, { ReactElement, useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React, { ReactElement } from "react"; import styled from "styled-components"; import { ButtonEventHandlerControl } from "../../controls/eventHandlerControl"; import { DropdownOptionControl } from "../../controls/optionsControl"; @@ -22,6 +19,8 @@ import { getButtonStyle, } from "./buttonCompConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewDropDownComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewDropDownComp}))) const StyledDropdownButton = styled(DropdownButton)` width: 100%; @@ -89,7 +88,7 @@ const DropdownTmpComp = (function () { onEvent: ButtonEventHandlerControl, style: styleControl(DropdownStyle, 'style'), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const hasIcon = props.options.findIndex((option) => (option.prefixIcon as ReactElement)?.props.value) > -1; const items = props.options @@ -151,32 +150,10 @@ const DropdownTmpComp = (function () { ); }) - .setPropertyViewFn((children) => ( - <> -
- {children.options.propertyView({})} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {!children.onlyMenu.getView() && children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.text.propertyView({ label: trans("label") })} - {children.onlyMenu.propertyView({ label: trans("dropdown.onlyMenu") })} -
-
{children.style.getPropertyView()}
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/floatButtonComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/floatButtonComp.tsx index 223650ef4..c1ff044a4 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/floatButtonComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/floatButtonComp.tsx @@ -6,8 +6,6 @@ import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, BadgeStyle, BadgeStyleType, FloatButtonStyle, FloatButtonStyleType } from "comps/controls/styleControlConstants"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { StringControl, NumberControl } from "comps/controls/codeControl"; import { FloatButton } from 'antd'; @@ -16,8 +14,9 @@ import { IconControl } from "comps/controls/iconControl"; import styled from "styled-components"; import { ButtonEventHandlerControl } from "comps/controls/eventHandlerControl"; import { manualOptionsControl } from "comps/controls/optionsControl"; -import { useContext, useEffect } from "react"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +import React from "react"; +const PropertyViewFloatButton = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewFloatButton}))) const StyledFloatButton = styled(FloatButton)<{ $animationStyle: AnimationStyleType; }>` @@ -132,31 +131,14 @@ const FloatButtonView = (props: RecordConstructorToView) => }; let FloatButtonBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return( )}) - .setPropertyViewFn((children) => ( - <> -
- {children.buttons.propertyView({})} - {children.icon.propertyView({ label: trans("icon") })} - {children.shape.propertyView({ label: trans("floatButton.buttonShape"), radioButton: true })} - {children.buttonTheme.propertyView({ label: trans("floatButton.buttonTheme"), radioButton: true })} - {children.dot.propertyView({ label: trans("floatButton.dot") })} -
-
- {hiddenPropertyView(children)} -
-
{children.badgeStyle.getPropertyView()}
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/linkComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/linkComp.tsx index e0fdf7b4b..55dd3fbe8 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/linkComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/linkComp.tsx @@ -7,21 +7,16 @@ import { AnimationStyle, AnimationStyleType, LinkStyle, LinkStyleType } from "co import { withDefault } from "comps/generators"; import { migrateOldData } from "comps/generators/simpleGenerators"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; -import { Section, sectionNames } from "lowcoder-design"; import styled from "styled-components"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { - hiddenPropertyView, - disabledPropertyView, - loadingPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; import { RefControl } from "comps/controls/refControl"; -import { EditorContext } from "comps/editorState"; -import React, { useContext, useEffect } from "react"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewLinkComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewLinkComp}))) const Link = styled(Button)<{ $style: LinkStyleType; @@ -91,7 +86,7 @@ const LinkTmpComp = (function () { suffixIcon: IconControl, viewRef: RefControl, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { // chrome86 bug: button children should not contain only empty span const hasChildren = hasIcon(props.prefixIcon) || !!props.text || hasIcon(props.suffixIcon); return ( @@ -116,35 +111,10 @@ const LinkTmpComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.text.propertyView({ label: trans("text") })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {loadingPropertyView(children)} -
-
- {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
{children.style.getPropertyView()}
-
{children.animationStyle.getPropertyView()}
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs(buttonRefMethods) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/propertyView.tsx new file mode 100644 index 000000000..82d4b71c6 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/propertyView.tsx @@ -0,0 +1,224 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; + + +function isDefault(type?: string) { + return !type; +} + +const PropertyViewButtonComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + return ( + <> +
+ {children.text.propertyView({ label: trans("text") })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {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()} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} +
+
{children.style.getPropertyView()}
+ + )} + + ); +}); + + +const PropertyViewDropDownComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.options.propertyView({})} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {!children.onlyMenu.getView() && children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.text.propertyView({ label: trans("label") })} + {children.onlyMenu.propertyView({ label: trans("dropdown.onlyMenu") })} +
+
{children.style.getPropertyView()}
+ + )} + + ); +}); + + +const PropertyViewScannerComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.text.propertyView({ label: trans("text") })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+
+ {children.continuous.propertyView({ label: trans("scanner.continuous") })} + {children.continuous.getView() && + children.uniqueData.propertyView({ label: trans("scanner.uniqueData") })} + {children.maskClosable.propertyView({ label: trans("scanner.maskClosable") })} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <>
{children.style.getPropertyView()}
+ )} + + ); +}); + +const PropertyViewToggleButton = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.value.propertyView({ + label: trans("prop.defaultValue"), + tooltip: trans("toggleButton.valueDesc"), + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {loadingPropertyView(children)} +
+
+ {children.showText.propertyView({ label: trans("toggleButton.showText") })} + {children.showText.getView() && + children.trueText.propertyView({ label: trans("toggleButton.trueLabel") })} + {children.showText.getView() && + children.falseText.propertyView({ label: trans("toggleButton.falseLabel") })} + {children.trueIcon.propertyView({ label: trans("toggleButton.trueIconLabel") })} + {children.falseIcon.propertyView({ label: trans("toggleButton.falseIconLabel") })} + {children.showText.getView() && + children.iconPosition.propertyView({ + label: trans("toggleButton.iconPosition"), + radioButton: true, + })} + {children.alignment.propertyView({ + label: trans("toggleButton.alignment"), + radioButton: true, + })} +
+ + )} + + {(editorModeStatus === "layout" || + editorModeStatus === "both") && ( + <> +
+ {children.showBorder.propertyView({ + label: trans("toggleButton.showBorder"), + })} + {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + + ); +}); + +const PropertyViewFloatButton = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.buttons.propertyView({})} + {children.icon.propertyView({ label: trans("icon") })} + {children.shape.propertyView({ label: trans("floatButton.buttonShape"), radioButton: true })} + {children.buttonTheme.propertyView({ label: trans("floatButton.buttonTheme"), radioButton: true })} + {children.dot.propertyView({ label: trans("floatButton.dot") })} +
+
+ {hiddenPropertyView(children)} +
+
{children.badgeStyle.getPropertyView()}
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + ); +}); + +const PropertyViewLinkComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.text.propertyView({ label: trans("text") })} +
+ + {(editorModeStatus === "logic" || editorModeStatus) && ( + <>
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {loadingPropertyView(children)} +
+
+ {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
{children.style.getPropertyView()}
+
{children.animationStyle.getPropertyView()}
+ + )} + + ); +}); + +export {PropertyViewLinkComp, PropertyViewFloatButton, PropertyViewToggleButton, PropertyViewScannerComp, PropertyViewButtonComp, PropertyViewDropDownComp}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx index 3fa93e028..7d4614869 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx @@ -13,17 +13,17 @@ import { styleControl } from "comps/controls/styleControl"; 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 { CustomModal } from "lowcoder-design"; import styled from "styled-components"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { hiddenPropertyView, disabledPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; 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 {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewScannerComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewScannerComp}))) const Error = styled.div` color: #f5222d; @@ -73,7 +73,7 @@ const ScannerTmpComp = (function () { style: styleControl(DropdownStyle, 'style'), viewRef: RefControl, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const [showModal, setShowModal] = useState(false); const [errMessage, setErrMessage] = useState(""); const [videoConstraints, setVideoConstraints] = useState({ @@ -211,34 +211,10 @@ const ScannerTmpComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.text.propertyView({ label: trans("text") })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
-
- {children.continuous.propertyView({ label: trans("scanner.continuous") })} - {children.continuous.getView() && - children.uniqueData.propertyView({ label: trans("scanner.uniqueData") })} - {children.maskClosable.propertyView({ label: trans("scanner.maskClosable") })} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
{children.style.getPropertyView()}
- )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .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 5586c3bde..0a651faad 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/toggleButtonComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/toggleButtonComp.tsx @@ -1,12 +1,6 @@ import { BoolCodeControl, StringControl } from "comps/controls/codeControl"; import { withDefault } from "comps/generators"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; -import { - disabledPropertyView, - hiddenPropertyView, - loadingPropertyView, -} from "comps/utils/propertyUtils"; -import { Section, sectionNames } from "lowcoder-design"; import { trans } from "i18n"; import styled from "styled-components"; import { ChangeEventHandlerControl } from "../../controls/eventHandlerControl"; @@ -23,8 +17,9 @@ import { import { styleControl } from "comps/controls/styleControl"; import { BoolControl } from "comps/controls/boolControl"; import { RefControl } from "comps/controls/refControl"; -import React, { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewToggleButton = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewToggleButton}))) const IconWrapper = styled.div` display: flex; @@ -65,7 +60,7 @@ const ToggleTmpComp = (function () { showBorder: withDefault(BoolControl, true), viewRef: RefControl, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const text = props.showText ? (props.value.value ? props.trueText : props.falseText) || undefined : undefined; @@ -94,60 +89,10 @@ const ToggleTmpComp = (function () { ); }) - .setPropertyViewFn((children) => ( - <> -
- {children.value.propertyView({ - label: trans("prop.defaultValue"), - tooltip: trans("toggleButton.valueDesc"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {loadingPropertyView(children)} -
-
- {children.showText.propertyView({ label: trans("toggleButton.showText") })} - {children.showText.getView() && - children.trueText.propertyView({ label: trans("toggleButton.trueLabel") })} - {children.showText.getView() && - children.falseText.propertyView({ label: trans("toggleButton.falseLabel") })} - {children.trueIcon.propertyView({ label: trans("toggleButton.trueIconLabel") })} - {children.falseIcon.propertyView({ label: trans("toggleButton.falseIconLabel") })} - {children.showText.getView() && - children.iconPosition.propertyView({ - label: trans("toggleButton.iconPosition"), - radioButton: true, - })} - {children.alignment.propertyView({ - label: trans("toggleButton.alignment"), - radioButton: true, - })} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || - useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.showBorder.propertyView({ - label: trans("toggleButton.showBorder"), - })} - {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs(buttonRefMethods) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/carouselComp.tsx b/client/packages/lowcoder/src/comps/comps/carouselComp.tsx index e4b5f26d0..20904a624 100644 --- a/client/packages/lowcoder/src/comps/comps/carouselComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/carouselComp.tsx @@ -1,22 +1,20 @@ import { default as Carousel } from "antd/es/carousel"; -import { Section, sectionNames } from "lowcoder-design"; import { BoolControl } from "../controls/boolControl"; import { UICompBuilder, withDefault } from "../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators/withExposing"; import styled from "styled-components"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { ChangeEventHandlerControl } from "comps/controls/eventHandlerControl"; -import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; +import { formDataChildren } from "./formComp/formDataConstants"; import { PositionControl } from "comps/controls/dropdownControl"; -import { useEffect, useRef, useState } from "react"; +import React, { useRef, useState } from "react"; import ReactResizeDetector from "react-resize-detector"; import { ArrayStringControl } from "comps/controls/codeControl"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, CarouselStyle } from "comps/controls/styleControlConstants"; +import {viewMode} from "@lowcoder-ee/util/editor"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/carouselComp")); // TODO: dots at top position needs proper margin (should be the same as bottom position) @@ -48,7 +46,7 @@ let CarouselBasicComp = (function () { animationStyle: styleControl(AnimationStyle , 'animationStyle'), ...formDataChildren, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const containerRef = useRef(null); const [height, setHeight] = useState(0); const onResize = () => { @@ -79,40 +77,10 @@ let CarouselBasicComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.data.propertyView({ label: trans("data") })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {children.autoPlay.propertyView({ label: trans("carousel.autoPlay") })} -
- )} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <>
- {children.showDots.propertyView({ label: trans("carousel.showDots") })} - {children.dotPosition.propertyView({ - label: trans("carousel.dotPosition"), - radioButton: true, - })} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx b/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx index fa602fa6b..a3a0f3dea 100644 --- a/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx @@ -1,4 +1,3 @@ -import { default as Row } from "antd/es/row"; import { default as Col } from "antd/es/col"; import { JSONObject, JSONValue } from "util/jsonTypes"; import { CompAction, CompActionTypes, deleteCompAction, wrapChildAction } from "lowcoder-core"; @@ -17,7 +16,7 @@ import { sameTypeMap, UICompBuilder, withDefault } from "comps/generators"; import { addMapChildAction } from "comps/generators/sameTypeMap"; import { NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; import { NameGenerator } from "comps/utils"; -import { ScrollBar, Section, controlItem, sectionNames } from "lowcoder-design"; +import { ScrollBar } from "lowcoder-design"; import { HintPlaceHolder } from "lowcoder-design"; import _ from "lodash"; import styled from "styled-components"; @@ -35,13 +34,12 @@ import { messageInstance } from "lowcoder-design/src/components/GlobalInstances" import { BoolControl } from "comps/controls/boolControl"; import { BoolCodeControl, NumberControl, StringControl } from "comps/controls/codeControl"; -import { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; - -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; +import React from "react"; import { DisabledContext } from "comps/generators/uiCompBuilder"; import SliderControl from "@lowcoder-ee/comps/controls/sliderControl"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const ContainWrapper = styled.div<{ $style: ContainerStyleType & { @@ -188,66 +186,15 @@ const ColumnLayout = (props: ColumnLayoutProps) => { }; export const ResponsiveLayoutBaseComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return ( ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.columns.propertyView({ - title: trans("responsiveLayout.column"), - newOptionLabel: trans("responsiveLayout.addColumn"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.autoHeight.getPropertyView()} - {(!children.autoHeight.getView()) && children.mainScrollbar.propertyView({ - label: trans("prop.mainScrollbar") - })} - {children.horizontalGridCells.propertyView({ - label: trans('prop.horizontalGridCells'), - })} -
-
- {children.matchColumnsHeight.propertyView({ label: trans("responsiveLayout.matchColumnsHeight") - })} - {controlItem({}, ( -
{trans("responsiveLayout.columnsSpacing")}
- ))} - {children.templateColumns.propertyView({label: trans("responsiveLayout.columnDefinition"), tooltip: trans("responsiveLayout.columnsDefinitionTooltip")})} - {children.templateRows.propertyView({label: trans("responsiveLayout.rowDefinition"), tooltip: trans("responsiveLayout.rowsDefinitionTooltip")})} - {children.columnGap.propertyView({label: trans("responsiveLayout.columnGap")})} - {children.rowGap.propertyView({label: trans("responsiveLayout.rowGap")})} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.columnStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/columnLayout/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/columnLayout/propertyView.tsx new file mode 100644 index 000000000..db005b6ad --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/columnLayout/propertyView.tsx @@ -0,0 +1,67 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import {controlItem, disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView} from "lowcoder-sdk"; + +function isDefault(type?: string) { + return !type; +} + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.columns.propertyView({ + title: trans("responsiveLayout.column"), + newOptionLabel: trans("responsiveLayout.addColumn"), + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.autoHeight.getPropertyView()} + {(!children.autoHeight.getView()) && children.mainScrollbar.propertyView({ + label: trans("prop.mainScrollbar") + })} + {children.horizontalGridCells.propertyView({ + label: trans('prop.horizontalGridCells'), + })} +
+
+ {children.matchColumnsHeight.propertyView({ label: trans("responsiveLayout.matchColumnsHeight") + })} + {controlItem({}, ( +
{trans("responsiveLayout.columnsSpacing")}
+ ))} + {children.templateColumns.propertyView({label: trans("responsiveLayout.columnDefinition"), tooltip: trans("responsiveLayout.columnsDefinitionTooltip")})} + {children.templateRows.propertyView({label: trans("responsiveLayout.rowDefinition"), tooltip: trans("responsiveLayout.rowsDefinitionTooltip")})} + {children.columnGap.propertyView({label: trans("responsiveLayout.columnGap")})} + {children.rowGap.propertyView({label: trans("responsiveLayout.rowGap")})} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.columnStyle.getPropertyView()} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/commentComp/commentComp.tsx b/client/packages/lowcoder/src/comps/comps/commentComp/commentComp.tsx index 9a14ba22d..c0b1032d1 100644 --- a/client/packages/lowcoder/src/comps/comps/commentComp/commentComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/commentComp/commentComp.tsx @@ -1,24 +1,15 @@ -import React, { useEffect, useState, useRef, useContext } from "react"; -// Render the component to the editor +import React, {useEffect, useState, useRef, useContext, Suspense} from "react"; import { changeChildAction, CompAction, RecordConstructorToView, } from "lowcoder-core"; -// Text internationalisation conversion api import { trans } from "i18n"; -// General frame of the right property bar import { UICompBuilder, withDefault } from "../../generators"; -// Right-side attribute subframe -import { Section, sectionNames } from "lowcoder-design"; -// Switch indicating whether the component is hidden or not -import { hiddenPropertyView } from "comps/utils/propertyUtils"; -// Right property switch import { BoolControl } from "comps/controls/boolControl"; import { styleControl } from "comps/controls/styleControl"; //样式输入框 import { jsonValueExposingStateControl } from "comps/controls/codeStateControl"; import { jsonControl, StringControl } from "comps/controls/codeControl"; -// Event Control import { clickEvent, submitEvent, @@ -27,18 +18,14 @@ import { mentionEvent, } from "comps/controls/eventHandlerControl"; -import { EditorContext } from "comps/editorState"; -// Introducing styles import { AnimationStyle, CommentStyle, heightCalculator, widthCalculator, } from "comps/controls/styleControlConstants"; -// Initialise exposed values -import { stateComp, valueComp } from "comps/generators/simpleGenerators"; -// The component's api for exposing properties externally +import { valueComp } from "comps/generators/simpleGenerators"; import { NameConfig, NameConfigHidden, @@ -48,8 +35,6 @@ import { import { commentDate, commentDataTYPE, - CommentDataTooltip, - CommentUserDataTooltip, convertCommentData, checkUserInfoData, checkMentionListData, @@ -59,13 +44,14 @@ import { default as List } from "antd/es/list"; import { default as Button } from "antd/es/button"; import { default as Mentions } from "antd/es/mentions"; import { default as Tooltip } from "antd/es/tooltip"; -import VirtualList, { ListRef } from "rc-virtual-list"; +import VirtualList from "rc-virtual-list"; import _ from "lodash"; import relativeTime from "dayjs/plugin/relativeTime"; import dayjs from "dayjs"; -// import "dayjs/locale/zh-cn"; import { getInitialsAndColorCode } from "util/stringUtils"; import { default as CloseOutlined } from "@ant-design/icons/CloseOutlined"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); dayjs.extend(relativeTime); // dayjs.locale("zh-cn"); @@ -368,68 +354,14 @@ const CommentCompBase = ( }; let CommentBasicComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return ( )}) - .setPropertyViewFn((children) => ( - <> -
- {children.title.propertyView({ - label: trans("comment.title"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.value.propertyView({ - label: trans("comment.value"), - tooltip: CommentDataTooltip, - placeholder: "[]", - })} - {children.userInfo.propertyView({ - label: trans("comment.userInfo"), - tooltip: CommentUserDataTooltip, - })} - {children.mentionList.propertyView({ - label: trans("comment.mentionList"), - tooltip: trans("comment.mentionListDec"), - })} -
-
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {children.sendCommentAble.propertyView({ - label: trans("comment.showSendButton"), - })} - {children.deleteAble.propertyView({ - label: trans("comment.deleteAble"), - })} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.sendCommentAble.getView() && - children.buttonText.propertyView({ - label: trans("comment.buttonTextDec"), - })} - {children.placeholder.propertyView({ - label: trans("comment.placeholderDec"), - })} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- )} - - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/commentComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/commentComp/propertyView.tsx new file mode 100644 index 000000000..c9e1681df --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/commentComp/propertyView.tsx @@ -0,0 +1,68 @@ +import React, {useContext} from "react"; +import {EditorContext, hiddenPropertyView, Section, sectionNames} from "lowcoder-sdk"; +import {trans} from "@lowcoder-ee/i18n"; +import {CommentDataTooltip, CommentUserDataTooltip} from "@lowcoder-ee/comps/comps/commentComp/commentConstants"; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.title.propertyView({ + label: trans("comment.title"), + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <> +
+ {children.value.propertyView({ + label: trans("comment.value"), + tooltip: CommentDataTooltip, + placeholder: "[]", + })} + {children.userInfo.propertyView({ + label: trans("comment.userInfo"), + tooltip: CommentUserDataTooltip, + })} + {children.mentionList.propertyView({ + label: trans("comment.mentionList"), + tooltip: trans("comment.mentionListDec"), + })} +
+
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {children.sendCommentAble.propertyView({ + label: trans("comment.showSendButton"), + })} + {children.deleteAble.propertyView({ + label: trans("comment.deleteAble"), + })} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <>
+ {children.sendCommentAble.getView() && + children.buttonText.propertyView({ + label: trans("comment.buttonTextDec"), + })} + {children.placeholder.propertyView({ + label: trans("comment.placeholderDec"), + })} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ )} + + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/containerBase/containerCompBuilder.tsx b/client/packages/lowcoder/src/comps/comps/containerBase/containerCompBuilder.tsx index df858afcd..ee195a3ed 100644 --- a/client/packages/lowcoder/src/comps/comps/containerBase/containerCompBuilder.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerBase/containerCompBuilder.tsx @@ -49,9 +49,6 @@ export class ContainerCompBuilder< return this; } build() { - if (!this.propertyViewFn) { - throw new Error("no propertyViewFn provided"); - } if (this.childrenMap.hasOwnProperty("container")) { throw new Error("already has container"); } diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx index f9a14575f..4786a4eb0 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx @@ -1,6 +1,5 @@ import ReactResizeDetector from "react-resize-detector"; import { NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; import { TriContainer } from "../triContainerComp/triContainer"; import { ContainerCompBuilder, @@ -9,8 +8,7 @@ import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUt import { trans } from "i18n"; import { BoolCodeControl, StringControl } from "comps/controls/codeControl"; import { BoolControl } from "comps/controls/boolControl"; -import { useContext, useEffect, useRef, useState } from "react"; -import { EditorContext } from "comps/editorState"; +import React, { useEffect, useRef, useState } from "react"; import { Card } from "antd"; import styled from "styled-components"; import { AnimationStyle, AnimationStyleType, CardHeaderStyle, CardHeaderStyleType, CardStyle, CardStyleType } from "comps/controls/styleControlConstants"; @@ -22,6 +20,8 @@ import { dropdownControl } from "comps/controls/dropdownControl"; import { styleControl } from "comps/controls/styleControl"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; +import {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyViewCardComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewCardComp}))) const { Meta } = Card; const Wrapper = styled.div<{ @@ -194,7 +194,7 @@ export const ContainerBaseComp = (function () { animationStyle: styleControl(AnimationStyle , 'animationStyle'), }; - return new ContainerCompBuilder(childrenMap, (props) => { + let builder = new ContainerCompBuilder(childrenMap, (props) => { props.container.showHeader = false; // 注入容器参数 props.container.style = Object.assign(props.container.style, { @@ -263,92 +263,10 @@ export const ContainerBaseComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.size.propertyView({ - label: trans("card.titleSize"), - radioButton: true, - })} - {children.showTitle.propertyView({ label: trans('card.showTitle') })} - {children.showTitle.getView() && children.title.propertyView({ label: trans('card.title') })} - {children.showTitle.getView() && children.extraTitle.propertyView({ label: trans('card.extraTitle') })} - { - children.cardType.getView() == 'common' && - children.CoverImg.propertyView({ label: trans('card.CoverImg') }) - } - - { - children.cardType.getView() == 'common' && - children.CoverImg.getView() && - children.imgSrc.propertyView({ label: trans('card.imgSrc') }) - } - { - children.cardType.getView() == 'common' && - children.CoverImg.getView() && - children.imgHeight.propertyView({ label: trans('card.imgHeight') }) - } - { - children.cardType.getView() == 'common' && - children.showMeta.propertyView({ label: trans('card.showMeta') }) - } - { - children.cardType.getView() == 'common' && - children.showMeta.getView() && - children.metaTitle.propertyView({ label: trans('card.metaTitle') }) - } - { - children.cardType.getView() == 'common' && - children.showMeta.getView() && - children.metaDesc.propertyView({ label: trans('card.metaDesc') }) - } - - { - children.cardType.getView() == 'common' && - children.showActionIcon.propertyView({ label: trans('card.showActionIcon') }) - } - { - children.cardType.getView() == 'common' && - children.showActionIcon.getView() && - children.actionOptions.propertyView({ title: trans('card.actionOptions') }) - } - -
-
- {hiddenPropertyView(children)} - {children.onEvent.getPropertyView()} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.cardType.propertyView({ - label: trans("card.cardType"), - radioButton: true, - })} -
-
- {children.style.getPropertyView()} -
-
- {children.headerStyle.getPropertyView()} -
-
- {children.bodyStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if ((viewModeTriple() === "edit")) { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/containerComp.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/containerComp.tsx index 1fa38cdc5..81a686901 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/containerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/containerComp.tsx @@ -2,7 +2,6 @@ import { CompParams } from "lowcoder-core"; import { ToDataType } from "comps/generators/multi"; import { NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; import { NameGenerator } from "comps/utils/nameGenerator"; -import { Section, sectionNames } from "lowcoder-design"; import { oldContainerParamsToNew } from "../containerBase"; import { toSimpleContainerData } from "../containerBase/simpleContainerComp"; import { TriContainer } from "../triContainerComp/triContainer"; @@ -10,64 +9,32 @@ import { ContainerChildren, ContainerCompBuilder, } from "../triContainerComp/triContainerCompBuilder"; -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { BoolCodeControl } from "comps/controls/codeControl"; import { DisabledContext } from "comps/generators/uiCompBuilder"; -import React, { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { AnimationStyle } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; +import {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyViewContainerComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewContainerComp}))) export const ContainerBaseComp = (function () { const childrenMap = { disabled: BoolCodeControl, animationStyle: styleControl(AnimationStyle), }; - return new ContainerCompBuilder(childrenMap, (props, dispatch) => { + let builder = new ContainerCompBuilder(childrenMap, (props, dispatch) => { return ( ); }) - .setPropertyViewFn((children) => { - return ( - <> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.container.getPropertyView()} -
-
- { children.container.stylePropertyView() } -
- {children.container.children.showHeader.getView() && ( -
- { children.container.headerStylePropertyView() } -
- )} - {children.container.children.showBody.getView() && ( -
- { children.container.bodyStylePropertyView() } -
- )} - {children.container.children.showFooter.getView() && ( -
- { children.container.footerStylePropertyView() } -
- )} - - )} - - ); - }) + if ((viewModeTriple() === "edit")) { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx index 0ca13d652..a7cdef903 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx @@ -3,15 +3,12 @@ import { ToDataType } from "comps/generators/multi"; import { NameConfigDisabled, NameConfigHidden, withExposingConfigs, NameConfig, CompDepsConfig } from "comps/generators/withExposing"; import { withMethodExposing } from "comps/generators/withMethodExposing"; import { NameGenerator } from "comps/utils/nameGenerator"; -import { Section, sectionNames } from "lowcoder-design"; import { oldContainerParamsToNew } from "../containerBase"; import { toSimpleContainerData } from "../containerBase/simpleContainerComp"; -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { BoolCodeControl } from "comps/controls/codeControl"; import { DisabledContext } from "comps/generators/uiCompBuilder"; -import React, { useContext, useEffect, useState } from "react"; -import { EditorContext } from "comps/editorState"; +import React, { useState } from "react"; import { ContainerChildren, @@ -20,6 +17,8 @@ import { import { PageLayout } from "../pageLayoutComp/pageLayout"; import { AnimationStyle } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; +import {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyViewPageLayout = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewPageLayout}))) export const ContainerBaseComp = (function () { const childrenMap = { @@ -27,7 +26,7 @@ export const ContainerBaseComp = (function () { animationStyle: styleControl(AnimationStyle , 'animationStyle'), }; - return new ContainerCompBuilder(childrenMap, (props, dispatch) => { + let builder = new ContainerCompBuilder(childrenMap, (props, dispatch) => { const [siderCollapsed, setSiderCollapsed] = useState(false); @@ -37,50 +36,10 @@ export const ContainerBaseComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {disabledPropertyView(children)} - {hiddenPropertyView(children)} - { children.container.appSelectorPropertyView()} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.container.getPropertyView()} -
-
- { children.container.stylePropertyView() } -
-
- {children.animationStyle.getPropertyView()} -
- {children.container.children.showHeader.getView() && ( -
- { children.container.headerStylePropertyView() } -
- )} - {children.container.children.showSider.getView() && ( -
- { children.container.siderStylePropertyView() } -
- )} -
- { children.container.bodyStylePropertyView() } -
- {children.container.children.showFooter.getView() && ( -
- { children.container.footerStylePropertyView() } -
- )} - - )} - - ); - }) + if ((viewModeTriple() === "edit")) { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/propertyView.tsx new file mode 100644 index 000000000..28ed42fd4 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/containerComp/propertyView.tsx @@ -0,0 +1,235 @@ +import {disabledPropertyView, EditorContext, hiddenPropertyView, Section, sectionNames} from "lowcoder-sdk"; +import React, {useContext} from "react"; +import {trans} from "@lowcoder-ee/i18n"; + +const PropertyViewContainerComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <>
+ {children.container.getPropertyView()} +
+
+ { children.container.stylePropertyView() } +
+ {children.container.children.showHeader.getView() && ( +
+ { children.container.headerStylePropertyView() } +
+ )} + {children.container.children.showBody.getView() && ( +
+ { children.container.bodyStylePropertyView() } +
+ )} + {children.container.children.showFooter.getView() && ( +
+ { children.container.footerStylePropertyView() } +
+ )} + + )} + + ) +}); + +const PropertyViewTextContainer = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.type.propertyView({label: trans("value"), tooltip: trans("textShow.valueTooltip"), radioButton: true,})} + {children.text.propertyView({})} +
+ + {["logic", "both"].includes(editorModeStatus) && ( +
+ {hiddenPropertyView(children)} +
+ )} + {["layout", "both"].includes(editorModeStatus) && ( + <> +
+ {children.container.getPropertyView()} + {children.width.propertyView({label: trans("container.flowWidth")})} + {children.float.propertyView({ label: trans("container.floatType"), radioButton: true, + })} + {children.horizontalAlignment.propertyView({ + label: trans("textShow.horizontalAlignment"), + radioButton: true, + })} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+
+ {children.container.stylePropertyView()} +
+ {children.container.children.showHeader.getView() && ( +
+ { children.container.headerStylePropertyView() } +
+ )} + {children.container.children.showBody.getView() && ( +
+ { children.container.bodyStylePropertyView() } +
+ )} + {children.container.children.showFooter.getView() && ( +
+ { children.container.footerStylePropertyView() } +
+ )} + + )} + + ) +}) + +const PropertyViewPageLayout = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + return ( + <> + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {disabledPropertyView(children)} + {hiddenPropertyView(children)} + { children.container.appSelectorPropertyView()} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <>
+ {children.container.getPropertyView()} +
+
+ { children.container.stylePropertyView() } +
+
+ {children.animationStyle.getPropertyView()} +
+ {children.container.children.showHeader.getView() && ( +
+ { children.container.headerStylePropertyView() } +
+ )} + {children.container.children.showSider.getView() && ( +
+ { children.container.siderStylePropertyView() } +
+ )} +
+ { children.container.bodyStylePropertyView() } +
+ {children.container.children.showFooter.getView() && ( +
+ { children.container.footerStylePropertyView() } +
+ )} + + )} + + ) +}) + +const PropertyViewCardComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <> +
+ {children.size.propertyView({ + label: trans("card.titleSize"), + radioButton: true, + })} + {children.showTitle.propertyView({ label: trans('card.showTitle') })} + {children.showTitle.getView() && children.title.propertyView({ label: trans('card.title') })} + {children.showTitle.getView() && children.extraTitle.propertyView({ label: trans('card.extraTitle') })} + { + children.cardType.getView() == 'common' && + children.CoverImg.propertyView({ label: trans('card.CoverImg') }) + } + + { + children.cardType.getView() == 'common' && + children.CoverImg.getView() && + children.imgSrc.propertyView({ label: trans('card.imgSrc') }) + } + { + children.cardType.getView() == 'common' && + children.CoverImg.getView() && + children.imgHeight.propertyView({ label: trans('card.imgHeight') }) + } + { + children.cardType.getView() == 'common' && + children.showMeta.propertyView({ label: trans('card.showMeta') }) + } + { + children.cardType.getView() == 'common' && + children.showMeta.getView() && + children.metaTitle.propertyView({ label: trans('card.metaTitle') }) + } + { + children.cardType.getView() == 'common' && + children.showMeta.getView() && + children.metaDesc.propertyView({ label: trans('card.metaDesc') }) + } + + { + children.cardType.getView() == 'common' && + children.showActionIcon.propertyView({ label: trans('card.showActionIcon') }) + } + { + children.cardType.getView() == 'common' && + children.showActionIcon.getView() && + children.actionOptions.propertyView({ title: trans('card.actionOptions') }) + } + +
+
+ {hiddenPropertyView(children)} + {children.onEvent.getPropertyView()} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.cardType.propertyView({ + label: trans("card.cardType"), + radioButton: true, + })} +
+
+ {children.style.getPropertyView()} +
+
+ {children.headerStyle.getPropertyView()} +
+
+ {children.bodyStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + )} +) + +export {PropertyViewContainerComp, PropertyViewTextContainer, PropertyViewPageLayout, PropertyViewCardComp}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/textContainerComp.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/textContainerComp.tsx index 653363f01..ad787020e 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/textContainerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/textContainerComp.tsx @@ -6,10 +6,8 @@ import { withExposingConfigs, } from "comps/generators/withExposing"; import { NameGenerator } from "comps/utils/nameGenerator"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { CompParams } from "lowcoder-core"; -import { Section, sectionNames } from "lowcoder-design"; import { oldContainerParamsToNew } from "../containerBase"; import { toSimpleContainerData } from "../containerBase/simpleContainerComp"; import { @@ -21,10 +19,11 @@ import { dropdownControl } from "comps/controls/dropdownControl"; import { withDefault } from "comps/generators/simpleGenerators"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, TextContainerStyle } from "comps/controls/styleControlConstants"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { alignWithJustifyControl } from "comps/controls/alignControl"; +import {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyViewTextContainer = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewTextContainer}))) const typeOptions = [ { label: "Markdown", @@ -65,63 +64,13 @@ export const ContainerBaseComp = (function () { style: styleControl(TextContainerStyle), animationStyle: styleControl(AnimationStyle), }; - return new ContainerCompBuilder(childrenMap, (props, dispatch) => { + let builder = new ContainerCompBuilder(childrenMap, (props, dispatch) => { return ; }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.type.propertyView({label: trans("value"), tooltip: trans("textShow.valueTooltip"), radioButton: true,})} - {children.text.propertyView({})} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(children)} -
- )} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.container.getPropertyView()} - {children.width.propertyView({label: trans("container.flowWidth")})} - {children.float.propertyView({ label: trans("container.floatType"), radioButton: true, - })} - {children.horizontalAlignment.propertyView({ - label: trans("textShow.horizontalAlignment"), - radioButton: true, - })} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
-
- {children.container.stylePropertyView()} -
- {children.container.children.showHeader.getView() && ( -
- { children.container.headerStylePropertyView() } -
- )} - {children.container.children.showBody.getView() && ( -
- { children.container.bodyStylePropertyView() } -
- )} - {children.container.children.showFooter.getView() && ( -
- { children.container.footerStylePropertyView() } -
- )} - - )} - - ); - }) + if ((viewModeTriple() === "edit")) { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/customComp/customComp.tsx b/client/packages/lowcoder/src/comps/comps/customComp/customComp.tsx index b33d74ae6..9bead66c6 100644 --- a/client/packages/lowcoder/src/comps/comps/customComp/customComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/customComp/customComp.tsx @@ -4,17 +4,15 @@ import { StringControl } from "comps/controls/codeControl"; import { jsonObjectStateControl } from "comps/controls/codeStateControl"; import { UICompBuilder, withDefault } from "comps/generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import { useEffect, useRef, useContext } from "react"; +import React, {useEffect, useRef } from "react"; import styled from "styled-components"; import { getPromiseAfterDispatch } from "util/promiseUtils"; import { EventData, EventTypeEnum } from "./types"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; -import { EditorContext } from "comps/editorState"; import { AnimationStyle, AnimationStyleType, CustomStyle, CustomStyleType } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); // TODO: eventually to embedd in container so we have styling? // TODO: support different starter templates for different frameworks (react, ANT, Flutter, Angular, etc) @@ -223,7 +221,7 @@ const childrenMap = { animationStyle:styleControl(AnimationStyle , 'animationStyle'), }; -const CustomCompBase = new UICompBuilder(childrenMap, (props, dispatch) => { +let CustomCompBaseBuilder = new UICompBuilder(childrenMap, (props, dispatch) => { const { code, model } = props; return ( { /> ); }) - .setPropertyViewFn((children) => { - return ( - <> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.model.propertyView({ label: trans("customComp.data") })} - {children.code.propertyView({ label: trans("customComp.code"), language: "html" })} - {hiddenPropertyView(children)} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) - .build(); + +if (viewMode() === "admin") { + CustomCompBaseBuilder.setPropertyViewFn((children) => ); +} + +const CustomCompBase = CustomCompBaseBuilder.build(); class CustomCompAutoHeight extends CustomCompBase { override autoHeight(): boolean { diff --git a/client/packages/lowcoder/src/comps/comps/customComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/customComp/propertyView.tsx new file mode 100644 index 000000000..ea0200d45 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/customComp/propertyView.tsx @@ -0,0 +1,33 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; + + +function isDefault(type?: string) { + return !type; +} + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {children.model.propertyView({ label: trans("customComp.data") })} + {children.code.propertyView({ label: trans("customComp.code"), language: "html" })} + {hiddenPropertyView(children)} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx index 62f84bf84..ad4172e10 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx @@ -18,38 +18,24 @@ import { LabelControl } from "../../controls/labelControl"; import { stringExposingStateControl } from "../../controls/codeStateControl"; import { UICompBuilder, withDefault } from "../../generators"; import { CommonNameConfig, depsConfig, withExposingConfigs } from "../../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, DateTimeStyle, DateTimeStyleType, InputFieldStyle, LabelStyle } from "comps/controls/styleControlConstants"; import { withMethodExposing } from "../../generators/withMethodExposing"; -import { - disabledPropertyView, - formatPropertyView, - hiddenPropertyView, - hourStepPropertyView, - maxDatePropertyView, - maxTimePropertyView, - minDatePropertyView, - minTimePropertyView, - minuteStepPropertyView, - requiredPropertyView, - SecondStepPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; -import { DATE_FORMAT, DATE_TIME_FORMAT, DateParser, PickerMode } from "util/dateTimeUtils"; -import React, { ReactNode, useContext, useEffect, useState } from "react"; +import { DATE_FORMAT, DATE_TIME_FORMAT, DateParser } from "util/dateTimeUtils"; +import React, { ReactNode, useEffect, useState } from "react"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; -import { Section, sectionNames } from "components/Section"; import { CommonPickerMethods, dateRefMethods, disabledTime, handleDateChange } from "comps/comps/dateComp/dateCompUtil"; import { DateUIView } from "./dateUIView"; -import { useIsMobile } from "util/hooks"; import { RefControl } from "comps/controls/refControl"; -// import { CommonPickerMethods } from "antd/es/date-picker/generatePicker/interface"; import { DateRangeUIView } from "comps/comps/dateComp/dateRangeUIView"; -import { EditorContext } from "comps/editorState"; import { dropdownControl } from "comps/controls/dropdownControl"; import { timeZoneOptions } from "./timeZone"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewDateComp1 = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewDateComp1}))); +const PropertyViewDateComp2 = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewDateComp2}))); @@ -78,8 +64,8 @@ const commonChildren = { style: styleControl(InputFieldStyle, 'style'), animationStyle: styleControl(AnimationStyle, 'animationStyle'), labelStyle: styleControl( - LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), - 'labelStyle', + LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), + 'labelStyle', ), suffixIcon: withDefault(IconControl, "/icon:regular/calendar"), ...validationChildren, @@ -90,41 +76,18 @@ const commonChildren = { type CommonChildrenType = RecordConstructorToComp; const datePickerProps = (props: RecordConstructorToView) => - _.pick(props, "format", "showTime", "use12Hours", "hourStep", "minuteStep", "secondStep", "placeholder"); - -const timeFields = (children: CommonChildrenType, isMobile?: boolean) => [ - children.showTime.propertyView({ label: trans("date.showTime") }), - !isMobile && children.use12Hours.propertyView({ label: trans("prop.use12Hours") }), -]; -const commonAdvanceSection = (children: CommonChildrenType, isDate: boolean = true) => { - if (isDate && children.showTime.getView()) { - return ( -
- {hourStepPropertyView(children)} - {minuteStepPropertyView(children)} - {SecondStepPropertyView(children)} -
- ); - } -}; + _.pick(props, "format", "showTime", "use12Hours", "hourStep", "minuteStep", "secondStep", "placeholder"); + + + -const dateValidationFields = (children: CommonChildrenType, dateType: PickerMode = "date") => { - if (dateType === "date") { - return [minDatePropertyView(children), maxDatePropertyView(children)]; - } -}; -const timeValidationFields = (children: CommonChildrenType, dateType: PickerMode = "date") => { - if (dateType === "date" && children.showTime.getView()) { - return [minTimePropertyView(children), maxTimePropertyView(children)]; - } -}; function validate( - props: RecordConstructorToView & { - value: { value: string }; - showTime: boolean; - } + props: RecordConstructorToView & { + value: { value: string }; + showTime: boolean; + } ): { validateStatus: "success" | "warning" | "error"; help?: string; @@ -148,19 +111,19 @@ const childrenMap = { ...formDataChildren, }; export type DateCompViewProps = Pick< - RecordConstructorToView, - | "disabled" - | "format" - | "minDate" - | "maxDate" - | "suffixIcon" - | "showTime" - | "use12Hours" - | "hourStep" - | "minuteStep" - | "secondStep" - | "viewRef" - | "timeZone" + RecordConstructorToView, + | "disabled" + | "format" + | "minDate" + | "maxDate" + | "suffixIcon" + | "showTime" + | "use12Hours" + | "hourStep" + | "minuteStep" + | "secondStep" + | "viewRef" + | "timeZone" > & { onFocus: () => void; onBlur: () => void; @@ -170,12 +133,12 @@ export type DateCompViewProps = Pick< placeholder?: string | [string, string]; }; -export const datePickerControl = new UICompBuilder(childrenMap, (props) => { +export let datePickerControl = new UICompBuilder(childrenMap, (props) => { let time: dayjs.Dayjs | null = null; if (props.value.value !== '') { time = dayjs(props.value.value, DateParser); } - + const [tempValue, setTempValue] = useState(time); useEffect(() => { @@ -195,114 +158,47 @@ export const datePickerControl = new UICompBuilder(childrenMap, (props) => { animationStyle:props.animationStyle, onMouseDown: (e) => e.stopPropagation(), children: ( - disabledTime(props.minTime, props.maxTime)} - $style={props.inputFieldStyle} - disabled={props.disabled} - {...datePickerProps(props)} - hourStep={props.hourStep} - minDate={props.minDate} - maxDate={props.maxDate} - placeholder={props.placeholder} - value={tempValue?.isValid() ? tempValue : null} - onChange={(time) => { - handleDateChange( - time && time.isValid() - ? time.format(props.showTime ? DATE_TIME_FORMAT : DATE_FORMAT) - : "", - props.value.onChange, - props.onEvent - ); - }} - onPanelChange={() => { - handleDateChange("", props.value.onChange, noop); - }} - onFocus={() => props.onEvent("focus")} - onBlur={() => props.onEvent("blur")} - suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} - /> + disabledTime(props.minTime, props.maxTime)} + $style={props.inputFieldStyle} + disabled={props.disabled} + {...datePickerProps(props)} + hourStep={props.hourStep} + minDate={props.minDate} + maxDate={props.maxDate} + placeholder={props.placeholder} + value={tempValue?.isValid() ? tempValue : null} + onChange={(time) => { + handleDateChange( + time && time.isValid() + ? time.format(props.showTime ? DATE_TIME_FORMAT : DATE_FORMAT) + : "", + props.value.onChange, + props.onEvent + ); + }} + onPanelChange={() => { + handleDateChange("", props.value.onChange, noop); + }} + onFocus={() => props.onEvent("focus")} + onBlur={() => props.onEvent("blur")} + suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} + /> ), showValidationWhenEmpty: props.showValidationWhenEmpty, ...validate(props), }); }) - .setPropertyViewFn((children) => { - const isMobile = useIsMobile(); - return ( - <> -
- {children.value.propertyView({ - label: trans("prop.defaultValue"), - placeholder: "2022-04-07 21:39:59", - tooltip: trans("date.formatTip") - })} - {children.timeZone.propertyView({ - label: trans("prop.timeZone") - })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {requiredPropertyView(children)} - {children.showValidationWhenEmpty.propertyView({ - label: trans("prop.showEmptyValidation") - })} - {dateValidationFields(children)} - {timeValidationFields(children)} - {children.customRule.propertyView({})} -
-
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- - )} - - {/*{commonAdvanceSection(children, children.dateType.value === "date")}*/} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && children.label.getPropertyView()} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {formatPropertyView({ children })} - {children.placeholder.propertyView({ label: trans("date.placeholderText") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {timeFields(children, isMobile)} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} -
- )} - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && !isMobile && commonAdvanceSection(children)} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) - .setExposeMethodConfigs(dateRefMethods) - .build(); + +if (viewMode() === "admin") { + datePickerControl.setPropertyViewFn((children) => ); +} +const datePickerControlBuilder = datePickerControl + .setExposeMethodConfigs(dateRefMethods) + .build(); export const dateRangeControl = (function () { const childrenMap = { @@ -313,12 +209,12 @@ export const dateRangeControl = (function () { ...commonChildren, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { let start: dayjs.Dayjs | null = null; if (props.start.value !== '') { start = dayjs(props.start.value, DateParser); } - + let end: dayjs.Dayjs | null = null; if (props.end.value !== '') { end = dayjs(props.end.value, DateParser); @@ -343,37 +239,37 @@ export const dateRangeControl = (function () { } const children = ( - disabledTime(props.minTime, props.maxTime)} - onChange={(start, end) => { - props.start.onChange( - start && start.isValid() - ? start.format(props.showTime ? DATE_TIME_FORMAT : DATE_FORMAT) - : "" - ); - props.end.onChange( - end && end.isValid() ? end.format(props.showTime ? DATE_TIME_FORMAT : DATE_FORMAT) : "" - ); - props.onEvent("change"); - }} - onPanelChange={(_, mode) => { - mode[0] !== "date" && handleDateChange("", props.start.onChange, noop); - mode[1] !== "date" && handleDateChange("", props.end.onChange, noop); - }} - onFocus={() => props.onEvent("focus")} - onBlur={() => props.onEvent("blur")} - suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} /> + disabledTime(props.minTime, props.maxTime)} + onChange={(start, end) => { + props.start.onChange( + start && start.isValid() + ? start.format(props.showTime ? DATE_TIME_FORMAT : DATE_FORMAT) + : "" + ); + props.end.onChange( + end && end.isValid() ? end.format(props.showTime ? DATE_TIME_FORMAT : DATE_FORMAT) : "" + ); + props.onEvent("change"); + }} + onPanelChange={(_, mode) => { + mode[0] !== "date" && handleDateChange("", props.start.onChange, noop); + mode[1] !== "date" && handleDateChange("", props.end.onChange, noop); + }} + onFocus={() => props.onEvent("focus")} + onBlur={() => props.onEvent("blur")} + suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} /> ); const startResult = validate({ ...props, value: props.start }); @@ -388,101 +284,32 @@ export const dateRangeControl = (function () { onMouseDown: (e) => e.stopPropagation(), showValidationWhenEmpty: props.showValidationWhenEmpty, ...(startResult.validateStatus !== "success" - ? startResult - : endResult.validateStatus !== "success" - ? endResult - : startResult), + ? startResult + : endResult.validateStatus !== "success" + ? endResult + : startResult), }); }) - .setPropertyViewFn((children) => { - const isMobile = useIsMobile(); - return ( - <> -
- {children.start.propertyView({ - label: trans("date.start"), - placeholder: "2022-04-07 21:39:59", - tooltip: trans("date.formatTip"), - })} - {children.end.propertyView({ - label: trans("date.end"), - placeholder: "2022-04-07 21:39:59", - tooltip: trans("date.formatTip"), - })} - {children.timeZone.propertyView({ - label: trans("prop.timeZone") - })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {requiredPropertyView(children)} - {children.showValidationWhenEmpty.propertyView({ - label: trans("prop.showEmptyValidation") - })} - {dateValidationFields(children)} - {timeValidationFields(children)} - {children.customRule.propertyView({})} -
-
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && children.label.getPropertyView()} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {formatPropertyView({ children })} - {children.placeholder.propertyView({ label: trans("date.placeholderText") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {timeFields(children, isMobile)} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} -
- )} - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && commonAdvanceSection(children)} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
- - )} - - - ); - }) - .build(); + + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .build(); })(); const getTimeZoneInfo = (timeZone: any, otherTimeZone: any) => { const tz = timeZone === 'UserChoice' ? otherTimeZone : timeZone; - + const dateInTz = dayjs().tz(tz); const offset = dateInTz.format('Z'); const timeZoneName = new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'short' }) - .formatToParts().find(part => part.type === 'timeZoneName')?.value; + .formatToParts().find(part => part.type === 'timeZoneName')?.value; return { TimeZone: tz, Offset: offset, Name: timeZoneName }; }; -export const DatePickerComp = withExposingConfigs(datePickerControl, [ +export const DatePickerComp = withExposingConfigs(datePickerControlBuilder, [ depsConfig({ name: "value", desc: trans("export.datePickerValueDesc"), @@ -495,16 +322,16 @@ export const DatePickerComp = withExposingConfigs(datePickerControl, [ depsConfig({ name: "formattedValue", desc: trans("export.datePickerFormattedValueDesc"), - depKeys: ["value", "format", "timeZone", "userTimeZone"], + depKeys: ["value", "format", "timeZone", "userTimeZone"], func: (input) => { const mom = Boolean(input.value) ? dayjs(input.value, DateParser) : null; - const tz = input.timeZone === 'UserChoice' ? input.userTimeZone : input.timeZone; // Get the selected timezone - const timeInTz = mom?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) - return mom?.isValid() - ? (!input.format || input.format.includes('Z') || input.format.includes('z')) // Check if format is not available or contains 'Z' - ? timeInTz?.format(input?.format) // Return formattedDateWithoffset if format includes 'Z' or is not available - : mom.format(input.format) // Otherwise, return mom.format(input.format) - : ""; + const tz = input.timeZone === 'UserChoice' ? input.userTimeZone : input.timeZone; // Get the selected timezone + const timeInTz = mom?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) + return mom?.isValid() + ? (!input.format || input.format.includes('Z') || input.format.includes('z')) // Check if format is not available or contains 'Z' + ? timeInTz?.format(input?.format) // Return formattedDateWithoffset if format includes 'Z' or is not available + : mom.format(input.format) // Otherwise, return mom.format(input.format) + : ""; }, }), depsConfig({ @@ -521,14 +348,14 @@ export const DatePickerComp = withExposingConfigs(datePickerControl, [ desc: trans("export.invalidDesc"), depKeys: ["value", "required", "minTime", "maxTime", "minDate", "maxDate", "customRule"], func: (input) => - validate({ - ...input, - value: { value: input.value }, - } as any).validateStatus !== "success", + validate({ + ...input, + value: { value: input.value }, + } as any).validateStatus !== "success", }), depsConfig({ name: "timeZone", - desc: trans("export.timeZoneDesc"), + desc: trans("export.timeZoneDesc"), depKeys: ["timeZone", "userTimeZone"], func: (input: { timeZone: any; userTimeZone: any; }) => getTimeZoneInfo(input.timeZone, input.userTimeZone) @@ -580,52 +407,52 @@ export let DateRangeComp = withExposingConfigs(dateRangeControl, [ func: (input) => { const start = Boolean(input.start) ? dayjs(input.start, DateParser): null; const end = Boolean(input.end) ? dayjs(input.end, DateParser): null; - const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; // Get the selected timezone - const startTimeInTz = start?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) - const endTimeInTz = end?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) + const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; // Get the selected timezone + const startTimeInTz = start?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) + const endTimeInTz = end?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) return [ start?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) // Check if format is not available or contains 'Z' - ? startTimeInTz?.format(input?.format) // Return formattedDateWithoffset if format includes 'Z' or is not available - : start?.format(input.format), + ? startTimeInTz?.format(input?.format) // Return formattedDateWithoffset if format includes 'Z' or is not available + : start?.format(input.format), end?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) // Check if format is not available or contains 'Z' - ? endTimeInTz?.format(input?.format) // Return formattedDateWithoffset if format includes 'Z' or is not available - : end?.format(input.format) , + ? endTimeInTz?.format(input?.format) // Return formattedDateWithoffset if format includes 'Z' or is not available + : end?.format(input.format) , ] - .filter((item) => item) - .join(" - "); + .filter((item) => item) + .join(" - "); }, }), depsConfig({ - name: "formattedStartValue", - desc: trans("export.dateRangeFormattedStartValueDesc"), - depKeys: ["start", "format", "timeZone", "userRangeTimeZone"], - func: (input) => { - const start = Boolean(input.start) ? dayjs(input.start, DateParser): null; - const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; - const startTimeInTz = start?.clone().tz(tz, true); - return start?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) - ? startTimeInTz?.format(input?.format) - : start?.format(input.format); - }, -}), + name: "formattedStartValue", + desc: trans("export.dateRangeFormattedStartValueDesc"), + depKeys: ["start", "format", "timeZone", "userRangeTimeZone"], + func: (input) => { + const start = Boolean(input.start) ? dayjs(input.start, DateParser): null; + const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; + const startTimeInTz = start?.clone().tz(tz, true); + return start?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) + ? startTimeInTz?.format(input?.format) + : start?.format(input.format); + }, + }), depsConfig({ name: "formattedEndValue", desc: trans("export.dateRangeFormattedEndValueDesc"), depKeys: ["end", "format" , "timeZone", "userRangeTimeZone"], func: (input) => { const end = Boolean(input.end) ? dayjs(input.end, DateParser): null; - const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; + const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; const endTimeInTz = end?.clone().tz(tz, true); return end?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) - ? endTimeInTz?.format(input?.format) - : end?.format(input.format); + ? endTimeInTz?.format(input?.format) + : end?.format(input.format); }, }), depsConfig({ - name: "timeZone", - desc: trans("export.timeZoneDesc"), - depKeys: ["timeZone", "userRangeTimeZone"], + name: "timeZone", + desc: trans("export.timeZoneDesc"), + depKeys: ["timeZone", "userRangeTimeZone"], func: (input:any) => getTimeZoneInfo(input.timeZone, input.userRangeTimeZone) }), depsConfig({ @@ -633,14 +460,14 @@ export let DateRangeComp = withExposingConfigs(dateRangeControl, [ desc: trans("export.invalidDesc"), depKeys: ["start", "end", "required", "minTime", "maxTime", "minDate", "maxDate", "customRule"], func: (input) => - validate({ - ...input, - value: { value: input.start }, - }).validateStatus !== "success" || - validate({ - ...input, - value: { value: input.end }, - }).validateStatus !== "success", + validate({ + ...input, + value: { value: input.start }, + }).validateStatus !== "success" || + validate({ + ...input, + value: { value: input.end }, + }).validateStatus !== "success", }), ...CommonNameConfig, ]); diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/propertyView.tsx new file mode 100644 index 000000000..7314d31ce --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/dateComp/propertyView.tsx @@ -0,0 +1,540 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import React, {useContext} from "react"; +import { + AnimationStyle, blurEvent, + BoolCodeControl, BoolControl, changeEvent, CustomRuleControl, DateTimeStyle, + disabledPropertyView, dropdownControl, + EditorContext, eventHandlerControl, focusEvent, + formatPropertyView, + hiddenPropertyView, hourStepPropertyView, IconControl, InputFieldStyle, LabelControl, LabelStyle, + maxDatePropertyView, + maxTimePropertyView, + minDatePropertyView, + minTimePropertyView, minuteStepPropertyView, + PickerMode, RangeControl, + RecordConstructorToComp, RefControl, + requiredPropertyView, SecondStepPropertyView, StringControl, styleControl, useIsMobile, withDefault +} from "lowcoder-sdk"; +import {CommonPickerMethods} from "@lowcoder-ee/comps/comps/dateComp/dateCompUtil"; +import {timeZoneOptions} from "@lowcoder-ee/comps/comps/dateComp/timeZone"; + + + +const PropertyViewDateComp2 = ((children: any) => { + const isMobile = useIsMobile(); + + const commonAdvanceSection = (children: CommonChildrenType, isDate: boolean = true) => { + if (isDate && children.showTime.getView()) { + return ( +
+ {hourStepPropertyView(children)} + {minuteStepPropertyView(children)} + {SecondStepPropertyView(children)} +
+ ); + } + }; + + const timeFields = (children: CommonChildrenType, isMobile?: boolean) => [ + children.showTime.propertyView({ label: trans("date.showTime") }), + !isMobile && children.use12Hours.propertyView({ label: trans("prop.use12Hours") }), + ]; + + const EventOptions = [changeEvent, focusEvent, blurEvent] as const; + + const validationChildren = { + showValidationWhenEmpty: BoolControl, + required: BoolControl, + minDate: StringControl, + maxDate: StringControl, + minTime: StringControl, + maxTime: StringControl, + customRule: CustomRuleControl, + }; + + const commonChildren = { + label: LabelControl, + placeholder: withDefault(StringControl, trans("date.placeholder")), + format: StringControl, + disabled: BoolCodeControl, + onEvent: eventHandlerControl(EventOptions), + showTime: BoolControl, + use12Hours: BoolControl, + hourStep: RangeControl.closed(1, 24, 1), + minuteStep: RangeControl.closed(1, 60, 1), + secondStep: RangeControl.closed(1, 60, 1), + style: styleControl(InputFieldStyle, 'style'), + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + labelStyle: styleControl( + LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), + 'labelStyle', + ), + suffixIcon: withDefault(IconControl, "/icon:regular/calendar"), + ...validationChildren, + viewRef: RefControl, + inputFieldStyle: styleControl(DateTimeStyle, 'inputFieldStyle'), + timeZone: dropdownControl(timeZoneOptions, Intl.DateTimeFormat().resolvedOptions().timeZone), + }; + + type CommonChildrenType = RecordConstructorToComp; + + const dateValidationFields = (children: CommonChildrenType, dateType: PickerMode = "date") => { + if (dateType === "date") { + return [minDatePropertyView(children), maxDatePropertyView(children)]; + } + }; + + const timeValidationFields = (children: CommonChildrenType, dateType: PickerMode = "date") => { + if (dateType === "date" && children.showTime.getView()) { + return [minTimePropertyView(children), maxTimePropertyView(children)]; + } + }; + + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.start.propertyView({ + label: trans("date.start"), + placeholder: "2022-04-07 21:39:59", + tooltip: trans("date.formatTip"), + })} + {children.end.propertyView({ + label: trans("date.end"), + placeholder: "2022-04-07 21:39:59", + tooltip: trans("date.formatTip"), + })} + {children.timeZone.propertyView({ + label: trans("prop.timeZone") + })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {requiredPropertyView(children)} + {children.showValidationWhenEmpty.propertyView({ + label: trans("prop.showEmptyValidation") + })} + {dateValidationFields(children)} + {timeValidationFields(children)} + {children.customRule.propertyView({})} +
+
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && children.label.getPropertyView()} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( +
+ {formatPropertyView({ children })} + {children.placeholder.propertyView({ label: trans("date.placeholderText") })} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {timeFields(children, isMobile)} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} +
+ )} + {(editorModeStatus === "logic" || editorModeStatus === "both") && commonAdvanceSection(children)} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+ + )} + + + ); +}); + +const PropertyViewDateComp1 = ((children: any) => { + + + + const isMobile = useIsMobile(); + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + + + const commonAdvanceSection = (children: CommonChildrenType, isDate: boolean = true) => { + if (isDate && children.showTime.getView()) { + return ( +
+ {hourStepPropertyView(children)} + {minuteStepPropertyView(children)} + {SecondStepPropertyView(children)} +
+ ); + } + }; + + const timeFields = (children: CommonChildrenType, isMobile?: boolean) => [ + children.showTime.propertyView({ label: trans("date.showTime") }), + !isMobile && children.use12Hours.propertyView({ label: trans("prop.use12Hours") }), + ]; + + const EventOptions = [changeEvent, focusEvent, blurEvent] as const; + + const validationChildren = { + showValidationWhenEmpty: BoolControl, + required: BoolControl, + minDate: StringControl, + maxDate: StringControl, + minTime: StringControl, + maxTime: StringControl, + customRule: CustomRuleControl, + }; + + const commonChildren = { + label: LabelControl, + placeholder: withDefault(StringControl, trans("date.placeholder")), + format: StringControl, + disabled: BoolCodeControl, + onEvent: eventHandlerControl(EventOptions), + showTime: BoolControl, + use12Hours: BoolControl, + hourStep: RangeControl.closed(1, 24, 1), + minuteStep: RangeControl.closed(1, 60, 1), + secondStep: RangeControl.closed(1, 60, 1), + style: styleControl(InputFieldStyle, 'style'), + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + labelStyle: styleControl( + LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), + 'labelStyle', + ), + suffixIcon: withDefault(IconControl, "/icon:regular/calendar"), + ...validationChildren, + viewRef: RefControl, + inputFieldStyle: styleControl(DateTimeStyle, 'inputFieldStyle'), + timeZone: dropdownControl(timeZoneOptions, Intl.DateTimeFormat().resolvedOptions().timeZone), + }; + + type CommonChildrenType = RecordConstructorToComp; + + const dateValidationFields = (children: CommonChildrenType, dateType: PickerMode = "date") => { + if (dateType === "date") { + return [minDatePropertyView(children), maxDatePropertyView(children)]; + } + }; + + const timeValidationFields = (children: CommonChildrenType, dateType: PickerMode = "date") => { + if (dateType === "date" && children.showTime.getView()) { + return [minTimePropertyView(children), maxTimePropertyView(children)]; + } + }; + + return ( + <> +
+ {children.value.propertyView({ + label: trans("prop.defaultValue"), + placeholder: "2022-04-07 21:39:59", + tooltip: trans("date.formatTip") + })} + {children.timeZone.propertyView({ + label: trans("prop.timeZone") + })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {requiredPropertyView(children)} + {children.showValidationWhenEmpty.propertyView({ + label: trans("prop.showEmptyValidation") + })} + {dateValidationFields(children)} + {timeValidationFields(children)} + {children.customRule.propertyView({})} +
+
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ + )} + + {/*{commonAdvanceSection(children, children.dateType.value === "date")}*/} + {(editorModeStatus === "layout" || editorModeStatus === "both") && children.label.getPropertyView()} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( +
+ {formatPropertyView({children})} + {children.placeholder.propertyView({label: trans("date.placeholderText")})} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {timeFields(children, isMobile)} + {children.suffixIcon.propertyView({label: trans("button.suffixIcon")})} +
+ )} + {(editorModeStatus === "logic" || editorModeStatus === "both") && !isMobile && commonAdvanceSection(children)} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +const PropertyViewTimeComp2 = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + const EventOptions = [changeEvent, focusEvent, blurEvent] as const; + + const validationChildren = { + showValidationWhenEmpty: BoolControl, + required: BoolControl, + minTime: StringControl, + maxTime: StringControl, + customRule: CustomRuleControl, + }; + + const commonChildren = { + label: LabelControl, + placeholder: withDefault(StringControl, trans("time.placeholder")), + format: StringControl, + disabled: BoolCodeControl, + onEvent: eventHandlerControl(EventOptions), + showTime: BoolControl, + use12Hours: BoolControl, + hourStep: RangeControl.closed(1, 24, 1), + minuteStep: RangeControl.closed(1, 60, 1), + secondStep: RangeControl.closed(1, 60, 1), + style: styleControl(InputFieldStyle, 'style'), + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + labelStyle: styleControl( + LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), + 'labelStyle', + ), + inputFieldStyle: styleControl(DateTimeStyle, 'inputFieldStyle'), + suffixIcon: withDefault(IconControl, "/icon:regular/clock"), + timeZone: dropdownControl(timeZoneOptions, Intl.DateTimeFormat().resolvedOptions().timeZone), + viewRef: RefControl, + ...validationChildren, + }; + + const commonAdvanceSection = (children: RecordConstructorToComp) => [ + hourStepPropertyView(children), + minuteStepPropertyView(children), + SecondStepPropertyView(children), + ]; + + return ( + <> +
+ {children.start.propertyView({ + label: trans("time.start"), + tooltip: trans("time.formatTip"), + })} + {children.end.propertyView({ + label: trans("time.end"), + tooltip: trans("time.formatTip"), + })} + {children.timeZone.propertyView({ + label: trans("prop.timeZone") + })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {requiredPropertyView(children)} + {children.showValidationWhenEmpty.propertyView({ + label: trans("prop.showEmptyValidation") + })} + {minTimePropertyView(children)} + {maxTimePropertyView(children)} + {children.customRule.propertyView({})} +
+
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && children.label.getPropertyView()} + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( +
+ {children.format.propertyView({ label: trans("time.format") })} + {children.placeholder.propertyView({ label: trans("time.placeholderText") })} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {commonAdvanceSection(children)} + {children.use12Hours.propertyView({ label: trans("prop.use12Hours") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +const PropertyViewTimeComp1 = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + const validationChildren = { + showValidationWhenEmpty: BoolControl, + required: BoolControl, + minTime: StringControl, + maxTime: StringControl, + customRule: CustomRuleControl, + }; + + const EventOptions = [changeEvent, focusEvent, blurEvent] as const; + + const commonChildren = { + label: LabelControl, + placeholder: withDefault(StringControl, trans("time.placeholder")), + format: StringControl, + disabled: BoolCodeControl, + onEvent: eventHandlerControl(EventOptions), + showTime: BoolControl, + use12Hours: BoolControl, + hourStep: RangeControl.closed(1, 24, 1), + minuteStep: RangeControl.closed(1, 60, 1), + secondStep: RangeControl.closed(1, 60, 1), + style: styleControl(InputFieldStyle, 'style'), + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + labelStyle: styleControl( + LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), + 'labelStyle', + ), + inputFieldStyle: styleControl(DateTimeStyle, 'inputFieldStyle'), + suffixIcon: withDefault(IconControl, "/icon:regular/clock"), + timeZone: dropdownControl(timeZoneOptions, Intl.DateTimeFormat().resolvedOptions().timeZone), + viewRef: RefControl, + ...validationChildren, + }; + + const commonAdvanceSection = (children: RecordConstructorToComp) => [ + hourStepPropertyView(children), + minuteStepPropertyView(children), + SecondStepPropertyView(children), + ]; + + return ( + <> +
+ {children.value.propertyView({ + label: trans("prop.defaultValue"), + tooltip: trans("time.formatTip"), + })} + {children.timeZone.propertyView({ + label: trans("prop.timeZone") + })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {requiredPropertyView(children)} + {children.showValidationWhenEmpty.propertyView({ + label: trans("prop.showEmptyValidation") + })} + {minTimePropertyView(children)} + {maxTimePropertyView(children)} + {children.customRule.propertyView({})} +
+
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && children.label.getPropertyView()} + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( +
+ {children.format.propertyView({ label: trans("time.format") })} + {children.placeholder.propertyView({ label: trans("time.placeholderText") })} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {commonAdvanceSection(children)} + {children.use12Hours.propertyView({ label: trans("prop.use12Hours") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export {PropertyViewDateComp1, PropertyViewDateComp2, PropertyViewTimeComp1, PropertyViewTimeComp2}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx index 4d9f0a6e5..b47dc39ad 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx @@ -1,6 +1,6 @@ import _ from "lodash"; import dayjs from "dayjs"; -import { RecordConstructorToComp, RecordConstructorToView } from "lowcoder-core"; +import { RecordConstructorToView } from "lowcoder-core"; import { BoolCodeControl, CustomRuleControl, @@ -23,37 +23,26 @@ import { NameConfig, withExposingConfigs, } from "../../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, DateTimeStyle, DateTimeStyleType, InputFieldStyle, LabelStyle } from "comps/controls/styleControlConstants"; import { withMethodExposing } from "../../generators/withMethodExposing"; -import { - disabledPropertyView, - formatPropertyView, - hiddenPropertyView, - hourStepPropertyView, - maxTimePropertyView, - minTimePropertyView, - minuteStepPropertyView, - requiredPropertyView, - SecondStepPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { TIME_FORMAT, TimeParser } from "util/dateTimeUtils"; -import React, { ReactNode, useContext, useEffect, useState } from "react"; +import React, { ReactNode, useEffect, useState } from "react"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; -import { Section, sectionNames } from "components/Section"; import { CommonPickerMethods, dateRefMethods, disabledTime, handleDateChange } from "comps/comps/dateComp/dateCompUtil"; import { TimeUIView } from "./timeUIView"; import { TimeRangeUIView } from "comps/comps/dateComp/timeRangeUIView"; import { RefControl } from "comps/controls/refControl"; -// import { CommonPickerMethods } from "antd/es/date-picker/generatePicker/interface"; import { TimePickerProps } from "antd/es/time-picker"; -import { EditorContext } from "comps/editorState"; import { dropdownControl } from "comps/controls/dropdownControl"; import { timeZoneOptions } from "./timeZone"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewTimeComp1 = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewTimeComp1}))) +const PropertyViewTimeComp2 = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewTimeComp2}))) const EventOptions = [changeEvent, focusEvent, blurEvent] as const; @@ -80,8 +69,8 @@ const commonChildren = { style: styleControl(InputFieldStyle, 'style'), animationStyle: styleControl(AnimationStyle, 'animationStyle'), labelStyle: styleControl( - LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), - 'labelStyle', + LabelStyle.filter((style) => ['accent', 'validate'].includes(style.name) === false), + 'labelStyle', ), inputFieldStyle: styleControl(DateTimeStyle, 'inputFieldStyle'), suffixIcon: withDefault(IconControl, "/icon:regular/clock"), @@ -91,23 +80,19 @@ const commonChildren = { }; const timePickerComps = (props: RecordConstructorToView) => - _.pick(props, "format", "use12Hours", "minuteStep", "secondStep", "placeholder"); + _.pick(props, "format", "use12Hours", "minuteStep", "secondStep", "placeholder"); /* const commonBasicSection = (children: RecordConstructorToComp) => [ formatPropertyView({ children }), children.use12Hours.propertyView({ label: trans("prop.use12Hours") }), ]; */ -const commonAdvanceSection = (children: RecordConstructorToComp) => [ - hourStepPropertyView(children), - minuteStepPropertyView(children), - SecondStepPropertyView(children), -]; + function validate( - props: RecordConstructorToView & { - value: { value: string }; - } + props: RecordConstructorToView & { + value: { value: string }; + } ): { validateStatus: "success" | "warning" | "error"; help?: string; @@ -135,10 +120,10 @@ type minuteStepType = TimePickerProps['minuteStep']; type secondStepType = TimePickerProps['secondStep']; export type TimeCompViewProps = Pick< - RecordConstructorToView, - "disabled" | "use12Hours" | "format" | "viewRef" + RecordConstructorToView, + "disabled" | "use12Hours" | "format" | "viewRef" > & Pick< - TimePickerProps, "hourStep" | "minuteStep" | "secondStep" + TimePickerProps, "hourStep" | "minuteStep" | "secondStep" > & { onFocus: () => void; onBlur: () => void; @@ -149,12 +134,12 @@ export type TimeCompViewProps = Pick< timeZone:string }; -export const timePickerControl = new UICompBuilder(childrenMap, (props) => { +export let timePickerControl = new UICompBuilder(childrenMap, (props) => { let time: dayjs.Dayjs | null = null; if(props.value.value !== '') { time = dayjs(props.value.value, TimeParser); } - + const [tempValue, setTempValue] = useState(time); useEffect(() => { @@ -174,103 +159,42 @@ export const timePickerControl = new UICompBuilder(childrenMap, (props) => { animationStyle:props.animationStyle, onMouseDown: (e) => e.stopPropagation(), children: ( - disabledTime(props.minTime, props.maxTime)} - {...timePickerComps(props)} - hourStep={props.hourStep as hourStepType} - minuteStep={props.minuteStep as minuteStepType} - secondStep={props.secondStep as secondStepType} - placeholder={props.placeholder} - onChange={(time) => { - handleDateChange( - time && time.isValid() ? time.format(TIME_FORMAT) : "", - props.value.onChange, - props.onEvent - ); - }} - onFocus={() => props.onEvent("focus")} - onBlur={() => props.onEvent("blur")} - suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} /> + disabledTime(props.minTime, props.maxTime)} + {...timePickerComps(props)} + hourStep={props.hourStep as hourStepType} + minuteStep={props.minuteStep as minuteStepType} + secondStep={props.secondStep as secondStepType} + placeholder={props.placeholder} + onChange={(time) => { + handleDateChange( + time && time.isValid() ? time.format(TIME_FORMAT) : "", + props.value.onChange, + props.onEvent + ); + }} + onFocus={() => props.onEvent("focus")} + onBlur={() => props.onEvent("blur")} + suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} /> ), showValidationWhenEmpty: props.showValidationWhenEmpty, ...validate(props), }); }) - .setPropertyViewFn((children) => ( - <> -
- {children.value.propertyView({ - label: trans("prop.defaultValue"), - tooltip: trans("time.formatTip"), - })} - {children.timeZone.propertyView({ - label: trans("prop.timeZone") - })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {requiredPropertyView(children)} - {children.showValidationWhenEmpty.propertyView({ - label: trans("prop.showEmptyValidation") - })} - {minTimePropertyView(children)} - {maxTimePropertyView(children)} - {children.customRule.propertyView({})} -
-
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && children.label.getPropertyView()} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.format.propertyView({ label: trans("time.format") })} - {children.placeholder.propertyView({ label: trans("time.placeholderText") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {commonAdvanceSection(children)} - {children.use12Hours.propertyView({ label: trans("prop.use12Hours") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) - .setExposeMethodConfigs(dateRefMethods) - .build(); - -export const timeRangeControl = (function () { +if (viewMode() === "admin") { + timePickerControl.setPropertyViewFn((children) => ); +} +const timePickerControlBuilder = timePickerControl + .setExposeMethodConfigs(dateRefMethods) + .build(); + +export let timeRangeControl = (function () { const childrenMap = { start: stringExposingStateControl("start"), end: stringExposingStateControl("end"), @@ -279,7 +203,7 @@ export const timeRangeControl = (function () { ...commonChildren, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { let start: dayjs.Dayjs | null = null; if(props.start.value !== '') { start = dayjs(props.start.value, TimeParser); @@ -305,31 +229,31 @@ export const timeRangeControl = (function () { const handleTimeRangeZoneChange = (newTimeZone: any) => { props.userRangeTimeZone.onChange(newTimeZone) } - + const children = ( - disabledTime(props.minTime, props.maxTime)} - {...timePickerComps(props)} - hourStep={props.hourStep as hourStepType} - minuteStep={props.minuteStep as minuteStepType} - secondStep={props.secondStep as secondStepType} - placeholder={[props.placeholder, props.placeholder]} - onChange={(start, end) => { - props.start.onChange(start && start.isValid() ? start.format(TIME_FORMAT) : ""); - props.end.onChange(end && end.isValid() ? end.format(TIME_FORMAT) : ""); - props.onEvent("change"); - }} - onFocus={() => props.onEvent("focus")} - onBlur={() => props.onEvent("blur")} - suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} - /> + disabledTime(props.minTime, props.maxTime)} + {...timePickerComps(props)} + hourStep={props.hourStep as hourStepType} + minuteStep={props.minuteStep as minuteStepType} + secondStep={props.secondStep as secondStepType} + placeholder={[props.placeholder, props.placeholder]} + onChange={(start, end) => { + props.start.onChange(start && start.isValid() ? start.format(TIME_FORMAT) : ""); + props.end.onChange(end && end.isValid() ? end.format(TIME_FORMAT) : ""); + props.onEvent("change"); + }} + onFocus={() => props.onEvent("focus")} + onBlur={() => props.onEvent("blur")} + suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} + /> ); const startResult = validate({ ...props, value: props.start }); @@ -345,118 +269,53 @@ export const timeRangeControl = (function () { onMouseDown: (e) => e.stopPropagation(), showValidationWhenEmpty: props.showValidationWhenEmpty, ...(startResult.validateStatus !== "success" - ? startResult - : endResult.validateStatus !== "success" - ? endResult - : startResult), + ? startResult + : endResult.validateStatus !== "success" + ? endResult + : startResult), }); }) - .setPropertyViewFn((children) => ( - <> -
- {children.start.propertyView({ - label: trans("time.start"), - tooltip: trans("time.formatTip"), - })} - {children.end.propertyView({ - label: trans("time.end"), - tooltip: trans("time.formatTip"), - })} - {children.timeZone.propertyView({ - label: trans("prop.timeZone") - })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {requiredPropertyView(children)} - {children.showValidationWhenEmpty.propertyView({ - label: trans("prop.showEmptyValidation") - })} - {minTimePropertyView(children)} - {maxTimePropertyView(children)} - {children.customRule.propertyView({})} -
-
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && children.label.getPropertyView()} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.format.propertyView({ label: trans("time.format") })} - {children.placeholder.propertyView({ label: trans("time.placeholderText") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {commonAdvanceSection(children)} - {children.use12Hours.propertyView({ label: trans("prop.use12Hours") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) - .build(); + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .build(); })(); const getTimeZoneInfo = (timeZone: any, otherTimeZone: any) => { const tz = timeZone === 'UserChoice' ? otherTimeZone : timeZone; - + const dateInTz = dayjs().tz(tz); const offset = dateInTz.format('Z'); const timeZoneName = new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'short' }) - .formatToParts().find(part => part.type === 'timeZoneName')?.value; + .formatToParts().find(part => part.type === 'timeZoneName')?.value; return { TimeZone: tz, Offset: offset, Name: timeZoneName }; }; -export const TimePickerComp = withExposingConfigs(timePickerControl, [ +export const TimePickerComp = withExposingConfigs(timePickerControlBuilder, [ new NameConfig("value", trans("export.timePickerValueDesc")), depsConfig({ name: "formattedValue", desc: trans("export.timePickerFormattedValueDesc"), - depKeys: ["value", "format", "timeZone", "userTimeZone"], + depKeys: ["value", "format", "timeZone", "userTimeZone"], func: (input) => { const mom = Boolean(input.value) ? dayjs(input.value, TimeParser) : null; - const tz = input.timeZone === 'UserChoice' ? input.userTimeZone : input.timeZone; // Get the selected timezone - const timeInTz = mom?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) + const tz = input.timeZone === 'UserChoice' ? input.userTimeZone : input.timeZone; // Get the selected timezone + const timeInTz = mom?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) const formattedTimeWithoffset = timeInTz?.format(input?.format); return mom?.isValid() ? (!input.format || input.format.includes('Z') || input.format.includes('z')) // Check if format is not available or contains 'Z' - ? formattedTimeWithoffset // Return formattedDateWithoffset if format includes 'Z' or is not available - : mom.format(input.format) // Otherwise, return mom.format(input.format) - : ""; + ? formattedTimeWithoffset // Return formattedDateWithoffset if format includes 'Z' or is not available + : mom.format(input.format) // Otherwise, return mom.format(input.format) + : ""; }, }), depsConfig({ - name: "timeZone", - desc: trans("export.timeZoneDesc"), - depKeys: ["timeZone", "userTimeZone"], + name: "timeZone", + desc: trans("export.timeZoneDesc"), + depKeys: ["timeZone", "userTimeZone"], func: (input: { timeZone: any; userTimeZone: any; }) => getTimeZoneInfo(input.timeZone, input.userTimeZone) }), depsConfig({ @@ -464,10 +323,10 @@ export const TimePickerComp = withExposingConfigs(timePickerControl, [ desc: trans("export.invalidDesc"), depKeys: ["value", "required", "minTime", "maxTime", "customRule"], func: (input) => - validate({ - ...input, - value: { value: input.value }, - } as any).validateStatus !== "success", + validate({ + ...input, + value: { value: input.value }, + } as any).validateStatus !== "success", }), ...CommonNameConfig, ]); @@ -482,19 +341,19 @@ export let TimeRangeComp = withExposingConfigs(timeRangeControl, [ func: (input) => { const start = Boolean(input.start) ? dayjs(input.start, TimeParser) : null; const end = Boolean(input.end) ? dayjs(input.end, TimeParser) : null; - const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; // Get the selected timezone - const startTimeInTz = start?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) - const endTimeInTz = end?.clone().tz(tz, true); + const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; // Get the selected timezone + const startTimeInTz = start?.clone().tz(tz, true); // Apply the selected timezone without altering the time itself (do not convert the time) + const endTimeInTz = end?.clone().tz(tz, true); return [ start?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) // Check if format is not available or contains 'Z' - ? startTimeInTz?.format(input?.format) // Return formattedTimeWithoffset if format includes 'Z' or is not available - : start?.format(input.format), - end?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) - ? endTimeInTz?.format(input?.format) - : end?.format(input.format) , + ? startTimeInTz?.format(input?.format) // Return formattedTimeWithoffset if format includes 'Z' or is not available + : start?.format(input.format), + end?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) + ? endTimeInTz?.format(input?.format) + : end?.format(input.format) , ] - .filter((item) => item) - .join(" - "); + .filter((item) => item) + .join(" - "); }, }), depsConfig({ @@ -506,9 +365,9 @@ export let TimeRangeComp = withExposingConfigs(timeRangeControl, [ const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; const startTimeInTz = start?.clone().tz(tz, true); const formattedDate = startTimeInTz?.format(input?.format); - return start?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) - ? formattedDate - : start?.format(input.format); + return start?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) + ? formattedDate + : start?.format(input.format); }, }), depsConfig({ @@ -517,17 +376,17 @@ export let TimeRangeComp = withExposingConfigs(timeRangeControl, [ depKeys: ["end", "format", "timeZone", "userRangeTimeZone"], func: (input) => { const end = Boolean(input.end) ? dayjs(input.end, TimeParser) : null; - const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; + const tz = input.timeZone === 'UserChoice' ? input.userRangeTimeZone : input.timeZone; const endTimeInTz = end?.clone().tz(tz, true); return end?.isValid() && (!input.format || input.format.includes('Z') || input.format.includes('z')) - ? endTimeInTz?.format(input?.format) - : end?.format(input.format); + ? endTimeInTz?.format(input?.format) + : end?.format(input.format); }, }), depsConfig({ - name: "timeZone", - desc: trans("export.timeZoneDesc"), - depKeys: ["timeZone", "userRangeTimeZone"], + name: "timeZone", + desc: trans("export.timeZoneDesc"), + depKeys: ["timeZone", "userRangeTimeZone"], func: (input:any) => getTimeZoneInfo(input.timeZone, input.userRangeTimeZone) }), @@ -536,14 +395,14 @@ export let TimeRangeComp = withExposingConfigs(timeRangeControl, [ desc: trans("export.invalidDesc"), depKeys: ["start", "end", "required", "minTime", "maxTime", "customRule"], func: (input) => - validate({ - ...input, - value: { value: input.start }, - }).validateStatus !== "success" || - validate({ - ...input, - value: { value: input.end }, - }).validateStatus !== "success", + validate({ + ...input, + value: { value: input.start }, + }).validateStatus !== "success" || + validate({ + ...input, + value: { value: input.end }, + }).validateStatus !== "success", }), ...CommonNameConfig, ]); @@ -589,4 +448,4 @@ TimeRangeComp = withMethodExposing(TimeRangeComp, [ comp.children.end.getView().onChange(data.end); }, }, -]); \ No newline at end of file +]); diff --git a/client/packages/lowcoder/src/comps/comps/dividerComp.tsx b/client/packages/lowcoder/src/comps/comps/dividerComp.tsx index 287b68409..93cd57f40 100644 --- a/client/packages/lowcoder/src/comps/comps/dividerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/dividerComp.tsx @@ -4,24 +4,19 @@ import { BoolControl } from "comps/controls/boolControl"; import { alignControl } from "comps/controls/alignControl"; import { UICompBuilder, withDefault } from "comps/generators"; import { NameConfig, NameConfigHidden } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import _ from "lodash"; import styled from "styled-components"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, DividerStyle, DividerStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import { migrateOldData } from "comps/generators/simpleGenerators"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { AutoHeightControl } from "comps/controls/autoHeightControl"; - - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; - +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/dividerComp")); type IProps = DividerProps & { - $style: DividerStyleType; - $animationStyle:AnimationStyleType; - type?: 'vertical' | 'horizontal'; + $style: DividerStyleType; + $animationStyle:AnimationStyleType; + type?: 'vertical' | 'horizontal'; }; const StyledDivider = styled(Divider)` @@ -84,92 +79,61 @@ const StyledDivider = styled(Divider)` `; const childrenMap = { - title: StringControl, - align: alignControl(), - type: BoolControl, - autoHeight: withDefault(AutoHeightControl, "auto"), - style: styleControl(DividerStyle , 'style'), - animationStyle: styleControl(AnimationStyle ,'animationStyle'), + title: StringControl, + align: alignControl(), + type: BoolControl, + autoHeight: withDefault(AutoHeightControl, "auto"), + style: styleControl(DividerStyle , 'style'), + animationStyle: styleControl(AnimationStyle ,'animationStyle'), }; function fixOldStyleData(oldData: any) { - if (oldData && oldData.hasOwnProperty("color")) { - return { - ...oldData, - style: { - color: oldData.color, - text: "", - }, - }; - } - return oldData; + if (oldData && oldData.hasOwnProperty("color")) { + return { + ...oldData, + style: { + color: oldData.color, + text: "", + }, + }; + } + return oldData; } // Compatible with historical style data 2022-8-26 const DividerTempComp = migrateOldData( - new UICompBuilder(childrenMap, (props) => { - const dividerType = props.type ? 'vertical' : 'horizontal'; - - return ( - - {dividerType === 'horizontal' && props.title} - - ); - }) - .setPropertyViewFn((children) => { - return ( - <> - {!children?.type?.getView() && -
- {children.title.propertyView({ label: trans("divider.title") })} -
} - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {!_.isEmpty(children.title.getView()) && - children.align.propertyView({ - label: trans("divider.align"), - radioButton: true, - })} - {children.autoHeight.getPropertyView()} -
-
- {children.type.propertyView({ label: trans("divider.type")})} - {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); + new UICompBuilder(childrenMap, (props) => { + const dividerType = props.type ? 'vertical' : 'horizontal'; + + return ( + + {dividerType === 'horizontal' && props.title} + + ); }) - .setExposeStateConfigs([ - new NameConfig("title", trans("divider.titleDesc")), - new NameConfig("align", trans("divider.alignDesc")), - NameConfigHidden, - ]) - .build(), - fixOldStyleData + .setPropertyViewFn((children) => { + return ( + viewMode() === "admin" ? : <> + ); + }) + .setExposeStateConfigs([ + new NameConfig("title", trans("divider.titleDesc")), + new NameConfig("align", trans("divider.alignDesc")), + NameConfigHidden, + ]) + .build(), + fixOldStyleData ); export const DividerComp = class extends DividerTempComp { - override autoHeight(): boolean { - return this.children.autoHeight.getView(); - } + override autoHeight(): boolean { + return this.children.autoHeight.getView(); + } }; diff --git a/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx b/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx index 0d4920bbd..eb338ecff 100644 --- a/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx @@ -4,14 +4,12 @@ import { default as Dropdown } from "antd/es/dropdown"; import { UploadFile, UploadProps, UploadChangeParam, UploadFileStatus, RcFile } from "antd/es/upload/interface"; import { Buffer } from "buffer"; import { darkenColor } from "components/colorSelect/colorUtils"; -import { Section, sectionNames } from "components/Section"; import { IconControl } from "comps/controls/iconControl"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, FileStyle, FileStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import { withMethodExposing } from "comps/generators/withMethodExposing"; import { hasIcon } from "comps/utils"; import { getComponentDocUrl } from "comps/utils/compDocUtil"; -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import _ from "lodash"; import mime from "mime"; @@ -19,7 +17,6 @@ import { changeValueAction, CompAction, multiChangeAction, - RecordConstructorToComp, RecordConstructorToView, } from "lowcoder-core"; import { UploadRequestOption } from "rc-upload/lib/interface"; @@ -38,17 +35,18 @@ import { dropdownControl } from "../../controls/dropdownControl"; import { changeEvent, eventHandlerControl } from "../../controls/eventHandlerControl"; import { stateComp, UICompBuilder, withDefault } from "../../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import { CustomModal } from "lowcoder-design"; -import React, { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; import type { ItemType } from "antd/es/menu/interface"; import Skeleton from "antd/es/skeleton"; import Menu from "antd/es/menu"; import Flex from "antd/es/flex"; import { checkIsMobile } from "@lowcoder-ee/index.sdk"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const FileSizeControl = codeControl((value) => { if (typeof value === "number") { @@ -117,18 +115,7 @@ const commonChildren = { ...validationChildren, }; -const commonValidationFields = (children: RecordConstructorToComp) => [ - children.minSize.propertyView({ - label: trans("file.minSize"), - placeholder: "1kb", - tooltip: trans("file.minSizeTooltip"), - }), - children.maxSize.propertyView({ - label: trans("file.maxSize"), - placeholder: "10kb", - tooltip: trans("file.maxSizeTooltip"), - }), -]; + const commonProps = ( props: RecordConstructorToView & { @@ -464,7 +451,7 @@ const Upload = ( }, [files]); // chrome86 bug: button children should not contain only empty span const hasChildren = hasIcon(props.prefixIcon) || !!props.text || hasIcon(props.suffixIcon); - + const handleOnChange = (param: UploadChangeParam) => { const uploadingFiles = param.fileList.filter((f) => f.status === "uploading"); // the onChange callback will be executed when the state of the antd upload file changes. @@ -624,67 +611,15 @@ let FileTmpComp = new UICompBuilder(childrenMap, (props, dispatch) => { return( )}) - .setPropertyViewFn((children) => ( - <> -
- {children.text.propertyView({ - label: trans("text"), - })} - {children.uploadType.propertyView({ label: trans("file.uploadType") })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.uploadType.getView() !== "single" && children.maxFiles.propertyView({ label: trans("file.maxFiles") })} - {commonValidationFields(children)} -
-
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
-
- {children.fileType.propertyView({ - label: trans("file.fileType"), - placeholder: '[".png"]', - tooltip: ( - <> - {trans("file.reference")}{" "} - - {trans("file.fileTypeTooltip")} - - - ), - })} - {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} - {children.forceCapture.propertyView({ - label: trans("file.forceCapture"), - tooltip: trans("file.forceCaptureTooltip") - })} - {children.showUploadList.propertyView({ label: trans("file.showUploadList") })} - {children.parseFiles.propertyView({ - label: trans("file.parseFiles"), - tooltip: ParseFileTooltip, - placement: "right", - })} -
- - )} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
{children.style.getPropertyView()}
-
{children.animationStyle.getPropertyView()}
- - )} - - )) + +if (viewMode() === "admin") { + FileTmpComp.setPropertyViewFn((children) => ); +} +const FileTmpCompBuilder = FileTmpComp .build(); -FileTmpComp = withMethodExposing(FileTmpComp, [ +const FileTmpComps = withMethodExposing(FileTmpCompBuilder, [ { method: { name: "clearValue", @@ -702,7 +637,7 @@ FileTmpComp = withMethodExposing(FileTmpComp, [ }, ]); -export const FileComp = withExposingConfigs(FileTmpComp, [ +export const FileComp = withExposingConfigs(FileTmpComps, [ new NameConfig("value", trans("file.filesValueDesc")), new NameConfig( "files", diff --git a/client/packages/lowcoder/src/comps/comps/fileComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/fileComp/propertyView.tsx new file mode 100644 index 000000000..beeb0224c --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/fileComp/propertyView.tsx @@ -0,0 +1,132 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import React, {useContext} from "react"; +import { + codeControl, + disabledPropertyView, + EditorContext, + hiddenPropertyView, + NumberControl, + RecordConstructorToComp +} from "lowcoder-sdk"; +import _ from "lodash"; + + +const FileSizeControl = codeControl((value) => { + if (typeof value === "number") { + return value; + } + + if (typeof value === "string") { + const str = value.trim(); + + if (str === "") { + return 0; + } + + const strInNum = Number(str); + if (!_.isNaN(strInNum)) { + return strInNum; + } + + const units = ["bytes", "kb", "mb", "gb", "tb"]; + const regExp = new RegExp("^\\d+\\s*[kmgt]b$", "i"); + if (regExp.test(str)) { + const num: number = parseInt(str.match("^\\d+")?.[0] ?? "", 10); + const exponent = units.findIndex((unit) => str.search(new RegExp(unit, "i")) !== -1); + return num * Math.pow(1024, exponent); + } + } + throw new TypeError(trans("file.typeErrorMsg", { value: typeof value })); +}); + +const ParseFileTooltip = ( + <> +
{trans("file.parsedValueTooltip1")}
+
{trans("file.parsedValueTooltip2")}
+ +); + +const validationChildren = { + minSize: FileSizeControl, + maxSize: FileSizeControl, + maxFiles: NumberControl, +}; + +const commonValidationFields = (children: RecordConstructorToComp) => [ + children.minSize.propertyView({ + label: trans("file.minSize"), + placeholder: "1kb", + tooltip: trans("file.minSizeTooltip"), + }), + children.maxSize.propertyView({ + label: trans("file.maxSize"), + placeholder: "10kb", + tooltip: trans("file.maxSizeTooltip"), + }), +]; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.text.propertyView({ + label: trans("text"), + })} + {children.uploadType.propertyView({ label: trans("file.uploadType") })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {children.uploadType.getView() !== "single" && children.maxFiles.propertyView({ label: trans("file.maxFiles") })} + {commonValidationFields(children)} +
+
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+
+ {children.fileType.propertyView({ + label: trans("file.fileType"), + placeholder: '[".png"]', + tooltip: ( + <> + {trans("file.reference")}{" "} + + {trans("file.fileTypeTooltip")} + + + ), + })} + {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} + {children.forceCapture.propertyView({ + label: trans("file.forceCapture"), + tooltip: trans("file.forceCaptureTooltip") + })} + {children.showUploadList.propertyView({ label: trans("file.showUploadList") })} + {children.parseFiles.propertyView({ + label: trans("file.parseFiles"), + tooltip: ParseFileTooltip, + placement: "right", + })} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
{children.style.getPropertyView()}
+
{children.animationStyle.getPropertyView()}
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/fileViewerComp.tsx b/client/packages/lowcoder/src/comps/comps/fileViewerComp.tsx index cba4c8aaf..5f2cfe16f 100644 --- a/client/packages/lowcoder/src/comps/comps/fileViewerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/fileViewerComp.tsx @@ -1,19 +1,17 @@ import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, FileViewerStyle, FileViewerStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import { isEmpty } from "lodash"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { DocumentViewer } from "react-documents"; import styled, { css } from "styled-components"; -import { Section, sectionNames } from "lowcoder-design"; import { StringControl } from "../controls/codeControl"; import { UICompBuilder, withDefault } from "../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators/withExposing"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import {viewMode} from "@lowcoder-ee/util/editor"; import { AutoHeightControl } from "../controls/autoHeightControl"; import { BoolControl } from "../controls/boolControl"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/fileViewerComp")); const getStyle = (style: FileViewerStyleType) => { return css` @@ -79,7 +77,7 @@ let FileViewerBasicComp = (function () { style: styleControl(FileViewerStyle , 'style'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { if (isEmpty(props.src)) { return ( ; }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.src.propertyView({ - label: trans("fileViewer.src"), - tooltip: ( - {trans("fileViewer.srcTooltip")} - ), - })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(children)} -
- )} -
- {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && ( - children.showVerticalScrollbar.propertyView({ - label: trans("prop.showVerticalScrollbar"), - }) - )} -
- - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx b/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx index 864e000d3..fdbf5d9d1 100644 --- a/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx +++ b/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx @@ -4,8 +4,7 @@ import { default as Select } from "antd/es/select"; import { CheckBox, CustomModal, - CustomSelect, - DragIcon, + CustomSelect, DragIcon, EditText, labelCss, ModalFooterWrapper, @@ -29,6 +28,7 @@ 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 {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const OpenDialogButton = styled.span` &:hover { @@ -162,7 +162,7 @@ const CellRequired = styled.div<{ $head?: boolean }>` /* width: 52px; */ padding-left: 16px; `; -const StyledDragIcon = styled(DragIcon)` +const StyledDragIcon = styled(MultiIcon(DragIcon))` cursor: grab; width: 16px; height: 16px; diff --git a/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx b/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx index 1d2ac87bb..584434f94 100644 --- a/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx @@ -4,7 +4,6 @@ import { NameConfig, withExposingConfigs, } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; import { genQueryId } from "comps/utils/idGenerator"; import { CompNameContext, EditorContext, EditorState } from "comps/editorState"; import { withMethodExposing } from "comps/generators/withMethodExposing"; @@ -25,7 +24,7 @@ import { NameGenerator } from "comps/utils"; import _ from "lodash"; import { CreateData, CreateForm } from "./createForm"; import { defaultLayout, GridItemComp } from "../gridItemComp"; -import { ReactNode, useContext } from "react"; +import React, { ReactNode, useContext } from "react"; import { pushAction } from "comps/generators/list"; import { FullColumnInfo } from "./generate/dataSourceCommon"; import { eventHandlerControl, submitEvent } from "comps/controls/eventHandlerControl"; @@ -47,11 +46,6 @@ import { BoolCodeControl, JSONObjectControl } from "comps/controls/codeControl"; import { JSONObject } from "util/jsonTypes"; import { EvalParamType } from "comps/controls/actionSelector/executeCompTypes"; import { LayoutItem } from "layout/utils"; -import { - disabledPropertyView, - hiddenPropertyView, - loadingPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import log from "loglevel"; import { DisabledContext } from "comps/generators/uiCompBuilder"; @@ -60,6 +54,8 @@ 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 {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const FormWrapper = styled.div` height: 100%; @@ -183,7 +179,7 @@ const BodyPlaceholder = (props: FormProps) => { const loadingIcon = ; const FormBaseComp = (function () { - return new ContainerCompBuilder(childrenMap, (props, dispatch) => { + let builder = new ContainerCompBuilder(childrenMap, (props, dispatch) => { return ( @@ -201,67 +197,10 @@ const FormBaseComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.resetAfterSubmit.propertyView({ label: trans("formComp.resetAfterSubmit") })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {children.disableSubmit.propertyView({ label: trans("formComp.disableSubmit") })} - {hiddenPropertyView(children)} - {loadingPropertyView(children)} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.container.getPropertyView()} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.initialData.propertyView({ label: trans("formComp.initialData") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.container.stylePropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- {children.container.children.showHeader.getView() && ( -
- { children.container.headerStylePropertyView() } -
- )} - {children.container.children.showBody.getView() && ( -
- { children.container.bodyStylePropertyView() } -
- )} - {children.container.children.showFooter.getView() && ( -
- { children.container.footerStylePropertyView() } -
- )} - - )} - - - ); - }) + if ((viewModeTriple() === "edit")) { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/formComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/formComp/propertyView.tsx new file mode 100644 index 000000000..0904a694e --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/formComp/propertyView.tsx @@ -0,0 +1,70 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus;; + return ( + <> +
+ {children.resetAfterSubmit.propertyView({ label: trans("formComp.resetAfterSubmit") })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {children.disableSubmit.propertyView({ label: trans("formComp.disableSubmit") })} + {hiddenPropertyView(children)} + {loadingPropertyView(children)} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.container.getPropertyView()} +
+ + )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.initialData.propertyView({ label: trans("formComp.initialData") })} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.container.stylePropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ {children.container.children.showHeader.getView() && ( +
+ { children.container.headerStylePropertyView() } +
+ )} + {children.container.children.showBody.getView() && ( +
+ { children.container.bodyStylePropertyView() } +
+ )} + {children.container.children.showFooter.getView() && ( +
+ { children.container.footerStylePropertyView() } +
+ )} + + )} + + + ); +}); + + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/iconComp.tsx b/client/packages/lowcoder/src/comps/comps/iconComp.tsx index 990f8531c..cde47effa 100644 --- a/client/packages/lowcoder/src/comps/comps/iconComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/iconComp.tsx @@ -1,8 +1,7 @@ -import { useEffect, useRef, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import styled, { css } from "styled-components"; import { RecordConstructorToView } from "lowcoder-core"; import { styleControl } from "comps/controls/styleControl"; -import _ from "lodash"; import { AnimationStyle, AnimationStyleType, @@ -17,9 +16,6 @@ import { NameConfigHidden, withExposingConfigs, } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; -import { trans } from "i18n"; import { NumberControl } from "comps/controls/codeControl"; import { IconControl } from "comps/controls/iconControl"; import ReactResizeDetector from "react-resize-detector"; @@ -28,8 +24,8 @@ import { clickEvent, eventHandlerControl, } from "../controls/eventHandlerControl"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/iconComp")); const Container = styled.div<{ $style: IconStyleType | undefined; @@ -112,45 +108,12 @@ const IconView = (props: RecordConstructorToView) => { }; let IconBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return()}) - .setPropertyViewFn((children) => ( - <> -
- {children.icon.propertyView({ - label: trans("iconComp.icon"), - IconType: "All", - })} - -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <>
- {children.autoHeight.propertyView({ - label: trans("iconComp.autoSize"), - })} - {!children.autoHeight.getView() && - children.iconSize.propertyView({ - label: trans("iconComp.iconSize"), - })} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/iframeComp.tsx b/client/packages/lowcoder/src/comps/comps/iframeComp.tsx index 889444883..1c5c31321 100644 --- a/client/packages/lowcoder/src/comps/comps/iframeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/iframeComp.tsx @@ -1,18 +1,15 @@ import { UICompBuilder, withDefault } from "../generators"; -import { Section, sectionNames } from "lowcoder-design"; import { StringControl } from "../controls/codeControl"; import { BoolControl } from "../controls/boolControl"; import styled from "styled-components"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators/withExposing"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, IframeStyle, IframeStyleType } from "comps/controls/styleControlConstants"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import log from "loglevel"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; - +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/iframeComp")); const Wrapper = styled.div<{$style: IframeStyleType; $animationStyle:AnimationStyleType}>` width: 100%; height: 100%; @@ -67,44 +64,20 @@ let IFrameCompBase = new UICompBuilder( ); } ) - .setPropertyViewFn((children) => ( - <> -
- {children.url.propertyView({ label: "Source URL", placeholder: "https://example.com", tooltip: trans("iframe.URLDesc") })} -
- {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(children)} - {children.allowDownload.propertyView({ label: trans("iframe.allowDownload") })} - {children.allowSubmitForm.propertyView({ label: trans("iframe.allowSubmitForm") })} - {children.allowMicrophone.propertyView({ label: trans("iframe.allowMicrophone") })} - {children.allowCamera.propertyView({ label: trans("iframe.allowCamera") })} - {children.allowPopup.propertyView({ label: trans("iframe.allowPopup") })} -
- )} +if (viewMode() === "admin") { + IFrameCompBase.setPropertyViewFn((children) => ); +} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) - .build(); +const IFrameCompBaseBuilder = IFrameCompBase.build(); -IFrameCompBase = class extends IFrameCompBase { +const IFrameCompBaseTmp = class extends IFrameCompBaseBuilder { override autoHeight(): boolean { return false; } }; -export const IFrameComp = withExposingConfigs(IFrameCompBase, [ +export const IFrameComp = withExposingConfigs(IFrameCompBaseTmp, [ new NameConfig("url", trans("iframe.URLDesc")), NameConfigHidden, ]); diff --git a/client/packages/lowcoder/src/comps/comps/imageComp.tsx b/client/packages/lowcoder/src/comps/comps/imageComp.tsx index aa0b4cc88..1f581c408 100644 --- a/client/packages/lowcoder/src/comps/comps/imageComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/imageComp.tsx @@ -1,5 +1,4 @@ import styled, { css } from "styled-components"; -import { Section, sectionNames } from "lowcoder-design"; import { clickEvent, eventHandlerControl, @@ -12,7 +11,7 @@ import { withExposingConfigs, } from "../generators/withExposing"; import { RecordConstructorToView } from "lowcoder-core"; -import { useEffect, useRef, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import _ from "lodash"; import ReactResizeDetector from "react-resize-detector"; import { styleControl } from "comps/controls/styleControl"; @@ -24,16 +23,16 @@ import { heightCalculator, widthCalculator, } from "comps/controls/styleControlConstants"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; + import { trans } from "i18n"; import { AutoHeightControl } from "comps/controls/autoHeightControl"; import { BoolControl } from "comps/controls/boolControl"; import { default as AntImage } from "antd/es/image"; import { DEFAULT_IMG_URL } from "util/stringUtils"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; import { StringControl } from "../controls/codeControl"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/imageComp")); + const Container = styled.div<{ $style: ImageStyleType | undefined,$animationStyle:AnimationStyleType }>` height: 100%; @@ -128,8 +127,8 @@ const ContainerImg = (props: RecordConstructorToView) => { } // fixme border style bug on safari if ( - (_.divide(container?.clientWidth!, container?.clientHeight!) || 0) > - (_.divide(Number(width), Number(height)) || 0) + (_.divide(container?.clientWidth!, container?.clientHeight!) || 0) > + (_.divide(Number(width), Number(height)) || 0) ) { setStyle("100%", "auto"); } else { @@ -137,29 +136,29 @@ const ContainerImg = (props: RecordConstructorToView) => { } }; return ( - ( - -
- props.onEvent("click")} - /> -
-
- )} - > -
+ ( + +
+ props.onEvent("click")} + /> +
+
+ )} + > +
); }; @@ -176,51 +175,18 @@ const childrenMap = { let ImageBasicComp = new UICompBuilder(childrenMap, (props) => { return ; }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.src.propertyView({ - label: trans("image.src"), - })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {children.supportPreview.propertyView({ - label: trans("image.supportPreview"), - tooltip: trans("image.supportPreviewTip"), - })} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.autoHeight.getPropertyView()} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) - .build(); - -ImageBasicComp = class extends ImageBasicComp { +if (viewMode() === "admin") { + ImageBasicComp.setPropertyViewFn((children) => ); +} +const ImageBasicCompBuilder = ImageBasicComp.build(); + +const ImageBasicCompTmp = class extends ImageBasicCompBuilder { override autoHeight(): boolean { return this.children.autoHeight.getView(); } }; -export const ImageComp = withExposingConfigs(ImageBasicComp, [ +export const ImageComp = withExposingConfigs(ImageBasicCompTmp, [ new NameConfig("src", trans("image.srcDesc")), NameConfigHidden, ]); diff --git a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx index 3cc215c0b..2db58f1c5 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx @@ -1,28 +1,27 @@ -import { ScrollBar, Section, sectionNames } from "lowcoder-design"; +import { ScrollBar } from "lowcoder-design"; import { UICompBuilder } from "../../generators"; import { NameConfigHidden, NameConfig, withExposingConfigs } from "../../generators/withExposing"; import { defaultData } from "./jsonConstants"; import styled from "styled-components"; import { jsonValueExposingStateControl } from "comps/controls/codeStateControl"; import { ChangeEventHandlerControl } from "comps/controls/eventHandlerControl"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { LabelControl } from "comps/controls/labelControl"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; 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 React, { useRef, useEffect } from "react"; import { EditorState, EditorView, type EditorView as EditorViewType, } from "base/codeEditor/codeMirror"; import { useExtensions } from "base/codeEditor/extensions"; -import { EditorContext } from "comps/editorState"; import { AutoHeightControl } from "@lowcoder-ee/comps/controls/autoHeightControl"; import { BoolControl } from "@lowcoder-ee/comps/controls/boolControl"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewJsonEditor = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewJsonEditor}))) /** * JsonEditor Comp */ @@ -75,7 +74,7 @@ const childrenMap = { }; let JsonEditorTmpComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const wrapperRef = useRef(null); const view = useRef(null); const initialized = useRef(false); @@ -142,39 +141,10 @@ let JsonEditorTmpComp = (function () { ), }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ label: trans("export.jsonEditorDesc") })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} -
- )} -
- {children.autoHeight.propertyView({ label: trans('prop.height') })} -
- {!children.autoHeight.getView()&&
- {children.showVerticalScrollbar.propertyView({label: trans('prop.showVerticalScrollbar')})} - -
} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( children.label.getPropertyView() )} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
{children.style.getPropertyView()}
-
{children.animationStyle.getPropertyView()}
- - )} - - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonExplorerComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonExplorerComp.tsx index 0a9e5f886..37177d2c2 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonExplorerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonExplorerComp.tsx @@ -1,4 +1,4 @@ -import { ScrollBar, Section, sectionNames } from "lowcoder-design"; +import { ScrollBar } from "lowcoder-design"; import { UICompBuilder, withDefault } from "../../generators"; import { NameConfigHidden, NameConfig, withExposingConfigs } from "../../generators/withExposing"; import ReactJson, { type ThemeKeys } from "react-json-view"; @@ -7,14 +7,13 @@ import styled from "styled-components"; import { BoolControl } from "comps/controls/boolControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { ArrayOrJSONObjectControl, NumberControl } from "comps/controls/codeControl"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; -import { EditorContext } from "comps/editorState"; -import { useContext, useEffect } from "react"; +import React from "react"; import { AnimationStyle, AnimationStyleType } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; import { AutoHeightControl } from "@lowcoder-ee/comps/controls/autoHeightControl"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewJsonExplorer = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewJsonExplorer}))) /** * JsonExplorer Comp */ @@ -60,7 +59,7 @@ let JsonExplorerTmpComp = (function () { theme: dropdownControl(themeOptions, 'shapeshifter:inverted'), animationStyle:styleControl(AnimationStyle, 'animationStyle'), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return ( ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ label: trans("export.jsonEditorDesc") })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {hiddenPropertyView(children)} - {children.expandToggle.propertyView({ label: trans("jsonExplorer.expandToggle") })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.indent.propertyView({ label: trans("jsonExplorer.indent") })} -
- )} -
- {children.autoHeight.propertyView({label: trans('prop.height')})} -
- {!children.autoHeight.getView()&&
- {children.showVerticalScrollbar.propertyView({ - label: trans('prop.showVerticalScrollbar'), - })} -
} - {(useContext(EditorContext).editorModeStatus === 'layout' || - useContext(EditorContext).editorModeStatus === 'both') && ( - <> -
- {children.theme.propertyView({ - label: trans('jsonExplorer.theme'), - })} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx index 89686dbe5..312c1ee90 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx @@ -1,4 +1,3 @@ -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { ArrayOrJSONObjectControl, NumberControl, @@ -8,8 +7,7 @@ import { BoolControl } from "comps/controls/boolControl"; 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 React, { lazy } from "react"; import { UICompBuilder, withDefault } from "../../generators"; import { NameConfig, @@ -17,8 +15,8 @@ import { withExposingConfigs, } from "../../generators/withExposing"; import { defaultLottie } from "./jsonConstants"; -import { EditorContext } from "comps/editorState"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewJsonLottie = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewJsonLottie}))) const Player = lazy( () => import('@lottiefiles/react-lottie-player') .then(module => ({default: module.Player})) @@ -99,7 +97,7 @@ let JsonLottieTmpComp = (function () { loop: dropdownControl(loopOptions, "single"), keepLastFrame: BoolControl.DEFAULT_TRUE, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return (
); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ - label: trans("jsonLottie.lottieJson"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {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)} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.container.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); JsonLottieTmpComp = class extends JsonLottieTmpComp { diff --git a/client/packages/lowcoder/src/comps/comps/jsonComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/jsonComp/propertyView.tsx new file mode 100644 index 000000000..34c09a4bf --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/jsonComp/propertyView.tsx @@ -0,0 +1,126 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + + +const PropertyViewJsonEditor = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.value.propertyView({ label: trans("export.jsonEditorDesc") })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} +
+ )} +
+ {children.autoHeight.propertyView({ label: trans('prop.height') })} +
+ {!children.autoHeight.getView()&&
+ {children.showVerticalScrollbar.propertyView({label: trans('prop.showVerticalScrollbar')})} + +
} + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( children.label.getPropertyView() )} + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
{children.style.getPropertyView()}
+
{children.animationStyle.getPropertyView()}
+ + )} + + + ); +}); + + +const PropertyViewJsonExplorer = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.value.propertyView({ label: trans("export.jsonEditorDesc") })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {hiddenPropertyView(children)} + {children.expandToggle.propertyView({ label: trans("jsonExplorer.expandToggle") })} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.indent.propertyView({ label: trans("jsonExplorer.indent") })} +
+ )} +
+ {children.autoHeight.propertyView({label: trans('prop.height')})} +
+ {!children.autoHeight.getView()&&
+ {children.showVerticalScrollbar.propertyView({ + label: trans('prop.showVerticalScrollbar'), + })} +
} + {(editorModeStatus === 'layout' || + editorModeStatus === 'both') && ( + <> +
+ {children.theme.propertyView({ + label: trans('jsonExplorer.theme'), + })} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +const PropertyViewJsonLottie = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + return ( + <> +
+ {children.value.propertyView({ + label: trans("jsonLottie.lottieJson"), + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {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)} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.container.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export { PropertyViewJsonLottie, PropertyViewJsonExplorer, PropertyViewJsonEditor } + diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx index af2906d7d..2dff10fad 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx @@ -13,22 +13,21 @@ import { i18nObjs, trans } from "i18n"; import type { JSONSchema7 } from "json-schema"; import styled from "styled-components"; import { toBoolean, toNumber, toString } from "util/convertUtils"; -import { Section, sectionNames, ScrollBar } from "lowcoder-design"; +import { ScrollBar } from "lowcoder-design"; import { jsonObjectControl } from "../../controls/codeControl"; import { eventHandlerControl, submitEvent } from "../../controls/eventHandlerControl"; import { UICompBuilder, withDefault } from "../../generators"; import DateWidget from "./dateWidget"; import ErrorBoundary from "./errorBoundary"; import { Theme } from "@rjsf/antd"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { AutoHeightControl } from "../../controls/autoHeightControl"; -import { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import ObjectFieldTemplate from './ObjectFieldTemplate'; import ArrayFieldTemplate from './ArrayFieldTemplate'; import { Select } from 'antd'; import Title from 'antd/es/typography/Title'; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); Theme.widgets.DateWidget = DateWidget(false); Theme.widgets.DateTimeWidget = DateWidget(true); const Form = withTheme(Theme); @@ -228,7 +227,7 @@ let FormBasicComp = (function () { style: styleControl(JsonSchemaFormStyle , 'style'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = 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" @@ -283,124 +282,10 @@ let FormBasicComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- - {children.schema.propertyView({ - key: trans("jsonSchemaForm.jsonSchema"), - label: ( - <> - {trans("jsonSchemaForm.jsonSchema") + " ("} - - Docs 1 - - {", "} - - Docs 2 - - {")"} - - ), - tooltip: ( - <> - {trans("jsonSchemaForm.schemaTooltip") + " "} - - JSON Schema - - - ), - })} - {children.uiSchema.propertyView({ - key: trans("jsonSchemaForm.uiSchema"), - label: ( - <> - {trans("jsonSchemaForm.uiSchema") + " ("} - - Docs 1 - - {", "} - - Docs 2 - - {")"} - - ), - tooltip: ( - <> - {trans("jsonSchemaForm.schemaTooltip") + " "} - - UI Schema - - - ), - })} - {children.data.propertyView({ - key: trans("jsonSchemaForm.defaultData"), - label: trans("jsonSchemaForm.defaultData"), - })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {children.resetAfterSubmit.propertyView({ - label: trans("jsonSchemaForm.resetAfterSubmit"), - })} -
- )} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && ( - children.showVerticalScrollbar.propertyView({ - label: trans("prop.showVerticalScrollbar"), - }) - )} -
-
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/propertyView.tsx new file mode 100644 index 000000000..093ab28a6 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/propertyView.tsx @@ -0,0 +1,125 @@ +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView, Section, sectionNames} from "lowcoder-sdk"; +import {trans} from "@lowcoder-ee/i18n"; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ + {children.schema.propertyView({ + key: trans("jsonSchemaForm.jsonSchema"), + label: ( + <> + {trans("jsonSchemaForm.jsonSchema") + " ("} + + Docs 1 + + {", "} + + Docs 2 + + {")"} + + ), + tooltip: ( + <> + {trans("jsonSchemaForm.schemaTooltip") + " "} + + JSON Schema + + + ), + })} + {children.uiSchema.propertyView({ + key: trans("jsonSchemaForm.uiSchema"), + label: ( + <> + {trans("jsonSchemaForm.uiSchema") + " ("} + + Docs 1 + + {", "} + + Docs 2 + + {")"} + + ), + tooltip: ( + <> + {trans("jsonSchemaForm.schemaTooltip") + " "} + + UI Schema + + + ), + })} + {children.data.propertyView({ + key: trans("jsonSchemaForm.defaultData"), + label: trans("jsonSchemaForm.defaultData"), + })} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {children.resetAfterSubmit.propertyView({ + label: trans("jsonSchemaForm.resetAfterSubmit"), + })} +
+ )} + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && ( + children.showVerticalScrollbar.propertyView({ + label: trans("prop.showVerticalScrollbar"), + }) + )} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + + ); +}); + +export default PropertyView \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/layout/mobileTabLayout.tsx b/client/packages/lowcoder/src/comps/comps/layout/mobileTabLayout.tsx index c1a04c14e..1da04f006 100644 --- a/client/packages/lowcoder/src/comps/comps/layout/mobileTabLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/layout/mobileTabLayout.tsx @@ -1,6 +1,5 @@ import { MultiCompBuilder, withDefault, withViewFn } from "comps/generators"; import { trans } from "i18n"; -import { Section, sectionNames } from "components/Section"; import { manualOptionsControl } from "comps/controls/optionsControl"; import { BoolCodeControl, StringControl, jsonControl, NumberControl } from "comps/controls/codeControl"; import { IconControl } from "comps/controls/iconControl"; @@ -18,23 +17,20 @@ import { ExternalEditorContext } from "util/context/ExternalEditorContext"; import { default as Skeleton } from "antd/es/skeleton"; import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { dropdownControl } from "@lowcoder-ee/comps/controls/dropdownControl"; -import { DataOption, DataOptionType, ModeOptions, menuItemStyleOptions, mobileNavJsonMenuItems } from "./navLayoutConstants"; +import { DataOption, DataOptionType, mobileNavJsonMenuItems } from "./navLayoutConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; import { NavLayoutItemActiveStyle, NavLayoutItemActiveStyleType, NavLayoutItemHoverStyle, NavLayoutItemHoverStyleType, NavLayoutItemStyle, NavLayoutItemStyleType, NavLayoutStyle, NavLayoutStyleType } from "@lowcoder-ee/comps/controls/styleControlConstants"; -import Segmented from "antd/es/segmented"; -import { controlItem } from "components/control"; import { check } from "@lowcoder-ee/util/convertUtils"; import { JSONObject } from "@lowcoder-ee/util/jsonTypes"; import { isEmpty } from "lodash"; import { ThemeContext } from "@lowcoder-ee/comps/utils/themeContext"; -import { AlignCenter } from "lowcoder-design"; -import { AlignLeft } from "lowcoder-design"; -import { AlignRight } from "lowcoder-design"; import { LayoutActionComp } from "./layoutActionComp"; import { defaultTheme } from "@lowcoder-ee/constants/themeConstants"; import { clickEvent, eventHandlerControl } from "@lowcoder-ee/comps/controls/eventHandlerControl"; -import { childrenToProps } from "@lowcoder-ee/comps/generators/multi"; - +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {AlignCenter, AlignLeft, AlignRight} from "icons"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewMobileTabLayout = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewMobileTabLayout}))) const TabBar = React.lazy(() => import("antd-mobile/es/components/tab-bar")); const TabBarItem = React.lazy(() => import("antd-mobile/es/components/tab-bar/tab-bar").then((module) => ({ @@ -150,13 +146,13 @@ const defaultStyle = { padding: '0px', } -const AlignTop = styled(AlignLeft)` +const AlignTop = styled(MultiIcon(AlignLeft))` transform: rotate(90deg); `; -const AlignBottom = styled(AlignRight)` +const AlignBottom = styled(MultiIcon(AlignRight))` transform: rotate(90deg); `; -const AlignVerticalCenter = styled(AlignCenter)` +const AlignVerticalCenter = styled(MultiIcon(AlignCenter))` transform: rotate(90deg); `; @@ -322,67 +318,13 @@ let MobileTabLayoutTmp = (function () { navItemHoverStyle: styleControl(NavLayoutItemHoverStyle, 'navItemHoverStyle'), navItemActiveStyle: styleControl(NavLayoutItemActiveStyle, 'navItemActiveStyle'), }; - return new MultiCompBuilder(childrenMap, (props, dispatch) => { + let builder = new MultiCompBuilder(childrenMap, (props, dispatch) => { return null; }) - .setPropertyViewFn((children) => { - const [styleSegment, setStyleSegment] = useState('normal') - return ( -
-
- {children.dataOptionType.propertyView({ - radioButton: true, - type: "oneline", - })} - { - children.dataOptionType.getView() === DataOption.Manual - ? children.tabs.propertyView({}) - : children.jsonItems.propertyView({ - label: "Json Data", - }) - } -
-
- { children.onEvent.getPropertyView() } -
-
- {children.backgroundImage.propertyView({ - label: `Background Image`, - placeholder: 'https://temp.im/350x400', - })} - { children.showSeparator.propertyView({label: trans("navLayout.mobileNavVerticalShowSeparator")})} - {children.tabBarHeight.propertyView({label: trans("navLayout.mobileNavBarHeight")})} - {children.navIconSize.propertyView({label: trans("navLayout.mobileNavIconSize")})} - {children.maxWidth.propertyView({label: trans("navLayout.mobileNavVerticalMaxWidth")})} - {children.verticalAlignment.propertyView( - { label: trans("navLayout.mobileNavVerticalOrientation"),radioButton: true } - )} -
-
- { children.navStyle.getPropertyView() } -
-
- {controlItem({}, ( - setStyleSegment(k as MenuItemStyleOptionValue)} - /> - ))} - {styleSegment === 'normal' && ( - children.navItemStyle.getPropertyView() - )} - {styleSegment === 'hover' && ( - children.navItemHoverStyle.getPropertyView() - )} - {styleSegment === 'active' && ( - children.navItemActiveStyle.getPropertyView() - )} -
-
- ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/layout/navLayout.tsx b/client/packages/lowcoder/src/comps/comps/layout/navLayout.tsx index 2f07839ca..722f276fa 100644 --- a/client/packages/lowcoder/src/comps/comps/layout/navLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/layout/navLayout.tsx @@ -1,20 +1,17 @@ import { default as Layout } from "antd/es/layout"; import { default as LayoutSider } from "antd/es/layout/Sider"; import { default as AntdMenu, MenuProps } from "antd/es/menu"; -import { default as Segmented } from "antd/es/segmented"; import MainContent from "components/layout/MainContent"; import { LayoutMenuItemComp, LayoutMenuItemListComp } from "comps/comps/layout/layoutMenuItemComp"; -import { menuPropertyView } from "comps/comps/navComp/components/MenuItemList"; import { registerLayoutMap } from "comps/comps/uiComp"; import { MultiCompBuilder, withDefault, withViewFn } from "comps/generators"; import { withDispatchHook } from "comps/generators/withDispatchHook"; import { NameAndExposingInfo } from "comps/utils/exposingTypes"; import { ALL_APPLICATIONS_URL } from "constants/routesURL"; import { TopHeaderHeight } from "constants/style"; -import { Section, controlItem, sectionNames } from "lowcoder-design"; import { trans } from "i18n"; import { EditorContainer, EmptyContent } from "pages/common/styledComponent"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; import styled from "styled-components"; import { isUserViewMode, useAppPathParam } from "util/hooks"; import { BoolCodeControl, StringControl, jsonControl } from "comps/controls/codeControl"; @@ -42,7 +39,8 @@ import { } from "./navLayoutConstants"; import { clickEvent, eventHandlerControl } from "@lowcoder-ee/comps/controls/eventHandlerControl"; import { childrenToProps } from "@lowcoder-ee/comps/generators/multi"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewNavLayout = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewNavLayout}))) const { Header } = Layout; const DEFAULT_WIDTH = 240; @@ -204,73 +202,13 @@ let NavTmpLayout = (function () { navItemHoverStyle: styleControl(NavLayoutItemHoverStyle, 'navItemHoverStyle'), navItemActiveStyle: styleControl(NavLayoutItemActiveStyle, 'navItemActiveStyle'), }; - return new MultiCompBuilder(childrenMap, (props) => { + let builder = new MultiCompBuilder(childrenMap, (props) => { return null; }) - .setPropertyViewFn((children) => { - const [styleSegment, setStyleSegment] = useState('normal') - - return ( -
-
- {children.dataOptionType.propertyView({ - radioButton: true, - type: "oneline", - })} - { - children.dataOptionType.getView() === DataOption.Manual - ? menuPropertyView(children.items) - : children.jsonItems.propertyView({ - label: "Json Data", - }) - } -
-
- { children.onEvent.getPropertyView() } -
-
- { children.width.propertyView({ - label: trans("navLayout.width"), - tooltip: trans("navLayout.widthTooltip"), - placeholder: DEFAULT_WIDTH + "", - })} - { children.mode.propertyView({ - label: trans("labelProp.position"), - radioButton: true - })} - { children.collapse.propertyView({ - label: trans("labelProp.collapse"), - })} - {children.backgroundImage.propertyView({ - label: `Background Image`, - placeholder: 'https://temp.im/350x400', - })} -
-
- { children.navStyle.getPropertyView() } -
-
- {controlItem({}, ( - setStyleSegment(k as MenuItemStyleOptionValue)} - /> - ))} - {styleSegment === 'normal' && ( - children.navItemStyle.getPropertyView() - )} - {styleSegment === 'hover' && ( - children.navItemHoverStyle.getPropertyView() - )} - {styleSegment === 'active' && ( - children.navItemActiveStyle.getPropertyView() - )} -
-
- ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/layout/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/layout/propertyView.tsx new file mode 100644 index 000000000..cba1d2ab7 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/layout/propertyView.tsx @@ -0,0 +1,138 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {DataOption, menuItemStyleOptions} from "@lowcoder-ee/comps/comps/layout/navLayoutConstants"; +import {controlItem} from "components/control"; +import Segmented from "antd/es/segmented"; +import React, {useState} from "react"; +import {menuPropertyView} from "@lowcoder-ee/comps/comps/navComp/components/MenuItemList"; + + +type MenuItemStyleOptionValue = "normal" | "hover" | "active"; + +const PropertyViewMobileTabLayout = ((children: any) => { + const [styleSegment, setStyleSegment] = useState('normal') + return ( +
+
+ {children.dataOptionType.propertyView({ + radioButton: true, + type: "oneline", + })} + { + children.dataOptionType.getView() === DataOption.Manual + ? children.tabs.propertyView({}) + : children.jsonItems.propertyView({ + label: "Json Data", + }) + } +
+
+ {children.onEvent.getPropertyView()} +
+
+ {children.backgroundImage.propertyView({ + label: `Background Image`, + placeholder: 'https://temp.im/350x400', + })} + {children.showSeparator.propertyView({label: trans("navLayout.mobileNavVerticalShowSeparator")})} + {children.tabBarHeight.propertyView({label: trans("navLayout.mobileNavBarHeight")})} + {children.navIconSize.propertyView({label: trans("navLayout.mobileNavIconSize")})} + {children.maxWidth.propertyView({label: trans("navLayout.mobileNavVerticalMaxWidth")})} + {children.verticalAlignment.propertyView( + {label: trans("navLayout.mobileNavVerticalOrientation"), radioButton: true} + )} +
+
+ {children.navStyle.getPropertyView()} +
+
+ {controlItem({}, ( + setStyleSegment(k as MenuItemStyleOptionValue)} + /> + ))} + {styleSegment === 'normal' && ( + children.navItemStyle.getPropertyView() + )} + {styleSegment === 'hover' && ( + children.navItemHoverStyle.getPropertyView() + )} + {styleSegment === 'active' && ( + children.navItemActiveStyle.getPropertyView() + )} +
+
+ + ); +}); + +const PropertyViewNavLayout = ((children: any) => { + const DEFAULT_WIDTH = 240; + const [styleSegment, setStyleSegment] = useState('normal') + return ( +
+
+ {children.dataOptionType.propertyView({ + radioButton: true, + type: "oneline", + })} + { + children.dataOptionType.getView() === DataOption.Manual + ? menuPropertyView(children.items) + : children.jsonItems.propertyView({ + label: "Json Data", + }) + } +
+
+ { children.onEvent.getPropertyView() } +
+
+ { children.width.propertyView({ + label: trans("navLayout.width"), + tooltip: trans("navLayout.widthTooltip"), + placeholder: DEFAULT_WIDTH + "", + })} + { children.mode.propertyView({ + label: trans("labelProp.position"), + radioButton: true + })} + { children.collapse.propertyView({ + label: trans("labelProp.collapse"), + })} + {children.backgroundImage.propertyView({ + label: `Background Image`, + placeholder: 'https://temp.im/350x400', + })} +
+
+ { children.navStyle.getPropertyView() } +
+
+ {controlItem({}, ( + setStyleSegment(k as MenuItemStyleOptionValue)} + /> + ))} + {styleSegment === 'normal' && ( + children.navItemStyle.getPropertyView() + )} + {styleSegment === 'hover' && ( + children.navItemHoverStyle.getPropertyView() + )} + {styleSegment === 'active' && ( + children.navItemActiveStyle.getPropertyView() + )} +
+
+ ); +}); + +export { PropertyViewNavLayout, PropertyViewMobileTabLayout } + diff --git a/client/packages/lowcoder/src/comps/comps/mediaComp/audioComp.tsx b/client/packages/lowcoder/src/comps/comps/mediaComp/audioComp.tsx index 47373e51b..2710efe60 100644 --- a/client/packages/lowcoder/src/comps/comps/mediaComp/audioComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/mediaComp/audioComp.tsx @@ -1,20 +1,19 @@ import styled from "styled-components"; -import { Section, sectionNames } from "lowcoder-design"; import { eventHandlerControl } from "../../controls/eventHandlerControl"; import { StringStateControl } from "../../controls/codeStateControl"; import { UICompBuilder } from "../../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../../generators/withExposing"; import { RecordConstructorToView } from "lowcoder-core"; import { styleControl } from "comps/controls/styleControl"; -import { AnimationStyle, AnimationStyleType, AudioStyle, ImageStyle } from "comps/controls/styleControlConstants"; +import { AnimationStyle, AnimationStyleType, AudioStyle } from "comps/controls/styleControlConstants"; import { TacoAudio } from "lowcoder-design"; import { BoolControl } from "comps/controls/boolControl"; import { withDefault } from "../../generators/simpleGenerators"; import { trans } from "i18n"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { mediaCommonChildren, mediaMethods } from "./mediaUtils"; -import { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewAudioComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewAudioComp}))) const Container = styled.div<{ $style: any; $animationStyle: AnimationStyleType }>` ${props => props.$style}; @@ -74,40 +73,13 @@ const childrenMap = { }; let AudioBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return ; }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.src.propertyView({ - label: trans("audio.src"), - tooltip: trans("audio.srcDesc"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {children.autoPlay.propertyView({ - label: trans("audio.autoPlay"), - })} - {children.loop.propertyView({ - label: trans("audio.loop"), - })} -
- )} -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs(mediaMethods()) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/mediaComp/colorPickerComp.tsx b/client/packages/lowcoder/src/comps/comps/mediaComp/colorPickerComp.tsx index 6ddab9be4..a6c53c28d 100644 --- a/client/packages/lowcoder/src/comps/comps/mediaComp/colorPickerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/mediaComp/colorPickerComp.tsx @@ -1,13 +1,10 @@ -import { Section, sectionNames } from "lowcoder-design"; import { BoolControl } from "comps/controls/boolControl"; import { styleControl } from "comps/controls/styleControl"; import { ColorPickerStyle, ColorPickerStyleType } from "comps/controls/styleControlConstants"; import { NameConfig } from "comps/generators/withExposing"; import styled, { css } from "styled-components"; import { UICompBuilder, withDefault } from "../../generators"; -import { FormDataPropertyView } from "../formComp/formDataConstants"; import { textInputChildren } from "../textInputComp/textInputConstants"; -import { disabledPropertyView, hiddenPropertyView, } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { ColorPicker } from 'antd'; import { presets } from "./colorPickerConstants"; @@ -16,10 +13,11 @@ import { changeEvent, eventHandlerControl } from "comps/controls/eventHandlerCon import { jsonObjectExposingStateControl, stringExposingStateControl } from "comps/controls/codeStateControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { ArrayOrJSONObjectControl } from "comps/controls/codeControl"; -import { JSONObject } from "@lowcoder-ee/util/jsonTypes"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +import React from "react"; +const PropertyViewColorPicker = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewColorPicker}))) export function getStyle(style: ColorPickerStyleType) { - return css` + return css` border-radius: ${style.radius}; &:not(.ant-input-disabled, .ant-input-affix-wrapper-disabled), input { @@ -50,82 +48,62 @@ const ColorPickerWrapper = styled(ColorPicker) <{ $style: ColorPickerStyleType } `; const colorPickerTriggerOption = [ - { label: trans('colorPicker.click'), value: 'click' }, - { label: trans('colorPicker.hover'), value: 'hover' }, + { label: trans('colorPicker.click'), value: 'click' }, + { label: trans('colorPicker.hover'), value: 'hover' }, ] as const; export const colorPickerEvent = eventHandlerControl([ - changeEvent + changeEvent ] as const); const childrenMap = { - ...textInputChildren, - value: stringExposingStateControl('value', '#3377ff'), - style: styleControl(ColorPickerStyle , 'style'), - color: jsonObjectExposingStateControl('color', {}), - trigger: dropdownControl(colorPickerTriggerOption, 'click'), - disabledAlpha: BoolControl, - showPresets: BoolControl, - onEvent: colorPickerEvent, - presets: withDefault(ArrayOrJSONObjectControl, JSON.stringify(presets, null, 2)), + ...textInputChildren, + value: stringExposingStateControl('value', '#3377ff'), + style: styleControl(ColorPickerStyle , 'style'), + color: jsonObjectExposingStateControl('color', {}), + trigger: dropdownControl(colorPickerTriggerOption, 'click'), + disabledAlpha: BoolControl, + showPresets: BoolControl, + onEvent: colorPickerEvent, + presets: withDefault(ArrayOrJSONObjectControl, JSON.stringify(presets, null, 2)), }; -export const ColorPickerComp = new UICompBuilder(childrenMap, (props) => { - return props.label({ - children: ( - value.toHexString().toUpperCase()} - allowClear - trigger={props.trigger} - disabled={props.disabled} - onChange={(value) => { - props.value.onChange(value.toHexString().toUpperCase()) - props.color.onChange({ - hex: value.toHexString().toUpperCase(), - hsb: value.toHsb(), - rgb: value.toRgb() as any, - }) - props.onEvent('change') - }} - presets={props.showPresets && !_.isEmpty(props.presets) ? [(props.presets as any)] : []} - /> - ), - style: props.style, - }); +let ColorPickerComps = new UICompBuilder(childrenMap, (props) => { + return props.label({ + children: ( + value.toHexString().toUpperCase()} + allowClear + trigger={props.trigger} + disabled={props.disabled} + onChange={(value) => { + props.value.onChange(value.toHexString().toUpperCase()) + props.color.onChange({ + hex: value.toHexString().toUpperCase(), + hsb: value.toHsb(), + rgb: value.toRgb() as any, + }) + props.onEvent('change') + }} + presets={props.showPresets && !_.isEmpty(props.presets) ? [(props.presets as any)] : []} + /> + ), + style: props.style, + }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ label: trans("prop.defaultValue") })} -
- - - {children.label.getPropertyView()} -
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} -
-
- {children.trigger.propertyView({ label: trans("colorPicker.trigger"), radioButton: true })} - {children.disabledAlpha.propertyView({ label: trans("colorPicker.disabledAlpha") })} - {children.showPresets.propertyView({ label: trans("colorPicker.showPresets") })} - {children.showPresets.getView() && children.presets.propertyView({ label: trans("colorPicker.recommended") })} -
- -
{hiddenPropertyView(children)}
+if (viewMode() === "admin") { + ColorPickerComps.setPropertyViewFn((children) => ); +} -
{children.style.getPropertyView()}
- - ); - }) - .setExposeStateConfigs([ - new NameConfig("value", trans("export.inputValueDesc")), - new NameConfig("color", trans("export.inputValueDesc")), - new NameConfig("disabled", trans("prop.disabled")), - ]) - .build(); +const ColorPickerComp = ColorPickerComps + .setExposeStateConfigs([ + new NameConfig("value", trans("export.inputValueDesc")), + new NameConfig("color", trans("export.inputValueDesc")), + new NameConfig("disabled", trans("prop.disabled")), + ]) + .build(); +export { ColorPickerComp }; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/mediaComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/mediaComp/propertyView.tsx new file mode 100644 index 000000000..5b5767b93 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/mediaComp/propertyView.tsx @@ -0,0 +1,123 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {disabledPropertyView, EditorContext, hiddenPropertyView} from "lowcoder-sdk"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; + +const PropertyViewAudioComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.src.propertyView({ + label: trans("audio.src"), + tooltip: trans("audio.srcDesc"), + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {children.autoPlay.propertyView({ + label: trans("audio.autoPlay"), + })} + {children.loop.propertyView({ + label: trans("audio.loop"), + })} +
+ )} +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + ); +}); + +const PropertyViewColorPicker = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ label: trans("prop.defaultValue") })} +
+ + + {children.label.getPropertyView()} +
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} +
+ +
+ {children.trigger.propertyView({ label: trans("colorPicker.trigger"), radioButton: true })} + {children.disabledAlpha.propertyView({ label: trans("colorPicker.disabledAlpha") })} + {children.showPresets.propertyView({ label: trans("colorPicker.showPresets") })} + {children.showPresets.getView() && children.presets.propertyView({ label: trans("colorPicker.recommended") })} +
+ +
{hiddenPropertyView(children)}
+ +
{children.style.getPropertyView()}
+ + ); +}); + +const PropertyViewVideoComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.src.propertyView({ + label: trans("video.src"), + tooltip: trans("video.srcDesc"), + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + + <>
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} +
+
+ {children.poster.propertyView({ + label: trans("video.poster"), + tooltip: trans("video.posterTooltip"), + })} + {children.volume.propertyView({ + label: trans("video.volume"), + tooltip: trans("video.volumeTooltip"), + })} + {children.playbackRate.propertyView({ + label: trans("video.playbackRate"), + tooltip: trans("video.playbackRateTooltip"), + })} + {children.autoPlay.propertyView({ + label: trans("video.autoPlay"), + tooltip: trans("video.autoPlayTooltip"), + })} + {children.loop.propertyView({ + label: trans("video.loop"), + })} + {children.controls.propertyView({ + label: trans("video.controls"), + tooltip: trans("video.controlsTooltip"), + })} + +
+
+ {children.style.getPropertyView()} +
+ {/*
+ {children.animationStyle.getPropertyView()} +
*/} + + )} + + ); +}); + +export { PropertyViewVideoComp, PropertyViewAudioComp, PropertyViewColorPicker } \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/mediaComp/videoComp.tsx b/client/packages/lowcoder/src/comps/comps/mediaComp/videoComp.tsx index 2d0336704..d0075e0eb 100644 --- a/client/packages/lowcoder/src/comps/comps/mediaComp/videoComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/mediaComp/videoComp.tsx @@ -4,7 +4,7 @@ import { StringStateControl, numberExposingStateControl } from "../../controls/c import { UICompBuilder } from "../../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../../generators/withExposing"; import { RecordConstructorToView } from "lowcoder-core"; -import { useEffect, useRef, useState } from "react"; +import React, { useRef, useState } from "react"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, @@ -15,15 +15,14 @@ import { BoolControl } from "comps/controls/boolControl"; import { withDefault } from "../../generators/simpleGenerators"; import { playIcon } from "lowcoder-design"; import { RangeControl } from "../../controls/codeControl"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { Video } from "lowcoder-design"; import type ReactPlayer from "react-player"; import { mediaCommonChildren, mediaMethods } from "./mediaUtils"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; -import styled, { css } from "styled-components"; +import styled from "styled-components"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewVideoComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewVideoComp}))) const EventOptions = [ { label: trans("video.play"), value: "play", description: trans("video.playDesc") }, @@ -128,62 +127,13 @@ const childrenMap = { }; let VideoBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return ; }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.src.propertyView({ - label: trans("video.src"), - tooltip: trans("video.srcDesc"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - - <>
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} -
-
- {children.poster.propertyView({ - label: trans("video.poster"), - tooltip: trans("video.posterTooltip"), - })} - {children.volume.propertyView({ - label: trans("video.volume"), - tooltip: trans("video.volumeTooltip"), - })} - {children.playbackRate.propertyView({ - label: trans("video.playbackRate"), - tooltip: trans("video.playbackRateTooltip"), - })} - {children.autoPlay.propertyView({ - label: trans("video.autoPlay"), - tooltip: trans("video.autoPlayTooltip"), - })} - {children.loop.propertyView({ - label: trans("video.loop"), - })} - {children.controls.propertyView({ - label: trans("video.controls"), - tooltip: trans("video.controlsTooltip"), - })} - -
-
- {children.style.getPropertyView()} -
- {/*
- {children.animationStyle.getPropertyView()} -
*/} - - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs(mediaMethods()) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx b/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx index 28e318618..10a9f6186 100644 --- a/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx +++ b/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx @@ -5,18 +5,10 @@ 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 _ from "lodash"; -import { - disabledPropertyView, - hiddenPropertyView, - loadingPropertyView, -} from "comps/utils/propertyUtils"; import { CommonBlueLabel, controlItem, Dropdown, - Section, - sectionNames, } from "lowcoder-design"; import { trans } from "i18n"; import styled, { css } from "styled-components"; @@ -35,10 +27,11 @@ import { heightCalculator, widthCalculator, } from "comps/controls/styleControlConstants"; -import { useEffect, useRef, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import ReactResizeDetector from "react-resize-detector"; -import { useContext } from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const Container = styled.div<{ $style: any }>` height: 100%; @@ -190,7 +183,7 @@ const childrenMap = { }; let ButtonTmpComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const [width, setWidth] = useState(120); const [height, setHeight] = useState(0); @@ -288,43 +281,10 @@ let ButtonTmpComp = (function () { ); }) - .setPropertyViewFn((children) => ( - <> -
- {children.prefixIcon.propertyView({ - label: trans("button.icon"), - })} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || - useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {loadingPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || - useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.autoHeight.getPropertyView()} - {children.iconSize.propertyView({ - label: trans("button.iconSize"), - })} -
-
- {children.style.getPropertyView()} - {children.aspectRatio.propertyView({ - label: trans("style.aspectRatio"), - })} -
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); ButtonTmpComp = class extends ButtonTmpComp { diff --git a/client/packages/lowcoder/src/comps/comps/meetingComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/meetingComp/propertyView.tsx new file mode 100644 index 000000000..155d35f07 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/meetingComp/propertyView.tsx @@ -0,0 +1,48 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; +console.log("meeting") + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.prefixIcon.propertyView({ + label: trans("button.icon"), + })} +
+ + {(editorModeStatus === "logic" || + editorModeStatus === "both") && ( +
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {loadingPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || + editorModeStatus === "both") && ( + <> +
+ {children.autoHeight.getPropertyView()} + {children.iconSize.propertyView({ + label: trans("button.iconSize"), + })} +
+
+ {children.style.getPropertyView()} + {children.aspectRatio.propertyView({ + label: trans("style.aspectRatio"), + })} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.test.tsx b/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.test.tsx index 516b53c07..0bf9743ab 100644 --- a/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.test.tsx +++ b/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.test.tsx @@ -1,4 +1,4 @@ -import "comps"; +import "bootstrap/admin"; import { loadComps } from "comps/index-test"; import { ExecuteAction } from "comps/controls/actionSelector/executeCompTypes"; import { getCompContainer } from "comps/utils/useCompInstance"; diff --git a/client/packages/lowcoder/src/comps/comps/multiIconDisplay.tsx b/client/packages/lowcoder/src/comps/comps/multiIconDisplay.tsx index cccb2a1fc..bfc7c6435 100644 --- a/client/packages/lowcoder/src/comps/comps/multiIconDisplay.tsx +++ b/client/packages/lowcoder/src/comps/comps/multiIconDisplay.tsx @@ -1,88 +1,96 @@ - -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { findIconDefinition, library } from '@fortawesome/fontawesome-svg-core'; -import { fas } from '@fortawesome/free-solid-svg-icons'; -import { far } from '@fortawesome/free-regular-svg-icons'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {findIconDefinition, library} from '@fortawesome/fontawesome-svg-core'; +import {fas} from '@fortawesome/free-solid-svg-icons'; +import {far} from '@fortawesome/free-regular-svg-icons'; import * as AntdIcons from '@ant-design/icons'; +import React, {FunctionComponent, ReactNode, Suspense} from "react"; -library.add(far,fas); +library.add(far, fas); -function parseIconIdentifier(identifier: string) { - if (identifier.startsWith('/icon:antd/')) { - let name = identifier.split('/')[2]; - return { type: 'antd', name }; - } - else if (identifier.startsWith('/icon:solid/') || identifier.startsWith('/icon:regular/')) { - const [style, name] = identifier.substring(6).split('/'); - return { type: 'fontAwesome', style, name }; - } - else if (identifier.startsWith('data:image')) { - return { type: 'base64', data: identifier, name: "" }; - } - else if (identifier.startsWith('http')) { - return { type: 'url', url: identifier, name: "" }; - } - else { - return { type: 'unknown', name: "" }; - } +function parseIconIdentifier(identifier: string | object) { + if (typeof identifier === 'object') { + return {type: 'customize', data: identifier} + } else if (identifier.startsWith('/icon:antd/')) { + let name = identifier.split('/')[2]; + return {type: 'antd', name}; + } else if (identifier.startsWith('/icon:solid/') || identifier.startsWith('/icon:regular/')) { + const [style, name] = identifier.substring(6).split('/'); + return {type: 'fontAwesome', style, name}; + } else if (identifier.startsWith('data:image')) { + return {type: 'base64', data: identifier, name: ""}; + } else if (identifier.startsWith('http')) { + return {type: 'url', url: identifier, name: ""}; + } else { + return {type: 'unknown', name: ""}; + } } interface IconProps { - identifier: string; - width?: string; - height?: string; - style?: React.CSSProperties; + identifier: string; + onClick?: any; + width?: string; + height?: string; + size?: string; + margin: string; + title?: string; + className?: string; + checked?: boolean + style?: React.CSSProperties; } const convertToCamelCase = (name: string) => { - return name.replace(/(-\w)/g, (match) => match[1].toUpperCase()); + return name.replace(/(-\w)/g, (match) => match[1].toUpperCase()); } const appendStyleSuffix = (name: string) => { - if (name.endsWith('outlined')) { - return name.replace('outlined', 'Outlined'); - } else if (name.endsWith('filled')) { - return name.replace('filled', 'Filled'); - } else if (name.endsWith('twotone')) { - return name.replace('twotone', 'TwoTone'); - } - return name; + if (name.endsWith('outlined')) { + return name.replace('outlined', 'Outlined'); + } else if (name.endsWith('filled')) { + return name.replace('filled', 'Filled'); + } else if (name.endsWith('twotone')) { + return name.replace('twotone', 'TwoTone'); + } + return name; } // Multi icon Display Component -const baseMultiIconDisplay: React.FC = ({ identifier, width = '24px', height = '24px', style }) => { - - const iconData = parseIconIdentifier(identifier); +const baseMultiIconDisplay: React.FC = (props) => { + const {identifier, width, height, style, ...others} = props; - if (iconData.type === 'fontAwesome') { - const prefix = iconData.style === 'solid' ? 'fas' : 'far'; // 'fas' for solid, 'far' for regular - // Find the icon definition using prefix and iconName - const iconLookup = findIconDefinition({ prefix: prefix as any, iconName: iconData.name as any }); + const iconData = parseIconIdentifier(identifier); - if (!iconLookup) { - console.error(`Icon ${iconData.name} with prefix ${prefix} not found`); - return null; - } - return ; - } - else if (iconData.type === 'antd') { - let iconName = convertToCamelCase(iconData.name); - iconName = appendStyleSuffix(iconName); - iconName = iconName.charAt(0).toUpperCase() + iconName.slice(1); - const AntdIcon = (AntdIcons as any)[iconName]; - if (!AntdIcon) { - console.error(`ANTd Icon ${iconData.name} not found`); - return null; + if (iconData.type === 'fontAwesome') { + const prefix = iconData.style === 'solid' ? 'fas' : 'far'; // 'fas' for solid, 'far' for regular + // Find the icon definition using prefix and iconName + const iconLookup = findIconDefinition({prefix: prefix as any, iconName: iconData.name as any}); + + if (!iconLookup) { + console.error(`Icon ${iconData.name} with prefix ${prefix} not found`); + return null; + } + return ; + } else if (iconData.type === 'antd') { + let iconName = convertToCamelCase(iconData.name || ""); + iconName = appendStyleSuffix(iconName); + iconName = iconName.charAt(0).toUpperCase() + iconName.slice(1); + const AntdIcon = (AntdIcons as any)[iconName]; + if (!AntdIcon) { + console.error(`ANTd Icon ${iconData.name} not found`); + return null; + } + return ; + } else if (iconData.type === 'url' || iconData.type === 'base64') { + return icon; + } else if (iconData.type === 'customize') { + const Icon = iconData.data as React.FC; //TreeSelectCompIcon + return ; + } else { + return null; // Unknown type } - return ; - } - else if (iconData.type === 'url' || iconData.type === 'base64') { - return icon; - } - else { - return null; // Unknown type - } }; -export const MultiIconDisplay = baseMultiIconDisplay; \ No newline at end of file +export const MultiIconDisplay = baseMultiIconDisplay; +export const MultiIcon = (identifier: string | object) => (props?: any) => \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/navComp/components/DraggableItem.tsx b/client/packages/lowcoder/src/comps/comps/navComp/components/DraggableItem.tsx index 7a4c6ba1b..993936c96 100644 --- a/client/packages/lowcoder/src/comps/comps/navComp/components/DraggableItem.tsx +++ b/client/packages/lowcoder/src/comps/comps/navComp/components/DraggableItem.tsx @@ -1,7 +1,9 @@ -import { DragIcon } from "lowcoder-design"; + import React, { Ref } from "react"; import { HTMLAttributes, ReactNode } from "react"; import styled from "styled-components"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {DragIcon} from "icons"; const Wrapper = styled.div<{ $dragging: boolean; $isOver: boolean; $dropInAsSub: boolean }>` position: relative; @@ -95,7 +97,7 @@ function DraggableItem(props: IProps, ref: Ref) { return (
- +
{text}
{extra}
diff --git a/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItem.tsx b/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItem.tsx index b328c30b0..5487ba45e 100644 --- a/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItem.tsx +++ b/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItem.tsx @@ -1,11 +1,11 @@ import { ActiveTextColor, GreyTextColor } from "constants/style"; -import { EditPopover, SimplePopover } from "lowcoder-design"; -import { PointIcon } from "lowcoder-design"; +import {EditPopover, PointIcon, SimplePopover} from "lowcoder-design"; import React, { HTMLAttributes, useState } from "react"; import styled from "styled-components"; import DraggableItem from "./DraggableItem"; import { NavCompType } from "comps/comps/navComp/components/types"; import { trans } from "i18n"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export interface ICommonItemProps { path: number[]; @@ -31,7 +31,7 @@ const MenuItemContent = styled.div` width: 100%; `; -const StyledPointIcon = styled(PointIcon)` +const StyledPointIcon = styled(MultiIcon(PointIcon))` color: ${GreyTextColor}; &:hover { diff --git a/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItemList.tsx b/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItemList.tsx index 4c9d0de1e..7bafe8228 100644 --- a/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItemList.tsx +++ b/client/packages/lowcoder/src/comps/comps/navComp/components/MenuItemList.tsx @@ -1,6 +1,6 @@ import { DndContext, DragEndEvent, DragOverlay, DragStartEvent } from "@dnd-kit/core"; import LinkPlusButton from "components/LinkPlusButton"; -import { BluePlusIcon, controlItem } from "lowcoder-design"; +import {BluePlusIcon, controlItem} from "lowcoder-design"; import { trans } from "i18n"; import _ from "lodash"; import { useState } from "react"; @@ -9,6 +9,7 @@ import DraggableMenuItem from "./DroppableMenuItem"; import DroppablePlaceholder from "./DroppablePlaceHolder"; import MenuItem from "./MenuItem"; import { IDragData, IDropData, NavCompType, NavListCompType } from "./types"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const Wrapper = styled.div` .menu-title { @@ -96,7 +97,7 @@ function MenuItemList(props: IMenuItemListProps) {
{menuItemLabel}
- onAddItem([0])} icon={}> + onAddItem([0])} icon={}> {trans("newItem")}
diff --git a/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx b/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx index 75b483072..8443175ab 100644 --- a/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx @@ -1,12 +1,10 @@ import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; import { UICompBuilder, withDefault } from "comps/generators"; -import { Section, sectionNames } from "lowcoder-design"; import styled from "styled-components"; import { clickEvent, eventHandlerControl } from "comps/controls/eventHandlerControl"; import { StringControl } from "comps/controls/codeControl"; import { alignWithJustifyControl } from "comps/controls/alignControl"; import { navListComp } from "./navItemComp"; -import { menuPropertyView } from "./components/MenuItemList"; import { default as DownOutlined } from "@ant-design/icons/DownOutlined"; import { default as Dropdown } from "antd/es/dropdown"; import { default as Menu, MenuProps } from "antd/es/menu"; @@ -17,12 +15,10 @@ import { AnimationStyleType, NavigationStyle, } from "comps/controls/styleControlConstants"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +import React from "react"; +const PropertyView = React.lazy( async () => await import("./propertyView")); type IProps = { $justify: boolean; $bgColor: string; @@ -144,7 +140,7 @@ const childrenMap = { ]), }; -const NavCompBase = new UICompBuilder(childrenMap, (props) => { +let NavCompBase = new UICompBuilder(childrenMap, (props) => { const data = props.items; const items = ( <> @@ -231,53 +227,12 @@ const NavCompBase = new UICompBuilder(childrenMap, (props) => {
); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {menuPropertyView(children.items)} -
- - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {hiddenPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.horizontalAlignment.propertyView({ - label: trans("navigation.horizontalAlignment"), - radioButton: true, - })} - {hiddenPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.logoUrl.propertyView({ label: trans("navigation.logoURL"), tooltip: trans("navigation.logoURLDesc") })} - {children.logoUrl.getView() && children.logoEvent.propertyView({ inline: true })} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || - useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) - .build(); +if (viewMode() === "admin") { + NavCompBase.setPropertyViewFn((children) => ); +} +const NavCompTmp = NavCompBase.build(); -export const NavComp = withExposingConfigs(NavCompBase, [ +export const NavComp = withExposingConfigs(NavCompTmp, [ new NameConfig("logoUrl", trans("navigation.logoURLDesc")), NameConfigHidden, new NameConfig("items", trans("navigation.itemsDesc")), diff --git a/client/packages/lowcoder/src/comps/comps/navComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/navComp/propertyView.tsx new file mode 100644 index 000000000..75a34dea0 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/navComp/propertyView.tsx @@ -0,0 +1,53 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; +import {menuPropertyView} from "@lowcoder-ee/comps/comps/navComp/components/MenuItemList"; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {menuPropertyView(children.items)} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {hiddenPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( +
+ {children.horizontalAlignment.propertyView({ + label: trans("navigation.horizontalAlignment"), + radioButton: true, + })} + {hiddenPropertyView(children)} +
+ )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.logoUrl.propertyView({ label: trans("navigation.logoURL"), tooltip: trans("navigation.logoURLDesc") })} + {children.logoUrl.getView() && children.logoEvent.propertyView({ inline: true })} +
+ )} + + {(editorModeStatus === "layout" || + editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx index 4f8ad6bce..62cec837f 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx @@ -20,24 +20,17 @@ import { NameConfigRequired, withExposingConfigs, } from "comps/generators/withExposing"; -import { Section, sectionNames, ValueFromOption } from "lowcoder-design"; -import { ReactNode, useEffect, useRef, useState } from "react"; +import { ValueFromOption } from "lowcoder-design"; +import React, { useEffect, useRef, useState } from "react"; import styled, { css } from "styled-components"; import { RecordConstructorToView } from "lowcoder-core"; import { InputEventHandlerControl } from "../../controls/eventHandlerControl"; import { UICompBuilder, withDefault } from "../../generators"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; import { withMethodExposing, refMethods } from "../../generators/withMethodExposing"; import { RefControl } from "../../controls/refControl"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, InputFieldStyle, InputLikeStyle, InputLikeStyleType, LabelStyle, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; -import { - disabledPropertyView, - hiddenPropertyView, - placeholderPropertyView, - readOnlyPropertyView, - requiredPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; @@ -50,10 +43,10 @@ import { setSelectionRangeMethod, } from "comps/utils/methodUtils"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; import { migrateOldData } from "comps/generators/simpleGenerators"; import { fixOldInputCompData } from "../textInputComp/textInputConstants"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewNumberInputComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewNumberInputComp}))) const getStyle = (style: InputLikeStyleType) => { return css` @@ -382,7 +375,7 @@ const CustomInputNumber = (props: RecordConstructorToView) = }; let NumberInputTmpComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return props.label({ required: props.required, children: , @@ -394,70 +387,11 @@ let NumberInputTmpComp = (function () { ...validate(props), }); }) - .setPropertyViewFn((children) => ( - <> -
- {children.defaultValue.propertyView({ label: trans("prop.defaultValue") })} - {placeholderPropertyView(children)} - {children.formatter.propertyView({ label: trans("numberInput.formatter") })} -
- - - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <>
- {requiredPropertyView(children)} - {children.showValidationWhenEmpty.propertyView({label: trans("prop.showEmptyValidation")})} - {children.min.propertyView({ label: trans("prop.minimum") })} - {children.max.propertyView({ label: trans("prop.maximum") })} - {children.customRule.propertyView({})} -
-
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- - )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - children.label.getPropertyView() - )} - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {children.step.propertyView({ label: trans("numberInput.step") })} - {children.precision.propertyView({ label: trans("numberInput.precision") })} - {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.prefixText.propertyView({ label: trans("button.prefixText") })} - {children.allowNull.propertyView({ label: trans("numberInput.allowNull") })} - {children.thousandsSeparator.propertyView({ - label: trans("numberInput.thousandsSeparator"), - })} - {children.controls.propertyView({ label: trans("numberInput.controls") })} - {readOnlyPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) - .build(); + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .build(); })(); NumberInputTmpComp = migrateOldData(NumberInputTmpComp, fixOldInputCompData); diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/propertyView.tsx new file mode 100644 index 000000000..20db7dec4 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/propertyView.tsx @@ -0,0 +1,122 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { + disabledPropertyView, + EditorContext, + hiddenPropertyView, + loadingPropertyView, + placeholderPropertyView, readOnlyPropertyView, requiredPropertyView +} from "lowcoder-sdk"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import {SliderPropertyView} from "@lowcoder-ee/comps/comps/numberInputComp/sliderCompConstants"; + +console.log("proper") + +const PropertyViewNumberInputComp = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.defaultValue.propertyView({ label: trans("prop.defaultValue") })} + {placeholderPropertyView(children)} + {children.formatter.propertyView({ label: trans("numberInput.formatter") })} +
+ + + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <>
+ {requiredPropertyView(children)} + {children.showValidationWhenEmpty.propertyView({label: trans("prop.showEmptyValidation")})} + {children.min.propertyView({ label: trans("prop.minimum") })} + {children.max.propertyView({ label: trans("prop.maximum") })} + {children.customRule.propertyView({})} +
+
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + children.label.getPropertyView() + )} + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {children.step.propertyView({ label: trans("numberInput.step") })} + {children.precision.propertyView({ label: trans("numberInput.precision") })} + {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.prefixText.propertyView({ label: trans("button.prefixText") })} + {children.allowNull.propertyView({ label: trans("numberInput.allowNull") })} + {children.thousandsSeparator.propertyView({ + label: trans("numberInput.thousandsSeparator"), + })} + {children.controls.propertyView({ label: trans("numberInput.controls") })} + {readOnlyPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +const PropertyViewRangeSliderComp = ((children: any) => { + return ( + <> +
+ {children.start.propertyView({ label: trans("rangeSlider.start") })} + {children.end.propertyView({ label: trans("rangeSlider.end") })} + {children.max.propertyView({ label: trans("prop.maximum") })} + {children.min.propertyView({ label: trans("prop.minimum") })} + {children.step.propertyView({ + label: trans("rangeSlider.step"), + tooltip: trans("rangeSlider.stepTooltip"), + })} + {children.vertical.propertyView({ label: trans("slider.vertical") })} +
+ + + + ); +}); + +const PropertyViewSliderComp = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ label: trans("prop.defaultValue") })} + {children.max.propertyView({ label: trans("prop.maximum") })} + {children.min.propertyView({ label: trans("prop.minimum") })} + {children.step.propertyView({ + label: trans("slider.step"), + tooltip: trans("slider.stepTooltip"), + })} + {children.vertical.propertyView({ label: trans("slider.vertical") })} +
+ + + + ); +}); + +export {PropertyViewNumberInputComp, PropertyViewRangeSliderComp, PropertyViewSliderComp} \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx index 0c17a5a7f..a7a8dcf94 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx @@ -1,11 +1,13 @@ import { trans } from "i18n"; -import { Section, sectionNames } from "lowcoder-design"; import { numberExposingStateControl } from "../../controls/codeStateControl"; import { UICompBuilder } from "../../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { SliderChildren, SliderPropertyView, SliderStyled, SliderWrapper } from "./sliderCompConstants"; +import { SliderChildren, SliderStyled, SliderWrapper } from "./sliderCompConstants"; import { hasIcon } from "comps/utils"; import { BoolControl } from "comps/controls/boolControl"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewRangeSliderComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewRangeSliderComp}))) const RangeSliderBasicComp = (function () { const childrenMap = { @@ -14,7 +16,7 @@ const RangeSliderBasicComp = (function () { end: numberExposingStateControl("end", 60), vertical: BoolControl, }; - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return props.label({ style: props.style, labelStyle: props.labelStyle, @@ -47,26 +49,11 @@ const RangeSliderBasicComp = (function () { ), }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.start.propertyView({ label: trans("rangeSlider.start") })} - {children.end.propertyView({ label: trans("rangeSlider.end") })} - {children.max.propertyView({ label: trans("prop.maximum") })} - {children.min.propertyView({ label: trans("prop.minimum") })} - {children.step.propertyView({ - label: trans("rangeSlider.step"), - tooltip: trans("rangeSlider.stepTooltip"), - })} - {children.vertical.propertyView({ label: trans("slider.vertical") })} -
- - - - ); - }) - .build(); + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .build(); })(); export const RangeSliderComp = withExposingConfigs(RangeSliderBasicComp, [ diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx index cabda6634..6231ae128 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx @@ -1,13 +1,14 @@ import { trans } from "i18n"; -import { Section, sectionNames } from "lowcoder-design"; import { numberExposingStateControl } from "../../controls/codeStateControl"; import { UICompBuilder } from "../../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; -import { SliderChildren, SliderPropertyView, SliderStyled, SliderWrapper } from "./sliderCompConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; +import { SliderChildren, SliderStyled, SliderWrapper } from "./sliderCompConstants"; import { hasIcon } from "comps/utils"; import { BoolControl } from "comps/controls/boolControl"; - +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyViewSliderComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.PropertyViewSliderComp}))) const SliderBasicComp = (function () { /** * FIXME: the range of setValue cannot exceed max @@ -18,7 +19,7 @@ const SliderBasicComp = (function () { vertical: BoolControl, ...formDataChildren, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return props.label({ style: props.style, labelStyle: props.labelStyle, @@ -49,24 +50,10 @@ const SliderBasicComp = (function () { ), }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ label: trans("prop.defaultValue") })} - {children.max.propertyView({ label: trans("prop.maximum") })} - {children.min.propertyView({ label: trans("prop.minimum") })} - {children.step.propertyView({ - label: trans("slider.step"), - tooltip: trans("slider.stepTooltip"), - })} - {children.vertical.propertyView({ label: trans("slider.vertical") })} -
- - - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayoutCompBuilder.tsx b/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayoutCompBuilder.tsx index 35a4b83ff..858d30a17 100644 --- a/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayoutCompBuilder.tsx +++ b/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayoutCompBuilder.tsx @@ -49,9 +49,6 @@ export class ContainerCompBuilder< return this; } build() { - if (!this.propertyViewFn) { - throw new Error("no propertyViewFn provided"); - } if (this.childrenMap.hasOwnProperty("container")) { throw new Error("already has container"); } diff --git a/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx b/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx index eef0ba0a8..0c2332c98 100644 --- a/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx @@ -13,7 +13,7 @@ import { CodeTextControl } from "comps/controls/codeTextControl"; import SimpleStringControl from "comps/controls/simpleStringControl"; import { MultiCompBuilder, withPropertyViewFn } from "comps/generators"; import { list } from "comps/generators/list"; -import { BaseSection, CustomModal, PlusIcon, ScrollBar } from "lowcoder-design"; +import {BaseSection, CustomModal, PlusIcon, ScrollBar} from "lowcoder-design"; import React, { useContext, useEffect, useState } from "react"; import styled from "styled-components"; import { ExternalEditorContext } from "util/context/ExternalEditorContext"; @@ -24,6 +24,7 @@ import log from "loglevel"; import { JSLibraryModal } from "components/JSLibraryModal"; import { JSLibraryTree } from "components/JSLibraryTree"; import { fetchJSLibrary } from "util/jsLibraryUtils"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export interface ExternalPreload { css?: string; @@ -359,7 +360,7 @@ export class PreloadComp extends PreloadCompBase { } + trigger={} onCheck={(url) => !libs.getAllLibs().includes(url)} onLoad={(url) => libs.loadScript(url)} onSuccess={(url) => libs.dispatch(libs.pushAction(url))} diff --git a/client/packages/lowcoder/src/comps/comps/progressCircleComp.tsx b/client/packages/lowcoder/src/comps/comps/progressCircleComp.tsx index b2070c7c2..63626ca99 100644 --- a/client/packages/lowcoder/src/comps/comps/progressCircleComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/progressCircleComp.tsx @@ -2,16 +2,13 @@ import { default as Progress } from "antd/es/progress"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, CircleProgressStyle, CircleProgressType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import styled, { css } from "styled-components"; -import { Section, sectionNames } from "lowcoder-design"; import { numberExposingStateControl } from "../controls/codeStateControl"; import { UICompBuilder } from "../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators/withExposing"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +import React from "react"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/progressCircleComp")); // TODO: after Update of ANTd, introduce Size attribute to ProgressCircle const getStyle = (style: CircleProgressType) => { @@ -72,7 +69,7 @@ let ProgressCircleTmpComp = (function () { style: styleControl(CircleProgressStyle, 'style'), animationStyle: styleControl(AnimationStyle, 'animationStyle'), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return ( ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ - label: trans("progress.value"), - tooltip: trans("progress.valueTooltip"), - })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/progressComp.tsx b/client/packages/lowcoder/src/comps/comps/progressComp.tsx index 66f5c2123..14e519bd8 100644 --- a/client/packages/lowcoder/src/comps/comps/progressComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/progressComp.tsx @@ -1,5 +1,4 @@ import { default as Progress } from "antd/es/progress"; -import { Section, sectionNames } from "lowcoder-design"; import { numberExposingStateControl } from "../controls/codeStateControl"; import { BoolControl } from "../controls/boolControl"; import { UICompBuilder } from "../generators"; @@ -7,11 +6,10 @@ import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, ProgressStyle, ProgressStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import styled, { css } from "styled-components"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/progressComp")); const getStyle = (style: ProgressStyleType) => { return css` @@ -56,7 +54,7 @@ const ProgressBasicComp = (function () { style: styleControl(ProgressStyle, 'style'), animationStyle: styleControl(AnimationStyle, 'animationStyle'), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return ( ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ - label: trans("progress.value"), - tooltip: trans("progress.valueTooltip"), - })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(children)} - {children.showInfo.propertyView({ - label: trans("progress.showInfo"), - })} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/avatar.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/avatar.tsx new file mode 100644 index 000000000..c689f38d9 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/avatar.tsx @@ -0,0 +1,81 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React from "react"; +import { hiddenPropertyView } from "lowcoder-sdk"; +import {BadgeBasicSection} from "@lowcoder-ee/comps/comps/badgeComp/badgeConstants"; +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.src.propertyView({ + label: trans("avatarComp.src"), + placeholder: "http://xxxx/xx.jpg", + tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.title.propertyView({ + label: trans("avatarComp.title"), + tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.icon.propertyView({ + label: trans("avatarComp.icon"), + IconType: "All", + tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.shape.propertyView({ + label: trans("avatarComp.shape"), + radioButton: true, + })} + { + children.iconSize.propertyView({ + label: trans("avatarComp.iconSize"), + })} + { + children.enableDropdownMenu.propertyView({ + label: trans("avatarComp.enableDropDown") + })} + {children.enableDropdownMenu.getView() && children.options.propertyView({})} +
+
+ { + children.avatarLabel.propertyView({ + label: trans("avatarComp.label"), + })} + { + children.avatarCatption.propertyView({ + label: trans("avatarComp.caption"), + })} + { + children.labelPosition.propertyView({ + label: trans("avatarComp.labelPosition"), + radioButton: true, + })} + { + children.alignmentPosition.propertyView({ + label: trans("avatarComp.alignmentPosition"), + radioButton: true, + })} +
+ {} +
+ {children.onEvent.getPropertyView()} +
+
+ {hiddenPropertyView(children)} +
+
+ {children.style.getPropertyView()} +
+
+ {children.avatarStyle.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.captionStyle.getPropertyView()} +
+ + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/avatarGroup.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/avatarGroup.tsx new file mode 100644 index 000000000..5b993058b --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/avatarGroup.tsx @@ -0,0 +1,68 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; +const PropertyViewAvatarGroup1 = ((children: any) => { + return ( + <> + {children.src.propertyView({ label: trans("avatarComp.src"), placeholder: "", tooltip: trans("avatarComp.avatarCompTooltip") })} + {children.label.propertyView({ + label: trans("avatarComp.title"), + tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.AvatarIcon.propertyView({ + label: trans("avatarComp.icon"), + IconType: "All", + tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.color.propertyView({ label: trans("style.fill") })} + {children.backgroundColor.propertyView({ label: trans("style.background") })} + {children.Tooltip.propertyView({ label: trans("badge.tooltip") })} + + ); +}); + +const PropertyViewAvatarGroup2 = ((children: any) => { + return ( + <> + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.avatars.propertyView({})} + {children.maxCount.propertyView({ + label: trans("avatarGroup.maxCount") + })} + {children.avatarSize.propertyView({ + label: trans("avatarGroup.avatarSize") + })} + {children.autoColor.propertyView({ + label: trans("avatarGroup.autoColor") + })} + {children.alignment.propertyView({ + label: trans("avatarGroup.alignment"), + radioButton: true, + })} +
+
+ {hiddenPropertyView(children)} + {children.onEvent.propertyView()} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.avatar.getPropertyView()} +
+
+ {children.style.getPropertyView()} +
+ + )} + + ); +}); + +export { PropertyViewAvatarGroup1, PropertyViewAvatarGroup2 }; + diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/carouselComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/carouselComp.tsx new file mode 100644 index 000000000..0c1d52de2 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/carouselComp.tsx @@ -0,0 +1,42 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.data.propertyView({ label: trans("data") })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {children.autoPlay.propertyView({ label: trans("carousel.autoPlay") })} +
+ )} + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <>
+ {children.showDots.propertyView({ label: trans("carousel.showDots") })} + {children.dotPosition.propertyView({ + label: trans("carousel.dotPosition"), + radioButton: true, + })} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/dividerComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/dividerComp.tsx new file mode 100644 index 000000000..3a1dedb86 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/dividerComp.tsx @@ -0,0 +1,43 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; +import _ from "lodash"; +const PropertyView = ((children: any) => { + return ( + <> + {!children?.type?.getView() && +
+ {children.title.propertyView({ label: trans("divider.title") })} +
} + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {!_.isEmpty(children.title.getView()) && + children.align.propertyView({ + label: trans("divider.align"), + radioButton: true, + })} + {children.autoHeight.getPropertyView()} +
+
+ {children.type.propertyView({ label: trans("divider.type")})} + {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/fileViewerComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/fileViewerComp.tsx new file mode 100644 index 000000000..8fdecc4c6 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/fileViewerComp.tsx @@ -0,0 +1,46 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.src.propertyView({ + label: trans("fileViewer.src"), + tooltip: ( + {trans("fileViewer.srcTooltip")} + ), + })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {hiddenPropertyView(children)} +
+ )} +
+ {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && ( + children.showVerticalScrollbar.propertyView({ + label: trans("prop.showVerticalScrollbar"), + }) + )} +
+ + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/iconComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/iconComp.tsx new file mode 100644 index 000000000..659d0d2dc --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/iconComp.tsx @@ -0,0 +1,46 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.icon.propertyView({ + label: trans("iconComp.icon"), + IconType: "All", + })} + +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <>
+ {children.autoHeight.propertyView({ + label: trans("iconComp.autoSize"), + })} + {!children.autoHeight.getView() && + children.iconSize.propertyView({ + label: trans("iconComp.iconSize"), + })} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/iframeComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/iframeComp.tsx new file mode 100644 index 000000000..304431d77 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/iframeComp.tsx @@ -0,0 +1,38 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.url.propertyView({ label: "Source URL", placeholder: "https://example.com", tooltip: trans("iframe.URLDesc") })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {hiddenPropertyView(children)} + {children.allowDownload.propertyView({ label: trans("iframe.allowDownload") })} + {children.allowSubmitForm.propertyView({ label: trans("iframe.allowSubmitForm") })} + {children.allowMicrophone.propertyView({ label: trans("iframe.allowMicrophone") })} + {children.allowCamera.propertyView({ label: trans("iframe.allowCamera") })} + {children.allowPopup.propertyView({ label: trans("iframe.allowPopup") })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/imageComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/imageComp.tsx new file mode 100644 index 000000000..b1709b1ea --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/imageComp.tsx @@ -0,0 +1,43 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.src.propertyView({ + label: trans("image.src"), + })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {children.supportPreview.propertyView({ + label: trans("image.supportPreview"), + tooltip: trans("image.supportPreviewTip"), + })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.autoHeight.getPropertyView()} +
+
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/progressCircleComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/progressCircleComp.tsx new file mode 100644 index 000000000..5ef676775 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/progressCircleComp.tsx @@ -0,0 +1,36 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ + label: trans("progress.value"), + tooltip: trans("progress.valueTooltip"), + })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/progressComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/progressComp.tsx new file mode 100644 index 000000000..485dfbfaa --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/progressComp.tsx @@ -0,0 +1,39 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ + label: trans("progress.value"), + tooltip: trans("progress.valueTooltip"), + })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {hiddenPropertyView(children)} + {children.showInfo.propertyView({ + label: trans("progress.showInfo"), + })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/qtCodeComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/qtCodeComp.tsx new file mode 100644 index 000000000..fa7a14b3d --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/qtCodeComp.tsx @@ -0,0 +1,49 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ + label: trans("QRCode.value"), + tooltip: trans("QRCode.valueTooltip"), + placeholder: "https://example.com", + })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <>
+ {hiddenPropertyView(children)} +
+
+ {children.level.propertyView({ + label: trans("QRCode.level"), + tooltip: trans("QRCode.levelTooltip"), + })} + {children.image.propertyView({ + label: trans("QRCode.image"), + placeholder: "http://logo.jpg", + })} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} + {children.includeMargin.propertyView({ label: trans("QRCode.includeMargin") })} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/ratingComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/ratingComp.tsx new file mode 100644 index 000000000..a1c281323 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/ratingComp.tsx @@ -0,0 +1,57 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import {useContext} from "react"; +import {disabledPropertyView, EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.defaultValue.propertyView({ label: trans("prop.defaultValue") })} + {children.max.propertyView({ + label: trans("rating.max"), + })} +
+ + + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <>
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+
+ {children.allowHalf.propertyView({ + label: trans("rating.allowHalf"), + })} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/richTextEditorComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/richTextEditorComp.tsx new file mode 100644 index 000000000..7d689f384 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/richTextEditorComp.tsx @@ -0,0 +1,45 @@ + +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {EditorContext, hiddenPropertyView, placeholderPropertyView, readOnlyPropertyView} from "lowcoder-sdk"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import React, {useContext} from "react"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ label: trans("richTextEditor.defaultValue") })} + {placeholderPropertyView(children)} +
+ + + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {readOnlyPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && children.contentScrollBar.propertyView({ + label: trans("prop.textAreaScrollBar"), + })} + {children.toolbar.propertyView({ label: trans("richTextEditor.toolbar"), tooltip: trans("richTextEditor.toolbarDescription") })} + {children.hideToolbar.propertyView({ label: trans("richTextEditor.hideToolbar") })} +
+
+ {children.style.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/signatureComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/signatureComp.tsx new file mode 100644 index 000000000..83d8bb4c1 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/signatureComp.tsx @@ -0,0 +1,46 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import React, {useContext} from "react"; +import {EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.tips.propertyView({ label: trans("signature.tips") })} +
+ + + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} + {children.showUndo.propertyView({ label: trans("signature.showUndo") })} + {children.showClear.propertyView({ label: trans("signature.showClear") })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/switchComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/switchComp.tsx new file mode 100644 index 000000000..369d3ff04 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/switchComp.tsx @@ -0,0 +1,48 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; +import {useContext} from "react"; +import {disabledPropertyView, EditorContext, hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ label: trans("switchComp.defaultValue") })} +
+ + + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.inputFieldStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/temporaryStateComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/temporaryStateComp.tsx new file mode 100644 index 000000000..9e6ace50d --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/temporaryStateComp.tsx @@ -0,0 +1,40 @@ +import {BottomResTypeEnum} from "@lowcoder-ee/types/bottomRes"; +import {trans} from "@lowcoder-ee/i18n"; +import {DocLink, QueryTutorials, TacoMarkDown} from "lowcoder-sdk"; +import SupaDemoDisplay from "@lowcoder-ee/comps/utils/supademoDisplay"; +import {BottomTabs} from "@lowcoder-ee/pages/editor/bottom/BottomTabs"; + +const PropertyView = ((children: any) => { + return ( +
{trans("temporaryState.documentationText")}
+ {trans("temporaryState.docLink")} +

+ + + + ), + }), + }, + ]} + tabTitle={children.name.getView()} + status="" + /> + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/textComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/textComp.tsx new file mode 100644 index 000000000..e0ffdf318 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/textComp.tsx @@ -0,0 +1,114 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import React, {useContext} from "react"; +import { + AlignCenter, + AlignLeft, AlignRight, + alignWithJustifyControl, AnimationStyle, + AutoHeightControl, BoolControl, clickEvent, dropdownControl, + EditorContext, eventHandlerControl, + hiddenPropertyView, + NewChildren, + RecordConstructorToComp, + stringExposingStateControl, styleControl, TextStyle, withDefault +} from "lowcoder-sdk"; +import {MarginControl} from "@lowcoder-ee/comps/controls/marginControl"; +import {PaddingControl} from "@lowcoder-ee/comps/controls/paddingControl"; +import styled from "styled-components"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; + +const typeOptions = [ + { + label: "Markdown", + value: "markdown", + }, + { + label: trans("text"), + value: "text", + }, +] as const; +const AlignTop = styled(MultiIcon(AlignLeft))` + transform: rotate(90deg); +`; +const AlignBottom = styled(MultiIcon(AlignRight))` + transform: rotate(90deg); +`; +const AlignVerticalCenter = styled(MultiIcon(AlignCenter))` + transform: rotate(90deg); +`; +const VerticalAlignmentOptions = [ + { label: , value: "flex-start" }, + { label: , value: "center" }, + { label: , value: "flex-end" }, +] as const; +const EventOptions = [clickEvent] as const; +const childrenMap = { + text: stringExposingStateControl( + "text", + trans("textShow.text", { name: "{{currentUser.name}}" }) + ), + onEvent: eventHandlerControl(EventOptions), + autoHeight: AutoHeightControl, + type: dropdownControl(typeOptions, "markdown"), + horizontalAlignment: alignWithJustifyControl(), + contentScrollBar: withDefault(BoolControl, true), + verticalAlignment: dropdownControl(VerticalAlignmentOptions, "center"), + style: styleControl(TextStyle, 'style'), + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + margin: MarginControl, + padding: PaddingControl, +}; +type ChildrenType = NewChildren>; + +const TextPropertyView = React.memo((props: { + children: ChildrenType +}) => { + return ( + <> +
+ {props.children.type.propertyView({ + label: trans("value"), + tooltip: trans("textShow.valueTooltip"), + radioButton: true, + })} + {props.children.text.propertyView({})} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {hiddenPropertyView(props.children)} + {props.children.onEvent.getPropertyView()} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {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"), + radioButton: true, + })} +
+
+ {props.children.style.getPropertyView()} +
+
+ {props.children.animationStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default TextPropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/timerComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/timerComp.tsx new file mode 100644 index 000000000..de8371120 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/timerComp.tsx @@ -0,0 +1,48 @@ +import {useContext} from "react"; +import {EditorContext, hiddenPropertyView, Section, sectionNames} from "lowcoder-sdk"; +import {trans} from "@lowcoder-ee/i18n"; + +const PropertyView = ((children: any) => { + return ( + <> + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.timerType.propertyView({ + label: trans('timer.timerType') + })} + {children.defaultValue.propertyView({ + label: trans('timer.defaultValue') + })} + {children.hideButton.propertyView({ + label: trans('timer.hideButton') + })} +
+
+ {hiddenPropertyView(children)} + {children.onEvent.propertyView()} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+
+ {children.startButtonStyle.getPropertyView()} +
+
+ {children.resetButtonStyle.getPropertyView()} +
+ + )} + + ); +}) + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/transferComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/transferComp.tsx new file mode 100644 index 000000000..f5a2f81b0 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/transferComp.tsx @@ -0,0 +1,43 @@ +import {Section, sectionNames} from "components/Section"; +import {trans} from "@lowcoder-ee/i18n"; +import {hiddenPropertyView} from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.items.propertyView({ + label: trans("transfer.items"), + })} + {children.targetKeys.propertyView({ + label: trans("transfer.targetKeys"), + })} + {children.sourceTitle.propertyView({ + label: trans("transfer.sourceTitle"), + })} + {children.targetTitle.propertyView({ + label: trans("transfer.targetTitle"), + })} + {children.showSearch.propertyView({ + label: trans("transfer.allowSearch"), + })} + {children.oneWay.propertyView({ + label: trans("transfer.oneWay"), + })} + {children.pagination.propertyView({ + label: trans("transfer.pagination"), + })} + {children.pagination.getView() && children.pageSize.propertyView({ + label: trans("transfer.pageSize"), + })} +
+
+ {children.onEvent.propertyView()} + {hiddenPropertyView(children)} +
+
{children.style.getPropertyView()}
+ + ); +}) + +export default PropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/propertyView/transformerListComp.tsx b/client/packages/lowcoder/src/comps/comps/propertyView/transformerListComp.tsx new file mode 100644 index 000000000..c6530e9ae --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/propertyView/transformerListComp.tsx @@ -0,0 +1,54 @@ +import {BottomTabs} from "@lowcoder-ee/pages/editor/bottom/BottomTabs"; +import {trans} from "@lowcoder-ee/i18n"; +import {BottomResTypeEnum} from "@lowcoder-ee/types/bottomRes"; +import {DocLink, EditorContext, QueryTutorials, TacoMarkDown} from "lowcoder-sdk"; +import SupaDemoDisplay from "@lowcoder-ee/comps/utils/supademoDisplay"; +const PropertyView = ((children: any) => { + return ( + + {(editorState) => { + return ( + + {children.script.propertyView({ + placement: "bottom", + styleName: "medium", + width: "100%", + })} + {QueryTutorials.transformer && ( + <>
{trans("transformer.documentationText")} + + {trans("transformer.docLink")} +

+ + + + + )} +
+ ), + }, + ]} + tabTitle={children.name.getView()} + onRunBtnClick={() => { + editorState.setShowResultCompName(children.name.getView()); + }} + /> + ); + }} + + ); +}) + +export default PropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/qrCodeComp.tsx b/client/packages/lowcoder/src/comps/comps/qrCodeComp.tsx index 1836bfe9e..cbe0a6937 100644 --- a/client/packages/lowcoder/src/comps/comps/qrCodeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/qrCodeComp.tsx @@ -6,15 +6,13 @@ import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, QRCodeStyle, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; import { QRCodeSVG } from "qrcode.react"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { StringControl } from "comps/controls/codeControl"; - -import { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; import { withDefault } from "../generators"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/qtCodeComp")); // TODO: add styling for image (size) // TODO: add styling for bouding box (individual backround) @@ -78,48 +76,13 @@ const QRCodeView = (props: RecordConstructorToView) => { }; let QRCodeBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return( )}) - .setPropertyViewFn((children) => ( - <> -
- {children.value.propertyView({ - label: trans("QRCode.value"), - tooltip: trans("QRCode.valueTooltip"), - placeholder: "https://example.com", - })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <>
- {hiddenPropertyView(children)} -
-
- {children.level.propertyView({ - label: trans("QRCode.level"), - tooltip: trans("QRCode.levelTooltip"), - })} - {children.image.propertyView({ - label: trans("QRCode.image"), - placeholder: "http://logo.jpg", - })} -
- - )} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} - {children.includeMargin.propertyView({ label: trans("QRCode.includeMargin") })} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/queryLibrary/inputListComp.tsx b/client/packages/lowcoder/src/comps/comps/queryLibrary/inputListComp.tsx index 5d0d0233b..58a0f1d79 100644 --- a/client/packages/lowcoder/src/comps/comps/queryLibrary/inputListComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/queryLibrary/inputListComp.tsx @@ -6,8 +6,7 @@ import { trans } from "i18n"; import { ControlPropertyViewWrapper, EditPopover, - Input, - PointIcon, + Input, PointIcon, SimplePopover, TacoButton, } from "lowcoder-design"; @@ -16,6 +15,7 @@ import styled from "styled-components"; import { EmptyContent } from "../../../components/EmptyContent"; import { QueryLibraryContext } from "../../../util/context/QueryLibraryContext"; import { list } from "../../generators/list"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const childrenMap = { name: CompNameControl, @@ -89,7 +89,7 @@ const Wrapper = styled.div` padding: 0 16px; `; -const PopoverIcon = styled(PointIcon)` +const PopoverIcon = styled(MultiIcon(PointIcon))` cursor: pointer; flex-shrink: 0; position: absolute; diff --git a/client/packages/lowcoder/src/comps/comps/queryLibrary/queryLibraryComp.tsx b/client/packages/lowcoder/src/comps/comps/queryLibrary/queryLibraryComp.tsx index 7af0db937..289bc7fe4 100644 --- a/client/packages/lowcoder/src/comps/comps/queryLibrary/queryLibraryComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/queryLibrary/queryLibraryComp.tsx @@ -8,14 +8,12 @@ import { CompExposingContext } from "comps/generators/withContext"; import { QueryContext } from "util/context/QueryContext"; import { QueryLibraryEditorView } from "pages/queryLibrary/queryLibraryEditorView"; import { - BaseSection, - CustomModal, - EditPopover, - EditText, - PointIcon, - ScrollBar, - TacoButton, - UnfoldWhiteIcon, + BaseSection, + CustomModal, + EditPopover, + EditText, PointIcon, + ScrollBar, + TacoButton, UnfoldWhiteIcon, } from "lowcoder-design"; import ReactHotkeys from "../../../util/hotkeys"; import { executeQueryAction, renameAction } from "lowcoder-core"; @@ -28,6 +26,7 @@ import { QueryLibraryResultPanel } from "components/resultPanel/QueryLibraryResu import { DatasourceStructure } from "api/datasourceApi"; import { MetaDataContext } from "base/codeEditor/codeEditorTypes"; import { useMetaData } from "util/hooks"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const children = { query: withPropertyViewFn(QueryComp, (comp) => ( @@ -201,7 +200,7 @@ const PropertyView = (props: { ); }; -const PopoverIcon = styled(PointIcon)` +const PopoverIcon = styled(MultiIcon(PointIcon))` flex-shrink: 0; g { @@ -227,7 +226,7 @@ const PopoverButton = styled.div` } } `; -const RunIcon = styled(UnfoldWhiteIcon)` +const RunIcon = styled(MultiIcon(UnfoldWhiteIcon))` transform: rotate(-90deg); display: inline-block; padding-right: 2px; diff --git a/client/packages/lowcoder/src/comps/comps/ratingComp.tsx b/client/packages/lowcoder/src/comps/comps/ratingComp.tsx index 6731200d4..4d1ca8eec 100644 --- a/client/packages/lowcoder/src/comps/comps/ratingComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/ratingComp.tsx @@ -1,6 +1,5 @@ import { default as Rate } from "antd/es/rate"; import styled, { css } from "styled-components"; -import { Section, sectionNames } from "lowcoder-design"; import { NumberControl, BoolCodeControl } from "../controls/codeControl"; import { BoolControl } from "../controls/boolControl"; import { changeEvent, eventHandlerControl } from "../controls/eventHandlerControl"; @@ -8,15 +7,14 @@ import { LabelControl } from "../controls/labelControl"; import { numberExposingStateControl } from "../controls/codeStateControl"; import { UICompBuilder, withDefault } from "../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; +import { formDataChildren } from "./formComp/formDataConstants"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, InputFieldStyle, LabelStyle, RatingStyle, RatingStyleType } from "comps/controls/styleControlConstants"; import { migrateOldData } from "comps/generators/simpleGenerators"; -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; - -import { useContext, useEffect, useRef } from "react"; -import { EditorContext } from "comps/editorState"; +import React, { useEffect, useRef } from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/ratingComp")); const EventOptions = [changeEvent] as const; @@ -54,7 +52,7 @@ const RatingBasicComp = (function () { inputFieldStyle: migrateOldData(styleControl(RatingStyle, 'inputFieldStyle'), fixOldData), ...formDataChildren, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const defaultValue = { ...props.defaultValue }.value; const value = { ...props.value }.value; const changeRef = useRef(false); @@ -90,55 +88,10 @@ const RatingBasicComp = (function () { ), }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.defaultValue.propertyView({ label: trans("prop.defaultValue") })} - {children.max.propertyView({ - label: trans("rating.max"), - })} -
- - - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <>
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
-
- {children.allowHalf.propertyView({ - label: trans("rating.allowHalf"), - })} -
- - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/responsiveLayout/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/responsiveLayout/propertyView.tsx new file mode 100644 index 000000000..f7ced85d2 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/responsiveLayout/propertyView.tsx @@ -0,0 +1,85 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import {controlItem, disabledPropertyView, EditorContext, hiddenPropertyView } from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.columns.propertyView({ + title: trans("responsiveLayout.column"), + newOptionLabel: "Column", + })} +
+ + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( +
+ {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(editorModeStatus) && ( + <> +
+ {children.autoHeight.getPropertyView()} + {(!children.autoHeight.getView()) && children.mainScrollbar.propertyView({ + label: trans("prop.mainScrollbar") + })} + {children.horizontalGridCells.propertyView({ + label: trans('prop.horizontalGridCells'), + })} +
+
+ {children.rowBreak.propertyView({ + label: trans("responsiveLayout.rowBreak") + })} + {controlItem({}, ( +
+ {trans("responsiveLayout.columnsPerRow")} +
+ ))} + {children.columnPerRowLG.propertyView({ + label: trans("responsiveLayout.desktop") + })} + {children.columnPerRowMD.propertyView({ + label: trans("responsiveLayout.tablet") + })} + {children.columnPerRowSM.propertyView({ + label: trans("responsiveLayout.mobile") + })} +
+
+ {children.matchColumnsHeight.propertyView({ + label: trans("responsiveLayout.matchColumnsHeight") + })} + {controlItem({}, ( +
+ {trans("responsiveLayout.columnsSpacing")} +
+ ))} + {children.horizontalSpacing.propertyView({ + label: trans("responsiveLayout.horizontal") + })} + {children.verticalSpacing.propertyView({ + label: trans("responsiveLayout.vertical") + })} +
+
+ {children.style.getPropertyView()} +
+
+ {children.columnStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx b/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx index c37af57cd..044831a94 100644 --- a/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx @@ -18,10 +18,9 @@ import { sameTypeMap, UICompBuilder, withDefault } from "comps/generators"; import { addMapChildAction } from "comps/generators/sameTypeMap"; import { NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; import { NameGenerator } from "comps/utils"; -import { Section, controlItem, sectionNames } from "lowcoder-design"; import { HintPlaceHolder } from "lowcoder-design"; import _ from "lodash"; -import React, { useEffect } from "react"; +import React from "react"; import styled from "styled-components"; import { IContainer } from "../containerBase/iContainer"; import { SimpleContainerComp } from "../containerBase/simpleContainerComp"; @@ -36,14 +35,11 @@ import { trans } from "i18n"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import { BoolControl } from "comps/controls/boolControl"; import { BoolCodeControl, NumberControl } from "comps/controls/codeControl"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; - -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; import { DisabledContext } from "comps/generators/uiCompBuilder"; import SliderControl from "@lowcoder-ee/comps/controls/sliderControl"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const RowWrapper = styled(Row)<{ $style: ResponsiveLayoutRowStyleType; @@ -202,87 +198,15 @@ export const ResponsiveLayoutBaseComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.columns.propertyView({ - title: trans("responsiveLayout.column"), - newOptionLabel: "Column", - })} -
+})(); - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( -
- {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} +if (viewMode() === "admin") { + ResponsiveLayoutBaseComp.setPropertyViewFn((children) => ); +} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.autoHeight.getPropertyView()} - {(!children.autoHeight.getView()) && children.mainScrollbar.propertyView({ - label: trans("prop.mainScrollbar") - })} - {children.horizontalGridCells.propertyView({ - label: trans('prop.horizontalGridCells'), - })} -
-
- {children.rowBreak.propertyView({ - label: trans("responsiveLayout.rowBreak") - })} - {controlItem({}, ( -
- {trans("responsiveLayout.columnsPerRow")} -
- ))} - {children.columnPerRowLG.propertyView({ - label: trans("responsiveLayout.desktop") - })} - {children.columnPerRowMD.propertyView({ - label: trans("responsiveLayout.tablet") - })} - {children.columnPerRowSM.propertyView({ - label: trans("responsiveLayout.mobile") - })} -
-
- {children.matchColumnsHeight.propertyView({ - label: trans("responsiveLayout.matchColumnsHeight") - })} - {controlItem({}, ( -
- {trans("responsiveLayout.columnsSpacing")} -
- ))} - {children.horizontalSpacing.propertyView({ - label: trans("responsiveLayout.horizontal") - })} - {children.verticalSpacing.propertyView({ - label: trans("responsiveLayout.vertical") - })} -
-
- {children.style.getPropertyView()} -
-
- {children.columnStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) - .build(); -})(); +const ResponsiveLayoutBaseCompTmp = ResponsiveLayoutBaseComp.build(); -class ResponsiveLayoutImplComp extends ResponsiveLayoutBaseComp implements IContainer { +class ResponsiveLayoutImplComp extends ResponsiveLayoutBaseCompTmp implements IContainer { private syncContainers(): this { const columns = this.children.columns.getView(); const ids: Set = new Set(columns.map((column) => String(column.id))); diff --git a/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx b/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx index 52829fd49..352a2bf54 100644 --- a/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx @@ -1,31 +1,22 @@ import { StringControl } from "comps/controls/codeControl"; import { BoolControl } from "comps/controls/boolControl"; -import { BoolCodeControl } from "../controls/codeControl"; import { stringExposingStateControl } from "comps/controls/codeStateControl"; import { AutoHeightControl } from "comps/controls/autoHeightControl"; 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 { useDebounce } from "react-use"; import styled, { css } from "styled-components"; -import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; +import { formDataChildren } from "./formComp/formDataConstants"; import { INPUT_DEFAULT_ONCHANGE_DEBOUNCE } from "constants/perf"; -import { - hiddenPropertyView, - placeholderPropertyView, - readOnlyPropertyView, -} from "comps/utils/propertyUtils"; -import _ from "lodash"; import { trans } from "i18n"; import { default as Skeleton } from "antd/es/skeleton"; import { styleControl } from "comps/controls/styleControl"; import { RichTextEditorStyle, RichTextEditorStyleType } from "comps/controls/styleControlConstants"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/richTextEditorComp")); const localizeStyle = css` & .ql-snow { @@ -211,8 +202,7 @@ function RichTextEditor(props: IProps) { const originOnChangeRef = useRef(props.onChange); originOnChangeRef.current = props.onChange; - const onChangeRef = useRef( - (v: string) => originOnChangeRef.current?.(v) + const onChangeRef = useRef( (v: string) => originOnChangeRef.current?.(v) ); // react-quill will not take effect after the placeholder is updated @@ -312,45 +302,12 @@ const RichTextEditorCompBase = new UICompBuilder(childrenMap, (props) => { /> ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ label: trans("richTextEditor.defaultValue") })} - {placeholderPropertyView(children)} -
- - - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {readOnlyPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && children.contentScrollBar.propertyView({ - label: trans("prop.textAreaScrollBar"), - })} - {children.toolbar.propertyView({ label: trans("richTextEditor.toolbar"), tooltip: trans("richTextEditor.toolbarDescription") })} - {children.hideToolbar.propertyView({ label: trans("richTextEditor.hideToolbar") })} -
-
- {children.style.getPropertyView()} -
- - )} - - ); - }) - .build(); - -class RichTextEditorCompAutoHeight extends RichTextEditorCompBase { +if (viewMode() === "admin") { + RichTextEditorCompBase.setPropertyViewFn((children) => ); +} +const RichTextEditorCompBuilder = RichTextEditorCompBase.build(); + +class RichTextEditorCompAutoHeight extends RichTextEditorCompBuilder { override autoHeight(): boolean { return this.children.autoHeight.getView(); } diff --git a/client/packages/lowcoder/src/comps/comps/rootComp.tsx b/client/packages/lowcoder/src/comps/comps/rootComp.tsx index 5fede0b07..cb96e8d26 100644 --- a/client/packages/lowcoder/src/comps/comps/rootComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/rootComp.tsx @@ -34,6 +34,7 @@ import { ExternalEditorContext } from "util/context/ExternalEditorContext"; import { useUserViewMode } from "util/hooks"; import React from "react"; import { isEqual } from "lodash"; +import {LoadingBarHideTrigger} from "@lowcoder-ee/util/hideLoading"; const EditorView = lazy( () => import("pages/editor/editorView"), @@ -138,6 +139,7 @@ const RootView = React.memo((props: RootViewProps) => {
{comp.children.queries.children[key].getView()}
))} + diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/propertyView.tsx new file mode 100644 index 000000000..ac4c649c5 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/propertyView.tsx @@ -0,0 +1,124 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; +import {SelectInputValidationSection} from "@lowcoder-ee/comps/comps/selectInputComp/selectInputConstants"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; + + + +const SetPropertyViewStepControl = ((children: any) => { + return ( + <> +
+ {children.options.propertyView({})} + {children.initialValue.propertyView({ label: trans("step.initialValue"), tooltip : trans("step.initialValueTooltip")})} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {children.stepStatus.propertyView({label: trans("step.status")})} + {children.stepPercent.propertyView({label: trans("step.percent")})} + {children.selectable.propertyView({label: trans("step.selectable")})} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.autoHeight.getPropertyView()} + {children.size.propertyView({ + label: trans("step.size"), + radioButton: true, + })} + {children.displayType.propertyView({ + label: trans("step.type"), + radioButton: false, + })} + {children.direction.propertyView({ + label: trans("step.direction"), + radioButton: true, + })} + { children.direction.getView() == "horizontal" && + children.labelPlacement.propertyView({ + label: trans("step.labelPlacement"), + radioButton: true, + }) + } + {children.direction.getView() == "horizontal" && ( + children.minHorizontalWidth.propertyView({ + label: trans("prop.minHorizontalWidth"), + placeholder: '100px', + }) + )} + {!children.autoHeight.getView() && ( + children.showScrollBars.propertyView({ + label: trans("prop.scrollbar"), + }) + )} + { children.displayType.getView() != "inline" && !children.showIcons.getView() && ( + children.showDots.propertyView({label: trans("step.showDots")} + ))} + { children.displayType.getView() != "inline" && !children.showDots.getView() && ( + children.showIcons.propertyView({label: trans("step.showIcons")} + ))} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +const SetPropertyViewSegmentedControl = ((children: any) => { + return ( + <> +
+ {children.options.propertyView({})} + {children.defaultValue.propertyView({ label: trans("prop.defaultValue") })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> + +
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.labelStyle.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +export { SetPropertyViewStepControl, SetPropertyViewSegmentedControl } \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/segmentedControl.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/segmentedControl.tsx index 78724cab5..3abb724c2 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/segmentedControl.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/segmentedControl.tsx @@ -9,24 +9,22 @@ import { AnimationStyle, LabelStyle, SegmentStyle, SegmentStyleType } from "comp import styled, { css } from "styled-components"; import { UICompBuilder } from "../../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "../formComp/formDataConstants"; +import { formDataChildren } from "../formComp/formDataConstants"; import { selectDivRefMethods, SelectInputInvalidConfig, SelectInputValidationChildren, - SelectInputValidationSection, useSelectInputValidate, } from "./selectInputConstants"; -import { Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView, disabledPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { hasIcon } from "comps/utils"; import { RefControl } from "comps/controls/refControl"; -import { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { migrateOldData, withDefault } from "comps/generators/simpleGenerators"; import { fixOldInputCompData } from "../textInputComp/textInputConstants"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewSegmentedControl = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewSegmentedControl}))) const getStyle = (style: SegmentStyleType) => { return css` @@ -86,7 +84,7 @@ const SegmentChildrenMap = { }; let SegmentedControlBasicComp = (function () { - return new UICompBuilder(SegmentChildrenMap, (props) => { + let builder = new UICompBuilder(SegmentChildrenMap, (props) => { const [ validateState, handleChange, @@ -119,44 +117,12 @@ let SegmentedControlBasicComp = (function () { ...validateState, }); }) - .setPropertyViewFn((children) => ( - <> -
- {children.options.propertyView({})} - {children.defaultValue.propertyView({ label: trans("prop.defaultValue") })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> - -
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) - .setExposeMethodConfigs(selectDivRefMethods) - .build(); + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .setExposeMethodConfigs(selectDivRefMethods) + .build(); })(); SegmentedControlBasicComp = migrateOldData(SegmentedControlBasicComp, fixOldInputCompData); diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx index 6ad51d255..83364593c 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx @@ -12,8 +12,7 @@ import { MarginControl } from "../../controls/marginControl"; import { ControlNode, isDarkColor, - lightenColor, - MultiselectTagIcon, + lightenColor, MultiselectTagIcon, Section, sectionNames, } from "lowcoder-design"; @@ -60,6 +59,7 @@ import { useContext } from "react"; import { EditorContext } from "comps/editorState"; import { styleControl } from "comps/controls/styleControl"; import SupaDemoDisplay from "comps/utils/supademoDisplay"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export const getStyle = ( style: @@ -278,7 +278,7 @@ export const SelectUIView = ( dropdownStyle={{ padding: 0, }} - menuItemSelectedIcon={props.mode ? : ""} + menuItemSelectedIcon={props.mode ? : ""} onChange={props.onChange} onFocus={() => props.onEvent("focus")} onBlur={() => props.onEvent("blur")} diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx index 9278ec326..f280e1943 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx @@ -11,15 +11,15 @@ import { UICompBuilder, withDefault } from "../../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; import { selectDivRefMethods, } from "./selectInputConstants"; import { ScrollBar, Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView, disabledPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { hasIcon } from "comps/utils"; import { RefControl } from "comps/controls/refControl"; import { dropdownControl } from "comps/controls/dropdownControl"; -import { useContext, useState, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React, { useState, useEffect } from "react"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; import { AutoHeightControl } from "@lowcoder-ee/comps/controls/autoHeightControl"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewStepControl = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewStepControl}))) const sizeOptions = [ { @@ -209,89 +209,22 @@ let StepControlBasicComp = (function () { ); }) - .setPropertyViewFn((children) => ( - <> -
- {children.options.propertyView({})} - {children.initialValue.propertyView({ label: trans("step.initialValue"), tooltip : trans("step.initialValueTooltip")})} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {children.stepStatus.propertyView({label: trans("step.status")})} - {children.stepPercent.propertyView({label: trans("step.percent")})} - {children.selectable.propertyView({label: trans("step.selectable")})} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.autoHeight.getPropertyView()} - {children.size.propertyView({ - label: trans("step.size"), - radioButton: true, - })} - {children.displayType.propertyView({ - label: trans("step.type"), - radioButton: false, - })} - {children.direction.propertyView({ - label: trans("step.direction"), - radioButton: true, - })} - { children.direction.getView() == "horizontal" && - children.labelPlacement.propertyView({ - label: trans("step.labelPlacement"), - radioButton: true, - }) - } - {children.direction.getView() == "horizontal" && ( - children.minHorizontalWidth.propertyView({ - label: trans("prop.minHorizontalWidth"), - placeholder: '100px', - }) - )} - {!children.autoHeight.getView() && ( - children.showScrollBars.propertyView({ - label: trans("prop.scrollbar"), - }) - )} - { children.displayType.getView() != "inline" && !children.showIcons.getView() && ( - children.showDots.propertyView({label: trans("step.showDots")} - ))} - { children.displayType.getView() != "inline" && !children.showDots.getView() && ( - children.showIcons.propertyView({label: trans("step.showIcons")} - ))} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) - .setExposeMethodConfigs(selectDivRefMethods) - .build(); })(); -StepControlBasicComp = class extends StepControlBasicComp { +if (viewMode() === "admin") { + StepControlBasicComp.setPropertyViewFn((children) => ); +} +const StepControlBasicCompTmp = StepControlBasicComp +.setExposeMethodConfigs(selectDivRefMethods) +.build(); + +const StepControlBasicCompBuilder = class extends StepControlBasicCompTmp { override autoHeight(): boolean { return this.children.autoHeight.getView(); } }; -export const StepComp = withExposingConfigs(StepControlBasicComp, [ +export const StepComp = withExposingConfigs(StepControlBasicCompBuilder, [ new NameConfig("value", trans("step.valueDesc")), new NameConfig("stepStatus", trans("step.status") ), new NameConfig("stepPercent", trans("step.percent")), diff --git a/client/packages/lowcoder/src/comps/comps/shapeComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/shapeComp/propertyView.tsx new file mode 100644 index 000000000..d2d211a69 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/shapeComp/propertyView.tsx @@ -0,0 +1,44 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView } from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + return ( + <> +
+ {children.icon.propertyView({ + label: trans("iconComp.icon"), + IconType: "All", + })} +
+ {(editorModeStatus === "logic" || + editorModeStatus === "both") && ( +
+ {disabledPropertyView(children)} + {hiddenPropertyView(children)} +
+ )} + + {(editorModeStatus === "layout" || + editorModeStatus === "both") && ( + <> +
+ {children.container.getPropertyView()} +
+
+ {children.container.stylePropertyView()} +
+ {children.container.children.showBody.getView() && ( +
+ {children.container.bodyStylePropertyView()} +
+ )} + + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/shapeComp/shapeComp.tsx b/client/packages/lowcoder/src/comps/comps/shapeComp/shapeComp.tsx index 51a404dbd..603393618 100644 --- a/client/packages/lowcoder/src/comps/comps/shapeComp/shapeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/shapeComp/shapeComp.tsx @@ -5,7 +5,6 @@ import { withExposingConfigs, } from "comps/generators/withExposing"; import { NameGenerator } from "comps/utils/nameGenerator"; -import { Section, sectionNames } from "lowcoder-design"; import { oldContainerParamsToNew } from "../containerBase"; import { toSimpleContainerData } from "../containerBase/simpleContainerComp"; import { ShapeTriContainer } from "./shapeTriContainer"; @@ -15,22 +14,18 @@ import { ContainerChildren, ContainerCompBuilder, } from "../triContainerComp/triContainerCompBuilder"; -import { - disabledPropertyView, - hiddenPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { BoolCodeControl } from "comps/controls/codeControl"; import { DisabledContext } from "comps/generators/uiCompBuilder"; -import React, { useContext, useEffect, useState } from "react"; -import { EditorContext } from "comps/editorState"; - +import React from "react"; +import {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); export const ContainerBaseComp = (function () { const childrenMap = { disabled: BoolCodeControl, icon: withDefault(ShapeControl, ""), }; - return new ContainerCompBuilder(childrenMap, (props, dispatch) => { + let builder = new ContainerCompBuilder(childrenMap, (props, dispatch) => { return ( @@ -39,42 +34,10 @@ export const ContainerBaseComp = (function () { ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.icon.propertyView({ - label: trans("iconComp.icon"), - IconType: "All", - })} -
- {(useContext(EditorContext).editorModeStatus === "logic" || - useContext(EditorContext).editorModeStatus === "both") && ( -
- {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - - {(useContext(EditorContext).editorModeStatus === "layout" || - useContext(EditorContext).editorModeStatus === "both") && ( - <> -
- {children.container.getPropertyView()} -
-
- {children.container.stylePropertyView()} -
- {children.container.children.showBody.getView() && ( -
- {children.container.bodyStylePropertyView()} -
- )} - - )} - - ); - }) + if (viewModeTriple() === "edit") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/signatureComp.tsx b/client/packages/lowcoder/src/comps/comps/signatureComp.tsx index 7d681bc4a..1be0a513c 100644 --- a/client/packages/lowcoder/src/comps/comps/signatureComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/signatureComp.tsx @@ -15,20 +15,19 @@ import { SignatureContainerStyle } from "comps/controls/styleControlConstants"; import { stateComp, withDefault } from "comps/generators/simpleGenerators"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; 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 type SignatureCanvasType from "react-signature-canvas"; import styled from "styled-components"; import { UICompBuilder } from "../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; - -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import { formDataChildren } from "./formComp/formDataConstants"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {viewMode} from "@lowcoder-ee/util/editor"; +import {UndoIcon} from "icons"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/signatureComp")); const Wrapper = styled.div<{ $style: SignatureStyleType; $isEmpty: boolean }>` height: 100%; @@ -111,7 +110,7 @@ const childrenMap = { const SignatureCanvas = React.lazy(() => import("react-signature-canvas")); let SignatureTmpComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { let canvas: SignatureCanvasType | null = null; const [isBegin, setIsBegin] = useState(false); const [canvasSize, setCanvasSize] = useState([0, 0]); @@ -171,7 +170,7 @@ let SignatureTmpComp = (function () {
{props.showUndo && ( - { const data = canvas?.toData(); if (data) { @@ -200,44 +199,10 @@ let SignatureTmpComp = (function () { ), }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.tips.propertyView({ label: trans("signature.tips") })} -
- - - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} - {children.showUndo.propertyView({ label: trans("signature.showUndo") })} - {children.showClear.propertyView({ label: trans("signature.showClear") })} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/switchComp.tsx b/client/packages/lowcoder/src/comps/comps/switchComp.tsx index 0d7b727b8..5ad120be0 100644 --- a/client/packages/lowcoder/src/comps/comps/switchComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/switchComp.tsx @@ -6,19 +6,18 @@ import { LabelControl } from "comps/controls/labelControl"; import { styleControl } from "comps/controls/styleControl"; import { SwitchStyle, SwitchStyleType, LabelStyle, InputFieldStyle, AnimationStyle } from "comps/controls/styleControlConstants"; import { migrateOldData } from "comps/generators/simpleGenerators"; -import { Section, lightenColor, sectionNames } from "lowcoder-design"; +import { lightenColor } from "lowcoder-design"; import styled, { css } from "styled-components"; import { UICompBuilder } from "../generators"; import { CommonNameConfig, NameConfig, withExposingConfigs } from "../generators/withExposing"; -import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; -import { hiddenPropertyView, disabledPropertyView } from "comps/utils/propertyUtils"; +import { formDataChildren } from "./formComp/formDataConstants"; import { trans } from "i18n"; import { RefControl } from "comps/controls/refControl"; import { refMethods } from "comps/generators/withMethodExposing"; import { blurMethod, clickMethod, focusWithOptions } from "comps/utils/methodUtils"; - -import { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import {viewMode} from "@lowcoder-ee/util/editor"; +import React from "react"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/switchComp")); const EventOptions = [ changeEvent, @@ -104,7 +103,7 @@ let SwitchTmpComp = (function () { inputFieldStyle: migrateOldData(styleControl(SwitchStyle, 'inputFieldStyle'), fixOldData), ...formDataChildren, }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return props.label({ style: props.style, labelStyle: props.labelStyle, @@ -126,46 +125,10 @@ let SwitchTmpComp = (function () { ), }); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.value.propertyView({ label: trans("switchComp.defaultValue") })} -
- - - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.labelStyle.getPropertyView()} -
-
- {children.inputFieldStyle.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs(refMethods([focusWithOptions, blurMethod, clickMethod])) .build(); })(); 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 0b159b08d..6ed7487e3 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 @@ -6,7 +6,6 @@ import styled from "styled-components"; import { LightActiveTextColor, PrimaryColor } from "constants/style"; import { styleControl } from "comps/controls/styleControl"; import { avatarGroupStyle, AvatarGroupStyleType } from "comps/controls/styleControlConstants"; -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"; @@ -17,6 +16,8 @@ import { optionsControl } from "comps/controls/optionsControl"; import { BoolControl } from "comps/controls/boolControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { JSONObject } from "util/jsonTypes"; +import { MultiIconDisplay } from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {AlignCenter, AlignLeft, AlignRight} from "icons"; const MenuLinkWrapper = styled.div` > a { @@ -81,9 +82,9 @@ const DropdownOption = new MultiCompBuilder( const EventOptions = [clickEvent, refreshEvent] as const; export const alignOptions = [ - { label: , value: "flex-start" }, - { label: , value: "center" }, - { label: , value: "flex-end" }, + { label: , value: "flex-start" }, + { label: , value: "center" }, + { label: , value: "flex-end" }, ] as const; export const ColumnAvatarsComp = (function () { 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 8c53650a8..65eb2609e 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 @@ -8,9 +8,10 @@ import styled from "styled-components"; import { CheckboxStyle, CheckboxStyleType } from "comps/controls/styleControlConstants"; import { useStyle } from "comps/controls/styleControl"; import { dropdownControl } from "comps/controls/dropdownControl"; -import { TableCheckedIcon, TableUnCheckedIcon } from "lowcoder-design"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {TableCheckedIcon, TableUnCheckedIcon} from "icons"; const CheckboxStyled = styled(Checkbox)<{ $style: CheckboxStyleType }>` ${(props) => props.$style && getStyle(props.$style)} @@ -44,7 +45,7 @@ const falseValuesOptions = [ value: "-", }, { - label: , + label: , value: "x", }, ] as const; @@ -95,8 +96,8 @@ export const BooleanComp = (function () { const style = useStyle(CheckboxStyle); return ( - {value === true ? ( hasIcon(props.iconTrue) ? props.iconTrue : ) - : value === false ? ( hasIcon(props.iconFalse) ? props.iconFalse : ( props.falseValues === "x" ? : props.falseValues ) + {value === true ? ( hasIcon(props.iconTrue) ? props.iconTrue : ) + : value === false ? ( hasIcon(props.iconFalse) ? props.iconFalse : ( props.falseValues === "x" ? : props.falseValues ) ) : ( hasIcon(props.iconNull) ? props.iconNull : "No Value" )} 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 d077f6d79..8c0d094e8 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 @@ -11,17 +11,18 @@ import { trans } from "i18n"; import { isNumber } from "lodash"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; -import { CalendarCompIconSmall, PrevIcon, SuperPrevIcon } from "lowcoder-design"; import { useEffect, useRef, useState } from "react"; import styled from "styled-components"; import { DateParser, DATE_FORMAT } from "util/dateTimeUtils"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {CalendarCompIconSmall, PrevIcon, SuperPrevIcon} from "icons"; dayjs.extend(utc) -const IconNext = styled(PrevIcon)` +const IconNext = styled(MultiIcon(PrevIcon))` transform: rotate(180deg); `; -const IconSuperNext = styled(SuperPrevIcon)` +const IconSuperNext = styled(MultiIcon(SuperPrevIcon))` transform: rotate(180deg); `; @@ -178,11 +179,11 @@ export const DateEdit = (props: DateEditProps) => { } - prevIcon={} - nextIcon={} + suffixIcon={} + prevIcon={} + nextIcon={} superNextIcon={} - superPrevIcon={} + superPrevIcon={} allowClear={true} variant="borderless" autoFocus 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 1c5e02814..8e35aebbb 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 @@ -7,8 +7,9 @@ import { ProgressStyle } from "comps/controls/styleControlConstants"; import { useStyle } from "comps/controls/styleControl"; import { BoolControl } from "comps/controls/boolControl"; import { ProgressStyled as Progress } from "comps/comps/progressComp"; -import { TableMinusIcon, TablePlusIcon } from "lowcoder-design"; import styled from "styled-components"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {TableMinusIcon, TablePlusIcon} from "icons"; const ProgressStyled = styled(Progress)` display: flex; @@ -95,7 +96,7 @@ export const ProgressComp = (function () { defaultValue={props.value} autoFocus variant="borderless" - controls={{ upIcon: , downIcon: }} + controls={{ upIcon: , downIcon: }} onChange={(value) => { props.onChange(Number(value)); }} 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 b8181f91a..99aa6a461 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 @@ -8,8 +8,9 @@ import { StringControl, stringUnionControl } from "comps/controls/codeControl"; import { DropdownStyled, Wrapper } from "./columnTagsComp"; import { ReactNode, useContext, useState } from "react"; import { StatusContext } from "components/table/EditableCell"; -import { CustomSelect, PackUpIcon, ScrollBar } from "lowcoder-design"; +import {CustomSelect, PackUpIcon, ScrollBar} from "lowcoder-design"; import { PresetStatusColorType } from "antd/es/_util/colors"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export const ColumnValueTooltip = trans("table.columnValueTooltip"); @@ -60,7 +61,7 @@ const StatusEdit = (props: StatusEditPropsType) => { open={open} defaultValue={props.value.value} style={{ width: "100%" }} - suffixIcon={} + suffixIcon={} showSearch onSearch={(value: string) => { if (defaultStatus.findIndex((item) => item.text.includes(value)) < 0) { 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 61ed6cb53..351daf9b2 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 @@ -13,9 +13,10 @@ import _ from "lodash"; import { ReactNode, useContext, useState } from "react"; import { toJson } from "really-relaxed-json"; import { hashToNum } from "util/stringUtils"; -import { CustomSelect, PackUpIcon } from "lowcoder-design"; +import {CustomSelect, PackUpIcon} from "lowcoder-design"; import { ScrollBar } from "lowcoder-design"; import { ColoredTagOptionControl } from "comps/controls/optionsControl"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const colors = PresetStatusColorTypes; @@ -212,7 +213,7 @@ const TagEdit = (props: TagEditPropsType) => { style={{ width: "100%" }} open={open} allowClear={true} - suffixIcon={} + suffixIcon={} onSearch={(value: string) => { if (defaultTags.findIndex((item) => item.includes(value)) < 0) { setTags([...defaultTags, value]); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/propertyView.tsx new file mode 100644 index 000000000..5367fb864 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/propertyView.tsx @@ -0,0 +1,331 @@ +import {trans} from "@lowcoder-ee/i18n"; +import {ColumnValueTooltip} from "@lowcoder-ee/comps/comps/tableComp/column/simpleColumnTypeComps"; +import { + DATE_FORMAT, + DATE_TIME_FORMAT, + disabledPropertyView, + formatPropertyView, + hiddenPropertyView +} from "lowcoder-sdk"; + +alert("table"); + +const SetPropertyViewColumnAvatarComp1 = ((children: any) => { + return ( + <> + {children.avatars.propertyView({})} + {children.maxCount.propertyView({ + label: trans("avatarGroup.maxCount") + })} + {children.avatarSize.propertyView({ + label: trans("avatarGroup.avatarSize") + })} + {children.autoColor.propertyView({ + label: trans("avatarGroup.autoColor") + })} + {children.alignment.propertyView({ + label: trans("table.avatarGroupAlignment"), + radioButton: true, + })} + {children.onEvent.propertyView()} + + ); +}); + +const SetPropertyViewColumnBooleanComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.falseValues.propertyView({ + label: trans("table.falseValues"), + radioButton: true, + })} + {children.iconTrue.propertyView({ + label: trans("table.iconTrue"), + })} + {children.iconFalse.propertyView({ + label: trans("table.iconFalse"), + })} + {children.iconNull.propertyView({ + label: trans("table.iconNull"), + })} + + ); +}); + +const SetPropertyViewColumnDropdownComp = ((children: any) => { + return ( + <> + {children.buttonType.propertyView({ + label: trans("table.type"), + radioButton: true, + })} + {children.label.propertyView({ + label: trans("text"), + })} + {children.prefixIcon.propertyView({ + label: trans("button.prefixIcon"), + })} + {children.suffixIcon.propertyView({ + label: trans("button.suffixIcon"), + })} + {children.options.propertyView({ + title: trans("optionsControl.optionList"), + })} + + ); +}); + +const SetPropertyViewColumnNumberComp = ((children: any) => { + let float = false; + + + + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.step.propertyView({ + label: trans("table.numberStep"), + tooltip: trans("table.numberStepTooltip"), + onFocus: (focused: boolean) => { + if(!focused) { + const value = children.step.getView(); + const isFloat = children.float.getView(); + const newValue = !isFloat ? Math.floor(value) : value; + children.step.dispatchChangeValueAction(String(newValue)); + } + } + })} + {float && ( + children.precision.propertyView({ + label: trans("table.precision"), + }) + )} + {children.prefix.propertyView({ + label: trans("table.prefix"), + })} + {children.prefixIcon.propertyView({ + label: trans("button.prefixIcon"), + })} + {children.suffix.propertyView({ + label: trans("table.suffix"), + })} + {children.suffixIcon.propertyView({ + label: trans("button.suffixIcon"), + })} + {children.float.propertyView({ + label: trans("table.float"), + onChange: (isFloat : boolean) => { + const value = children.step.getView(); + const newValue = !isFloat ? Math.floor(value) : value; + children.step.dispatchChangeValueAction(String(newValue)); + } + })} + + ); +}); + +const SetPropertyViewColumnAvatarComp2 = ((children: any) => { + return ( + <> + {children.src.propertyView({ label: trans("avatarComp.src"), placeholder: "", tooltip: trans("avatarComp.avatarCompTooltip") })} + {children.label.propertyView({label: trans("avatarComp.title"), tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.AvatarIcon.propertyView({ + label: trans("avatarComp.icon"), + IconType: "All", + tooltip: trans("avatarComp.avatarCompTooltip"), + })} + {children.color.propertyView({ label: trans("style.fill") })} + {children.backgroundColor.propertyView({ label: trans("style.background") })} + {children.Tooltip.propertyView({ label: trans("badge.tooltip") })} + + ); +}); + +const SetPropertyViewColumnDateComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {formatPropertyView({ children, placeholder: DATE_FORMAT })} + + ); +}); + +const SetPropertyViewColumnDateTimeComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {formatPropertyView({ children, placeholder: DATE_TIME_FORMAT })} + + ); +}); + +const SetPropertyViewColumnImgComp = ((children: any) => { + return ( + <> + {children.src.propertyView({ + label: trans("table.imageSrc"), + tooltip: ColumnValueTooltip, + })} + {children.size.propertyView({ + label: trans("table.imageSize"), + })} + + ); +}); + +const SetPropertyViewColumnLinksComp1 = ((children: any) => { + return ( + <> + {children.label.propertyView({ label: trans("label") })} + {children.onClick.propertyView({ + label: trans("table.action"), + placement: "table", + })} + {hiddenPropertyView(children)} + {disabledPropertyView(children)} + + ); +}); + +const SetPropertyViewColumnLinksComp2 = ((children: any) => { + return ( + <> + {children.options.propertyView({ + newOptionLabel: trans("table.option"), + title: trans("table.optionList"), + })} + + ); +}); + +const SetPropertyViewColumnProgressComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.showValue.propertyView({ + label: trans("table.showValue"), + })} + + ); +}); + +const SetPropertyViewColumnRatingComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + + ); +}); + +const SetPropertyViewColumnSelectComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.options.propertyView({ + title: trans("optionsControl.optionList"), + })} + + ); +}); + +const SetPropertyViewColumnStatusComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.status.propertyView({ + label: trans("table.status"), + tooltip: trans("table.statusTooltip"), + })} + + ); +}); + +const SetPropertyViewColumnSwitchComp = ((children: any) => { + return ( + <> + {children.switchState.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.onEvent.propertyView()} + {disabledPropertyView(children)} + + ); +}); + +const SetPropertyViewColumnTagsComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.tagColors.propertyView({ + title: "test", + })} + + ); +}); + +const SetPropertyViewSimpleTextComp = ((children: any) => { + return ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.prefixIcon.propertyView({ + label: trans("button.prefixIcon"), + })} + {children.suffixIcon.propertyView({ + label: trans("button.suffixIcon"), + })} + + ); +}); + +export { SetPropertyViewColumnAvatarComp1, + SetPropertyViewColumnBooleanComp, + SetPropertyViewColumnDropdownComp, + SetPropertyViewColumnNumberComp, + SetPropertyViewColumnAvatarComp2, + SetPropertyViewColumnDateComp, + SetPropertyViewColumnDateTimeComp, + SetPropertyViewColumnImgComp, + SetPropertyViewColumnLinksComp1, + SetPropertyViewColumnLinksComp2, + SetPropertyViewColumnProgressComp, + SetPropertyViewColumnRatingComp, + SetPropertyViewColumnSelectComp, + SetPropertyViewColumnStatusComp, + SetPropertyViewColumnSwitchComp, + SetPropertyViewColumnTagsComp, + SetPropertyViewSimpleTextComp +} + 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 440d6f1e0..e91ce5a46 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx @@ -21,7 +21,16 @@ import { withFunction, wrapChildAction, } from "lowcoder-core"; -import { AlignClose, AlignLeft, AlignRight, IconRadius, BorderWidthIcon, TextSizeIcon, FontFamilyIcon, TextWeightIcon, ImageCompIcon, controlItem, Dropdown, OptionType } from "lowcoder-design"; +import { + AlignClose, + AlignLeft, + AlignRight, + BorderWidthIcon, + controlItem, + Dropdown, FontFamilyIcon, + IconRadius, ImageCompIcon, + OptionType, TextSizeIcon, TextWeightIcon +} from "lowcoder-design"; import { ColumnTypeComp, ColumnTypeCompMap } from "./columnTypeComp"; import { ColorControl } from "comps/controls/colorControl"; import { JSONValue } from "util/jsonTypes"; @@ -32,6 +41,7 @@ import { ColumnValueTooltip } from "./simpleColumnTypeComps"; import { SummaryColumnComp } from "./tableSummaryColumnComp"; import { list } from "@lowcoder-ee/comps/generators/list"; import { EMPTY_ROW_KEY } from "../tableCompView"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export type Render = ReturnType["getOriginalComp"]>; export const RenderComp = withSelectedMultiContext(ColumnTypeComp); @@ -48,15 +58,15 @@ const columnWidthOptions = [ const columnFixOptions = [ { - label: , + label: , value: "left", }, { - label: , + label: , value: "close", }, { - label: , + label: , value: "right", }, ] as const; @@ -153,12 +163,12 @@ export const columnChildrenMap = { ]) }; -const StyledBorderRadiusIcon = styled(IconRadius)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledBorderIcon = styled(BorderWidthIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledTextSizeIcon = styled(TextSizeIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledFontFamilyIcon = styled(FontFamilyIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledTextWeightIcon = styled(TextWeightIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledBackgroundImageIcon = styled(ImageCompIcon)` width: 24px; margin: 0 0px 0 -12px;`; +const StyledBorderRadiusIcon = styled(MultiIcon(IconRadius))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledBorderIcon = styled(MultiIcon(BorderWidthIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledTextSizeIcon = styled(MultiIcon(TextSizeIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledFontFamilyIcon = styled(MultiIcon(FontFamilyIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledTextWeightIcon = styled(MultiIcon(TextWeightIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledBackgroundImageIcon = styled(MultiIcon(ImageCompIcon))` width: 24px; margin: 0 0px 0 -12px;`; /** * export for test. @@ -347,32 +357,32 @@ export class ColumnComp extends ColumnInitComp { })} {this.children.borderWidth.propertyView({ label: trans('style.borderWidth'), - preInputNode: , + preInputNode: , placeholder: '1px', })} {this.children.radius.propertyView({ label: trans('style.borderRadius'), - preInputNode: , + preInputNode: , placeholder: '3px', })} {this.children.textSize.propertyView({ label: trans('style.textSize'), - preInputNode: , + preInputNode: , placeholder: '14px', })} {this.children.textWeight.propertyView({ label: trans('style.textWeight'), - preInputNode: , + preInputNode: , placeholder: 'normal', })} {this.children.fontFamily.propertyView({ label: trans('style.fontFamily'), - preInputNode: , + preInputNode: , placeholder: 'sans-serif', })} {this.children.fontStyle.propertyView({ label: trans('style.fontStyle'), - preInputNode: , + preInputNode: , placeholder: 'normal' })} {this.children.textOverflow.getPropertyView()} 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 13f4f2d5b..052876823 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableSummaryColumnComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableSummaryColumnComp.tsx @@ -13,12 +13,13 @@ import { withFunction, wrapChildAction, } from "lowcoder-core"; -import { IconRadius, TextSizeIcon, FontFamilyIcon, TextWeightIcon, controlItem } from "lowcoder-design"; +import {controlItem, FontFamilyIcon, IconRadius, TextSizeIcon, TextWeightIcon} from "lowcoder-design"; import { ColumnTypeComp } from "./columnTypeComp"; import { ColorControl } from "comps/controls/colorControl"; import styled from "styled-components"; import { TextOverflowControl } from "comps/controls/textOverflowControl"; import { default as Divider } from "antd/es/divider"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export type Render = ReturnType["getOriginalComp"]>; export const RenderComp = withSelectedMultiContext(ColumnTypeComp); @@ -46,10 +47,10 @@ export const columnChildrenMap = { linkActiveColor: withDefault(ColorControl, ""), }; -const StyledBorderRadiusIcon = styled(IconRadius)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledTextSizeIcon = styled(TextSizeIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledFontFamilyIcon = styled(FontFamilyIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; -const StyledTextWeightIcon = styled(TextWeightIcon)` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledBorderRadiusIcon = styled(MultiIcon(IconRadius))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledTextSizeIcon = styled(MultiIcon(TextSizeIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledFontFamilyIcon = styled(MultiIcon(FontFamilyIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; +const StyledTextWeightIcon = styled(MultiIcon(TextWeightIcon))` width: 24px; margin: 0 8px 0 -3px; padding: 3px;`; /** * export for test. @@ -147,27 +148,27 @@ export class SummaryColumnComp extends ColumnInitComp { })} {this.children.radius.propertyView({ label: trans('style.borderRadius'), - preInputNode: , + preInputNode: , placeholder: '3px', })} {this.children.textSize.propertyView({ label: trans('style.textSize'), - preInputNode: , + preInputNode: , placeholder: '14px', })} {this.children.textWeight.propertyView({ label: trans('style.textWeight'), - preInputNode: , + preInputNode: , placeholder: 'normal', })} {this.children.fontFamily.propertyView({ label: trans('style.fontFamily'), - preInputNode: , + preInputNode: , placeholder: 'sans-serif', })} {this.children.fontStyle.propertyView({ label: trans('style.fontStyle'), - preInputNode: , + preInputNode: , placeholder: 'normal' })} {/* {this.children.textOverflow.getPropertyView()} */} diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx index fce61b34e..fadda9d4e 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx @@ -8,18 +8,15 @@ import { trans } from "i18n"; import { changeValueAction, deferAction, MultiBaseComp, wrapChildAction } from "lowcoder-core"; import { BluePlusIcon, - CheckBox, - CloseEyeIcon, + CheckBox, CloseEyeIcon, controlItem, CustomModal, Dropdown, labelCss, - LinkButton, - OpenEyeIcon, + LinkButton, OpenEyeIcon, Option, OptionItem, - RedButton, - RefreshIcon, + RedButton, RefreshIcon, Section, sectionNames, TextLabel, @@ -34,6 +31,7 @@ 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 {MultiIcon, MultiIconDisplay} from "../multiIconDisplay"; const InsertDiv = styled.div` display: flex; @@ -47,7 +45,7 @@ const Graylabel = styled.span` color: #8b8fa3; `; -const StyledRefreshIcon = styled(RefreshIcon)` +const StyledRefreshIcon = styled(MultiIcon(RefreshIcon))` width: 16px; height: 16px; cursor: pointer; @@ -73,10 +71,10 @@ const eyeIconCss = css` } `; -const CloseEye = styled(CloseEyeIcon)` +const CloseEye = styled(MultiIcon(CloseEyeIcon))` ${eyeIconCss} `; -const OpenEye = styled(OpenEyeIcon)` +const OpenEye = styled(MultiIcon(OpenEyeIcon))` ${eyeIconCss} `; @@ -322,7 +320,7 @@ function ColumnPropertyView>(props: { )} } + icon={} text={trans("addItem")} onClick={() => { comp.children.columns.dispatch(comp.children.columns.pushAction(newCustomColumn())); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx index 85703fd11..fb2b50e10 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx @@ -15,21 +15,13 @@ import { trans } from "i18n"; import _, { isNil } from "lodash"; import { changeChildAction, ConstructorToView } from "lowcoder-core"; import { - AlignBottom, - AlignClose, - AlignTop, - BluePlusIcon, + AlignBottom, AlignClose, AlignTop, BluePlusIcon, CheckBox, CommonTextLabel, - CustomSelect, - DeleteIcon, - DownloadIcon, - FilterIcon, + CustomSelect, DeleteIcon, DownloadIcon, FilterIcon, LinkButton, - pageItemRender, - RefreshIcon, - TableColumnVisibilityIcon, - SuspensionBox, + pageItemRender, RefreshIcon, + SuspensionBox, TableColumnVisibilityIcon, TacoButton, TacoInput, ValueFromOption, @@ -39,6 +31,7 @@ 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 {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const SaveChangeButtons = styled.div` display: flex; @@ -185,7 +178,7 @@ const ToolbarIcons = styled.div` gap: 8px; `; -const StyledDeleteIcon = styled(DeleteIcon)<{ disabled: boolean }>` +const StyledDeleteIcon = styled(MultiIcon(DeleteIcon))<{ disabled: boolean }>` height: 16px; width: 16px; @@ -252,15 +245,15 @@ const filterStackOptions = [ const positionOptions = [ { - label: , + label: , value: "below", }, { - label: , + label: , value: "above", }, { - label: , + label: , value: "close", }, ] as const; @@ -520,7 +513,7 @@ function TableFilterView(props: { } + icon={} onClick={() => { setFilters(filters.concat(genFilterViewItem())); }} @@ -764,7 +757,7 @@ export function TableToolbar(props: { {toolbar.showRefresh && ( - { onRefresh(); @@ -792,17 +785,17 @@ export function TableToolbar(props: { setVisible={(v) => setFilterVisible(v)} /> } - Icon={FilterIcon} + Icon={MultiIcon(FilterIcon)} iconClassName="filter" /> )} - {toolbar.showDownload && } + {toolbar.showDownload && } {toolbar.columnSetting && ( } - Icon={TableColumnVisibilityIcon} + Icon={MultiIcon(TableColumnVisibilityIcon)} iconClassName="column-setting" /> )} diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx index bca13e0aa..bbea579e6 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx @@ -12,15 +12,15 @@ import { TableFilter, tableFilterOperatorMap } from "comps/comps/tableComp/table import { SortValue, TableOnEventView } from "comps/comps/tableComp/tableTypes"; import _ from "lodash"; import { changeChildAction, CompAction, NodeToValue } from "lowcoder-core"; -import { EditableIcon } from "lowcoder-design"; import { tryToNumber } from "util/convertUtils"; import { JSONObject, JSONValue } from "util/jsonTypes"; import { StatusType } from "./column/columnTypeComps/columnStatusComp"; import { ColumnListComp, tableDataRowExample } from "./column/tableColumnListComp"; import { TableColumnLinkStyleType, TableColumnStyleType } from "comps/controls/styleControlConstants"; import Tooltip from "antd/es/tooltip"; -import InfoCircleOutlined from "@ant-design/icons/InfoCircleOutlined"; import { EMPTY_ROW_KEY } from "./tableCompView"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {EditableIcon} from "icons"; export const COLUMN_CHILDREN_KEY = "children"; export const OB_ROW_ORI_INDEX = "__ob_origin_index"; @@ -252,7 +252,7 @@ function renderTitle(props: { title: string; tooltip: string; editable: boolean {title}
- {editable && } + {editable && }
); } diff --git a/client/packages/lowcoder/src/comps/comps/tabs/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/tabs/propertyView.tsx new file mode 100644 index 000000000..0e9f0eaba --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/tabs/propertyView.tsx @@ -0,0 +1,63 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.tabs.propertyView({ + title: trans("tabbedContainer.tab"), + newOptionLabel: "Tab", + })} + {children.selectedTabKey.propertyView({ label: trans("prop.defaultValue") })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {children.showHeader.propertyView({ label: trans("tabbedContainer.showTabs") })} + {children.destroyInactiveTab.propertyView({ label: trans("tabbedContainer.destroyInactiveTab") })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.placement.propertyView({ label: trans("tabbedContainer.placement"), radioButton: true })} + {children.tabsCentered.propertyView({ label: trans("tabbedContainer.tabsCentered")})} + { children.tabsGutter.propertyView({ label: trans("tabbedContainer.gutter"), tooltip : trans("tabbedContainer.gutterTooltip") })} + {children.horizontalGridCells.propertyView({ + label: trans('prop.horizontalGridCells'), + })} + {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && ( + children.showVerticalScrollbar.propertyView({ + label: trans("prop.showVerticalScrollbar"), + }) + )} +
+
+ {children.style.getPropertyView()} +
+ {children.showHeader.getView() && ( +
+ { children.headerStyle.getPropertyView() } +
+ )} +
+ { children.bodyStyle.getPropertyView() } +
+
+ { children.animationStyle.getPropertyView() } +
+ + )} + + ); +}); + +export default PropertyView; diff --git a/client/packages/lowcoder/src/comps/comps/tabs/tabbedContainerComp.tsx b/client/packages/lowcoder/src/comps/comps/tabs/tabbedContainerComp.tsx index e062ba3bb..51c6493bc 100644 --- a/client/packages/lowcoder/src/comps/comps/tabs/tabbedContainerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tabs/tabbedContainerComp.tsx @@ -26,7 +26,6 @@ import { InnerGrid, } from "../containerComp/containerView"; import { BackgroundColorContext } from "comps/utils/backgroundColorContext"; -import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { BoolCodeControl, NumberControl } from "comps/controls/codeControl"; import { DisabledContext } from "comps/generators/uiCompBuilder"; @@ -37,6 +36,8 @@ import { BoolControl } from "comps/controls/boolControl"; import { PositionControl } from "comps/controls/dropdownControl"; import SliderControl from "@lowcoder-ee/comps/controls/sliderControl"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; +import {viewMode, viewModeTriple} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("./propertyView")); const EVENT_OPTIONS = [ { @@ -296,69 +297,17 @@ const TabbedContainer = (props: TabbedContainerProps) => { export const TabbedContainerBaseComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return ( ); }) - .setPropertyViewFn((children) => { - return ( - <> -
- {children.tabs.propertyView({ - title: trans("tabbedContainer.tab"), - newOptionLabel: "Tab", - })} - {children.selectedTabKey.propertyView({ label: trans("prop.defaultValue") })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {children.showHeader.propertyView({ label: trans("tabbedContainer.showTabs") })} - {children.destroyInactiveTab.propertyView({ label: trans("tabbedContainer.destroyInactiveTab") })} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.placement.propertyView({ label: trans("tabbedContainer.placement"), radioButton: true })} - {children.tabsCentered.propertyView({ label: trans("tabbedContainer.tabsCentered")})} - { children.tabsGutter.propertyView({ label: trans("tabbedContainer.gutter"), tooltip : trans("tabbedContainer.gutterTooltip") })} - {children.horizontalGridCells.propertyView({ - label: trans('prop.horizontalGridCells'), - })} - {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && ( - children.showVerticalScrollbar.propertyView({ - label: trans("prop.showVerticalScrollbar"), - }) - )} -
-
- {children.style.getPropertyView()} -
- {children.showHeader.getView() && ( -
- { children.headerStyle.getPropertyView() } -
- )} -
- { children.bodyStyle.getPropertyView() } -
-
- { children.animationStyle.getPropertyView() } -
- - )} - - ); - }) + if ((viewModeTriple() === "edit")) { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/temporaryStateComp.tsx b/client/packages/lowcoder/src/comps/comps/temporaryStateComp.tsx index 42fb8727d..d67f62d12 100644 --- a/client/packages/lowcoder/src/comps/comps/temporaryStateComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/temporaryStateComp.tsx @@ -6,58 +6,25 @@ import { NameConfig, withExposingConfigs } from "comps/generators/withExposing"; import { withMethodExposing } from "comps/generators/withMethodExposing"; import { trans } from "i18n"; import _ from "lodash"; -import { DocLink } from "lowcoder-design"; -import { BottomTabs } from "pages/editor/bottom/BottomTabs"; -import { ReactNode, useState } from "react"; +import React, { ReactNode } from "react"; import { BottomResComp, BottomResCompResult, BottomResTypeEnum } from "types/bottomRes"; import { JSONObject } from "util/jsonTypes"; -import { QueryTutorials } from "util/tutorialUtils"; import { SimpleNameComp } from "./simpleNameComp"; -import { markdownCompCss, TacoMarkDown } from "lowcoder-design"; -import SupaDemoDisplay from "comps/utils/supademoDisplay"; - -const TemporaryStateItemCompBase = new MultiCompBuilder( +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/temporaryStateComp")); +let TemporaryStateItemCompBase = new MultiCompBuilder( { name: SimpleNameComp, value: jsonValueStateControl(null), }, () => null ) - .setPropertyViewFn((children) => { - return ( -
{trans("temporaryState.documentationText")}
- {trans("temporaryState.docLink")} -

- - - - ), - }), - }, - ]} - tabTitle={children.name.getView()} - status="" - /> - ); - }) - .build(); +if (viewMode() === "admin") { + TemporaryStateItemCompBase.setPropertyViewFn((children) => ); +} +const TemporaryStateItemCompBasebuilder = TemporaryStateItemCompBase.build(); -class TemporaryStateAsBottomRes extends TemporaryStateItemCompBase implements BottomResComp { +class TemporaryStateAsBottomRes extends TemporaryStateItemCompBasebuilder implements BottomResComp { result(): BottomResCompResult | null { return null; } diff --git a/client/packages/lowcoder/src/comps/comps/textComp.tsx b/client/packages/lowcoder/src/comps/comps/textComp.tsx index 38043d1a4..5f0d316ab 100644 --- a/client/packages/lowcoder/src/comps/comps/textComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textComp.tsx @@ -1,33 +1,31 @@ import { dropdownControl } from "comps/controls/dropdownControl"; import { stringExposingStateControl } from "comps/controls/codeStateControl"; import { AutoHeightControl } from "comps/controls/autoHeightControl"; -import { ScrollBar, Section, sectionNames } from "lowcoder-design"; +import {AlignCenter, AlignLeft, AlignRight, ScrollBar, Section, sectionNames} from "lowcoder-design"; import styled, { css } from "styled-components"; -import { AlignCenter } from "lowcoder-design"; -import { AlignLeft } from "lowcoder-design"; -import { AlignRight } from "lowcoder-design"; import { UICompBuilder, withDefault } from "../generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "../generators/withExposing"; import { markdownCompCss, TacoMarkDown } from "lowcoder-design"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, TextStyle, TextStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { alignWithJustifyControl } from "comps/controls/alignControl"; import { MarginControl } from "../controls/marginControl"; import { PaddingControl } from "../controls/paddingControl"; -import React, { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { clickEvent, eventHandlerControl } from "../controls/eventHandlerControl"; import { NewChildren } from "../generators/uiCompBuilder"; import { RecordConstructorToComp } from "lowcoder-core"; import { ToViewReturn } from "../generators/multi"; import { BoolControl } from "../controls/boolControl"; - +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const TextPropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/textComp")); const EventOptions = [clickEvent] as const; + const getStyle = (style: TextStyleType) => { return css` border-radius: ${(style.radius ? style.radius : "4px")}; @@ -108,13 +106,13 @@ const TextContainer = styled.div<{ overflow-wrap: anywhere; } `; -const AlignTop = styled(AlignLeft)` +const AlignTop = styled(MultiIcon(AlignLeft))` transform: rotate(90deg); `; -const AlignBottom = styled(AlignRight)` +const AlignBottom = styled(MultiIcon(AlignRight))` transform: rotate(90deg); `; -const AlignVerticalCenter = styled(AlignCenter)` +const AlignVerticalCenter = styled(MultiIcon(AlignCenter))` transform: rotate(90deg); `; @@ -153,57 +151,6 @@ const childrenMap = { type ChildrenType = NewChildren>; -const TextPropertyView = React.memo((props: { - children: ChildrenType -}) => { - return ( - <> -
- {props.children.type.propertyView({ - label: trans("value"), - tooltip: trans("textShow.valueTooltip"), - radioButton: true, - })} - {props.children.text.propertyView({})} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {hiddenPropertyView(props.children)} - {props.children.onEvent.getPropertyView()} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {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"), - radioButton: true, - })} -
-
- {props.children.style.getPropertyView()} -
-
- {props.children.animationStyle.getPropertyView()} -
- - )} - - ); -}) - const TextView = React.memo((props: ToViewReturn) => { const value = props.text.value; @@ -228,8 +175,13 @@ const TextView = React.memo((props: ToViewReturn) => { }, (prev, next) => JSON.stringify(prev) === JSON.stringify(next)); let TextTmpComp = (function () { - return new UICompBuilder(childrenMap, (props) => ) - .setPropertyViewFn((children) => ) + let builder = new UICompBuilder(childrenMap, (props) => ) + + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ) + } + + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx index 6222fb6de..a1a20b802 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx @@ -1,7 +1,7 @@ -import { Input, Section, sectionNames } from "lowcoder-design"; +import { Input } from "lowcoder-design"; import { BoolControl } from "comps/controls/boolControl"; import { styleControl } from "comps/controls/styleControl"; -import { AnimationStyle, InputFieldStyle, InputLikeStyle, InputLikeStyleType, LabelStyle, LabelStyleType } from "comps/controls/styleControlConstants"; +import { AnimationStyle, InputFieldStyle, InputLikeStyle, InputLikeStyleType, LabelStyle } from "comps/controls/styleControlConstants"; import { NameConfig, NameConfigPlaceHolder, @@ -9,32 +9,24 @@ import { } from "comps/generators/withExposing"; import styled from "styled-components"; import { UICompBuilder } from "../../generators"; -import { FormDataPropertyView } from "../formComp/formDataConstants"; import { fixOldInputCompData, getStyle, inputRefMethods, - TextInputBasicSection, textInputChildren, TextInputConfigs, - TextInputInteractionSection, - TextInputValidationSection, useTextInputProps, } from "./textInputConstants"; -import { - allowClearPropertyView, - hiddenPropertyView, - readOnlyPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { IconControl } from "comps/controls/iconControl"; 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 { migrateOldData } from "comps/generators/simpleGenerators"; -import React, { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewInputComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewInputComp}))) /** * Input Comp @@ -82,40 +74,10 @@ let InputBasicComp = new UICompBuilder(childrenMap, (props) => { ...validateState, }); }) - .setPropertyViewFn((children) => { - return ( - <> - - - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{hiddenPropertyView(children)}
-
- {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} - {children.showCount.propertyView({ label: trans("prop.showCount") })} - {allowClearPropertyView(children)} - {readOnlyPropertyView(children)} -
- - - )} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{children.style.getPropertyView()}
-
{children.labelStyle.getPropertyView()}
-
{children.inputFieldStyle.getPropertyView()}
-
{children.animationStyle.getPropertyView()}
- - )} - - ); - }) +if (viewMode() === "admin") { + InputBasicComp.setPropertyViewFn((children) => ); +} +const InputBasicCompBuilder = InputBasicComp .setExposeMethodConfigs(inputRefMethods) .setExposeStateConfigs([ new NameConfig("value", trans("export.inputValueDesc")), @@ -126,6 +88,6 @@ let InputBasicComp = new UICompBuilder(childrenMap, (props) => { .build(); -const InputComp = migrateOldData(InputBasicComp, fixOldInputCompData); +const InputComp = migrateOldData(InputBasicCompBuilder, fixOldInputCompData); export { InputComp }; diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/mentionComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/mentionComp.tsx index da307ce76..3b376f66a 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/mentionComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/mentionComp.tsx @@ -5,11 +5,9 @@ import { NameConfigRequired, withExposingConfigs, } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; import { BoolControl } from "../../controls/boolControl"; import { AutoHeightControl } from "../../controls/autoHeightControl"; import { UICompBuilder } from "../../generators"; -import { FormDataPropertyView } from "../formComp/formDataConstants"; import { checkMentionListData, fixOldInputCompData, @@ -26,14 +24,6 @@ import { InputLikeStyle, InputLikeStyleType, } from "comps/controls/styleControlConstants"; -import { - disabledPropertyView, - hiddenPropertyView, - maxLengthPropertyView, - minLengthPropertyView, - readOnlyPropertyView, - requiredPropertyView, -} from "comps/utils/propertyUtils"; import { booleanExposingStateControl } from "comps/controls/codeStateControl"; import { trans } from "i18n"; import { RefControl } from "comps/controls/refControl"; @@ -54,10 +44,10 @@ import { changeEvent } from "comps/controls/eventHandlerControl"; -import React, { useContext } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { migrateOldData } from "comps/generators/simpleGenerators"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewMentionComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewMentionComp}))) const Wrapper = styled.div<{ $style: InputLikeStyleType; }>` @@ -103,7 +93,7 @@ let MentionTmpComp = (function () { invalid: booleanExposingStateControl("invalid"), }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const { mentionList } = props; const [validateState, setvalidateState] = useState({}); const [activationFlag, setActivationFlag] = useState(false); @@ -221,56 +211,10 @@ let MentionTmpComp = (function () { ...validateState, }); }) - .setPropertyViewFn((children) => ( - <> -
- {children.value.propertyView({ label: trans("prop.defaultValue") })} - {children.placeholder.propertyView({ - label: trans("prop.placeholder"), - })} - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.mentionList.propertyView({ - label: trans("mention.mentionList"), - }) - )} -
- - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <>
- {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} -
-
{hiddenPropertyView(children)}
-
- {readOnlyPropertyView(children)} -
- {requiredPropertyView(children)} - {children.validationType.propertyView({ - label: trans("prop.textType"), - })} - {minLengthPropertyView(children)} - {maxLengthPropertyView(children)} - {children.customRule.propertyView({})} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx index 846a81a7d..0b39a58f8 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx @@ -6,20 +6,16 @@ import { NameConfigRequired, withExposingConfigs, } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; import { BoolControl } from "../../controls/boolControl"; import { dropdownControl } from "../../controls/dropdownControl"; import { LabelControl } from "../../controls/labelControl"; import { UICompBuilder, withDefault } from "../../generators"; -import { FormDataPropertyView } from "../formComp/formDataConstants"; import { fixOldInputCompData, getStyle, inputRefMethods, - TextInputBasicSection, textInputChildren, TextInputConfigs, - TextInputInteractionSection, TextInputValidationOptions, useTextInputProps, } from "./textInputConstants"; @@ -27,22 +23,14 @@ import { withMethodExposing } from "../../generators/withMethodExposing"; import { styleControl } from "comps/controls/styleControl"; import styled from "styled-components"; import { AnimationStyle, InputFieldStyle, InputLikeStyle, InputLikeStyleType, LabelStyle } from "comps/controls/styleControlConstants"; -import { - hiddenPropertyView, - minLengthPropertyView, - readOnlyPropertyView, - requiredPropertyView, - regexPropertyView, - maxLengthPropertyView, -} from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; import { RefControl } from "comps/controls/refControl"; -import React, { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { migrateOldData } from "comps/generators/simpleGenerators"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewPasswordComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewPasswordComp}))) const PasswordStyle = styled(InputPassword)<{ $style: InputLikeStyleType; }>` @@ -64,7 +52,7 @@ let PasswordTmpComp = (function () { inputFieldStyle: styleControl(InputLikeStyle , 'inputFieldStyle'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), }; - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { const [inputProps, validateState] = useTextInputProps(props); return props.label({ @@ -86,46 +74,10 @@ let PasswordTmpComp = (function () { ...validateState, }); }) - .setPropertyViewFn((children) => { - return ( - <> - - - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{hiddenPropertyView(children)}
-
- {children.visibilityToggle.propertyView({ - label: trans("password.visibilityToggle"), - })} - {readOnlyPropertyView(children)} - {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} -
- {requiredPropertyView(children)} - {children.showValidationWhenEmpty.propertyView({label: trans("prop.showEmptyValidation")})} - {regexPropertyView(children)} - {minLengthPropertyView(children)} - {maxLengthPropertyView(children)} - {children.customRule.propertyView({})} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{children.style.getPropertyView()}
-
{children.labelStyle.getPropertyView()}
-
{children.inputFieldStyle.getPropertyView()}
-
{children.animationStyle.getPropertyView()}
- - )} - - ); - }) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/propertyView.tsx new file mode 100644 index 000000000..fbb87a86a --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/propertyView.tsx @@ -0,0 +1,192 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { + allowClearPropertyView, + disabledPropertyView, + EditorContext, + hiddenPropertyView, + loadingPropertyView, + maxLengthPropertyView, + minLengthPropertyView, + readOnlyPropertyView, + regexPropertyView, + requiredPropertyView +} from "lowcoder-sdk"; +import { + TextInputBasicSection, + TextInputInteractionSection, TextInputValidationSection +} from "@lowcoder-ee/comps/comps/textInputComp/textInputConstants"; +import {FormDataPropertyView} from "@lowcoder-ee/comps/comps/formComp/formDataConstants"; + + +const SetPropertyViewInputComp = ((children: any) => { + return ( + <> + + + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{hiddenPropertyView(children)}
+
+ {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} + {children.showCount.propertyView({ label: trans("prop.showCount") })} + {allowClearPropertyView(children)} + {readOnlyPropertyView(children)} +
+ + + )} + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{children.style.getPropertyView()}
+
{children.labelStyle.getPropertyView()}
+
{children.inputFieldStyle.getPropertyView()}
+
{children.animationStyle.getPropertyView()}
+ + )} + + ); +}); + +const SetPropertyViewMentionComp = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ label: trans("prop.defaultValue") })} + {children.placeholder.propertyView({ + label: trans("prop.placeholder"), + })} + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.mentionList.propertyView({ + label: trans("mention.mentionList"), + }) + )} +
+ + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <>
+ {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} +
+
{hiddenPropertyView(children)}
+
+ {readOnlyPropertyView(children)} +
+ {requiredPropertyView(children)} + {children.validationType.propertyView({ + label: trans("prop.textType"), + })} + {minLengthPropertyView(children)} + {maxLengthPropertyView(children)} + {children.customRule.propertyView({})} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.style.getPropertyView()} +
+
+ {children.animationStyle.getPropertyView()} +
+ + )} + + ); +}); + +const SetPropertyViewPasswordComp = ((children: any) => { + return ( + <> + + + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{hiddenPropertyView(children)}
+
+ {children.visibilityToggle.propertyView({ + label: trans("password.visibilityToggle"), + })} + {readOnlyPropertyView(children)} + {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} +
+ {requiredPropertyView(children)} + {children.showValidationWhenEmpty.propertyView({label: trans("prop.showEmptyValidation")})} + {regexPropertyView(children)} + {minLengthPropertyView(children)} + {maxLengthPropertyView(children)} + {children.customRule.propertyView({})} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{children.style.getPropertyView()}
+
{children.labelStyle.getPropertyView()}
+
{children.inputFieldStyle.getPropertyView()}
+
{children.animationStyle.getPropertyView()}
+ + )} + + ); +}); + +const SetPropertyViewTextAreaComp = ((children: any) => { + return ( + <> + + + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + children.label.getPropertyView() + )} + + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
+ {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && + children.textAreaScrollBar.propertyView({ + label: trans("prop.textAreaScrollBar"), + })} + {hiddenPropertyView(children)} +
+
+ {allowClearPropertyView(children)} + {readOnlyPropertyView(children)} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{children.style.getPropertyView()}
+
{children.labelStyle.getPropertyView()}
+
{children.inputFieldStyle.getPropertyView()}
+
{children.animationStyle.getPropertyView()}
+ + )} + + ); +}); + + +export { SetPropertyViewInputComp, SetPropertyViewMentionComp, SetPropertyViewPasswordComp, SetPropertyViewTextAreaComp } diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx index a41fed3a2..297a9111c 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx @@ -12,11 +12,8 @@ import { FormDataPropertyView } from "../formComp/formDataConstants"; import { fixOldInputCompData, getStyle, - TextInputBasicSection, textInputChildren, TextInputConfigs, - TextInputInteractionSection, - TextInputValidationSection, useTextInputProps, } from "./textInputConstants"; import { withMethodExposing, refMethods } from "../../generators/withMethodExposing"; @@ -24,20 +21,14 @@ import { styleControl } from "comps/controls/styleControl"; import styled from "styled-components"; import { AnimationStyle, InputFieldStyle, InputLikeStyle, InputLikeStyleType, LabelStyle } from "comps/controls/styleControlConstants"; import { TextArea } from "components/TextArea"; -import { - allowClearPropertyView, - hiddenPropertyView, - readOnlyPropertyView, -} from "comps/utils/propertyUtils"; 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 React, { useContext, useEffect } from "react"; -import { EditorContext } from "comps/editorState"; +import React from "react"; import { migrateOldData } from "comps/generators/simpleGenerators"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewTextAreaComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewTextAreaComp}))) const TextAreaStyled = styled(TextArea)<{ $style: InputLikeStyleType; }>` @@ -79,7 +70,7 @@ let TextAreaTmpComp = (function () { inputFieldStyle: styleControl(InputLikeStyle , 'inputFieldStyle'), animationStyle: styleControl(AnimationStyle, 'animationStyle') }; - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { const [inputProps, validateState] = useTextInputProps(props); return props.label({ @@ -103,42 +94,11 @@ let TextAreaTmpComp = (function () { ...validateState, }); }) - .setPropertyViewFn((children) => ( - <> - - - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} - - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && - children.textAreaScrollBar.propertyView({ - label: trans("prop.textAreaScrollBar"), - })} - {hiddenPropertyView(children)} -
-
- {allowClearPropertyView(children)} - {readOnlyPropertyView(children)} -
- - )} + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{children.style.getPropertyView()}
-
{children.labelStyle.getPropertyView()}
-
{children.inputFieldStyle.getPropertyView()}
-
{children.animationStyle.getPropertyView()}
- - )} - - )) + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/timelineComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/timelineComp/propertyView.tsx new file mode 100644 index 000000000..da4a2a5fd --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/timelineComp/propertyView.tsx @@ -0,0 +1,55 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { disabledPropertyView, EditorContext, hiddenPropertyView, loadingPropertyView } from "lowcoder-sdk"; +import {TimelineDataTooltip} from "@lowcoder-ee/comps/comps/timelineComp/timelineConstants"; + +console.log("timeline"); + +const PropertyView = ((children: any) => { + return ( + <> +
+ {children.value.propertyView({ + label: trans("timeLine.value"), + tooltip: TimelineDataTooltip, + placeholder: "[]", + })} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.onEvent.getPropertyView()} + {hiddenPropertyView(children)} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <>
+ {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && + children.verticalScrollbar.propertyView({ + label: trans("prop.showVerticalScrollbar") + })} + {children.mode.propertyView({ + label: trans("timeLine.mode"), + tooltip: trans("timeLine.modeTooltip"), + })} + {children.pending.propertyView({ + label: trans("timeLine.pending"), + tooltip: trans("timeLine.pendingDescription"), + })} + {children.reverse.propertyView({ + label: trans("timeLine.reverse"), + })} +
+
+ {children.style.getPropertyView()} +
+ + )} + + ); +}); + +export default PropertyView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx b/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx index 762ba516a..06240d422 100644 --- a/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx @@ -2,29 +2,18 @@ import React, { useEffect, useState, useContext } from "react"; import { default as Button } from "antd/es/button"; import { changeChildAction, - DispatchType, CompAction, RecordConstructorToView, } from "lowcoder-core"; import { trans } from "i18n"; import { UICompBuilder, withDefault } from "../../generators"; -import { ScrollBar, Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; +import { ScrollBar } from "lowcoder-design"; import { BoolControl } from "comps/controls/boolControl"; -import { stringExposingStateControl } from "comps/controls/codeStateControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { styleControl } from "comps/controls/styleControl"; -import { alignControl } from "comps/controls/alignControl"; import { AutoHeightControl } from "comps/controls/autoHeightControl"; -import { jsonValueExposingStateControl } from "comps/controls/codeStateControl"; import { - ArrayStringControl, - BoolCodeControl, - CodeControlJSONType, jsonControl, - jsonObjectControl, - jsonValueControl, - NumberControl, StringControl, } from "comps/controls/codeControl"; import { @@ -35,21 +24,21 @@ import { TimeLineStyle, heightCalculator, widthCalculator, - marginCalculator, TimeLineStyleType, } from "comps/controls/styleControlConstants"; -import { stateComp, valueComp } from "comps/generators/simpleGenerators"; +import { valueComp } from "comps/generators/simpleGenerators"; import { NameConfig, NameConfigHidden, withExposingConfigs, } from "comps/generators/withExposing"; -import { timelineDate, timelineNode, TimelineDataTooltip } from "./timelineConstants"; +import { timelineDate, timelineNode } from "./timelineConstants"; import { convertTimeLineData } from "./timelineUtils"; import { default as Timeline } from "antd/es/timeline"; -import { EditorContext } from "comps/editorState"; +import {viewMode} from "@lowcoder-ee/util/editor"; import { styled } from "styled-components"; + const TimelineWrapper = styled.div<{ $style: TimeLineStyleType }>` @@ -67,6 +56,7 @@ const TimelineWrapper = styled.div<{ } `; +const PropertyView = React.lazy( async () => await import("./propertyView")); const EventOptions = [ clickEvent, ] as const; @@ -177,53 +167,14 @@ const TimelineComp = ( }; let TimeLineBasicComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => ( + let builder = new UICompBuilder(childrenMap, (props, dispatch) => ( )) - .setPropertyViewFn((children) => ( - <> -
- {children.value.propertyView({ - label: trans("timeLine.value"), - tooltip: TimelineDataTooltip, - placeholder: "[]", - })} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.onEvent.getPropertyView()} - {hiddenPropertyView(children)} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <>
- {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && - children.verticalScrollbar.propertyView({ - label: trans("prop.showVerticalScrollbar") - })} - {children.mode.propertyView({ - label: trans("timeLine.mode"), - tooltip: trans("timeLine.modeTooltip"), - })} - {children.pending.propertyView({ - label: trans("timeLine.pending"), - tooltip: trans("timeLine.pendingDescription"), - })} - {children.reverse.propertyView({ - label: trans("timeLine.reverse"), - })} -
-
- {children.style.getPropertyView()} -
- - )} - - )) - .build(); + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder + .build(); })(); TimeLineBasicComp = class extends TimeLineBasicComp { diff --git a/client/packages/lowcoder/src/comps/comps/timerComp.tsx b/client/packages/lowcoder/src/comps/comps/timerComp.tsx index 5db56ca3a..a280cc1c1 100644 --- a/client/packages/lowcoder/src/comps/comps/timerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/timerComp.tsx @@ -3,18 +3,17 @@ import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, startButtonStyle, StartButtonStyleType, timerStyle, timerStyleType } from "comps/controls/styleControlConstants"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { Button, Space } from "antd"; import { countdownEvent, eventHandlerControl, pauseEvent, resetEvent, resumeEvent, startEvent } from "../controls/eventHandlerControl"; import styled from "styled-components"; -import { useContext, useState, useEffect, useMemo } from "react"; +import React, { useState, useEffect, useMemo } from "react"; import { stateComp } from "../generators"; -import { EditorContext } from "comps/editorState"; import { dropdownControl } from "../controls/dropdownControl"; import { stringExposingStateControl } from "comps/controls/codeStateControl"; import { BoolControl } from "comps/controls/boolControl"; +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/timerComp")); const Container = styled.div<{ $style: timerStyleType | undefined; @@ -222,47 +221,11 @@ const AvatarGroupView = (props: RecordConstructorToView & { }; let AvatarGroupBasicComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => ) - .setPropertyViewFn((children) => ( - <> - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.timerType.propertyView({ - label: trans('timer.timerType') - })} - {children.defaultValue.propertyView({ - label: trans('timer.defaultValue') - })} - {children.hideButton.propertyView({ - label: trans('timer.hideButton') - })} -
-
- {hiddenPropertyView(children)} - {children.onEvent.propertyView()} -
- - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
- {children.style.getPropertyView()} -
-
- {children.animationStyle.getPropertyView()} -
-
- {children.startButtonStyle.getPropertyView()} -
-
- {children.resetButtonStyle.getPropertyView()} -
- - )} - - )) + let builder = new UICompBuilder(childrenMap, (props, dispatch) => ) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs([ { method: { diff --git a/client/packages/lowcoder/src/comps/comps/transferComp.tsx b/client/packages/lowcoder/src/comps/comps/transferComp.tsx index b009cf5ac..a64f1ba94 100644 --- a/client/packages/lowcoder/src/comps/comps/transferComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/transferComp.tsx @@ -5,8 +5,6 @@ import { styleControl } from "comps/controls/styleControl"; import { TransferStyle, TransferStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; -import { Section, sectionNames } from "lowcoder-design"; -import { hiddenPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { NumberControl, StringControl } from "comps/controls/codeControl"; import { default as Transfer } from "antd/es/transfer"; @@ -14,10 +12,11 @@ import type { TransferKey } from "antd/es/transfer/interface"; import ReactResizeDetector 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"; +import React, { useEffect, useRef, useState } from "react"; import { valueComp, withDefault } from "../generators"; import type { TransferDirection } from 'antd/es/transfer'; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/transferComp")); const Container = styled.div<{ $style: TransferStyleType }>` height: 100%; width: 100%; @@ -139,44 +138,13 @@ const TransferView = (props: RecordConstructorToView & { }; let TransferBasicComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return ( )}) - .setPropertyViewFn((children) => ( - <> -
- {children.items.propertyView({ - label: trans("transfer.items"), - })} - {children.targetKeys.propertyView({ - label: trans("transfer.targetKeys"), - })} - {children.sourceTitle.propertyView({ - label: trans("transfer.sourceTitle"), - })} - {children.targetTitle.propertyView({ - label: trans("transfer.targetTitle"), - })} - {children.showSearch.propertyView({ - label: trans("transfer.allowSearch"), - })} - {children.oneWay.propertyView({ - label: trans("transfer.oneWay"), - })} - {children.pagination.propertyView({ - label: trans("transfer.pagination"), - })} - {children.pagination.getView() && children.pageSize.propertyView({ - label: trans("transfer.pageSize"), - })} -
-
- {children.onEvent.propertyView()} - {hiddenPropertyView(children)} -
-
{children.style.getPropertyView()}
- - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/transformerListComp.tsx b/client/packages/lowcoder/src/comps/comps/transformerListComp.tsx index 0bed05a86..e8124e2e2 100644 --- a/client/packages/lowcoder/src/comps/comps/transformerListComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/transformerListComp.tsx @@ -1,20 +1,15 @@ import { getBottomResIcon } from "@lowcoder-ee/util/bottomResUtils"; import { codeControl, TransformerCodeControl } from "comps/controls/codeControl"; -import { EditorContext } from "comps/editorState"; import { MultiCompBuilder } from "comps/generators"; import { bottomResListComp } from "comps/generators/bottomResList"; import { withExposingRaw } from "comps/generators/withExposing"; import { trans } from "i18n"; import { fromRecord } from "lowcoder-core"; -import { DocLink } from "lowcoder-design"; -import { BottomTabs } from "pages/editor/bottom/BottomTabs"; -import { ReactNode } from "react"; +import React, { ReactNode } from "react"; import { BottomResComp, BottomResCompResult, BottomResTypeEnum } from "types/bottomRes"; -import { QueryTutorials } from "util/tutorialUtils"; import { SimpleNameComp } from "./simpleNameComp"; -import { markdownCompCss, TacoMarkDown } from "lowcoder-design"; -import SupaDemoDisplay from "comps/utils/supademoDisplay"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const PropertyView = React.lazy( async () => await import("@lowcoder-ee/comps/comps/propertyView/transformerListComp")); const TransformerItemCompBase = new MultiCompBuilder( { name: SimpleNameComp, @@ -22,56 +17,12 @@ const TransformerItemCompBase = new MultiCompBuilder( }, (props) => props ) - .setPropertyViewFn((children) => { - return ( - - {(editorState) => { - return ( - - {children.script.propertyView({ - placement: "bottom", - styleName: "medium", - width: "100%", - })} - {QueryTutorials.transformer && ( - <>
{trans("transformer.documentationText")} - - {trans("transformer.docLink")} -

- - - - - )} -
- ), - }, - ]} - tabTitle={children.name.getView()} - onRunBtnClick={() => { - editorState.setShowResultCompName(children.name.getView()); - }} - /> - ); - }} - - ); - }) - .build(); +if (viewMode() === "admin") { + TransformerItemCompBase.setPropertyViewFn((children) => ); +} +const TransformerItemCompBaseBuilder = TransformerItemCompBase.build(); -class TransformerAsBottomRes extends TransformerItemCompBase implements BottomResComp { +class TransformerAsBottomRes extends TransformerItemCompBaseBuilder implements BottomResComp { result(): BottomResCompResult | null { const scriptCtrl = this.children.script as InstanceType>; const valueAndMsg = scriptCtrl.getValueAndMsg(); diff --git a/client/packages/lowcoder/src/comps/comps/treeComp/propertyView.tsx b/client/packages/lowcoder/src/comps/comps/treeComp/propertyView.tsx new file mode 100644 index 000000000..6d8555293 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/treeComp/propertyView.tsx @@ -0,0 +1,120 @@ +import { Section, sectionNames } from "components/Section"; +import { trans } from "@lowcoder-ee/i18n"; +import React, { useContext } from "react"; +import { + allowClearPropertyView, + disabledPropertyView, + EditorContext, + hiddenPropertyView, + loadingPropertyView, + placeholderPropertyView, showSearchPropertyView +} from "lowcoder-sdk"; +import {formSection, treeDataPropertyView, valuePropertyView} from "@lowcoder-ee/comps/comps/treeComp/treeUtils"; +import {SelectInputValidationSection} from "@lowcoder-ee/comps/comps/selectInputComp/selectInputConstants"; + +console.log("tree"); + +const SetPropertyViewTreeComp = ((children: any) => { + return ( + <> +
+ {treeDataPropertyView(children)} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> + {formSection(children)} +
+ {children.onEvent.getPropertyView()} + {children.hidden.propertyView({ label: trans("prop.hide") })} + {children.disabled.propertyView({ label: trans("prop.disabled") })} + {children.selectType.propertyView({ label: trans("tree.selectType") })} + {children.selectType.getView() !== "none" && valuePropertyView(children)} + {children.selectType.getView() === "check" && + children.checkStrictly.propertyView({ + label: trans("tree.checkStrictly"), + tooltip: trans("tree.checkStrictlyTooltip"), + })} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && + children.verticalScrollbar.propertyView({ + label: trans("prop.showVerticalScrollbar") + })} + {children.expanded.propertyView({ label: trans("tree.expanded") })} + {children.defaultExpandAll.propertyView({ label: trans("tree.defaultExpandAll") })} + {children.showLine.propertyView({ label: trans("tree.showLine") })} + {children.showLine.getView() && children.showLeafIcon.propertyView({ label: trans("tree.showLeafIcon") })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && (children.label.getPropertyView())} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{children.style.getPropertyView()}
+
{children.labelStyle.getPropertyView()}
+
{children.inputFieldStyle.getPropertyView()}
+ + )} + + ); +}); + +const SetPropertyViewTreeSelectComp = ((children: any) => { + return ( + <> +
+ {treeDataPropertyView(children)} + {placeholderPropertyView(children)} +
+ + {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> + {formSection(children)} +
+ {children.onEvent.getPropertyView()} + {children.hidden.propertyView({ label: trans("prop.hide") })} + {children.disabled.propertyView({ label: trans("prop.disabled") })} + {children.selectType.propertyView({ label: trans("tree.selectType") })} + {valuePropertyView(children)} + {children.selectType.getView() === "check" && + children.checkedStrategy.propertyView({ label: trans("tree.checkedStrategy") })} + {allowClearPropertyView(children)} + {showSearchPropertyView(children)} +
+ + )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( +
+ {children.expanded.propertyView({ label: trans("tree.expanded") })} + {children.defaultExpandAll.propertyView({ label: trans("tree.defaultExpandAll") })} + {children.showLine.propertyView({ label: trans("tree.showLine") })} + {children.showLine.getView() && children.showLeafIcon.propertyView({ label: trans("tree.showLeafIcon") })} +
+ )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( children.label.getPropertyView() )} + + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <> +
{children.style.getPropertyView()}
+
{children.labelStyle.getPropertyView()}
+
{children.inputFieldStyle.getPropertyView()}
+ + )} + + ); +}); + +export { SetPropertyViewTreeComp, SetPropertyViewTreeSelectComp } + + + + diff --git a/client/packages/lowcoder/src/comps/comps/treeComp/treeComp.tsx b/client/packages/lowcoder/src/comps/comps/treeComp/treeComp.tsx index cdfb952b6..1a890704a 100644 --- a/client/packages/lowcoder/src/comps/comps/treeComp/treeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/treeComp/treeComp.tsx @@ -1,9 +1,9 @@ import { RecordConstructorToView } from "lowcoder-core"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { withExposingConfigs } from "comps/generators/withExposing"; -import { ScrollBar, Section, sectionNames } from "lowcoder-design"; +import { ScrollBar } from "lowcoder-design"; import { default as Tree } from "antd/es/tree"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import styled from "styled-components"; import { StyleConfigType, styleControl } from "comps/controls/styleControl"; import { InputFieldStyle, LabelStyle, TreeStyle } from "comps/controls/styleControlConstants"; @@ -12,24 +12,16 @@ import { withDefault } from "comps/generators"; import { dropdownControl } from "comps/controls/dropdownControl"; import { BoolControl } from "comps/controls/boolControl"; import { - formSection, - // intersectSection, treeCommonChildren, - treeDataPropertyView, TreeNameConfigs, useTree, - valuePropertyView, } from "./treeUtils"; -import { - SelectInputValidationSection, -} from "../selectInputComp/selectInputConstants"; import { selectInputValidate } from "../selectInputComp/selectInputConstants"; import { SelectEventHandlerControl } from "comps/controls/eventHandlerControl"; import { trans } from "i18n"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; import { AutoHeightControl } from "@lowcoder-ee/comps/controls/autoHeightControl"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewTreeComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewTreeComp}))) type TreeStyleType = StyleConfigType; const Container = styled.div` @@ -135,58 +127,13 @@ const TreeCompView = (props: RecordConstructorToView) => { }; let TreeBasicComp = (function () { - return new UICompBuilder(childrenMap, (props) => { + let builder = new UICompBuilder(childrenMap, (props) => { return()} ) - .setPropertyViewFn((children) => ( - <> -
- {treeDataPropertyView(children)} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> - {formSection(children)} -
- {children.onEvent.getPropertyView()} - {children.hidden.propertyView({ label: trans("prop.hide") })} - {children.disabled.propertyView({ label: trans("prop.disabled") })} - {children.selectType.propertyView({ label: trans("tree.selectType") })} - {children.selectType.getView() !== "none" && valuePropertyView(children)} - {children.selectType.getView() === "check" && - children.checkStrictly.propertyView({ - label: trans("tree.checkStrictly"), - tooltip: trans("tree.checkStrictlyTooltip"), - })} -
- - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && - children.verticalScrollbar.propertyView({ - label: trans("prop.showVerticalScrollbar") - })} - {children.expanded.propertyView({ label: trans("tree.expanded") })} - {children.defaultExpandAll.propertyView({ label: trans("tree.defaultExpandAll") })} - {children.showLine.propertyView({ label: trans("tree.showLine") })} - {children.showLine.getView() && children.showLeafIcon.propertyView({ label: trans("tree.showLeafIcon") })} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && (children.label.getPropertyView())} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{children.style.getPropertyView()}
-
{children.labelStyle.getPropertyView()}
-
{children.inputFieldStyle.getPropertyView()}
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/treeComp/treeSelectComp.tsx b/client/packages/lowcoder/src/comps/comps/treeComp/treeSelectComp.tsx index c1a3f8157..00d953137 100644 --- a/client/packages/lowcoder/src/comps/comps/treeComp/treeSelectComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/treeComp/treeSelectComp.tsx @@ -3,40 +3,28 @@ import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { NameConfig, withExposingConfigs } from "comps/generators/withExposing"; import { Section, sectionNames, ValueFromOption } from "lowcoder-design"; import { default as TreeSelect } from "antd/es/tree-select"; -import { useEffect } from "react"; +import React, { useEffect } from "react"; import styled from "styled-components"; import { styleControl } from "comps/controls/styleControl"; import { InputFieldStyle, LabelStyle, TreeSelectStyle, TreeSelectStyleType } from "comps/controls/styleControlConstants"; import { LabelControl } from "comps/controls/labelControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { - advancedSection, - expandSection, - formSection, treeCommonChildren, - treeDataPropertyView, TreeNameConfigs, useTree, - valuePropertyView, } from "./treeUtils"; import { baseSelectRefMethods, getStyle } from "../selectInputComp/selectCompConstants"; import { useSelectInputValidate, SelectInputValidationSection } from "../selectInputComp/selectInputConstants"; import { StringControl } from "comps/controls/codeControl"; import { SelectEventHandlerControl } from "comps/controls/eventHandlerControl"; -import { selectInputValidate } from "../selectInputComp/selectInputConstants"; import { BoolControl } from "comps/controls/boolControl"; import { stateComp, withDefault } from "comps/generators/simpleGenerators"; import { trans } from "i18n"; -import { - allowClearPropertyView, - placeholderPropertyView, - showSearchPropertyView, -} from "comps/utils/propertyUtils"; import { BaseSelectRef } from "rc-select"; import { RefControl } from "comps/controls/refControl"; -import { useContext } from "react"; -import { EditorContext } from "comps/editorState"; - +import {viewMode} from "@lowcoder-ee/util/editor"; +const SetPropertyViewTreeSelectComp = React.lazy( async () => await import("./propertyView").then(module => ({default: module.SetPropertyViewTreeSelectComp}))) const StyledTreeSelect = styled(TreeSelect)<{ $style: TreeSelectStyleType }>` width: 100%; ${(props) => props.$style && getStyle(props.$style)} @@ -146,54 +134,14 @@ const TreeCompView = ( }; let TreeBasicComp = (function () { - return new UICompBuilder(childrenMap, (props, dispatch) => { + let builder = new UICompBuilder(childrenMap, (props, dispatch) => { return( )}) - .setPropertyViewFn((children) => ( - <> -
- {treeDataPropertyView(children)} - {placeholderPropertyView(children)} -
- - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> - {formSection(children)} -
- {children.onEvent.getPropertyView()} - {children.hidden.propertyView({ label: trans("prop.hide") })} - {children.disabled.propertyView({ label: trans("prop.disabled") })} - {children.selectType.propertyView({ label: trans("tree.selectType") })} - {valuePropertyView(children)} - {children.selectType.getView() === "check" && - children.checkedStrategy.propertyView({ label: trans("tree.checkedStrategy") })} - {allowClearPropertyView(children)} - {showSearchPropertyView(children)} -
- - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( -
- {children.expanded.propertyView({ label: trans("tree.expanded") })} - {children.defaultExpandAll.propertyView({ label: trans("tree.defaultExpandAll") })} - {children.showLine.propertyView({ label: trans("tree.showLine") })} - {children.showLine.getView() && children.showLeafIcon.propertyView({ label: trans("tree.showLeafIcon") })} -
- )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( children.label.getPropertyView() )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> -
{children.style.getPropertyView()}
-
{children.labelStyle.getPropertyView()}
-
{children.inputFieldStyle.getPropertyView()}
- - )} - - )) + if (viewMode() === "admin") { + builder.setPropertyViewFn((children) => ); + } + return builder .setExposeMethodConfigs(baseSelectRefMethods) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/triContainerComp/triContainerCompBuilder.tsx b/client/packages/lowcoder/src/comps/comps/triContainerComp/triContainerCompBuilder.tsx index 8a3a9346c..732ac69e2 100644 --- a/client/packages/lowcoder/src/comps/comps/triContainerComp/triContainerCompBuilder.tsx +++ b/client/packages/lowcoder/src/comps/comps/triContainerComp/triContainerCompBuilder.tsx @@ -49,9 +49,6 @@ export class ContainerCompBuilder< return this; } build() { - if (!this.propertyViewFn) { - throw new Error("no propertyViewFn provided"); - } if (this.childrenMap.hasOwnProperty("container")) { throw new Error("already has container"); } diff --git a/client/packages/lowcoder/src/comps/controls/alignControl.tsx b/client/packages/lowcoder/src/comps/controls/alignControl.tsx index a38937819..43d806c37 100644 --- a/client/packages/lowcoder/src/comps/controls/alignControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/alignControl.tsx @@ -1,11 +1,11 @@ -import { ValueFromOption } from "lowcoder-design"; -import { AlignCenter, AlignJustify, AlignLeft, AlignRight } from "lowcoder-design"; +import {ValueFromOption, AlignLeft, AlignCenter, AlignRight, AlignJustify} from "lowcoder-design"; import { dropdownControl } from "./dropdownControl"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const AlignOptions = [ - { label: , value: "left" }, - { label: , value: "center" }, - { label: , value: "right" }, + { label: , value: "left" }, + { label: , value: "center" }, + { label: , value: "right" }, ] as const; export function alignControl(defaultValue: ValueFromOption = "left") { @@ -14,7 +14,7 @@ export function alignControl(defaultValue: ValueFromOption const AlignOptionsWithJustify = [ ...AlignOptions, - { label: , value: "justify" }, + { label: , value: "justify" }, ] as const; export function alignWithJustifyControl( diff --git a/client/packages/lowcoder/src/comps/controls/colorControl.tsx b/client/packages/lowcoder/src/comps/controls/colorControl.tsx index 6b45a982d..e19ae430f 100644 --- a/client/packages/lowcoder/src/comps/controls/colorControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/colorControl.tsx @@ -1,9 +1,10 @@ import { ColorCodeControl } from "./codeControl"; -import { ColorSelect, controlItem, ControlPropertyViewWrapper, IconDep } from "lowcoder-design"; +import {ColorSelect, controlItem, ControlPropertyViewWrapper, IconDep} from "lowcoder-design"; import styled from "styled-components"; import React, { useContext, useEffect, useState } from "react"; import { ControlParams } from "./controlParams"; import { trans } from "i18n"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; import { useThemeColors } from "@lowcoder-ee/util/hooks"; const ColorContainer = styled.div` @@ -21,7 +22,7 @@ const ColorContainer = styled.div` const DEFAULT_COLOR = "#ffffff"; -const DepIcon = styled(IconDep)` +const DepIcon = styled(MultiIcon(IconDep))` margin-right: 4px; `; @@ -95,7 +96,7 @@ function ColorItem(props: { const [focus, setFocus] = useState(false); const inputRef = React.createRef(); const containerRef = React.createRef(); - + const currentThemeColors = useThemeColors(param.allowGradient); const input = propertyView.call(controlThis, { diff --git a/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx b/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx index ea8e6f006..30b65c59f 100644 --- a/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx @@ -1,11 +1,8 @@ import { SimpleAbstractComp } from "lowcoder-core"; import { AlignBottom, - AlignCenter, - AlignJustify, - AlignLeft, - AlignRight, - AlignTop, + AlignCenter, AlignJustify, + AlignLeft, AlignRight, AlignTop, controlItem, Dropdown, OptionsType, @@ -13,6 +10,7 @@ import { } from "lowcoder-design"; import { ReactNode, useEffect, useState } from "react"; import { ControlParams } from "./controlParams"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; type DropdownOptions = T | (() => Promise); @@ -128,28 +126,28 @@ export function dropdownControl( } export const alignOptions = [ - { label: , value: "left" }, - { label: , value: "center" }, - { label: , value: "right" }, + { label: , value: "left" }, + { label: , value: "center" }, + { label: , value: "right" }, ] as const; const positionOptions = [ - { label: , value: "top" }, - { label: , value: "bottom" }, - { label: , value: "left" }, - { label: , value: "right" }, + { label: , value: "top" }, + { label: , value: "bottom" }, + { label: , value: "left" }, + { label: , value: "right" }, ] as const; const sideOptions = [ - { label: , value: "left" }, - { label: , value: "right" }, + { label: , value: "left" }, + { label: , value: "right" }, ] as const; const alignWithStretchOptions = [ - { label: , value: "left" }, - { label: , value: "center" }, - { label: , value: "right" }, - { label: , value: "stretch" }, + { label: , value: "left" }, + { label: , value: "center" }, + { label: , value: "right" }, + { label: , value: "stretch" }, ] as const; export const HorizontalAlignmentControl = dropdownControl(alignOptions, "left"); diff --git a/client/packages/lowcoder/src/comps/controls/iconControl.tsx b/client/packages/lowcoder/src/comps/controls/iconControl.tsx index 767000ad8..f86efdbf2 100644 --- a/client/packages/lowcoder/src/comps/controls/iconControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/iconControl.tsx @@ -14,8 +14,7 @@ import { import { BlockGrayLabel, controlItem, - ControlPropertyViewWrapper, - DeleteInputIcon, + ControlPropertyViewWrapper, DeleteInputIcon, iconPrefix, IconSelect, IconSelectBase, @@ -31,6 +30,7 @@ import styled from "styled-components"; import { setFieldsNoTypeCheck } from "util/objectUtils"; import { StringControl } from "./codeControl"; import { ControlParams } from "./controlParams"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; import { IconDictionary } from "@lowcoder-ee/constants/iconConstants"; const ButtonWrapper = styled.div` @@ -51,7 +51,7 @@ const ButtonText = styled.div` text-overflow: ellipsis; text-align: left; `; -const StyledDeleteInputIcon = styled(DeleteInputIcon)` +const StyledDeleteInputIcon = styled(MultiIcon(DeleteInputIcon))` margin-left: auto; cursor: pointer; diff --git a/client/packages/lowcoder/src/comps/controls/labelControl.tsx b/client/packages/lowcoder/src/comps/controls/labelControl.tsx index bfe9a42c0..70733449e 100644 --- a/client/packages/lowcoder/src/comps/controls/labelControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/labelControl.tsx @@ -6,16 +6,15 @@ import { NumberControl, StringControl } from "comps/controls/codeControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { withDefault } from "comps/generators"; import { MultiCompBuilder } from "comps/generators/multi"; -import { labelCss, Section, Tooltip, UnderlineCss } from "lowcoder-design"; +import {AlignLeft, AlignRight, labelCss, Section, StarIcon, Tooltip, UnderlineCss} from "lowcoder-design"; import { ValueFromOption } from "lowcoder-design"; import { isEmpty } from "lodash"; import { Fragment, ReactElement, ReactNode } from "react"; import styled, { css } from "styled-components"; -import { AlignLeft } from "lowcoder-design"; -import { AlignRight } from "lowcoder-design"; -import { StarIcon } from "lowcoder-design"; + import { AnimationStyleType, LabelStyleType, heightCalculator, widthCalculator } from "./styleControlConstants"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; type LabelViewProps = Pick & { children: ReactNode; @@ -29,7 +28,7 @@ type LabelViewProps = Pick; const AlignOptions = [ - { label: , value: "left" }, - { label: , value: "right" }, + { label: , value: "left" }, + { label: , value: "right" }, ] as const; type AlignOptionsValue = ValueFromOption; diff --git a/client/packages/lowcoder/src/comps/controls/optionsControl.tsx b/client/packages/lowcoder/src/comps/controls/optionsControl.tsx index a9b7da2f6..1d6b3f8e5 100644 --- a/client/packages/lowcoder/src/comps/controls/optionsControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/optionsControl.tsx @@ -21,14 +21,9 @@ import { withFunction, } from "lowcoder-core"; import { - AutoArea, - CompressIcon, - controlItem, - ExpandIcon, - IconRadius, - Option, - WidthIcon, - ImageCompIcon, + AutoArea, CompressIcon, + controlItem, ExpandIcon, IconRadius, + Option, WidthIcon, } from "lowcoder-design"; import styled from "styled-components"; import { lastValueIfEqual } from "util/objectUtils"; @@ -39,6 +34,7 @@ import { ControlItemCompBuilder } from "comps/generators/controlCompBuilder"; import { ColorControl } from "./colorControl"; import { StringStateControl } from "./codeStateControl"; import { reduceInContext } from "../utils/reduceContext"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const OptionTypes = [ { @@ -594,7 +590,7 @@ const ColumnOption = new MultiCompBuilder( {children.minWidth.propertyView({ label: trans('responsiveLayout.minWidth'), - preInputNode: , + preInputNode: , placeholder: '3px', })} {children.background.propertyView({ @@ -602,7 +598,7 @@ const ColumnOption = new MultiCompBuilder( })} {children.backgroundImage.propertyView({ label: `Background Image`, - // preInputNode: , + // preInputNode: , placeholder: 'https://temp.im/350x400', })} {children.border.propertyView({ @@ -610,17 +606,17 @@ const ColumnOption = new MultiCompBuilder( })} {children.radius.propertyView({ label: trans('style.borderRadius'), - preInputNode: , + preInputNode: , placeholder: '3px', })} {children.margin.propertyView({ label: trans('style.margin'), - preInputNode: , + preInputNode: , placeholder: '3px', })} {children.padding.propertyView({ label: trans('style.padding'), - preInputNode: , + preInputNode: , placeholder: '3px', })} diff --git a/client/packages/lowcoder/src/comps/controls/shapeControl.tsx b/client/packages/lowcoder/src/comps/controls/shapeControl.tsx index fafc5170c..2d33d1f4b 100644 --- a/client/packages/lowcoder/src/comps/controls/shapeControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/shapeControl.tsx @@ -19,22 +19,21 @@ import { BlockGrayLabel, controlItem, ControlPropertyViewWrapper, - DeleteInputIcon, iconPrefix, ShapeSelect, IconSelectBase, removeQuote, - SwitchJsIcon, SwitchWrapper, TacoButton, wrapperToControlItem, - useShape, + useShape, SwitchJsIcon, DeleteInputIcon, } from "lowcoder-design"; import { ReactNode, useCallback, useState } from "react"; import styled from "styled-components"; import { setFieldsNoTypeCheck } from "util/objectUtils"; import { StringControl } from "./codeControl"; import { ControlParams } from "./controlParams"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const ButtonWrapper = styled.div` width: 100%; @@ -54,7 +53,7 @@ const ButtonText = styled.div` text-overflow: ellipsis; text-align: left; `; -const StyledDeleteInputIcon = styled(DeleteInputIcon)` +const StyledDeleteInputIcon = styled(MultiIcon(DeleteInputIcon))` margin-left: auto; cursor: pointer; diff --git a/client/packages/lowcoder/src/comps/controls/styleControl.tsx b/client/packages/lowcoder/src/comps/controls/styleControl.tsx index a9f8372b7..f24c856b1 100644 --- a/client/packages/lowcoder/src/comps/controls/styleControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/styleControl.tsx @@ -7,29 +7,19 @@ import { ThemeContext } from "comps/utils/themeContext"; import { trans } from "i18n"; import _, { omit, values } from "lodash"; import { - controlItem, - IconReset, - ExpandIcon, - CompressIcon, - TextSizeIcon, - TextTransformationIcon, - FontFamilyIcon, - TextWeightIcon, - ShowBorderIcon, + BorderRadiusIcon, + BorderStyleIcon, BorderWidthIcon, + CompressIcon, + controlItem, + ExpandIcon, FontFamilyIcon, IconReset, ImageCompIconSmall, - RotationIcon, - TextDecorationIcon, - BorderStyleIcon, - BorderRadiusIcon, - TextStyleIcon, - StarSmileIcon, - TimerFlashIcon, - Timer2Icon, - RefreshLineIcon, - ShadowIcon, + LineHeightIcon, OpacityIcon, - LineHeightIcon + RefreshLineIcon, RotationIcon, + ShadowIcon, + StarSmileIcon, TextDecorationIcon, TextSizeIcon, TextStyleIcon, TextTransformationIcon, TextWeightIcon, Timer2Icon, + TimerFlashIcon } from 'lowcoder-design'; import { useContext } from "react"; import styled from "styled-components"; @@ -87,6 +77,7 @@ import { defaultTheme } from "@lowcoder-ee/constants/themeConstants"; import { CompContext } from "../utils/compContext"; import { EditorContext } from "../editorState"; import { inputFieldComps } from "@lowcoder-ee/constants/compConstants"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; function isSimpleColorConfig(config: SingleColorConfig): config is SimpleColorConfig { return config.hasOwnProperty("color"); @@ -760,70 +751,70 @@ const StyleContent = styled.div` border-radius: 0 0 6px 6px; } `; -const LineHeightPropIcon = styled(LineHeightIcon)` +const LineHeightPropIcon = styled(MultiIcon(LineHeightIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const MarginIcon = styled(ExpandIcon)` margin: 0 8px 0 2px; color: #888`; -const PaddingIcon = styled(CompressIcon)` margin: 0 8px 0 2px; color: #888`; -const RadiusPropIcon = styled(BorderRadiusIcon)` width: 24px; margin: 0 11px 0 0px; color: #888`; -const BorderPropIcon = styled(BorderWidthIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const BorderStylePropIcon = styled(BorderStyleIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const MarginIcon = styled(MultiIcon(ExpandIcon))` margin: 0 8px 0 2px; color: #888`; +const PaddingIcon = styled(MultiIcon(CompressIcon))` margin: 0 8px 0 2px; color: #888`; +const RadiusPropIcon = styled(MultiIcon(BorderRadiusIcon))` width: 24px; margin: 0 11px 0 0px; color: #888`; +const BorderPropIcon = styled(MultiIcon(BorderWidthIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const BorderStylePropIcon = styled(MultiIcon(BorderStyleIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledBackgroundImageIcon = styled(ImageCompIconSmall)` margin: 0 6px 0 0; padding: 2px; color: #888`; -const AnimationIterationCountPropIcon = styled(RefreshLineIcon)` +const StyledBackgroundImageIcon = styled(MultiIcon(ImageCompIconSmall))` margin: 0 6px 0 0; padding: 2px; color: #888`; +const AnimationIterationCountPropIcon = styled(MultiIcon(RefreshLineIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const OpacityPropIcon = styled(OpacityIcon)` +const OpacityPropIcon = styled(MultiIcon(OpacityIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const BoxShadowColorPropIcon = styled(BorderWidthIcon)` +const BoxShadowColorPropIcon = styled(MultiIcon(BorderWidthIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const BoxShadowPropIcon = styled(ShadowIcon)` +const BoxShadowPropIcon = styled(MultiIcon(ShadowIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const AnimationPropIcon = styled(StarSmileIcon)` +const AnimationPropIcon = styled(MultiIcon(StarSmileIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const AnimationDelayPropIcon = styled(TimerFlashIcon)` +const AnimationDelayPropIcon = styled(MultiIcon(TimerFlashIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const AnimationDurationPropIcon = styled(Timer2Icon)` +const AnimationDurationPropIcon = styled(MultiIcon(Timer2Icon))` margin: 0 8px 0 -3px; padding: 3px; color: #888; `; -const RotationPropIcon = styled(RotationIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const RotationPropIcon = styled(MultiIcon(RotationIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledTextSizeIcon = styled(TextSizeIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledTextTransformIcon = styled(TextTransformationIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledFontFamilyIcon = styled(FontFamilyIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledTextWeightIcon = styled(TextWeightIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledTextStyleIcon = styled(TextStyleIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const StyledTextDecorationPropIcon = styled(TextDecorationIcon)` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const StyledTextSizeIcon = styled(MultiIcon(TextSizeIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const StyledTextTransformIcon = styled(MultiIcon(TextTransformationIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const StyledFontFamilyIcon = styled(MultiIcon(FontFamilyIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const StyledTextWeightIcon = styled(MultiIcon(TextWeightIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const StyledTextStyleIcon = styled(MultiIcon(TextStyleIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; +const StyledTextDecorationPropIcon = styled(MultiIcon(TextDecorationIcon))` margin: 0 8px 0 -3px; padding: 3px; color: #888`; -const ResetIcon = styled(IconReset)` +const ResetIcon = styled(MultiIcon(IconReset))` &:hover g g { stroke: #315efb; } diff --git a/client/packages/lowcoder/src/comps/index-test.tsx b/client/packages/lowcoder/src/comps/index-test.tsx index b832d8a1b..716f119af 100644 --- a/client/packages/lowcoder/src/comps/index-test.tsx +++ b/client/packages/lowcoder/src/comps/index-test.tsx @@ -74,7 +74,7 @@ import { AutoCompleteComp } from "./comps/autoCompleteComp/autoCompleteComp"; import { JsonLottieComp } from "./comps/jsonComp/jsonLottieComp"; import { ResponsiveLayoutComp } from "./comps/responsiveLayout"; import { ControlButton } from "./comps/meetingComp/controlButton"; - +import { MultiIcon } from "@lowcoder-ee/comps/comps/multiIconDisplay"; import { AudioCompIcon, ButtonCompIcon, @@ -158,7 +158,7 @@ var uiCompMap: Registry = { enName: "Chart", description: trans("uiComp.chartCompDesc"), categories: ["dashboards"], - icon: ChartCompIcon, + icon: MultiIcon(ChartCompIcon), comp: remoteComp({ ...builtInRemoteComps, compName: "chart" }), keywords: trans("uiComp.chartCompKeywords"), layoutInfo: { @@ -171,7 +171,7 @@ var uiCompMap: Registry = { enName: "Sharing", description: trans("meeting.sharingCompName"), categories: ["collaboration"], - icon: VideoCompIcon, + icon: MultiIcon(VideoCompIcon), keywords: trans("meeting.meetingCompKeywords"), // comp: VideoSharingStreamComp, comp: remoteComp({ ...builtInRemoteComps, compName: "meetingSharing" }), @@ -186,7 +186,7 @@ var uiCompMap: Registry = { enName: "Video", description: trans("meeting.videoCompName"), categories: ["collaboration"], - icon: VideoCompIcon, + icon: MultiIcon(VideoCompIcon), keywords: trans("meeting.meetingCompKeywords"), // comp: VideoMeetingStreamComp, comp: remoteComp({ ...builtInRemoteComps, compName: "meetingStream" }), @@ -202,7 +202,7 @@ var uiCompMap: Registry = { comp: remoteComp({ ...builtInRemoteComps, compName: "meetingController" }), description: trans("meeting.meetingCompDesc"), categories: ["collaboration"], - icon: DrawerCompIcon, + icon: MultiIcon(DrawerCompIcon), keywords: trans("meeting.meetingCompKeywords"), // comp: VideoMeetingControllerComp, withoutLoading: true, @@ -213,7 +213,7 @@ var uiCompMap: Registry = { comp: remoteComp({ ...builtInRemoteComps, compName: "mermaid" }), description: trans("uiComp.mermaidCompDesc"), categories: ["dashboards"], - icon: MermaidCompIcon, + icon: MultiIcon(MermaidCompIcon), keywords: trans("uiComp.mermaidCompKeywords"), layoutInfo: { w: 12, @@ -225,7 +225,7 @@ var uiCompMap: Registry = { enName: "timeline", description: trans("uiComp.timelineCompDesc"), categories: ["dashboards"], - icon: TimeLineCompIcon, + icon: MultiIcon(TimeLineCompIcon), keywords: trans("uiComp.timelineCompKeywords"), comp: TimeLineComp, layoutInfo: { @@ -238,7 +238,7 @@ var uiCompMap: Registry = { enName: "Table", description: trans("uiComp.tableCompDesc"), categories: ["dashboards", "projectmanagement"], - icon: TableCompIcon, + icon:MultiIcon(TableCompIcon), keywords: trans("uiComp.tableCompKeywords"), comp: TableComp, layoutInfo: { @@ -253,7 +253,7 @@ var uiCompMap: Registry = { enName: "Slider", description: trans("uiComp.sliderCompDesc"), categories: ["dashboards"], - icon: SliderCompIcon, + icon: MultiIcon(SliderCompIcon), keywords: trans("uiComp.sliderCompKeywords"), comp: SliderComp, layoutInfo: { @@ -266,7 +266,7 @@ var uiCompMap: Registry = { enName: "Range Slider", description: trans("uiComp.rangeSliderCompDesc"), categories: ["dashboards"], - icon: RangeSliderCompIcon, + icon: MultiIcon(RangeSliderCompIcon), keywords: trans("uiComp.rangeSliderCompKeywords"), comp: RangeSliderComp, layoutInfo: { @@ -282,7 +282,7 @@ var uiCompMap: Registry = { enName: "Responsive Layout", description: trans("uiComp.responsiveLayoutCompDesc"), categories: ["layout"], - icon: ResponsiveLayoutCompIcon, + icon: MultiIcon(ResponsiveLayoutCompIcon), keywords: trans("uiComp.responsiveLayoutCompKeywords"), comp: ResponsiveLayoutComp, withoutLoading: true, @@ -297,7 +297,7 @@ var uiCompMap: Registry = { enName: "Container", description: trans("uiComp.containerCompDesc"), categories: ["layout"], - icon: ContainerCompIcon, + icon: MultiIcon(ContainerCompIcon), keywords: trans("uiComp.containerCompKeywords"), comp: ContainerComp, withoutLoading: true, @@ -314,7 +314,7 @@ var uiCompMap: Registry = { enName: "Tabbed Container", description: trans("uiComp.tabbedContainerCompDesc"), categories: ["layout"], - icon: TabbedContainerCompIcon, + icon: MultiIcon(TabbedContainerCompIcon), keywords: trans("uiComp.tabbedContainerCompKeywords"), comp: TabbedContainerComp, withoutLoading: true, @@ -330,7 +330,7 @@ var uiCompMap: Registry = { enName: "Collapsible Container", description: trans("uiComp.collapsibleContainerCompDesc"), categories: ["layout"], - icon: CollapsibleContainerCompIcon, + icon: MultiIcon(CollapsibleContainerCompIcon), keywords: trans("uiComp.collapsibleContainerCompKeywords"), comp: ContainerComp, withoutLoading: true, @@ -345,7 +345,7 @@ var uiCompMap: Registry = { listView: { name: trans("uiComp.listViewCompName"), enName: "List View", - icon: ListViewCompIcon, + icon: MultiIcon(ListViewCompIcon), description: trans("uiComp.listViewCompDesc"), categories: ["layout"], keywords: trans("uiComp.listViewCompKeywords"), @@ -360,7 +360,7 @@ var uiCompMap: Registry = { grid: { name: trans("uiComp.gridCompName"), enName: "Grid", - icon: GridCompIcon, + icon: MultiIcon(GridCompIcon), description: trans("uiComp.gridCompDesc"), categories: ["layout"], keywords: trans("uiComp.gridCompKeywords"), @@ -375,7 +375,7 @@ var uiCompMap: Registry = { modal: { name: trans("uiComp.modalCompName"), enName: "Modal", - icon: ModalCompIcon, + icon: MultiIcon(ModalCompIcon), description: trans("uiComp.modalCompDesc"), categories: ["layout"], keywords: trans("uiComp.modalCompKeywords"), @@ -387,7 +387,7 @@ var uiCompMap: Registry = { enName: "Drawer", description: trans("uiComp.drawerCompDesc"), categories: ["layout"], - icon: DrawerCompIcon, + icon: MultiIcon(DrawerCompIcon), keywords: trans("uiComp.drawerCompKeywords"), comp: DrawerComp, withoutLoading: true, @@ -396,7 +396,7 @@ var uiCompMap: Registry = { name: trans("uiComp.navigationCompName"), enName: "Navigation", description: trans("uiComp.navigationCompDesc"), - icon: NavComIcon, + icon: MultiIcon(NavComIcon), categories: ["layout"], keywords: trans("uiComp.navigationCompKeywords"), comp: NavComp, @@ -410,7 +410,7 @@ var uiCompMap: Registry = { enName: "Cascader", description: trans("uiComp.cascaderCompDesc"), categories: ["layout"], - icon: CascaderCompIcon, + icon: MultiIcon(CascaderCompIcon), keywords: trans("uiComp.cascaderCompKeywords"), comp: CascaderWithDefault, layoutInfo: { @@ -423,7 +423,7 @@ var uiCompMap: Registry = { enName: "Link", description: trans("uiComp.linkCompDesc"), categories: ["layout"], - icon: LinkCompIcon, + icon: MultiIcon(LinkCompIcon), keywords: trans("uiComp.linkCompKeywords"), comp: LinkComp, layoutInfo: { @@ -436,7 +436,7 @@ var uiCompMap: Registry = { enName: "Divider", description: trans("uiComp.dividerCompDesc"), categories: ["layout"], - icon: DividerCompIcon, + icon: MultiIcon(DividerCompIcon), keywords: trans("uiComp.dividerCompKeywords"), comp: DividerComp, layoutInfo: { @@ -452,7 +452,7 @@ var uiCompMap: Registry = { enName: "Calendar", description: trans("uiComp.calendarCompDesc"), categories: ["scheduling", "projectmanagement"], - icon: CalendarCompIcon, + icon: MultiIcon(CalendarCompIcon), keywords: trans("uiComp.calendarCompKeywords"), comp: remoteComp({ ...builtInRemoteComps, compName: "calendar" }), layoutInfo: { @@ -468,7 +468,7 @@ var uiCompMap: Registry = { // enName: "Sharing", // description: trans("meeting.sharingCompName"), // categories: ["collaboration"], - // icon: VideoCompIcon, + // icon: MultiIcon(VideoCompIcon), // keywords: trans("meeting.meetingCompKeywords"), // comp: VideoSharingStreamComp, // withoutLoading: true, @@ -482,7 +482,7 @@ var uiCompMap: Registry = { // enName: "Video", // description: trans("meeting.videoCompName"), // categories: ["collaboration"], - // icon: VideoCompIcon, + // icon: MultiIcon(VideoCompIcon), // keywords: trans("meeting.meetingCompKeywords"), // comp: VideoMeetingStreamComp, // withoutLoading: true, @@ -496,7 +496,7 @@ var uiCompMap: Registry = { // enName: "Drawer", // description: trans("meeting.meetingCompDesc"), // categories: ["collaboration"], - // icon: DrawerCompIcon, + // icon: MultiIcon(DrawerCompIcon), // keywords: trans("meeting.meetingCompKeywords"), // comp: VideoMeetingControllerComp, // withoutLoading: true, @@ -506,7 +506,7 @@ var uiCompMap: Registry = { enName: "comment", description: trans("uiComp.commentCompDesc"), categories: ["forms", "collaboration"], - icon: CommentCompIcon, + icon: MultiIcon(CommentCompIcon), keywords: trans("uiComp.commentCompKeywords"), comp: CommentComp, layoutInfo: { @@ -519,7 +519,7 @@ var uiCompMap: Registry = { enName: "mention", description: trans("uiComp.mentionCompDesc"), categories: ["forms", "collaboration"], - icon: MentionCompIcon, + icon: MultiIcon(MentionCompIcon), keywords: trans("uiComp.mentionCompKeywords"), comp: MentionComp, }, @@ -531,7 +531,7 @@ var uiCompMap: Registry = { enName: "Form", description: trans("uiComp.formCompDesc"), categories: ["forms"], - icon: FormCompIcon, + icon: MultiIcon(FormCompIcon), keywords: trans("uiComp.formCompKeywords"), comp: FormComp, withoutLoading: true, @@ -548,7 +548,7 @@ var uiCompMap: Registry = { enName: "JSON Schema Form", description: trans("uiComp.jsonSchemaFormCompDesc"), categories: ["forms"], - icon: JsonFormCompIcon, + icon: MultiIcon(JsonFormCompIcon), keywords: trans("uiComp.jsonSchemaFormCompKeywords"), comp: JsonSchemaFormComp, layoutInfo: { @@ -561,7 +561,7 @@ var uiCompMap: Registry = { enName: "JSON Editor", description: trans("uiComp.jsonEditorCompDesc"), categories: ["forms"], - icon: JsonEditorCompIcon, + icon: MultiIcon(JsonEditorCompIcon), keywords: trans("uiComp.jsonEditorCompKeywords"), comp: JsonEditorComp, layoutInfo: { @@ -574,7 +574,7 @@ var uiCompMap: Registry = { enName: "JSON Explorer", description: trans("uiComp.jsonExplorerCompDesc"), categories: ["forms"], - icon: JsonExplorerCompIcon, + icon: MultiIcon(JsonExplorerCompIcon), keywords: trans("uiComp.jsonExplorerCompKeywords"), comp: JsonExplorerComp, layoutInfo: { @@ -587,7 +587,7 @@ var uiCompMap: Registry = { enName: "Rich Text Editor", categories: ["forms"], description: trans("uiComp.richTextEditorCompDesc"), - icon: RichTextEditorCompIcon, + icon: MultiIcon(RichTextEditorCompIcon), keywords: trans("uiComp.richTextEditorCompKeywords"), comp: RichTextEditorComp, layoutInfo: { @@ -600,7 +600,7 @@ var uiCompMap: Registry = { enName: "Input", description: trans("uiComp.inputCompDesc"), categories: ["forms"], - icon: InputCompIcon, + icon: MultiIcon(InputCompIcon), keywords: trans("uiComp.inputCompKeywords"), comp: InputComp, layoutInfo: { @@ -613,7 +613,7 @@ var uiCompMap: Registry = { enName: "Password", description: trans("uiComp.passwordCompDesc"), categories: ["forms"], - icon: PasswordCompIcon, + icon: MultiIcon(PasswordCompIcon), keywords: trans("uiComp.passwordCompKeywords"), comp: PasswordComp, layoutInfo: { @@ -626,7 +626,7 @@ var uiCompMap: Registry = { enName: "Number Input", description: trans("uiComp.numberInputCompDesc"), categories: ["forms"], - icon: NumberInputCompIcon, + icon: MultiIcon(NumberInputCompIcon), keywords: trans("uiComp.numberInputCompKeywords"), comp: NumberInputComp, layoutInfo: { @@ -639,7 +639,7 @@ var uiCompMap: Registry = { enName: "Text Area", description: trans("uiComp.textAreaCompDesc"), categories: ["forms"], - icon: TextAreaCompIcon, + icon: MultiIcon(TextAreaCompIcon), keywords: trans("uiComp.textAreaCompKeywords"), comp: TextAreaComp, layoutInfo: { @@ -652,7 +652,7 @@ var uiCompMap: Registry = { enName: "Switch", description: trans("uiComp.switchCompDesc"), categories: ["forms"], - icon: SwitchCompIcon, + icon: MultiIcon(SwitchCompIcon), keywords: trans("uiComp.switchCompKeywords"), comp: SwitchComp, layoutInfo: { @@ -665,7 +665,7 @@ var uiCompMap: Registry = { enName: "Checkbox", description: trans("uiComp.checkboxCompDesc"), categories: ["forms"], - icon: CheckboxCompIcon, + icon: MultiIcon(CheckboxCompIcon), keywords: trans("uiComp.checkboxCompKeywords"), comp: CheckboxComp, layoutInfo: { @@ -678,7 +678,7 @@ var uiCompMap: Registry = { enName: "Radio", description: trans("uiComp.radioCompDesc"), categories: ["forms"], - icon: RadioCompIcon, + icon: MultiIcon(RadioCompIcon), keywords: trans("uiComp.radioCompKeywords"), comp: RadioComp, layoutInfo: { @@ -691,7 +691,7 @@ var uiCompMap: Registry = { enName: "Date", description: trans("uiComp.dateCompDesc"), categories: ["forms", "scheduling"], - icon: DateCompIcon, + icon: MultiIcon(DateCompIcon), keywords: trans("uiComp.dateCompKeywords"), comp: DatePickerComp, layoutInfo: { @@ -704,7 +704,7 @@ var uiCompMap: Registry = { enName: "Date Range", description: trans("uiComp.dateRangeCompDesc"), categories: ["forms", "scheduling"], - icon: DateRangeCompIcon, + icon: MultiIcon(DateRangeCompIcon), keywords: trans("uiComp.dateRangeCompKeywords"), comp: DateRangeComp, layoutInfo: { @@ -717,7 +717,7 @@ var uiCompMap: Registry = { enName: "Time", description: trans("uiComp.timeCompDesc"), categories: ["forms", "scheduling"], - icon: TimeCompIcon, + icon: MultiIcon(TimeCompIcon), keywords: trans("uiComp.timeCompKeywords"), comp: TimePickerComp, layoutInfo: { @@ -730,7 +730,7 @@ var uiCompMap: Registry = { enName: "Time Range", categories: ["forms", "scheduling"], description: trans("uiComp.timeRangeCompDesc"), - icon: TimeRangeCompIcon, + icon: MultiIcon(TimeRangeCompIcon), keywords: trans("uiComp.timeRangeCompKeywords"), comp: TimeRangeComp, layoutInfo: { @@ -743,7 +743,7 @@ var uiCompMap: Registry = { enName: "Button", description: trans("uiComp.buttonCompDesc"), categories: ["forms"], - icon: ButtonCompIcon, + icon: MultiIcon(ButtonCompIcon), keywords: trans("uiComp.buttonCompKeywords"), comp: ButtonComp, layoutInfo: { @@ -757,7 +757,7 @@ var uiCompMap: Registry = { enName: "Controls", description: trans("meeting.meetingCompDesc"), categories: ["forms", "collaboration"], - icon: ButtonCompIcon, + icon: MultiIcon(ButtonCompIcon), keywords: trans("meeting.meetingCompKeywords"), comp: ControlButton, withoutLoading: true, @@ -771,7 +771,7 @@ var uiCompMap: Registry = { enName: "Dropdown", description: trans("uiComp.dropdownCompDesc"), categories: ["forms"], - icon: DropdownCompIcon, + icon: MultiIcon(DropdownCompIcon), keywords: trans("uiComp.dropdownCompKeywords"), comp: DropdownComp, layoutInfo: { @@ -784,7 +784,7 @@ var uiCompMap: Registry = { enName: "Toggle Button", description: trans("uiComp.toggleButtonCompDesc"), categories: ["forms"], - icon: ToggleButtonCompIcon, + icon: MultiIcon(ToggleButtonCompIcon), keywords: trans("uiComp.toggleButtonCompKeywords"), comp: ToggleButtonComp, layoutInfo: { @@ -797,7 +797,7 @@ var uiCompMap: Registry = { enName: "Segmented Control", description: trans("uiComp.segmentedControlCompDesc"), categories: ["forms"], - icon: SegmentedCompIcon, + icon: MultiIcon(SegmentedCompIcon), keywords: trans("uiComp.segmentedControlCompKeywords"), comp: SegmentedControlComp, layoutInfo: { @@ -810,7 +810,7 @@ var uiCompMap: Registry = { enName: "Rating", description: trans("uiComp.ratingCompDesc"), categories: ["forms"], - icon: RatingCompIcon, + icon: MultiIcon(RatingCompIcon), keywords: trans("uiComp.ratingCompKeywords"), comp: RatingComp, layoutInfo: { @@ -823,10 +823,10 @@ var uiCompMap: Registry = { enName: "autoComplete", description: trans("uiComp.autoCompleteCompDesc"), categories: ["forms", "collaboration"], - icon: AutoCompleteCompIcon, + icon: MultiIcon(AutoCompleteCompIcon), keywords: cnchar - .spell(trans("uiComp.autoCompleteCompName"), "first", "low") - .toString(), + .spell(trans("uiComp.autoCompleteCompName"), "first", "low") + .toString(), comp: AutoCompleteComp, layoutInfo: { w: 6, @@ -841,7 +841,7 @@ var uiCompMap: Registry = { enName: "Progress", description: trans("uiComp.progressCompDesc"), categories: ["dashboards", "projectmanagement"], - icon: ProgressCompIcon, + icon: MultiIcon(ProgressCompIcon), keywords: trans("uiComp.progressCompKeywords"), comp: ProgressComp, layoutInfo: { @@ -854,7 +854,7 @@ var uiCompMap: Registry = { enName: "Process Circle", description: trans("uiComp.progressCircleCompDesc"), categories: ["dashboards", "projectmanagement"], - icon: ProcessCircleCompIcon, + icon: MultiIcon(ProcessCircleCompIcon), keywords: trans("uiComp.progressCircleCompKeywords"), comp: ProgressCircleComp, layoutInfo: { @@ -870,7 +870,7 @@ var uiCompMap: Registry = { enName: "File Upload", description: trans("uiComp.fileUploadCompDesc"), categories: ["documents"], - icon: UploadCompIcon, + icon: MultiIcon(UploadCompIcon), keywords: trans("uiComp.fileUploadCompKeywords"), comp: FileComp, layoutInfo: { @@ -883,7 +883,7 @@ var uiCompMap: Registry = { enName: "File Viewer", description: trans("uiComp.fileViewerCompDesc"), categories: ["documents"], - icon: FileViewerCompIcon, + icon: MultiIcon(FileViewerCompIcon), keywords: trans("uiComp.fileViewerCompKeywords"), comp: FileViewerComp, layoutInfo: { @@ -899,7 +899,7 @@ var uiCompMap: Registry = { enName: "Image", description: trans("uiComp.imageCompDesc"), categories: ["multimedia"], - icon: ImageCompIcon, + icon: MultiIcon(ImageCompIcon), keywords: trans("uiComp.imageCompKeywords"), comp: ImageComp, layoutInfo: { @@ -912,7 +912,7 @@ var uiCompMap: Registry = { enName: "Carousel", description: trans("uiComp.carouselCompDesc"), categories: ["multimedia"], - icon: CarouselCompIcon, + icon: MultiIcon(CarouselCompIcon), keywords: trans("uiComp.drawerCompKeywords"), comp: CarouselComp, withoutLoading: true, @@ -926,7 +926,7 @@ var uiCompMap: Registry = { enName: "Audio", description: trans("uiComp.audioCompDesc"), categories: ["multimedia"], - icon: AudioCompIcon, + icon: MultiIcon(AudioCompIcon), keywords: trans("uiComp.audioCompKeywords"), comp: AudioComp, layoutInfo: { @@ -939,7 +939,7 @@ var uiCompMap: Registry = { enName: "Video", description: trans("uiComp.videoCompDesc"), categories: ["multimedia"], - icon: VideoCompIcon, + icon: MultiIcon(VideoCompIcon), keywords: trans("uiComp.videoCompKeywords"), comp: VideoComp, layoutInfo: { @@ -952,7 +952,7 @@ var uiCompMap: Registry = { enName: "Lottie Animation", description: trans("uiComp.jsonLottieCompDesc"), categories: ["multimedia"], - icon: LottieAnimationCompIcon, + icon: MultiIcon(LottieAnimationCompIcon), keywords: trans("uiComp.jsonLottieCompKeywords"), comp: JsonLottieComp, layoutInfo: { @@ -966,7 +966,7 @@ var uiCompMap: Registry = { comp: remoteComp({ ...builtInRemoteComps, compName: "imageEditor" }), description: trans("uiComp.imageEditorCompDesc"), categories: ["multimedia"], - icon: ImageEditorCompIcon, + icon: MultiIcon(ImageEditorCompIcon), keywords: trans("uiComp.imageEditorCompKeywords"), layoutInfo: { w: 12, @@ -981,7 +981,7 @@ var uiCompMap: Registry = { enName: "QR Code", description: trans("uiComp.qrCodeCompDesc"), categories: ["itemHandling", "documents"], - icon: QRCodeCompIcon, + icon: MultiIcon(QRCodeCompIcon), keywords: trans("uiComp.qrCodeCompKeywords"), comp: QRCodeComp, layoutInfo: { @@ -994,7 +994,7 @@ var uiCompMap: Registry = { enName: "Scanner", description: trans("uiComp.scannerCompDesc"), categories: ["itemHandling"], - icon: ScannerCompIcon, + icon: MultiIcon(ScannerCompIcon), keywords: trans("uiComp.scannerCompKeywords"), comp: ScannerComp, layoutInfo: { @@ -1007,7 +1007,7 @@ var uiCompMap: Registry = { enName: "Signature", description: trans("uiComp.signatureCompDesc"), categories: ["itemHandling"], - icon: SignatureCompIcon, + icon: MultiIcon(SignatureCompIcon), keywords: trans("uiComp.signatureCompKeywords"), comp: SignatureComp, layoutInfo: { @@ -1020,7 +1020,7 @@ var uiCompMap: Registry = { enName: "Select", description: trans("uiComp.selectCompDesc"), categories: ["forms", "itemHandling"], - icon: SelectCompIcon, + icon: MultiIcon(SelectCompIcon), keywords: trans("uiComp.selectCompKeywords"), comp: SelectComp, layoutInfo: { @@ -1033,7 +1033,7 @@ var uiCompMap: Registry = { enName: "Multiselect", description: trans("uiComp.multiSelectCompDesc"), categories: ["forms", "itemHandling"], - icon: MultiSelectCompIcon, + icon: MultiIcon(MultiSelectCompIcon), keywords: trans("uiComp.multiSelectCompKeywords"), comp: MultiSelectComp, layoutInfo: { @@ -1046,7 +1046,7 @@ var uiCompMap: Registry = { enName: "Tree", description: trans("uiComp.treeCompDesc"), categories: ["layout", "itemHandling", "documents"], - icon: TreeDisplayCompIcon, + icon: MultiIcon(TreeDisplayCompIcon), keywords: trans("uiComp.treeCompKeywords"), comp: TreeComp, layoutInfo: { @@ -1059,7 +1059,7 @@ var uiCompMap: Registry = { enName: "Tree Select", description: trans("uiComp.treeSelectCompDesc"), categories: ["layout", "itemHandling", "documents"], - icon: TreeSelectCompIcon, + icon: MultiIcon(TreeSelectCompIcon), keywords: trans("uiComp.treeSelectCompKeywords"), comp: TreeSelectComp, layoutInfo: { @@ -1074,7 +1074,7 @@ var uiCompMap: Registry = { name: trans("uiComp.iframeCompName"), enName: "IFrame", description: trans("uiComp.iframeCompDesc"), - icon: IFrameCompIcon, + icon: MultiIcon(IFrameCompIcon), categories: ["integration"], keywords: trans("uiComp.iframeCompKeywords"), comp: IFrameComp, @@ -1087,7 +1087,7 @@ var uiCompMap: Registry = { name: trans("uiComp.customCompName"), enName: "Custom Component", description: trans("uiComp.customCompDesc"), - icon: CustomCompIcon, + icon: MultiIcon(CustomCompIcon), categories: ["integration"], keywords: trans("uiComp.customCompKeywords"), comp: CustomComp, @@ -1099,7 +1099,7 @@ var uiCompMap: Registry = { module: { name: trans("uiComp.moduleCompName"), enName: "Module", - icon: CustomCompIcon, + icon: MultiIcon(CustomCompIcon), description: trans("uiComp.moduleCompDesc"), categories: [], keywords: trans("uiComp.moduleCompKeywords"), @@ -1117,7 +1117,7 @@ var uiCompMap: Registry = { enName: "Text", description: trans("uiComp.textCompDesc"), categories: ["dashboards", "layout", "multimedia"], - icon: TextCompIcon, + icon: MultiIcon(TextCompIcon), keywords: trans("uiComp.textCompKeywords"), comp: TextComp, layoutInfo: { diff --git a/client/packages/lowcoder/src/comps/uiCompRegistry.ts b/client/packages/lowcoder/src/comps/uiCompRegistry.ts index 38663d804..6ef4d256f 100644 --- a/client/packages/lowcoder/src/comps/uiCompRegistry.ts +++ b/client/packages/lowcoder/src/comps/uiCompRegistry.ts @@ -1,9 +1,10 @@ -import { FunctionComponent, ReactNode } from "react"; +import {FC, FunctionComponent, ReactNode} from "react"; import { withExposingConfigs } from "comps/generators/withExposing"; import { NameGenerator } from "./utils/nameGenerator"; import { JSONValue } from "util/jsonTypes"; import { EditorState } from "./editorState"; import { trans } from "i18n"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export type ExposingMultiCompConstructor = ReturnType< typeof withExposingConfigs @@ -38,12 +39,12 @@ export const uiCompCategoryNames = { export type UICompCategory = keyof typeof uiCompCategoryNames; export interface UICompManifest { - name: string; + name: string | ""; enName: string; description?: ReactNode; categories: readonly UICompCategory[]; // Set to empty to hide from insertion panel - keywords: string; - icon: FunctionComponent>; + keywords: string | ""; + icon: FunctionComponent> | null; comp?: ExposingMultiCompConstructor; layoutInfo?: UICompLayoutInfo; withoutLoading?: boolean; diff --git a/client/packages/lowcoder/src/dev-utils/buildVars.js b/client/packages/lowcoder/src/dev-utils/buildVars.js index 73c7c1b2b..feab88c41 100644 --- a/client/packages/lowcoder/src/dev-utils/buildVars.js +++ b/client/packages/lowcoder/src/dev-utils/buildVars.js @@ -55,4 +55,8 @@ export const buildVars = [ name: "REACT_APP_DISABLE_JS_SANDBOX", defaultValue: "", }, + { + name: "REACT_APP_VIEW_MODE", + defaultValue: "admin", + }, ]; diff --git a/client/packages/lowcoder/src/i18n/index.tsx b/client/packages/lowcoder/src/i18n/index.tsx index 31ee5684d..627f49f7e 100644 --- a/client/packages/lowcoder/src/i18n/index.tsx +++ b/client/packages/lowcoder/src/i18n/index.tsx @@ -1,36 +1,52 @@ import { getI18nObjects, Translator } from "lowcoder-core"; import * as localeData from "./locales"; import { I18nObjects } from "./locales/types"; -import { languagesMetadata } from "./languagesMeta"; +import {initlanguageMeta, languagesMetadata} from "./languagesMeta"; import { ReactNode } from "react"; +import { getLanguage } from "util/editor" +import {getLanguageJson, getLanguageObjJson, setLanguageJson, setLanguageObjJson} from "@lowcoder-ee/util/language"; type transType = (key: any, variables?: any) => string; type transToNodeType = (key: any, variables?: any) => ReactNode; let trans: transType; let transToNode: transToNodeType; -let language = 'en'; - -export const initTranslator = (lang?: string) => { - const translator = new Translator( - localeData, +let language: string = getLanguage(); +export let languageList: any[]; +export let i18nObjs : I18nObjects; +let langJson : object; + +export const initTranslator = async (langs? : string) => { + const lang = langs || language; + const objFileName = (REACT_APP_LANGUAGES || language) + "Obj"; + if (!getLanguageJson(lang)) { + langJson = await (localeData as any)[lang](); + let langObjJson = await (localeData as any)[objFileName](); + setLanguageJson(lang, { [lang] : langJson }); + setLanguageObjJson(objFileName, { [objFileName]: langObjJson }); + langJson = {[lang]: langJson, [objFileName]: langObjJson} + } + else { + const langJson2 = getLanguageJson(lang); + const langObjJson = getLanguageObjJson(objFileName); + langJson = {[lang]: langJson2, [objFileName]: langObjJson} + } + await initlanguageMeta(); + i18nObjs = getI18nObjects(langJson, REACT_APP_LANGUAGES || language); + languageList = Object.keys(languagesMetadata).map(code => ({ + languageCode: code, + languageName: languagesMetadata[code].languageName, + flag: languagesMetadata[code].flag + })); + const translator = new Translator( + langJson, REACT_APP_LANGUAGES, - [lang || 'en'] + [lang || language] ); language = translator.language; - transToNode = translator.transToNode; - trans = translator.trans; + transToNode = (key: any, variables?: any) => translator.transToNode?.(key as never, variables); + trans = (key: any, variables?: any) => translator.trans?.(key as never, variables); } -export const i18nObjs = getI18nObjects(localeData, REACT_APP_LANGUAGES); - -export const languageList = Object.keys(languagesMetadata).map(code => ({ - languageCode: code, - languageName: languagesMetadata[code].languageName, - flag: languagesMetadata[code].flag -})); - -initTranslator(); - export { language, trans, transToNode }; diff --git a/client/packages/lowcoder/src/i18n/languagesMeta.ts b/client/packages/lowcoder/src/i18n/languagesMeta.ts index f55a8c6e0..c281deda3 100644 --- a/client/packages/lowcoder/src/i18n/languagesMeta.ts +++ b/client/packages/lowcoder/src/i18n/languagesMeta.ts @@ -1,63 +1,48 @@ -import { - Flag_de, - Flag_gb, - Flag_it, - Flag_cn, - Flag_fr, - Flag_ru, - Flag_cz, - Flag_pl, - Flag_es, - Flag_vi, - Flag_id, - Flag_tr, - Flag_th, - Flag_ar, - Flag_pt, - Flag_br - } from "lowcoder-design"; + import { es, ru } from "./locales"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {Flag_br, Flag_cn, Flag_de, Flag_es, Flag_gb, Flag_it, Flag_ru} from "icons"; + // Define the structure for a single language's metadata export interface LanguageMeta { - languageName: string; - flag: React.FC>; - } - - // Define the structure for the container of all language metadatas - export interface LanguagesMetadata { - [key: string]: LanguageMeta; - } - - // Example metadata object - export const languagesMetadata: LanguagesMetadata = { + languageName: string; + flag: React.FC>; +} +export let languagesMetadata : LanguagesMetadata = {}; +// Define the structure for the container of all language metadatas +export interface LanguagesMetadata { + [key: string]: LanguageMeta; +} +export const initlanguageMeta = async () => { + languagesMetadata = { en: { languageName: "English", - flag: Flag_gb + flag: MultiIcon(Flag_gb) }, zh: { languageName: "中文", - flag: Flag_cn + flag: MultiIcon(Flag_cn) }, de: { languageName: "Deutsch", - flag: Flag_de + flag: MultiIcon(Flag_de) }, pt: { - languageName: "Português", - flag: Flag_br + languageName: "Português", + flag: MultiIcon(Flag_br) }, it: { languageName: "Italiano", - flag: Flag_it + flag: MultiIcon(Flag_it) }, es: { languageName: "Español", - flag: Flag_es + flag: MultiIcon(Flag_es) }, ru: { languageName: "Русский", - flag: Flag_ru + flag: MultiIcon(Flag_ru) }, }; - \ No newline at end of file +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/de.ts b/client/packages/lowcoder/src/i18n/locales/de.ts index c8aa8a3bd..ad22317fe 100644 --- a/client/packages/lowcoder/src/i18n/locales/de.ts +++ b/client/packages/lowcoder/src/i18n/locales/de.ts @@ -1,8 +1,8 @@ import { en } from "./en"; export const de = { - ...en, - + ...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.", @@ -50,3911 +50,3911 @@ export const de = { "api": { ...en.api, - "publishSuccess": "Erfolgreich veröffentlicht", - "recoverFailed": "Wiederherstellung fehlgeschlagen", - "needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version.", + "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", + "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", + "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", + "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: ", + "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", + "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.", + "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", + "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", + "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.", + "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 Gitterzellen", - "showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", - "showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", - "timeZone": "ZeitZone", + "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 Gitterzellen", + "showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", + "showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", + "timeZone": "ZeitZone", }, "autoHeightProp": { ...en.autoHeightProp, - "auto": "Automatisch", - "fixed": "Festgelegt", + "auto": "Automatisch", + "fixed": "Festgelegt", }, "textOverflowProp": { ...en.textOverflowProp, - "ellipsis": "Mouseover", - "wrap": "Wickeln", + "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).", + "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", + "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", + "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", + "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", }, "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", + "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}", + "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": "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": "AI", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "App-Entwicklung", - "categoryWorkflow": "Arbeitsablauf", - "categoryMessaging": "Nachrichtenübermittlung", - "categoryAssets": "Vermögenswerte & Lagerung", - "categoryProjectManagement": "Projektleitung", - "categoryCrm": "CRM", - "categoryEcommerce": "Elektronischer Geschäftsverkehr", - "categoryApis": "Andere", + "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": "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": "AI", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "App-Entwicklung", + "categoryWorkflow": "Arbeitsablauf", + "categoryMessaging": "Nachrichtenübermittlung", + "categoryAssets": "Vermögenswerte & Lagerung", + "categoryProjectManagement": "Projektleitung", + "categoryCrm": "CRM", + "categoryEcommerce": "Elektronischer Geschäftsverkehr", + "categoryApis": "Andere", }, "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", + "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", + "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", + "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", + "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", + "accountIdentifierTooltip": "Siehe ", + "extParamsTooltip": "Zusätzliche Verbindungsparameter konfigurieren", }, "lowcoderQuery": { ...en.lowcoderQuery, - "queryOrgUsers": "Abfrage Arbeitsbereich Benutzer", + "queryOrgUsers": "Abfrage Arbeitsbereich Benutzer", }, "redisQuery": { ...en.redisQuery, - "rawCommand": "Roher Befehl", - "command": "Befehl", - "queryTutorial": "Redis-Befehlsdokumente anzeigen", + "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", + "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", + "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", + "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", }, "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", + "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", + "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", + "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", + "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", + "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)", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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": "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", - "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", + "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": "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", + "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": "Unterstützung Klickvorschau (Zoom)", - "supportPreviewTip": "Wirksam, wenn die Bildquelle gültig ist", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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 ", + "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", + "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}", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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?", + "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%", + "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.", + "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", + "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}", + "subMenu": "Untermenü {number}", }, "navItemComp": { ...en.navItemComp, - "active": "Aktiv", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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.", + "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.", + "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", + "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": "Ladeindikatoren beim Laden von Daten anzeigen", + "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": "Ladeindikatoren beim Laden von Daten anzeigen", }, "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", + "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", + "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", + "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", + "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", + "title": "Teilen", + "viewer": "Betrachter", + "editor": "Herausgeber", + "owner": "Besitzer", + "datasourceViewer": "Kann verwenden", + "datasourceOwner": "Kann Managen", }, "debug": { ...en.debug, - "title": "Titel", - "switch": "Schalterkomponente: ", + "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", + "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", + "returnFunction": "Der Rückgabewert ist eine Funktion.", + "consume": "{Zeit}", + "JSON": "JSON anzeigen", }, "createAppButton": { ...en.createAppButton, - "creating": "Erstellen...", - "created": "Erstelle {name}", + "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.", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", -}, + "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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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": "", + "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", + "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.", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", - "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", + "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", + "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", + "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", + "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.", - }, + "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", + "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": "", + "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", + "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", + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", }, "template": { ...en.template, - "cloneUrl": "/apps/vorlage-import/", + "cloneUrl": "/apps/vorlage-import/", }, "lowcoderUrl": { ...en.lowcoderUrl, - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", }, }; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/deViewer.ts b/client/packages/lowcoder/src/i18n/locales/deViewer.ts new file mode 100644 index 000000000..164800843 --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/deViewer.ts @@ -0,0 +1,268 @@ + +export const de = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "Das Laden einer Komponente ist fehlgeschlagen. Bitte überprüfe deine Konfiguration.", + "clickToReload": "Klicke bitte um Neu zu laden.", + "errorMsg": "Fehler: " + }, + "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" + }, + "error": "Fehler", + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "productDesc": "Erstelle Softwareanwendungen für Dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist eine hervorragende Alternative zu Retool, Appsmith und Tooljet.", + "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" + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/enViewer.ts b/client/packages/lowcoder/src/i18n/locales/enViewer.ts new file mode 100644 index 000000000..02d1dff5a --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/enViewer.ts @@ -0,0 +1,268 @@ + +export const en = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "Component loading failed. Please check your configuration.", + "clickToReload": "Click to Reload", + "errorMsg": "Error: " + }, + "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" + }, + "error": "Error", + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "productDesc": "Create software applications for your company and customers with minimal coding experience. Lowcoder is an excellent alternative to Retool, Appsmith, and Tooljet.", + "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" + } +} diff --git a/client/packages/lowcoder/src/i18n/locales/es.ts b/client/packages/lowcoder/src/i18n/locales/es.ts index cc34f4b10..3a72494ed 100644 --- a/client/packages/lowcoder/src/i18n/locales/es.ts +++ b/client/packages/lowcoder/src/i18n/locales/es.ts @@ -1,8 +1,8 @@ import { en } from "./en"; export const es = { - ...en, - + ...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.", @@ -50,3911 +50,3911 @@ export const es = { "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.", + "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", + "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", + "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", + "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:", + "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}.", + "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.", + "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", + "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", + "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í.", + "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", - "showHorizontalScrollbar": "Mostrar barra de desplazamiento horizontal", - "showVerticalScrollbar": "Mostrar barra de desplazamiento vertical", - "timeZone": "Zona horaria", + "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", + "showHorizontalScrollbar": "Mostrar barra de desplazamiento horizontal", + "showVerticalScrollbar": "Mostrar barra de desplazamiento vertical", + "timeZone": "Zona horaria", }, "autoHeightProp": { ...en.autoHeightProp, - "auto": "Coche", - "fixed": "Fijo", + "auto": "Coche", + "fixed": "Fijo", }, "textOverflowProp": { ...en.textOverflowProp, - "ellipsis": "Mouseover", - "wrap": "Envolver", + "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).", + "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", + "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", + "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", + "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", }, "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", + "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}", + "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": "Se activa cuando...", - "triggerTypeAuto": "Cambio de entradas o al cargar la página", - "triggerTypePageLoad": "Cuando se carga la aplicación (página)", - "triggerTypeManual": "Sólo cuando se activa manualmente", - "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": "AI", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Desarrollo de aplicaciones", - "categoryWorkflow": "Flujo de trabajo", - "categoryMessaging": "Mensajería", - "categoryAssets": "Activos y almacenamiento", - "categoryProjectManagement": "Gestión de proyectos", - "categoryCrm": "CRM", - "categoryEcommerce": "Comercio electrónico", - "categoryApis": "Otros", + "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": "Se activa cuando...", + "triggerTypeAuto": "Cambio de entradas o al cargar la página", + "triggerTypePageLoad": "Cuando se carga la aplicación (página)", + "triggerTypeManual": "Sólo cuando se activa manualmente", + "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": "AI", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Desarrollo de aplicaciones", + "categoryWorkflow": "Flujo de trabajo", + "categoryMessaging": "Mensajería", + "categoryAssets": "Activos y almacenamiento", + "categoryProjectManagement": "Gestión de proyectos", + "categoryCrm": "CRM", + "categoryEcommerce": "Comercio electrónico", + "categoryApis": "Otros", }, "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", + "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", + "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", + "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", + "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", + "accountIdentifierTooltip": "Véase", + "extParamsTooltip": "Configurar parámetros de conexión adicionales", }, "lowcoderQuery": { ...en.lowcoderQuery, - "queryOrgUsers": "Consulta de usuarios del espacio de trabajo", + "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", + "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", + "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", + "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", + "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", + "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", + "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}.", + "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", + "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", + "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)", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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.", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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", + "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", + "onlyMenu": "Pantalla sólo con etiqueta", + "textDesc": "Texto que aparece actualmente en el botón", }, "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", + "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", - "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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)", + "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", + "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", + "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}", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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?", + "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%", + "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.", + "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", + "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}", + "subMenu": "Submenú {number}", }, "navItemComp": { ...en.navItemComp, - "active": "Activo", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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.", + "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.", + "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", + "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", + "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", }, "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", + "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", + "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", + "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", + "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", + "title": "Compartir", + "viewer": "Visor", + "editor": "Editor", + "owner": "Propietario", + "datasourceViewer": "Puede utilizar", + "datasourceOwner": "Puede gestionar", }, "debug": { ...en.debug, - "title": "Título", - "switch": "Componente del interruptor:", + "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", + "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", + "returnFunction": "El valor de retorno es una función.", + "consume": "___TITULAR0___", + "JSON": "Mostrar JSON", }, "createAppButton": { ...en.createAppButton, - "creating": "Crear...", - "created": "Crear {name}", + "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.", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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": "", + "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", + "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.", + "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", + "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", + "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\".", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", - "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", + "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", + "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", + "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", + "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.", - }, + "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", + "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": "", + "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", + "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", + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", }, "template": { ...en.template, - "cloneUrl": "/apps/plantilla-import/", + "cloneUrl": "/apps/plantilla-import/", }, "lowcoderUrl": { ...en.lowcoderUrl, - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", }, -}; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/esObj.tsx b/client/packages/lowcoder/src/i18n/locales/esObj.tsx new file mode 100644 index 000000000..190452658 --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/esObj.tsx @@ -0,0 +1,4 @@ +import { enObj } from "./enObj"; +import { I18nObjects } from "./types"; + +export const esObj: I18nObjects = enObj; diff --git a/client/packages/lowcoder/src/i18n/locales/esViewer.ts b/client/packages/lowcoder/src/i18n/locales/esViewer.ts new file mode 100644 index 000000000..c1addfdde --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/esViewer.ts @@ -0,0 +1,267 @@ +export const es = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "Error al cargar el componente. Compruebe la configuración.", + "clickToReload": "Haga clic para recargar", + "errorMsg": "Error:" + }, + "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" + }, + "error": "Error", + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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.", + "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" + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/index.ts b/client/packages/lowcoder/src/i18n/locales/index.ts index 6c8e4fe56..03e71a431 100644 --- a/client/packages/lowcoder/src/i18n/locales/index.ts +++ b/client/packages/lowcoder/src/i18n/locales/index.ts @@ -1,14 +1,17 @@ -// file examples: en, enGB, zh, zhHK -// fallback example: current locale is zh-HK, fallback order is zhHK => zh => en -export * from "./de"; -export * from "./en"; -export * from "./it"; -export * from "./pt"; -export * from "./es"; -export * from "./zh"; -export * from "./ru"; +import { viewMode } from "util/editor" +export const en = async ():Promise => await import(viewMode() === "admin" ? "./en" : "./enViewer").then(module => module.en); +export const de = async ():Promise => await import(viewMode() === "admin" ? "./de" : "./deViewer").then(module => module.de); +export const it = async ():Promise => await import(viewMode() === "admin" ? "./it" : "./itViewer").then(module => module.it); +export const pt = async ():Promise => await import(viewMode() === "admin" ? "./pt" : "./ptViewer").then(module => module.pt); +export const es = async ():Promise => await import(viewMode() === "admin" ? "./es" : "./esViewer").then(module => module.es); +export const zh = async ():Promise => await import(viewMode() === "admin" ? "./zh" : "./zhViewer").then(module => module.zh); +export const ru = async ():Promise => await import(viewMode() === "admin" ? "./ru" : "./ruViewer").then(module => module.ru); -export * from "./enObj"; -export * from "./deObj"; -export * from "./itObj"; -export * from "./zhObj"; \ No newline at end of file + +export const enObj = async ():Promise => await import("./enObj").then(module => (module.enObj)); +export const deObj = async ():Promise => await import("./deObj").then(module => (module.deObj)); +export const itObj = async ():Promise => await import("./itObj").then(module => (module.itObj)); +export const ptObj = async ():Promise => await import("./ptObj").then(module => (module.ptObj)); +export const esObj = async ():Promise => await import("./esObj").then(module => (module.esObj)); +export const zhObj = async ():Promise => await import("./zhObj").then(module => (module.zhObj)); +export const ruObj = async ():Promise => await import("./ruObj").then(module => (module.ruObj)); diff --git a/client/packages/lowcoder/src/i18n/locales/it.ts b/client/packages/lowcoder/src/i18n/locales/it.ts index 0701a2c36..181a9be07 100644 --- a/client/packages/lowcoder/src/i18n/locales/it.ts +++ b/client/packages/lowcoder/src/i18n/locales/it.ts @@ -1,8 +1,8 @@ import { en } from "./en"; export const it = { - ...en, - + ...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.", @@ -50,3911 +50,3911 @@ export const it = { "api": { ...en.api, - "publishSuccess": "Pubblicato con successo", - "recoverFailed": "Recupero fallito", - "needUpdate": "La versione attuale è obsoleta. Si prega di aggiornare alla versione più recente.", + "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", + "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", + "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", + "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:", + "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}.", + "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.", + "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", + "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", + "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.", + "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", - "showHorizontalScrollbar": "Show Horizontal Scrollbar", - "showVerticalScrollbar": "Mostra barra di scorrimento verticale", - "timeZone": "Fuso orario", + "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", + "showHorizontalScrollbar": "Show Horizontal Scrollbar", + "showVerticalScrollbar": "Mostra barra di scorrimento verticale", + "timeZone": "Fuso orario", }, "autoHeightProp": { ...en.autoHeightProp, - "auto": "Auto", - "fixed": "Fisso", + "auto": "Auto", + "fixed": "Fisso", }, "textOverflowProp": { ...en.textOverflowProp, - "ellipsis": "Passaggio del mouse", - "wrap": "Avvolgimento", + "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).", + "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", + "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", + "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", + "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", }, "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", + "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___", + "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": "Si attiva quando...", - "triggerTypeAuto": "Modifica degli ingressi o caricamento della pagina", - "triggerTypePageLoad": "Quando l'applicazione (pagina) viene caricata", - "triggerTypeManual": "Solo quando lo si attiva manualmente", - "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": "AI", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Sviluppo di app", - "categoryWorkflow": "Flusso di lavoro", - "categoryMessaging": "Messaging", - "categoryAssets": "Attività e stoccaggio", - "categoryProjectManagement": "Gestione del progetto", - "categoryCrm": "CRM", - "categoryEcommerce": "Commercio elettronico", - "categoryApis": "Altri", + "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": "Si attiva quando...", + "triggerTypeAuto": "Modifica degli ingressi o caricamento della pagina", + "triggerTypePageLoad": "Quando l'applicazione (pagina) viene caricata", + "triggerTypeManual": "Solo quando lo si attiva manualmente", + "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": "AI", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Sviluppo di app", + "categoryWorkflow": "Flusso di lavoro", + "categoryMessaging": "Messaging", + "categoryAssets": "Attività e stoccaggio", + "categoryProjectManagement": "Gestione del progetto", + "categoryCrm": "CRM", + "categoryEcommerce": "Commercio elettronico", + "categoryApis": "Altri", }, "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", + "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", + "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", + "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", + "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", + "accountIdentifierTooltip": "Vedi", + "extParamsTooltip": "Configurare altri parametri di connessione", }, "lowcoderQuery": { ...en.lowcoderQuery, - "queryOrgUsers": "Interrogare gli utenti dell'area di lavoro", + "queryOrgUsers": "Interrogare gli utenti dell'area di lavoro", }, "redisQuery": { ...en.redisQuery, - "rawCommand": "Comando grezzo", - "command": "Comando", - "queryTutorial": "Visualizza la documentazione sui comandi di Redis", + "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", + "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", + "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", + "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", + "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", + "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}", + "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", + "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", + "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)", + "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", + "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à", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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.", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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", + "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", + "onlyMenu": "Display con sola etichetta", + "textDesc": "Testo attualmente visualizzato sul pulsante", }, "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", + "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", - "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", + "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", + "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", + "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", }, "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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)", + "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", + "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", + "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}", + "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", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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?", + "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%", + "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.", + "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", + "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}", + "subMenu": "Sottomenu {number}", }, "navItemComp": { ...en.navItemComp, - "active": "Attivo", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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.", + "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.", + "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", + "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 gli indicatori di caricamento quando i dati vengono caricati", + "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 gli indicatori di caricamento quando i dati vengono caricati", }, "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", + "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", + "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", + "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", + "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", + "title": "Condividi", + "viewer": "Visualizzatore", + "editor": "Editor", + "owner": "Proprietario", + "datasourceViewer": "Può essere utilizzato", + "datasourceOwner": "Può gestire", }, "debug": { ...en.debug, - "title": "Titolo", - "switch": "Componente dell'interruttore:", + "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", + "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", + "returnFunction": "Il valore di ritorno è una funzione.", + "consume": "{time}", + "JSON": "Mostra JSON", }, "createAppButton": { ...en.createAppButton, - "creating": "Creare...", - "created": "Creare {name}", + "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.", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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": "", + "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", + "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.", + "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", + "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", + "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'.", + "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", + "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", + "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", + "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", + "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", + "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", + "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à", + "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", + "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", + "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", + "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", + "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", + "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", + "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", - "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", + "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", + "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", + "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", + "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.", - }, + "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", + "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": "", + "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", + "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", + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", }, "template": { ...en.template, - "cloneUrl": "/apps/template-import/", + "cloneUrl": "/apps/template-import/", }, "lowcoderUrl": { ...en.lowcoderUrl, - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", }, -}; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/itViewer.ts b/client/packages/lowcoder/src/i18n/locales/itViewer.ts new file mode 100644 index 000000000..f0ce9ec8a --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/itViewer.ts @@ -0,0 +1,267 @@ +export const it = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "Il caricamento del componente non è riuscito. Controllare la configurazione.", + "clickToReload": "Fare clic per ricaricare", + "errorMsg": "Errore:" + }, + "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" + }, + "error": "Errore", + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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.", + "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" + } +} \ 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 44952a10a..ff71a7909 100644 --- a/client/packages/lowcoder/src/i18n/locales/pt.ts +++ b/client/packages/lowcoder/src/i18n/locales/pt.ts @@ -1,8 +1,8 @@ import { en } from "./en"; export const pt = { - ...en, - + ...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.", @@ -50,3911 +50,3911 @@ export const pt = { "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.", + "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", + "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", + "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", + "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: ", + "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}", + "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.", + "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", + "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", + "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.", + "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", - "showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", - "showVerticalScrollbar": "Mostrar barra de rolagem vertical", - "timeZone": "Fuso horário", + "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", + "showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", + "showVerticalScrollbar": "Mostrar barra de rolagem vertical", + "timeZone": "Fuso horário", }, "autoHeightProp": { ...en.autoHeightProp, - "auto": "Automóvel", - "fixed": "Fixa", + "auto": "Automóvel", + "fixed": "Fixa", }, "textOverflowProp": { ...en.textOverflowProp, - "ellipsis": "Passar o rato", - "wrap": "Quebra de Linha", + "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).", + "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", + "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", + "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", + "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", }, "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", + "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}", + "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": "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": "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": "Base de dados", - "categoryBigdata": "Grandes volumes de dados", - "categoryAi": "IA", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Desenvolvimento de aplicações", - "categoryWorkflow": "Fluxo de trabalho", - "categoryMessaging": "Mensagens", - "categoryAssets": "Activos e armazenamento", - "categoryProjectManagement": "Gestão de projectos", - "categoryCrm": "CRM", - "categoryEcommerce": "Comércio eletrónico", - "categoryApis": "Outros", + "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": "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": "Base de dados", + "categoryBigdata": "Grandes volumes de dados", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Desenvolvimento de aplicações", + "categoryWorkflow": "Fluxo de trabalho", + "categoryMessaging": "Mensagens", + "categoryAssets": "Activos e armazenamento", + "categoryProjectManagement": "Gestão de projectos", + "categoryCrm": "CRM", + "categoryEcommerce": "Comércio eletrónico", + "categoryApis": "Outros", }, "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", + "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", + "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", + "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", + "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", + "accountIdentifierTooltip": "Ver ", + "extParamsTooltip": "Configurar Parâmetros de Conexão Adicionais", }, "lowcoderQuery": { ...en.lowcoderQuery, - "queryOrgUsers": "Consultar Usuários do Espaço de Trabalho", + "queryOrgUsers": "Consultar Usuários do Espaço de Trabalho", }, "redisQuery": { ...en.redisQuery, - "rawCommand": "Comando Bruto", - "command": "Comando", - "queryTutorial": "Visualizar Documentos de Comandos do Redis", + "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", + "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", + "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", + "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", + "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", + "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}", + "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", + "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", + "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)", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", - "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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)", + "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 ", + "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 ", + "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}", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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?", + "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%", + "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.", + "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", + "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}", + "subMenu": "Submenu {número}", }, "navItemComp": { ...en.navItemComp, - "active": "Ativo", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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.", + "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.", + "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.", + "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", + "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 quando os dados são carregados", + "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 quando os dados são carregados", }, "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", + "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", + "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", + "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", + "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", + "title": "Compartilhar", + "viewer": "Visualizador", + "editor": "Editor", + "owner": "Proprietário", + "datasourceViewer": "Pode Usar", + "datasourceOwner": "Pode Gerenciar", }, "debug": { ...en.debug, - "title": "Título", - "switch": "Alternar Componente: ", + "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", + "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", + "returnFunction": "O Valor de Retorno é uma Função.", + "consume": "{time}", + "JSON": "Mostrar JSON", }, "createAppButton": { ...en.createAppButton, - "creating": "Criando...", - "created": "Criar {name}", + "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", + "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}", + "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", + "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", + "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", + "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.", + "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", + "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", + "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", + "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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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", + "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": "", + "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", + "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.", + "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", + "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", + "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'.", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", + "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", - "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", + "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", + "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", + "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", + "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.", - }, + "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", + "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": "", + "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", + "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", + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", }, "template": { ...en.template, - "cloneUrl": "/apps/template-import/", + "cloneUrl": "/apps/template-import/", }, "lowcoderUrl": { ...en.lowcoderUrl, - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", }, -}; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/ptObj.tsx b/client/packages/lowcoder/src/i18n/locales/ptObj.tsx index 53e60cc72..35fefcbcd 100644 --- a/client/packages/lowcoder/src/i18n/locales/ptObj.tsx +++ b/client/packages/lowcoder/src/i18n/locales/ptObj.tsx @@ -1,6 +1,6 @@ import { I18nObjects } from "./types"; -export const enObj: I18nObjects = { +export const ptObj: I18nObjects = { jsonForm: { defaultSchema: { title: "Informações do Usuário", diff --git a/client/packages/lowcoder/src/i18n/locales/ptViewer.ts b/client/packages/lowcoder/src/i18n/locales/ptViewer.ts new file mode 100644 index 000000000..bb2a1b8a2 --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/ptViewer.ts @@ -0,0 +1,268 @@ + +export const pt = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "Carregamento do component falhou. Por favor, cheque sua configuração.", + "clickToReload": "Clique para recarregar", + "errorMsg": "Erro: " + }, + "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" + }, + "error": "Erro", + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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.", + "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" + } +} \ 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 fb93fb140..d4e8019ef 100644 --- a/client/packages/lowcoder/src/i18n/locales/ru.ts +++ b/client/packages/lowcoder/src/i18n/locales/ru.ts @@ -2,3959 +2,3959 @@ 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": "Ячейки горизонтальной сетки", - "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": "Цвет фона этикетки", - }, - "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": "Только когда вы запускаете его вручную", - "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": "Электронная коммерция", - "categoryApis": "Другие", - }, - "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": "Текст, отображаемый в данный момент на кнопке", - }, - "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": "Скрыть заголовок таблицы", - "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": "Эффективно, если источник изображения достоверен", - }, - "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": "Показывайте индикаторы загрузки при загрузке данных", - }, - "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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": "Перерыв между рядами", - "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", - }, - -}; + + "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": "Ячейки горизонтальной сетки", + "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": "Цвет фона этикетки", + }, + "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": "Только когда вы запускаете его вручную", + "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": "Электронная коммерция", + "categoryApis": "Другие", + }, + "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": "Текст, отображаемый в данный момент на кнопке", + }, + "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": "Скрыть заголовок таблицы", + "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": "Эффективно, если источник изображения достоверен", + }, + "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": "Показывайте индикаторы загрузки при загрузке данных", + }, + "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/build-apps/write-javascript/use-third-party-libraries#manually-import-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": "Перерыв между рядами", + "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", + }, + +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/ruObj.ts b/client/packages/lowcoder/src/i18n/locales/ruObj.ts new file mode 100644 index 000000000..a3e24c38d --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/ruObj.ts @@ -0,0 +1,4 @@ +import { enObj } from "./enObj"; +import { I18nObjects } from "./types"; + +export const ruObj: I18nObjects = enObj; diff --git a/client/packages/lowcoder/src/i18n/locales/ruViewer.ts b/client/packages/lowcoder/src/i18n/locales/ruViewer.ts new file mode 100644 index 000000000..55f1c3df7 --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/ruViewer.ts @@ -0,0 +1,267 @@ +export const ru = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "Не удалось загрузить компонент. Пожалуйста, проверьте конфигурацию.", + "clickToReload": "Нажмите, чтобы перезагрузить", + "errorMsg": "Ошибка:" + }, + "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": "Описание" + }, + "error": "Ошибка", + "npm": { + "invalidNpmPackageName": "Неверное имя пакета npm или URL.", + "pluginExisted": "Этот плагин npm уже существовал", + "compNotFound": "Компонент {compName} не найден.", + "addPluginModalTitle": "Добавление плагина из репозитория npm", + "pluginNameLabel": "URL или имя пакета npm", + "noCompText": "Компоненты отсутствуют.", + "compsLoading": "Загрузка...", + "removePluginBtnText": "Удалить", + "addPluginBtnText": "Добавьте плагин npm" + }, + "uiCompCategory": { + "dashboards": "Приборные панели и отчетность", + "layout": "Макет и навигация", + "forms": "Сбор данных и формы", + "collaboration": "Встречи и сотрудничество", + "projectmanagement": "Управление проектами", + "scheduling": "Календарь и планирование", + "documents": "Управление документами и файлами", + "itemHandling": "Обработка предметов и подписей", + "multimedia": "Мультимедиа и анимация", + "integration": "Интеграция и расширение" + }, + "timer": { + "timerState": "Состояние таймера", + "elapsedTime": "Прошедшее время", + "timer": "Таймер", + "countdown": "Обратный отсчет", + "defaultValue": "Значение по умолчанию", + "timerType": "Тип таймера", + "start": "Начало", + "pause": "Пауза", + "resume": "Резюме", + "reset": "Сброс", + "startPause": "Старт/Пауза", + "hideButton": "Скрыть кнопку", + "fontColor": "Цвет шрифта" + }, + "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": "Триггеры при обновлении" + }, + "productDesc": "Создавайте программные приложения для своей компании и клиентов с минимальным опытом кодирования. Lowcoder - отличная альтернатива Retool, Appsmith и Tooljet.", + "richTextEditor": { + "toolbar": "Настройка панели инструментов", + "toolbarDescription": "Вы можете настроить панель инструментов. Более подробную информацию см. на сайте: https://quilljs.com/docs/modules/toolbar/.", + "placeholder": "Пожалуйста, введите...", + "hideToolbar": "Скрыть панель инструментов", + "content": "Содержание", + "title": "Название", + "save": "Сохранить", + "link": "Ссылка:", + "edit": "Редактировать", + "remove": "Удалить", + "defaultValue": "Базовое содержание" + } +} \ 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 69c2808fd..58be86d1a 100644 --- a/client/packages/lowcoder/src/i18n/locales/zh.ts +++ b/client/packages/lowcoder/src/i18n/locales/zh.ts @@ -239,7 +239,7 @@ export const zh: typeof en = { align: "对齐", width: "宽度", widthTooltip: - "组件标题的宽度,支持百分比(%)和像素(px)为单位.", + "组件标题的宽度,支持百分比(%)和像素(px)为单位.", }, "textOverflowProp": { ...en.textOverflowProp, @@ -332,7 +332,7 @@ export const zh: typeof en = { "hideCameraDesc": "在隐藏摄像头时触发", "shareScreen": "共享屏幕", "shareScreenDesc": "在共享屏幕时触发", - "shareScreenEnd": "共享屏幕结束", + "shareScreenEnd": "共享屏幕结束", "shareScreenEndDesc": "在共享屏幕结束时触发", "shareControl": "共享控制", "shareControlDesc": "在共享控制时触发", @@ -423,7 +423,7 @@ export const zh: typeof en = { containerheaderpaddingDesc: "默认头部边距通常用于大多数组件", gridColumns: "网格列", gridColumnsDesc: - "默认列数通常用于大多数容器", + "默认列数通常用于大多数容器", }, style: { ...en.style, @@ -1065,58 +1065,58 @@ export const zh: typeof en = { }, "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, @@ -1373,8 +1373,8 @@ export const zh: typeof en = { link: "链接", textDesc: "当前显示在链接上的文本", loadingDesc: "链接是否处于加载状态?如果为true,则当前链接正在加载", - }, - scanner: { + }, + scanner: { text: "点击扫码", camera: "摄像头{index}", changeCamera: "切换摄像头", @@ -1382,12 +1382,12 @@ export const zh: typeof en = { uniqueData: "忽略重复数据", maskClosable: "点击背景后关闭", errTip: "请在HTTPS模式或本地主机模式下使用此组件", - }, - dropdown: { + }, + dropdown: { onlyMenu: "仅菜单", textDesc: "当前显示在按钮上的文本", - }, - textShow: { + }, + textShow: { // eslint-disable-next-line only-ascii/only-ascii text: "### 👋 你好,{name}", valueTooltip: "Markdown支持大多数HTML标签和属性.出于安全原因,禁用了iframe、script和其他标签.", @@ -1564,7 +1564,7 @@ export const zh: typeof en = { supportPreview: "支持点击预览", supportPreviewTip: "仅在图片链接有效时生效", }, - progress: { + progress: { ...en.progress, value: "进度值", valueTooltip: "完成百分比,取值范围为0到100", @@ -2068,7 +2068,7 @@ export const zh: typeof en = { title: "高级", defaultHomeTitle: "默认首页", defaultHomeHelp: - "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", + "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", defaultHomePlaceholder: "选择默认首页", saveBtn: "保存", preloadJSTitle: "预加载 JavaScript", @@ -2078,7 +2078,7 @@ export const zh: typeof en = { preloadCSSApply: "应用到工作空间的首页", preloadLibsTitle: "JavaScript 库", preloadLibsHelp: - "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", + "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", preloadLibsEmpty: "尚未添加 JavaScript 库", preloadLibsAddBtn: "添加库", saveSuccess: "保存成功", @@ -2427,11 +2427,11 @@ export const zh: typeof en = { queryData: "查询数据", queryDataContent: `在此处创建新的查询,并连接到您的MySQL、PostgreSQL、MongoDB、Redis、Airtable等数据源.配置查询后,点击“运行”获取数据.`, compProperties: "组件属性", - }, - homeTutorials: { + }, + homeTutorials: { createAppContent: `🎉 欢迎使用{productName},点击“应用程序”开始创建您的第一个应用程序.`, createAppTitle: "创建应用程序", - }, + }, history: { ...en.history, layout: "'{0}'布局调整", @@ -2599,7 +2599,7 @@ export const zh: typeof en = { "createTicketSubmit": "提交工单", "createTicketInfoText": "当您的工单创建后,您可以在“详情”部分添加截图和评论。" }, - + npm: { ...en.npm, @@ -2642,7 +2642,7 @@ export const zh: typeof en = { 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", + "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: "使用第三方插件库", }, @@ -2975,7 +2975,7 @@ export const zh: typeof en = { lockTip: "内容已锁定.要进行更改,请点击{icon}解锁.", lockModalContent: "更改“ID属性”字段可能对用户识别产生重大影响,请在继续之前确认您理解此更改的影响.", payUserTag: "高级", - }, + }, slotControl: { ...en.slotControl, configSlotView: "配置槽视图", @@ -3024,8 +3024,8 @@ export const zh: typeof en = { singlePlay: "播放一次", endlessLoop: "循环播放", keepLastFrame: "冻结最后一帧", - }, - comment: { + }, + comment: { ...en.comment, value: "评论列表数据", showSendButton: "允许评论", @@ -3050,13 +3050,13 @@ export const zh: typeof en = { helpdisplayName: "头像文字(低优先)", helpvalue: "评论内容", helpcreatedAt: "创建时间", - }, - iconComp: { + }, + iconComp: { ...en.iconComp, icon: "图标", autoSize: "图标自动大小", iconSize: "图标大小", - }, + }, mention:{ ...en.mention, mentionList: "提及列表", @@ -3117,4 +3117,4 @@ export const zh: typeof en = { navStyle: "菜单风格", navItemStyle: "菜单项样式", } -}; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/zhViewer.ts b/client/packages/lowcoder/src/i18n/locales/zhViewer.ts new file mode 100644 index 000000000..03eb9035c --- /dev/null +++ b/client/packages/lowcoder/src/i18n/locales/zhViewer.ts @@ -0,0 +1,267 @@ +export const zh = { + "productName": "Lowcoder", + "errorBoundary": { + "encounterError": "加载组件失败,请检查您的配置.", + "clickToReload": "点击重新加载", + "errorMsg": "错误:" + }, + "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": "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" + }, + "error": "错误", + "npm": { + "invalidNpmPackageName": "无效的npm包名称或URL链接.", + "pluginExisted": "该npm插件已存在", + "compNotFound": "未找到组件 {compName}.", + "addPluginModalTitle": "添加npm插件", + "pluginNameLabel": "npm包的URL链接或名称", + "noCompText": "没有组件.", + "compsLoading": "加载中...", + "removePluginBtnText": "移除", + "addPluginBtnText": "添加npm插件" + }, + "uiCompCategory": { + "dashboards": "仪表板和报告", + "layout": "布局和导航", + "forms": "数据收集与表格", + "collaboration": "会议与合作", + "projectmanagement": "项目管理", + "scheduling": "日历和日程安排", + "documents": "文件和档案管理", + "itemHandling": "项目和签名处理", + "multimedia": "多媒体与动画", + "integration": "整合与扩展" + }, + "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" + }, + "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": "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" + }, + "productDesc": "快速构建内部工具,无任何限制", + "richTextEditor": { + "toolbar": "Customize Toolbar", + "toolbarDescription": "You can customize the toolbar. Please refer to: https://quilljs.com/docs/modules/toolbar/ for more details.", + "placeholder": "请输入...", + "hideToolbar": "隐藏工具栏", + "content": "内容", + "title": "标题", + "save": "保存", + "link": "链接:", + "edit": "编辑", + "remove": "移除", + "defaultValue": "Base Content" + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/index.sdk.ts b/client/packages/lowcoder/src/index.sdk.ts index ffea3d32b..75447f7da 100644 --- a/client/packages/lowcoder/src/index.sdk.ts +++ b/client/packages/lowcoder/src/index.sdk.ts @@ -59,7 +59,7 @@ export * from "util/context/ExternalEditorContext"; export { CanvasContainerID } from "constants/domLocators"; // comps -export * from "comps/index"; +// export * from "bootstrap/admin"; export * from "comps/comps/rootComp"; // comp utils diff --git a/client/packages/lowcoder/src/index.ts b/client/packages/lowcoder/src/index.ts index 086d19d0e..fe876fc4d 100644 --- a/client/packages/lowcoder/src/index.ts +++ b/client/packages/lowcoder/src/index.ts @@ -6,13 +6,13 @@ import * as supabase from "@supabase/supabase-js"; import * as uuid from "uuid"; import "regenerator-runtime/runtime"; -import "virtual:globals"; import { debug } from "loglevel"; -import { bootstrap } from "./app"; import "./index.less"; -import log from "loglevel"; import "antd-mobile/es/global"; import 'animate.css'; +import {initTranslator as initTranslatorDesign} from "i18n/design"; +import {initTranslator as initTranslator} from "i18n"; + window.numbro = numbro; window.Papa = Papa; @@ -24,7 +24,7 @@ if (!window.ResizeObserver) { window.ResizeObserver = ResizeObserver; } -function hideLoading() { +export function hideLoading() { // hide loading const node = document.getElementById("loading"); if (node) { @@ -39,10 +39,14 @@ debug(`REACT_APP_API_SERVICE_URL:, ${REACT_APP_API_SERVICE_URL}`); debug(`REACT_APP_NODE_SERVICE_URL:, ${REACT_APP_NODE_SERVICE_URL}`); debug(`REACT_APP_ENV:, ${REACT_APP_ENV}`); debug(`REACT_APP_LOG_LEVEL:, ${REACT_APP_LOG_LEVEL}`); - -try { - bootstrap(); - hideLoading(); -} catch (e) { - log.error(e); -} +initTranslatorDesign().then(() => { + initTranslator().then(async () => { + let bootstrap; + if (REACT_APP_VIEW_MODE === "view") { + bootstrap = await import("./bootstrap/view/app").then(module => module.bootstrap); + } else { + bootstrap = await import("./bootstrap/admin/app").then(module => module.bootstrap); + } + bootstrap(); + }) +}) diff --git a/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx b/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx index 2d753d647..54f8c0149 100644 --- a/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx +++ b/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx @@ -2,10 +2,7 @@ import { EditorContext } from "comps/editorState"; import { UICompType } from "comps/uiCompRegistry"; import { Layers } from "constants/Layers"; import { ModulePrimaryColor, PrimaryColor } from "constants/style"; -import { fadeColor } from "lowcoder-design"; -import { CloseEyeIcon } from "lowcoder-design"; -import { DragWhiteIcon } from "lowcoder-design"; -import { WidthDragIcon } from "lowcoder-design"; +import {CloseEyeIcon, DragWhiteIcon, fadeColor, WidthDragIcon} from "lowcoder-design"; import React, { MouseEvent, MouseEventHandler, @@ -19,6 +16,7 @@ import styled, { css } from "styled-components"; import { EllipsisTextCss } from "lowcoder-design"; import { draggingUtils } from "./draggingUtils"; import { ResizeHandleAxis } from "./gridLayoutPropTypes"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export type DragHandleName = "w" | "e" | "nw" | "ne" | "sw" | "se"; type NamePos = "top" | "bottom" | "bottomInside"; @@ -157,13 +155,13 @@ const dragIconCss = (props: DragHandleProps, handle: ResizeHandleAxis) => css` display: ${dragDisplay(handle, props)}; `; -const DragLeftIcon = styled(WidthDragIcon)` +const DragLeftIcon = styled(MultiIcon(WidthDragIcon))` ${(props) => dragIconCss(props, "w")}; left: -3.5px; transform: translate(0px, -50%); `; -const DragRightIcon = styled(WidthDragIcon)` +const DragRightIcon = styled(MultiIcon(WidthDragIcon))` ${(props) => dragIconCss(props, "e")}; right: -3.5px; transform: translate(0px, -50%); @@ -227,7 +225,7 @@ const DragSE = styled.div` bottom: -2.5px; `; -const HiddenIcon = styled(CloseEyeIcon)` +const HiddenIcon = styled(MultiIcon(CloseEyeIcon))` g g { fill: #f5f5f6; } @@ -339,7 +337,7 @@ export const CompSelectionWrapper = React.memo((props: { $isDraggable={props.isDraggable} ref={nameDivRef} > - {props.isDraggable && } + {props.isDraggable && } {nameConfig.name} {props.hidden && } diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx index c2d93086d..14cee63cf 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx @@ -1,14 +1,10 @@ import { HomeResTypeEnum, NavigationType, NavigationTypes } from "../../types/homeRes"; import { AppImport } from "./components/AppImport"; import { - CommonGrayLabel, - CommonTextLabel, - CustomModal, - ImportIconV2, - MobileNavIcon, - PackUpIcon, - PcNavIcon, - TacoButton, + CommonGrayLabel, + CommonTextLabel, + CustomModal, ImportIconV2, MobileNavIcon, PackUpIcon, PcNavIcon, + TacoButton, } from "lowcoder-design"; import React, { FunctionComponent, useState } from "react"; import type { ItemType } from "antd/es/menu/interface"; @@ -23,6 +19,7 @@ import { getUser } from "../../redux/selectors/usersSelectors"; import { useCreateHomeRes } from "./useCreateHomeRes"; import { trans } from "../../i18n"; import { ActiveTextColor } from "constants/style"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const Dropdown = styled(AntdDropdown)` &:not(.ant-dropdown-open) > svg { @@ -140,8 +137,8 @@ const LayoutItemWrapper = styled.div` `; const NavigationTypeInfo: Record> = { - [HomeResTypeEnum.MobileTabLayout]: MobileNavIcon, - [HomeResTypeEnum.NavLayout]: PcNavIcon, + [HomeResTypeEnum.MobileTabLayout]: MultiIcon(MobileNavIcon), + [HomeResTypeEnum.NavLayout]: MultiIcon(PcNavIcon), }; function NavLayoutPickModal(props: { @@ -256,7 +253,7 @@ export const CreateDropdown = (props: { defaultVisible?: boolean; mode: HomeLayo label: ( - + {trans("home.import")} @@ -271,7 +268,7 @@ export const CreateDropdown = (props: { defaultVisible?: boolean; mode: HomeLayo > {isCreating ? trans("home.creating") : trans("newItem")} - + diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx index e69792bbd..d97c72ee5 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx @@ -11,12 +11,8 @@ import { default as Skeleton } from "antd/es/skeleton"; import { Card } from "antd"; import React, { useEffect, useState } from "react"; import { - ArrowIcon, - ArrowSolidIcon, - HomeCardIcon, - HomeEmptyIcon, - HomeListIcon, - Search, + ArrowIcon, ArrowSolidIcon, HomeCardIcon, HomeEmptyIcon, HomeListIcon, + Search } from "lowcoder-design"; import { canEditApp, canManageApp } from "../../util/permissionUtils"; import { HomeResKey, HomeResTypeEnum, NavigationTypes } from "../../types/homeRes"; @@ -35,6 +31,7 @@ import { isFetchingFolderElements } from "../../redux/selectors/folderSelector"; import { checkIsMobile } from "util/commonUtils"; import { default as Divider } from "antd/es/divider"; import { ApplicationCategoriesEnum } from "constants/applicationConstants"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const Wrapper = styled.div` display: flex; @@ -446,7 +443,7 @@ export function HomeLayout(props: HomeLayoutProps) { } + separator={} items={breadcrumbItems} itemRender={(item) => ( node} - suffixIcon={} /> + suffixIcon={} /> )} {mode === "marketplace" && ( setCategoryFilter(value as ApplicationCategoriesEnum)} options={categoryOptions} // getPopupContainer={(node) => node} - suffixIcon={} /> + suffixIcon={} /> )} @@ -530,7 +527,7 @@ export function HomeLayout(props: HomeLayoutProps) { ) : ( <> setLayout(layout === "list" ? "card" : "list")}> - {layout === "list" ? : } + {layout === "list" ? : } {mode === "marketplace" && ( @@ -587,7 +584,7 @@ export function HomeLayout(props: HomeLayoutProps) { ) : ( - +
{mode === "trash" ? trans("home.trashEmpty") diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/HomeResOptions.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/HomeResOptions.tsx index b712fe7e4..41cd12fe3 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/HomeResOptions.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/HomeResOptions.tsx @@ -1,7 +1,7 @@ import { HomeRes } from "./HomeLayout"; import { HomeResTypeEnum } from "../../types/homeRes"; import { exportApplicationAsJSONFile } from "./components/AppImport"; -import { CustomModal, EditPopover, EditPopoverItemType, PointIcon } from "lowcoder-design"; +import {CustomModal, EditPopover, EditPopoverItemType, PointIcon} from "lowcoder-design"; import { HomeResInfo } from "../../util/homeResUtils"; import { recycleApplication } from "../../redux/reduxActions/applicationActions"; import { deleteFolder } from "../../redux/reduxActions/folderActions"; @@ -13,8 +13,9 @@ import { useParams } from "react-router-dom"; import { AppTypeEnum } from "constants/applicationConstants"; import { CopyModal } from "pages/common/copyModal"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; -const PopoverIcon = styled(PointIcon)` +const PopoverIcon = styled(MultiIcon(PointIcon))` cursor: pointer; flex-shrink: 0; diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx index 561020905..e9602e0d2 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx @@ -4,17 +4,17 @@ import React, { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useParams } from "react-router-dom"; import { - CustomModal, - DatasourceForm, - FolderIcon, - FormSection, - FormSelectItem, - TacoButton, + CustomModal, + DatasourceForm, FolderIcon, + FormSection, + FormSelectItem, + TacoButton, } from "lowcoder-design"; import { moveToFolder } from "../../redux/reduxActions/folderActions"; import styled from "styled-components"; import { trans } from "../../i18n"; import { foldersSelector } from "../../redux/selectors/folderSelector"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const MoveLabel = styled.div` font-size: 13px; @@ -107,7 +107,7 @@ export const MoveToFolderModal = (props: { source?: HomeRes; onClose: () => void { label: ( - + {trans("home.rootFolder")} ), @@ -120,7 +120,7 @@ export const MoveToFolderModal = (props: { source?: HomeRes; onClose: () => void .map((f) => ({ label: ( - + {f.name} ), diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/OrgLayout.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/OrgLayout.tsx index ea9e99534..b90218e72 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/OrgLayout.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/OrgLayout.tsx @@ -9,19 +9,15 @@ import { normalAppListSelector } from "../../redux/selectors/applicationSelector import history from "util/history"; import { ALL_APPLICATIONS_URL, ORG_HOME_URL } from "constants/routesURL"; import { default as AntdBreadcrumb } from "antd/es/breadcrumb"; -import { ArrowIcon } from "lowcoder-design"; import { Avatar, Button, Card, Col, Row, Space, Typography, Select, Tooltip } from "antd"; import { useRef } from "react"; import { LowcoderAppView } from "appView/LowcoderAppView"; import CountUp from 'react-countup'; -import { - ApplicationDocIcon, - ModuleDocIcon, - AvatarGroupCompIcon, -} from "lowcoder-design"; import { SERVER_HOST } from "constants/apiConstants"; import { sdkConfig } from "constants/sdkConfig"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {ApplicationDocIcon, ArrowIcon} from "icons"; const { Text, Title, Link } = Typography; @@ -162,7 +158,7 @@ export function OrgLayout(props: OrgLayoutLayoutProps) { } + separator={} items={breadcrumbItems} itemRender={(item) => (
- + diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/UserProfileLayout.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/UserProfileLayout.tsx index 33fcc7c3e..d98508767 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/UserProfileLayout.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/UserProfileLayout.tsx @@ -3,7 +3,6 @@ import { useSelector } from "react-redux"; import styled from "styled-components"; import dayjs from "dayjs"; import { default as AntdBreadcrumb } from "antd/es/breadcrumb"; -import { ArrowIcon } from "lowcoder-design"; import { getUser } from "../../redux/selectors/usersSelectors"; import { getCurrentUser } from "../../redux/selectors/usersSelectors"; @@ -21,16 +20,13 @@ import { Avatar, Button, Card, Col, Row, Space, Typography, Select, Tooltip } fr import { fullAvatarUrl } from "util/urlUtils"; import { - BlurFinishInput, - OtpFormInput, // maybe to use - PasswordInput, // maybe to use + ApplicationDocIcon, + ArrowIcon, AvatarGroupCompIcon, + BlurFinishInput, ModuleDocIcon, + OtpFormInput, // maybe to use + PasswordInput, // maybe to use } from "lowcoder-design"; -import { - ApplicationDocIcon, - ModuleDocIcon, - AvatarGroupCompIcon, -} from "lowcoder-design"; import { useDispatch } from "react-redux"; import { beforeImgUpload, getBase64 } from "util/fileUtils"; @@ -39,6 +35,7 @@ import { default as Upload, UploadChangeParam } from "antd/es/upload"; import { USER_HEAD_UPLOAD_URL } from "constants/apiConstants"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import UserApiKeysCard from './components/UserApiKeysCard'; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const { Text, Title, Link } = Typography; const { Option } = Select; @@ -226,7 +223,7 @@ export function UserProfileLayout(props: UserProfileLayoutProps) { } + separator={} items={breadcrumbItems} itemRender={(item) => ( - + @@ -384,7 +381,7 @@ export function UserProfileLayout(props: UserProfileLayoutProps) { - + @@ -407,7 +404,7 @@ export function UserProfileLayout(props: UserProfileLayoutProps) { - + @@ -429,7 +426,7 @@ export function UserProfileLayout(props: UserProfileLayoutProps) { - + @@ -449,7 +446,7 @@ export function UserProfileLayout(props: UserProfileLayoutProps) { - + diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx index 0a174c0c5..34b054598 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx @@ -2,7 +2,6 @@ import { useEffect, useMemo, useState } from "react"; import { messageInstance, CustomSelect, - CloseEyeIcon, CustomModal, UnderlineCss, } from "lowcoder-design"; diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx index 479ea125a..01e301b01 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx @@ -7,13 +7,14 @@ import Tooltip from "antd/es/tooltip"; import { useDispatch, useSelector } from "react-redux"; import { useState } from "react"; import { styled } from "styled-components"; -import { AddIcon, CustomModal, EditPopover, TacoButton, messageInstance } from "lowcoder-design"; +import {CustomModal, EditPopover, TacoButton, messageInstance, AddIcon} from "lowcoder-design"; import { trans } from "i18n"; import { PopoverIcon } from "pages/setting/permission/styledComponents"; 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 { MultiIconDisplay } from "@lowcoder-ee/comps/comps/multiIconDisplay"; const TableStyled = styled(Table)` .ant-table-tbody > tr > td { @@ -58,7 +59,7 @@ export default function UserApiKeysCard() {

{trans("home.howToUseAPI")}

} + icon={} onClick={() => setModalVisible(true) } diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx index 49031cf7c..3b6293d8f 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx @@ -17,23 +17,16 @@ import { import { getUser, isFetchingUser } from "redux/selectors/usersSelectors"; import { useDispatch, useSelector } from "react-redux"; import { + AppsIcon, // EditPopover, - EllipsisTextCss, + EllipsisTextCss, EnterpriseIcon, FolderIcon, HomeDataSourceIcon, - NewsIcon, - WorkspacesIcon, - // HomeModuleIcon, - HomeQueryLibraryIcon, - HomeSettingIcon, - SupportIcon, - // PlusIcon, - // PointIcon, - RecyclerIcon, + HomeQueryLibraryIcon, HomeSettingIcon, MarketplaceIcon, - AppsIcon, - EnterpriseIcon, + NewsIcon, RecyclerIcon, UserIcon, + WorkspacesIcon } from "lowcoder-design"; import React, { useCallback, useEffect, useState } from "react"; import { fetchAllApplications, fetchHomeData } from "redux/reduxActions/applicationActions"; @@ -59,7 +52,7 @@ import { RootFolderListView } from "./RootFolderListView"; import { fetchFolderElements, updateFolder } from "../../redux/reduxActions/folderActions"; // import { ModuleView } from "./ModuleView"; // import { useCreateFolder } from "./useCreateFolder"; -import { trans } from "../../i18n"; +import {initTranslator, trans} from "../../i18n"; import { foldersSelector } from "../../redux/selectors/folderSelector"; import Setting from "pages/setting"; import { Support } from "pages/support"; @@ -73,6 +66,9 @@ import { ReduxActionTypes } from '@lowcoder-ee/constants/reduxActionConstants'; // adding App Editor, so we can show Apps inside the Admin Area import AppEditor from "../editor/AppEditor"; import { set } from "lodash"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {initTranslator as initTranslatorDesign} from "i18n/design"; +import {LoadingBarHideTrigger} from "@lowcoder-ee/util/hideLoading"; const TabLabel = styled.div` font-weight: 500; @@ -153,7 +149,17 @@ const DivStyled = styled.div` } `; +const initialize = async () => { + try { + await initTranslatorDesign(); + await initTranslator(); + } catch (error) { + console.error('Initialization failed:', error); + } +}; + export default function ApplicationHome() { + const [isInitialized, setIsInitialized] = useState(false); const dispatch = useDispatch(); const [isPreloadCompleted, setIsPreloadCompleted] = useState(false); const fetchingUser = useSelector(isFetchingUser); @@ -169,6 +175,10 @@ export default function ApplicationHome() { const isOrgAdmin = org?.createdBy == user.id ? true : false; + useEffect(() => { + initialize().then(() => setIsInitialized(true)); + }, []); + useEffect(() => { dispatch(fetchHomeData({})); dispatch(fetchSubscriptionsAction()); @@ -203,12 +213,13 @@ export default function ApplicationHome() { user.currentOrgId && dispatch(fetchFolderElements({})); }, [dispatch, allFoldersCount, user.currentOrgId]); - if (fetchingUser || !isPreloadCompleted) { + if (!isInitialized || fetchingUser || !isPreloadCompleted) { return ; } return ( + {trans("home.profile")}, routePath: USER_PROFILE_URL, routeComp: UserProfileView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , }, { text: {trans("home.news")}, routePath: NEWS_URL, routeComp: NewsView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , visible: ({ user }) => user.orgDev, style: { color: "red" }, }, @@ -232,7 +243,7 @@ export default function ApplicationHome() { routePath: ORG_HOME_URL, routePathExact: false, routeComp: OrgView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , visible: ({ user }) => !user.orgDev, }, { @@ -240,7 +251,7 @@ export default function ApplicationHome() { routePath: MARKETPLACE_URL, routePathExact: false, routeComp: MarketplaceView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , }, ] }, @@ -251,13 +262,13 @@ export default function ApplicationHome() { text: {trans("home.allFolders")}, routePath: FOLDERS_URL, routeComp: RootFolderListView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , }, { text: {trans("home.allApplications")}, routePath: ALL_APPLICATIONS_URL, routeComp: HomeView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , }, ], }, @@ -269,7 +280,7 @@ export default function ApplicationHome() { text: {trans("home.queryLibrary")}, routePath: QUERY_LIBRARY_URL, routeComp: QueryLibraryEditor, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , visible: ({ user }) => user.orgDev, }, { @@ -277,7 +288,7 @@ export default function ApplicationHome() { routePath: DATASOURCE_URL, routePathExact: false, routeComp: DatasourceHome, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , visible: ({ user }) => user.orgDev, onSelected: (_, currentPath) => currentPath.split("/")[1] === "datasource", }, @@ -290,7 +301,7 @@ export default function ApplicationHome() { routePath: "/ee/6600ae8724a23f365ba2ed4c/admin", routePathExact: false, routeComp: AppEditor, - icon: ({ selected, ...otherProps }) => selected ? ( ) : ( ), + icon: ({ selected, ...otherProps }) => selected ? ( ) : ( ), visible: ({ user }) => user.orgDev, }, ], @@ -315,7 +326,7 @@ export default function ApplicationHome() { routePath: SETTING_URL, routePathExact: false, routeComp: Setting, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , visible: ({ user }) => user.orgDev, onSelected: (_, currentPath) => currentPath.split("/")[1] === "setting", } @@ -328,7 +339,7 @@ export default function ApplicationHome() { text: {trans("home.trash")}, routePath: TRASH_URL, routeComp: TrashView, - icon: ({ selected, ...otherProps }) => selected ? : , + icon: ({ selected, ...otherProps }) => selected ? : , visible: ({ user }) => user.orgDev, }, ], diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/common/Example.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/common/Example.tsx index 1a6d6c571..747a7cb27 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/common/Example.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/common/Example.tsx @@ -3,7 +3,6 @@ import { evalAndReduceWithExposing } from "comps/utils"; import _ from "lodash"; import React, { ReactNode, useContext, useEffect, useState } from "react"; import styled from "styled-components"; -import { ShowBorderIcon, EditIcon } from "lowcoder-design"; import propNames from "../propNameText"; import valueTranslate from "../propValueText"; import { AppTypeEnum } from "constants/applicationConstants"; @@ -16,6 +15,8 @@ import { ExampleContext } from "../ExampleContext"; import { trans } from "i18n"; import { EditorContext, EditorState } from "comps/editorState"; import { RootComp } from "comps/comps/rootComp"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {EditIcon, ShowBorderIcon} from "icons"; const Wrapper = styled.div` border: 1px solid #d7d9e0; @@ -92,13 +93,13 @@ const Bound = styled.div` border: ${({ show }) => `1px dashed ${show ? "rgb(51, 119, 255)" : "transparent"}`}; `; -const StyledBorderIcon = styled(ShowBorderIcon)` +const StyledBorderIcon = styled(MultiIcon(ShowBorderIcon))` width: 14px; height: 14px; margin-right: 5px; `; -const StyledEditIcon = styled(EditIcon)` +const StyledEditIcon = styled(MultiIcon(EditIcon))` width: 14px; height: 14px; margin-right: 5px; diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/common/PageInfo.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/common/PageInfo.tsx index f925fb8a9..ce0f47e63 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/common/PageInfo.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/common/PageInfo.tsx @@ -44,7 +44,7 @@ export default function PageInfo(props: IProps) {
- + {!Icon ? <> : } {compInfo.name}
diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/index.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/index.tsx index 532076edf..aeab11fb1 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/index.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/index.tsx @@ -3,7 +3,7 @@ import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import styled from "styled-components"; import PageContent from "./common/PageContent"; -import "comps"; +import "bootstrap/admin"; import { UICompType, UICompManifest, diff --git a/client/packages/lowcoder/src/pages/ComponentPlayground/index.tsx b/client/packages/lowcoder/src/pages/ComponentPlayground/index.tsx index 348fa63c0..0984a738c 100644 --- a/client/packages/lowcoder/src/pages/ComponentPlayground/index.tsx +++ b/client/packages/lowcoder/src/pages/ComponentPlayground/index.tsx @@ -1,6 +1,6 @@ import { useParams } from "react-router-dom"; import styled from "styled-components"; -import "comps"; +import "bootstrap/admin"; import { UICompType, UICompManifest, uiCompRegistry, UICompCategory } from "comps/uiCompRegistry"; import { CompPlayground } from "ide/CompPlayground"; import { Comp } from "lowcoder-core"; diff --git a/client/packages/lowcoder/src/pages/common/header.tsx b/client/packages/lowcoder/src/pages/common/header.tsx index 21844023e..d57f276b9 100644 --- a/client/packages/lowcoder/src/pages/common/header.tsx +++ b/client/packages/lowcoder/src/pages/common/header.tsx @@ -18,14 +18,7 @@ import { CommonTextLabel, CustomModal, DropdownMenu, - EditText, - Layout, - Left, - Middle, - ModuleIcon, - PackUpIcon, - RefreshIcon, - Right, + EditText, Layout, Left, Middle, ModuleIcon, PackUpIcon, RefreshIcon, Right, TacoButton, } from "lowcoder-design"; import { trans } from "i18n"; @@ -64,6 +57,7 @@ import Avatar from 'antd/es/avatar'; import UserApi from "@lowcoder-ee/api/userApi"; import { validateResponse } from "@lowcoder-ee/api/apiUtils"; import ProfileImage from "./profileImage"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const { Countdown } = Statistic; const { Text } = Typography; @@ -94,13 +88,13 @@ const IconCss = css<{ $show?: boolean }>` cursor: pointer; `; -const LayoutIcon = styled(Layout)` +const LayoutIcon = styled(MultiIcon(Layout))` ${IconCss} `; -const LeftIcon = styled(Left)` +const LeftIcon = styled(MultiIcon(Left))` ${IconCss} `; -const MiddleIcon = styled(Middle)<{ $show: boolean }>` +const MiddleIcon = styled(MultiIcon(Middle))<{ $show: boolean }>` ${IconCss} & g line { stroke: ${(props) => (props.$show ? "#dddddd" : "#dddddd65")}; @@ -119,7 +113,7 @@ const MiddleIcon = styled(Middle)<{ $show: boolean }>` } `; -const RightIcon = styled(Right)` +const RightIcon = styled(MultiIcon(Right))` ${IconCss} `; const IconRadius = styled.div<{ disabled?: boolean }>` @@ -212,7 +206,7 @@ const ViewOnlyLabel = styled.span` margin-left: -22px; `; -const PackUpIconStyled = styled(PackUpIcon)` +const PackUpIconStyled = styled(MultiIcon(PackUpIcon))` transform: rotate(180deg); margin-left: 4px; min-width: 18px; @@ -302,7 +296,7 @@ const StyledCountdown = styled(Countdown)` } `; -const StyledRefreshIcon = styled(RefreshIcon)` +const StyledRefreshIcon = styled(MultiIcon(RefreshIcon))` width: 16px !important; height: 16px !important; margin-right: -3px !important; @@ -433,7 +427,7 @@ export default function Header(props: HeaderProps) { {editName ? ( } + prefixIcon={isModule && } disabled={showAppSnapshot} style={showAppSnapshot ? { maxWidth: "fit-content" } : {}} text={application?.name ?? ""} @@ -650,7 +644,7 @@ export default function Header(props: HeaderProps) { )} > - + diff --git a/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx b/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx index e11f88593..37e12dca1 100644 --- a/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx +++ b/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx @@ -1,13 +1,11 @@ import { default as Dropdown } from "antd/es/dropdown"; import { BASE_URL } from "constants/routesURL"; import { - CommonTextLabel, - CustomModal, - DropdownMenu, - EditTextWrapper, - PackUpIcon, - TextWrapper, - ModuleIcon, + CommonTextLabel, + CustomModal, + DropdownMenu, + EditTextWrapper, ModuleIcon, PackUpIcon, + TextWrapper, } from "lowcoder-design"; import { trans, transToNode } from "i18n"; import { exportApplicationAsJSONFile } from "pages/ApplicationV2/components/AppImport"; @@ -25,8 +23,9 @@ import { ExternalEditorContext } from "util/context/ExternalEditorContext"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import { getUser } from "redux/selectors/usersSelectors"; import { canEditApp } from "util/permissionUtils"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; -const PackUpIconStyled = styled(PackUpIcon)` +const PackUpIconStyled = styled(MultiIcon(PackUpIcon))` transform: rotate(180deg); margin-left: 4px; min-width: 18px; @@ -173,7 +172,7 @@ export function HeaderStartDropdown(props: { setEdit: () => void, isViewMarketpl > {isModule && ( - + )} {application?.name ?? ""} diff --git a/client/packages/lowcoder/src/pages/common/help.tsx b/client/packages/lowcoder/src/pages/common/help.tsx index 64a99eca8..27e69f8df 100644 --- a/client/packages/lowcoder/src/pages/common/help.tsx +++ b/client/packages/lowcoder/src/pages/common/help.tsx @@ -7,9 +7,9 @@ import { default as Dropdown } from "antd/es/dropdown"; import { default as Popover } from "antd/es/popover"; import { default as Tooltip } from "antd/es/tooltip"; import { - customerService, - showCustomerServicePanel, - showHelpDropdown, + customerService, + showCustomerServicePanel, + showHelpDropdown, } from "@lowcoder-ee/pages/common/customerService"; import React, { useCallback, useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; @@ -27,6 +27,8 @@ import { ShortcutListPopup } from "./shortcutListPopup"; import { QuestionIcon, UpgradeIcon } from "lowcoder-design"; import { trans } from "i18n"; import { localEnv } from "util/envUtils"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; + const StyledMenu = styled(DropdownMenu)<{ $edit: boolean | string }>` ${(props) => @@ -161,7 +163,7 @@ const WatchVideoItem = () => { return ( - + {trans("help.videoText")} @@ -292,7 +294,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { label: ( {customerService(() => setShowHelp(true))} - + {trans("help.chat")} ), @@ -302,7 +304,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { key: "docs", label: ( - + {trans("help.docs")} ), @@ -312,7 +314,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { key: "issue", label: ( - + {trans("help.submitIssue")} ), @@ -323,7 +325,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { key: "discord", label: ( - + {trans("help.chat")} ), @@ -333,7 +335,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { key: "editorTutorial", label: ( - + {trans("help.editorTutorial")} ), @@ -343,7 +345,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { key: "shortcutList", label: ( - + {trans("shortcut.shortcutList")} ), @@ -354,7 +356,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { key: "changeLog", label: ( - + {trans("help.update")} ), @@ -388,7 +390,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { } placement="topLeft" > - + ), @@ -435,11 +437,11 @@ function HelpDropdownComp(props: HelpDropdownProps) { > {props.isEdit ? ( - + ) : ( - + )} diff --git a/client/packages/lowcoder/src/pages/common/previewHeader.tsx b/client/packages/lowcoder/src/pages/common/previewHeader.tsx index 10afb9817..8ee9fdde6 100644 --- a/client/packages/lowcoder/src/pages/common/previewHeader.tsx +++ b/client/packages/lowcoder/src/pages/common/previewHeader.tsx @@ -3,7 +3,7 @@ import Header from "components/layout/Header"; import { SHARE_TITLE } from "constants/apiConstants"; import { ALL_APPLICATIONS_URL, APPLICATION_VIEW_URL, AUTH_LOGIN_URL } from "constants/routesURL"; import { User } from "constants/userConstants"; -import { EllipsisTextCss, isDarkColor, TacoButton, TextEditIcon } from "lowcoder-design"; +import {EllipsisTextCss, isDarkColor, TacoButton, TextEditIcon} from "lowcoder-design"; import { useSelector } from "react-redux"; import { currentApplication, getTemplateId } from "redux/selectors/applicationSelector"; import { getUser, isFetchingUser } from "redux/selectors/usersSelectors"; @@ -21,6 +21,7 @@ import { HeaderStartDropdown } from "./headerStartDropdown"; import { useParams } from "react-router"; import { AppPathParams } from "constants/applicationConstants"; import React from "react"; +import {MultiIcon} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const HeaderFont = styled.div<{ $bgColor: string }>` font-weight: 500; @@ -81,7 +82,7 @@ const PreviewBtn = styled(TacoButton)` } `; -const EditIcon = styled(TextEditIcon)` +const EditIcon = styled(MultiIcon(TextEditIcon))` margin-right: 4px; g g { diff --git a/client/packages/lowcoder/src/pages/common/profileDropdown.tsx b/client/packages/lowcoder/src/pages/common/profileDropdown.tsx index 992227bd1..c5bec6dcc 100644 --- a/client/packages/lowcoder/src/pages/common/profileDropdown.tsx +++ b/client/packages/lowcoder/src/pages/common/profileDropdown.tsx @@ -10,9 +10,7 @@ import { CommonTextLabel, CommonTextLabel2, DropdownMenu, - DropDownSubMenu, - EditIcon, - PackUpIcon, + DropDownSubMenu, EditIcon, PackUpIcon, } from "lowcoder-design"; import ProfileSettingModal from "pages/setting/profile"; import React, { useMemo } from "react"; @@ -28,6 +26,7 @@ import { showSwitchOrg } from "@lowcoder-ee/pages/common/customerService"; import { checkIsMobile } from "util/commonUtils"; import { selectSystemConfig } from "redux/selectors/configSelectors"; import type { ItemType } from "antd/es/menu/interface"; +import {MultiIcon, MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; const { Item } = Menu; @@ -65,7 +64,7 @@ const StyledDropdown = styled(Dropdown)` align-items: end; `; -const StyledPackUpIcon = styled(PackUpIcon)` +const StyledPackUpIcon = styled(MultiIcon(PackUpIcon))` width: 20px; height: 20px; transform: rotate(90deg); @@ -171,7 +170,7 @@ export default function ProfileDropdown(props: DropDownProps) { {username} - {!checkIsMobile(window.innerWidth) && } + {!checkIsMobile(window.innerWidth) && } {currentOrg && ( 0 && showSwitchOrg(props.user, sysConfig)) { const switchOrgSubMenu = orgs.map((org: Org) => ({ key: org.id, - icon: currentOrgId === org.id && , + icon: currentOrgId === org.id && , label: org.name })) @@ -209,7 +208,7 @@ export default function ProfileDropdown(props: DropDownProps) { { type: 'divider'}, { key: 'newOrganization', - icon: , + icon: , label: trans("profile.createOrg") } ] diff --git a/client/packages/lowcoder/src/pages/common/shortcutListPopup.tsx b/client/packages/lowcoder/src/pages/common/shortcutListPopup.tsx index a0b41ff92..f8eb5865c 100644 --- a/client/packages/lowcoder/src/pages/common/shortcutListPopup.tsx +++ b/client/packages/lowcoder/src/pages/common/shortcutListPopup.tsx @@ -1,8 +1,9 @@ import styled from "styled-components"; -import { CloseIcon } from "lowcoder-design"; import { allShortcutGroups } from "./shortcutConfigs"; import { isMac } from "util/commonUtils"; import { trans } from "i18n"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {CloseIcon} from "icons"; const Wrapper = styled.div` position: absolute; @@ -143,7 +144,7 @@ export function ShortcutListPopup(props: { setShowShortcutList: (v: boolean) => {trans("shortcut.shortcutList")} props.setShowShortcutList(false)}> - + diff --git a/client/packages/lowcoder/src/pages/common/styledComponent.tsx b/client/packages/lowcoder/src/pages/common/styledComponent.tsx index 09da51c06..e6043c39e 100644 --- a/client/packages/lowcoder/src/pages/common/styledComponent.tsx +++ b/client/packages/lowcoder/src/pages/common/styledComponent.tsx @@ -1,13 +1,14 @@ import React, { CSSProperties } from "react"; import styled from "styled-components"; -import { CommonGrayLabel, EmptyDataIcon } from "lowcoder-design"; +import {CommonGrayLabel, EmptyDataIcon} from "lowcoder-design"; import { Layers } from "constants/Layers"; import _ from "lodash"; import { useResizeDetector } from "react-resize-detector"; import { EditorContainerPadding, TopHeaderHeight } from "constants/style"; import { trans } from "i18n"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; export const Height100Div = styled.div` height: 100%; @@ -141,7 +142,7 @@ export const EmptyContent = (props: { const { text = trans("emptyContent") } = props; return ( - + {text} ); diff --git a/client/packages/lowcoder/src/pages/common/videoDialog.tsx b/client/packages/lowcoder/src/pages/common/videoDialog.tsx index 10ca346bb..fbdc39247 100644 --- a/client/packages/lowcoder/src/pages/common/videoDialog.tsx +++ b/client/packages/lowcoder/src/pages/common/videoDialog.tsx @@ -1,8 +1,9 @@ import React, { useEffect, useRef } from "react"; import { default as Modal } from "antd/es/modal"; -import { CloseIcon } from "lowcoder-design"; import styled from "styled-components"; import { Layers } from "constants/Layers"; +import {MultiIconDisplay} from "@lowcoder-ee/comps/comps/multiIconDisplay"; +import {CloseIcon} from "icons"; const VideoModalWrapper = styled.div` display: flex; @@ -64,7 +65,7 @@ function VideoDialog(props: { setVisible(false); }} > - +