@gntik-ai/ui 0.7.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Field-knzMlyzO.js +2261 -0
- package/dist/Field-knzMlyzO.js.map +1 -0
- package/dist/doc-C6r06QOg.d.ts +26 -0
- package/dist/forms.d.ts +149 -10
- package/dist/forms.js +322 -19
- package/dist/forms.js.map +1 -1
- package/dist/index.d.ts +1133 -287
- package/dist/index.js +3236 -2737
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Field-neBukiNh.js +0 -149
- package/dist/Field-neBukiNh.js.map +0 -1
|
@@ -0,0 +1,2261 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { extendTailwindMerge } from "tailwind-merge";
|
|
4
|
+
import { createTV } from "tailwind-variants";
|
|
5
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
|
|
6
|
+
import { DirectionProvider } from "@base-ui/react/direction-provider";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { CircleAlert } from "lucide-react";
|
|
9
|
+
import { Button } from "@base-ui/react/button";
|
|
10
|
+
import { Field } from "@base-ui/react/field";
|
|
11
|
+
import { Fieldset } from "@base-ui/react/fieldset";
|
|
12
|
+
//#region src/utils/density-merge.ts
|
|
13
|
+
/**
|
|
14
|
+
* Teaches tailwind-merge the density utilities from @gntik-ai/tokens (density.css), so
|
|
15
|
+
* `cn('h-control', 'h-10')` and `px-control … px-0` resolve like any other Tailwind conflict.
|
|
16
|
+
* Shared by `cn()` and the `tv()` instance.
|
|
17
|
+
*/
|
|
18
|
+
const densityMergeConfig = { extend: { classGroups: {
|
|
19
|
+
h: [{ h: [
|
|
20
|
+
"control-sm",
|
|
21
|
+
"control",
|
|
22
|
+
"control-lg",
|
|
23
|
+
"item",
|
|
24
|
+
"tab",
|
|
25
|
+
"chip",
|
|
26
|
+
"token",
|
|
27
|
+
"row"
|
|
28
|
+
] }],
|
|
29
|
+
w: [{ w: [
|
|
30
|
+
"control-sm",
|
|
31
|
+
"control",
|
|
32
|
+
"control-lg"
|
|
33
|
+
] }],
|
|
34
|
+
size: [{ size: [
|
|
35
|
+
"control-sm",
|
|
36
|
+
"control",
|
|
37
|
+
"control-lg"
|
|
38
|
+
] }],
|
|
39
|
+
px: [{ px: [
|
|
40
|
+
"control-sm",
|
|
41
|
+
"control",
|
|
42
|
+
"control-lg",
|
|
43
|
+
"field"
|
|
44
|
+
] }],
|
|
45
|
+
ps: [{ ps: ["field"] }],
|
|
46
|
+
py: [{ py: ["cell", "bar"] }],
|
|
47
|
+
gap: [{ gap: ["tight"] }]
|
|
48
|
+
} } };
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/utils/cn.ts
|
|
51
|
+
const twMerge = extendTailwindMerge(densityMergeConfig);
|
|
52
|
+
/** Joins class names and resolves Tailwind conflicts (last one wins), density utilities included. */
|
|
53
|
+
function cn(...inputs) {
|
|
54
|
+
return twMerge(clsx(inputs));
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/utils/tv.ts
|
|
58
|
+
/** `tv()` with tailwind-merge aware of the density utilities (h-control, px-control…). */
|
|
59
|
+
const tv = createTV({ twMergeConfig: densityMergeConfig });
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/i18n/format.ts
|
|
62
|
+
/**
|
|
63
|
+
* Formats a size with localized Intl unit labels, rounding into the next unit when needed.
|
|
64
|
+
* Bytes scale through petabytes, bits through terabits; non-finite values return `—`.
|
|
65
|
+
* A string second argument remains shorthand for the locale.
|
|
66
|
+
* @example formatBytes(1536, 'es') // '1,5 kB'
|
|
67
|
+
* @example formatBytes(26_214_400, { base: 1024 }) // '25 MiB'
|
|
68
|
+
*/
|
|
69
|
+
function formatBytes(value, options = {}) {
|
|
70
|
+
if (!Number.isFinite(value)) return "—";
|
|
71
|
+
const { locale = "en", base = 1e3, unit = "byte", unitDisplay = "short", maximumFractionDigits = 1 } = typeof options === "string" ? { locale: options } : options;
|
|
72
|
+
const scale = unit === "bit" ? 1e3 : base;
|
|
73
|
+
const prefixes = [
|
|
74
|
+
"",
|
|
75
|
+
"kilo",
|
|
76
|
+
"mega",
|
|
77
|
+
"giga",
|
|
78
|
+
"tera",
|
|
79
|
+
"peta"
|
|
80
|
+
];
|
|
81
|
+
const last = unit === "bit" ? 4 : 5;
|
|
82
|
+
let magnitude = Math.abs(value);
|
|
83
|
+
let index = 0;
|
|
84
|
+
while (magnitude >= scale && index < last) {
|
|
85
|
+
magnitude /= scale;
|
|
86
|
+
index++;
|
|
87
|
+
}
|
|
88
|
+
const rounded = new Intl.NumberFormat("en", {
|
|
89
|
+
maximumFractionDigits: index === 0 ? 0 : maximumFractionDigits,
|
|
90
|
+
useGrouping: false
|
|
91
|
+
}).format(magnitude);
|
|
92
|
+
if (Number(rounded) >= scale && index < last) {
|
|
93
|
+
magnitude /= scale;
|
|
94
|
+
index++;
|
|
95
|
+
}
|
|
96
|
+
const signed = value < 0 ? -magnitude : magnitude;
|
|
97
|
+
const numberOptions = { maximumFractionDigits: index === 0 ? 0 : maximumFractionDigits };
|
|
98
|
+
if (unit === "byte" && index === 0 && unitDisplay === "short" || scale === 1024 && index > 0) {
|
|
99
|
+
const symbol = [
|
|
100
|
+
"B",
|
|
101
|
+
"KiB",
|
|
102
|
+
"MiB",
|
|
103
|
+
"GiB",
|
|
104
|
+
"TiB",
|
|
105
|
+
"PiB"
|
|
106
|
+
][index];
|
|
107
|
+
return `${new Intl.NumberFormat(locale, numberOptions).format(signed)} ${symbol}`;
|
|
108
|
+
}
|
|
109
|
+
return new Intl.NumberFormat(locale, {
|
|
110
|
+
...numberOptions,
|
|
111
|
+
style: "unit",
|
|
112
|
+
unit: `${prefixes[index]}${unit}`,
|
|
113
|
+
unitDisplay
|
|
114
|
+
}).format(signed);
|
|
115
|
+
}
|
|
116
|
+
/** Scripts written right to left (language subtag). */
|
|
117
|
+
const RTL_LANGUAGES = /* @__PURE__ */ new Set([
|
|
118
|
+
"ar",
|
|
119
|
+
"arc",
|
|
120
|
+
"ckb",
|
|
121
|
+
"dv",
|
|
122
|
+
"fa",
|
|
123
|
+
"he",
|
|
124
|
+
"iw",
|
|
125
|
+
"ks",
|
|
126
|
+
"ku",
|
|
127
|
+
"ps",
|
|
128
|
+
"sd",
|
|
129
|
+
"ug",
|
|
130
|
+
"ur",
|
|
131
|
+
"yi"
|
|
132
|
+
]);
|
|
133
|
+
/** `rtl` for Arabic, Hebrew, Persian, Urdu… (by language subtag or Intl text info), else `ltr`. */
|
|
134
|
+
function localeDirection(locale) {
|
|
135
|
+
try {
|
|
136
|
+
const loc = new Intl.Locale(locale);
|
|
137
|
+
const info = loc.getTextInfo?.() ?? loc.textInfo;
|
|
138
|
+
if (info?.direction === "rtl" || info?.direction === "ltr") return info.direction;
|
|
139
|
+
return RTL_LANGUAGES.has(loc.language) ? "rtl" : "ltr";
|
|
140
|
+
} catch {
|
|
141
|
+
return RTL_LANGUAGES.has(locale.split(/[-_]/)[0]?.toLowerCase() ?? "") ? "rtl" : "ltr";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** Index of the brace closing the one at `open` (nested braces allowed). */
|
|
145
|
+
function matchBrace(text, open) {
|
|
146
|
+
let depth = 0;
|
|
147
|
+
for (let i = open; i < text.length; i++) if (text[i] === "{") depth++;
|
|
148
|
+
else if (text[i] === "}" && --depth === 0) return i;
|
|
149
|
+
return -1;
|
|
150
|
+
}
|
|
151
|
+
/** `one {# item} other {# items}` → `{ one: '# item', other: '# items' }`. */
|
|
152
|
+
function parseBranches(body) {
|
|
153
|
+
const branches = {};
|
|
154
|
+
let i = 0;
|
|
155
|
+
while (i < body.length) {
|
|
156
|
+
const open = body.indexOf("{", i);
|
|
157
|
+
if (open < 0) break;
|
|
158
|
+
const name = body.slice(i, open).trim();
|
|
159
|
+
const close = matchBrace(body, open);
|
|
160
|
+
if (close < 0) break;
|
|
161
|
+
branches[name] = body.slice(open + 1, close);
|
|
162
|
+
i = close + 1;
|
|
163
|
+
}
|
|
164
|
+
return branches;
|
|
165
|
+
}
|
|
166
|
+
/** Fills `{name}` placeholders and `{count, plural, one {…} other {…}}` selectors. */
|
|
167
|
+
function interpolate(template, vars, locale) {
|
|
168
|
+
if (!vars || !template.includes("{")) return template;
|
|
169
|
+
let out = "";
|
|
170
|
+
let i = 0;
|
|
171
|
+
while (i < template.length) {
|
|
172
|
+
const open = template.indexOf("{", i);
|
|
173
|
+
if (open < 0) {
|
|
174
|
+
out += template.slice(i);
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
out += template.slice(i, open);
|
|
178
|
+
const close = matchBrace(template, open);
|
|
179
|
+
if (close < 0) {
|
|
180
|
+
out += template.slice(open);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
const inner = template.slice(open + 1, close);
|
|
184
|
+
const plural = /^\s*(\w+)\s*,\s*plural\s*,(.*)$/s.exec(inner);
|
|
185
|
+
if (plural) {
|
|
186
|
+
const name = plural[1] ?? "";
|
|
187
|
+
const n = Number(vars[name] ?? 0);
|
|
188
|
+
const branches = parseBranches(plural[2] ?? "");
|
|
189
|
+
const rule = new Intl.PluralRules(locale).select(n);
|
|
190
|
+
const branch = branches[`=${n}`] ?? branches[rule] ?? branches.other ?? "";
|
|
191
|
+
out += interpolate(branch.replaceAll("#", new Intl.NumberFormat(locale).format(n)), vars, locale);
|
|
192
|
+
} else {
|
|
193
|
+
const value = vars[inner.trim()];
|
|
194
|
+
out += value === void 0 ? `{${inner}}` : String(value);
|
|
195
|
+
}
|
|
196
|
+
i = close + 1;
|
|
197
|
+
}
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
const toDate = (value) => value instanceof Date ? value : new Date(value);
|
|
201
|
+
const RELATIVE_UNITS = [
|
|
202
|
+
["year", 31536e3],
|
|
203
|
+
["month", 2592e3],
|
|
204
|
+
["week", 604800],
|
|
205
|
+
["day", 86400],
|
|
206
|
+
["hour", 3600],
|
|
207
|
+
["minute", 60],
|
|
208
|
+
["second", 1]
|
|
209
|
+
];
|
|
210
|
+
function createFormatters(locale, messages) {
|
|
211
|
+
function formatRelativeTime(value, unitOrNow, options = { numeric: "auto" }) {
|
|
212
|
+
const rtf = new Intl.RelativeTimeFormat(locale, options);
|
|
213
|
+
if (typeof value === "number" && typeof unitOrNow === "string") return rtf.format(value, unitOrNow);
|
|
214
|
+
const now = unitOrNow instanceof Date ? unitOrNow.getTime() : typeof unitOrNow === "number" ? unitOrNow : Date.now();
|
|
215
|
+
const seconds = Math.round((toDate(value).getTime() - now) / 1e3);
|
|
216
|
+
const [unit, size] = RELATIVE_UNITS.find(([, s]) => Math.abs(seconds) >= s) ?? ["second", 1];
|
|
217
|
+
return rtf.format(Math.round(seconds / size), unit);
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
t: (key, vars) => interpolate(messages[key] ?? key, vars, locale),
|
|
221
|
+
formatNumber: (value, options) => new Intl.NumberFormat(locale, options).format(value),
|
|
222
|
+
formatBytes: (value, options) => formatBytes(value, {
|
|
223
|
+
locale,
|
|
224
|
+
...options
|
|
225
|
+
}),
|
|
226
|
+
formatCurrency: (value, currency, options) => new Intl.NumberFormat(locale, {
|
|
227
|
+
style: "currency",
|
|
228
|
+
currency,
|
|
229
|
+
...options
|
|
230
|
+
}).format(value),
|
|
231
|
+
formatDate: (value, options = { dateStyle: "medium" }) => new Intl.DateTimeFormat(locale, options).format(toDate(value)),
|
|
232
|
+
formatRelativeTime,
|
|
233
|
+
formatList: (items, options = {
|
|
234
|
+
style: "long",
|
|
235
|
+
type: "conjunction"
|
|
236
|
+
}) => new Intl.ListFormat(locale, options).format(items)
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
//#endregion
|
|
240
|
+
//#region src/i18n/messages/en.ts
|
|
241
|
+
/**
|
|
242
|
+
* Built-in English catalog: every string the kit renders on its own (labels, accessible names,
|
|
243
|
+
* announcements). It is the source of the message keys; other catalogs must cover every key.
|
|
244
|
+
*
|
|
245
|
+
* Placeholders: `{name}`. Plurals (Intl.PluralRules): `{count, plural, one {# item} other {# items}}`.
|
|
246
|
+
* Use `{count}` instead of `#` inside plural branches to keep numbers ungrouped for English parity.
|
|
247
|
+
* Month and weekday names, numbers and dates come from Intl, not from this catalog.
|
|
248
|
+
*/
|
|
249
|
+
const en = {
|
|
250
|
+
"resourceDetail.overview": "Overview",
|
|
251
|
+
"resourceDetail.activity": "Activity",
|
|
252
|
+
"resourceDetail.settings": "Settings",
|
|
253
|
+
"resourceDetail.sections": "Resource sections",
|
|
254
|
+
"error.title": "We couldn’t load deployments",
|
|
255
|
+
"error.message": "The service didn’t respond in time. Your data is safe; try again in a moment.",
|
|
256
|
+
"error.support": "Contact support",
|
|
257
|
+
"emptyState.noAccess.title": "You don’t have access to {resource}",
|
|
258
|
+
"emptyState.noAccess.description": "Ask {owner} to grant you a role that includes {resource} permissions.",
|
|
259
|
+
"emptyState.noAccess.request": "Request access",
|
|
260
|
+
"emptyState.noAccess.requested": "Access requested",
|
|
261
|
+
"emptyState.noAccess.sent": "Access request sent",
|
|
262
|
+
"emptyState.noResults.queryTitleBefore": "No {entity} match “",
|
|
263
|
+
"emptyState.noResults.queryTitleAfter": "”",
|
|
264
|
+
"emptyState.noResults.title": "No {entity} found",
|
|
265
|
+
"emptyState.noResults.description": "Check the spelling or try a broader search{count, plural, =0 {} one { with {count} filter applied} other { with {count} filters applied}}.",
|
|
266
|
+
"emptyState.noResults.clearFilters": "Clear filters",
|
|
267
|
+
"emptyState.noResults.clearSearch": "Clear search",
|
|
268
|
+
"emptyState.firstRun.title": "Create your first project",
|
|
269
|
+
"emptyState.firstRun.description": "Projects group your services, environments and deployments. Start one from a repository in a couple of minutes.",
|
|
270
|
+
"emptyState.firstRun.action": "New project",
|
|
271
|
+
"emptyState.firstRun.guide": "Read the guide",
|
|
272
|
+
"callout.title": "You have used 92% of your build minutes",
|
|
273
|
+
"callout.description": "Builds will queue once the monthly limit is reached. Upgrade the plan or reduce concurrent builds.",
|
|
274
|
+
"callout.upgrade": "Upgrade plan",
|
|
275
|
+
"callout.viewUsage": "View usage",
|
|
276
|
+
"descriptionList.title": "Configuration",
|
|
277
|
+
"descriptionList.description": "Settings of this deployment.",
|
|
278
|
+
"descriptionList.edit": "Edit",
|
|
279
|
+
"descriptionList.copy": "Copy {label}",
|
|
280
|
+
"descriptionList.copied": "{label} copied",
|
|
281
|
+
"pageHeader.title": "Deployments",
|
|
282
|
+
"pageHeader.description": "Every build and release of this project across its environments.",
|
|
283
|
+
"pageHeader.moreActions": "More actions",
|
|
284
|
+
"logViewer.title": "Logs",
|
|
285
|
+
"logViewer.levelFilter": "Log levels",
|
|
286
|
+
"logViewer.searchLabel": "Search logs",
|
|
287
|
+
"logViewer.searchPlaceholder": "Search…",
|
|
288
|
+
"logViewer.follow": "Follow",
|
|
289
|
+
"logViewer.count": "{visible} of {total}",
|
|
290
|
+
"logViewer.empty": "No lines match the current filters.",
|
|
291
|
+
"logViewer.inspect": "Inspect event {timestamp}",
|
|
292
|
+
"logViewer.copy": "Copy line {timestamp}",
|
|
293
|
+
"pageHeader.sections": "Page sections",
|
|
294
|
+
"thumbnail.uploading": "Uploading {label}",
|
|
295
|
+
"thumbnail.error": "Upload failed",
|
|
296
|
+
"overflowList.more": "+{count} more",
|
|
297
|
+
"overflowList.title": "{count} more",
|
|
298
|
+
"bottomSheet.handle": "Resize sheet",
|
|
299
|
+
"bottomSheet.handleHint": "Arrow Up expands, Arrow Down collapses.",
|
|
300
|
+
"bottomSheet.expanded": "Sheet expanded.",
|
|
301
|
+
"bottomSheet.position": "Sheet at height {count} of {total}.",
|
|
302
|
+
"megaMenu.label": "Main",
|
|
303
|
+
"virtualList.empty": "No items.",
|
|
304
|
+
"jsonViewer.copyPath": "Copy path",
|
|
305
|
+
"jsonViewer.copyValue": "Copy value",
|
|
306
|
+
"jsonViewer.selectHint": "Select a node to copy its path or value",
|
|
307
|
+
"jsonViewer.truncated": "Truncated",
|
|
308
|
+
"jsonViewer.copyFullHint": "Copy value copies the full, untruncated value",
|
|
309
|
+
"jsonViewer.keys": "{count, plural, one {{count} key} other {{count} keys}}",
|
|
310
|
+
"jsonViewer.items": "{count, plural, one {{count} item} other {{count} items}}",
|
|
311
|
+
"jsonViewer.root": "(root)",
|
|
312
|
+
"carousel.previous": "Previous slide",
|
|
313
|
+
"carousel.next": "Next slide",
|
|
314
|
+
"carousel.play": "Start automatic slide show",
|
|
315
|
+
"carousel.pause": "Stop automatic slide show",
|
|
316
|
+
"carousel.slide": "{count} of {total}",
|
|
317
|
+
"carousel.goTo": "Go to slide {count}",
|
|
318
|
+
"carousel.pickers": "Choose slide",
|
|
319
|
+
"lightbox.title": "Media viewer",
|
|
320
|
+
"lightbox.close": "Close viewer",
|
|
321
|
+
"lightbox.zoomIn": "Zoom in",
|
|
322
|
+
"lightbox.zoomOut": "Zoom out",
|
|
323
|
+
"lightbox.thumbnails": "Thumbnails",
|
|
324
|
+
"lightbox.counter": "{count} / {total}",
|
|
325
|
+
"lightbox.status": "{count} of {total}: {label}",
|
|
326
|
+
"lightbox.thumbnail": "Show {count}: {label}",
|
|
327
|
+
"tour.skip": "Skip tour",
|
|
328
|
+
"tour.close": "End tour",
|
|
329
|
+
"tour.counter": "Step {count} of {total}",
|
|
330
|
+
"listInput.key": "Key",
|
|
331
|
+
"listInput.value": "Value",
|
|
332
|
+
"listInput.add": "Add row",
|
|
333
|
+
"listInput.remove": "Remove row {count}",
|
|
334
|
+
"listInput.moveUp": "Move row {count} up",
|
|
335
|
+
"listInput.moveDown": "Move row {count} down",
|
|
336
|
+
"listInput.reveal": "Show value {count}",
|
|
337
|
+
"listInput.duplicate": "Duplicate key",
|
|
338
|
+
"listInput.added": "{count, plural, one {Added a row.} other {Added {count} rows.}}",
|
|
339
|
+
"listInput.removed": "Removed row {count}.",
|
|
340
|
+
"listInput.moved": "Moved to position {count}.",
|
|
341
|
+
"listInput.limit": "Limit of {count} rows reached.",
|
|
342
|
+
"listInput.pasteHint": "Paste KEY=value lines to add several rows.",
|
|
343
|
+
"timer.paused": "Paused",
|
|
344
|
+
"timer.stopped": "Stopped",
|
|
345
|
+
"timer.unitHours": "h",
|
|
346
|
+
"timer.unitMinutes": "m",
|
|
347
|
+
"timer.unitSeconds": "s",
|
|
348
|
+
"treeList.error": "Could not load items.",
|
|
349
|
+
"transferList.available": "Available",
|
|
350
|
+
"transferList.selected": "Selected",
|
|
351
|
+
"transferList.searchAvailable": "Search available",
|
|
352
|
+
"transferList.searchSelected": "Search selected",
|
|
353
|
+
"transferList.searchPlaceholder": "Filter…",
|
|
354
|
+
"transferList.add": "Add checked",
|
|
355
|
+
"transferList.addAll": "Add all",
|
|
356
|
+
"transferList.remove": "Remove checked",
|
|
357
|
+
"transferList.removeAll": "Remove all",
|
|
358
|
+
"transferList.moveUp": "Move checked up",
|
|
359
|
+
"transferList.moveDown": "Move checked down",
|
|
360
|
+
"transferList.actions": "Transfer actions",
|
|
361
|
+
"transferList.emptyAvailable": "Everything is selected.",
|
|
362
|
+
"transferList.emptySelected": "Nothing selected yet.",
|
|
363
|
+
"transferList.reorderHint": "Alt+↑/↓ reorders",
|
|
364
|
+
"transferList.added": "Added {count, plural, one {{count} item} other {{count} items}}.",
|
|
365
|
+
"transferList.removed": "Removed {count, plural, one {{count} item} other {{count} items}}.",
|
|
366
|
+
"transferList.moved": "Order changed.",
|
|
367
|
+
"matchText.search": "Search names without accents",
|
|
368
|
+
"matchText.results": "Matching names",
|
|
369
|
+
"virtualOptions.nodes": "Nodes (10,000 options)",
|
|
370
|
+
"virtualOptions.remoteNodes": "Remote nodes (5,000 options)",
|
|
371
|
+
"virtualOptions.multiNodes": "Nodes (5,000 options)",
|
|
372
|
+
"virtualOptions.node": "node-{index}",
|
|
373
|
+
"virtualOptions.description": "Additional node details",
|
|
374
|
+
"virtualOptions.note": "Only visible rows are mounted. Search and keyboard navigation still reach every option.",
|
|
375
|
+
"forms.invite.title": "Invite a member",
|
|
376
|
+
"forms.bindings.width.xs": "Extra small",
|
|
377
|
+
"forms.bindings.width.sm": "Small",
|
|
378
|
+
"forms.bindings.width.md": "Medium",
|
|
379
|
+
"forms.bindings.width.lg": "Large",
|
|
380
|
+
"forms.bindings.width.xl": "Extra large",
|
|
381
|
+
"forms.bindings.helpers": "Manual bindings",
|
|
382
|
+
"forms.bindings.helpersSaved": "Saved {count} seats. Notifications: {enabled}.",
|
|
383
|
+
"forms.bindings.title": "Control bindings",
|
|
384
|
+
"forms.bindings.disabled": "Disable fields",
|
|
385
|
+
"forms.bindings.readOnly": "Read-only fields",
|
|
386
|
+
"forms.bindings.width": "Field width",
|
|
387
|
+
"forms.bindings.fullWidth": "Full width",
|
|
388
|
+
"forms.bindings.name": "Name",
|
|
389
|
+
"forms.bindings.note": "Note",
|
|
390
|
+
"forms.bindings.alerts": "Notifications",
|
|
391
|
+
"forms.bindings.digest": "Weekly digest",
|
|
392
|
+
"forms.bindings.role": "Access level",
|
|
393
|
+
"forms.bindings.viewer": "Viewer",
|
|
394
|
+
"forms.bindings.editor": "Editor",
|
|
395
|
+
"forms.bindings.tags": "Topics",
|
|
396
|
+
"forms.bindings.updates": "Updates",
|
|
397
|
+
"forms.bindings.events": "Events",
|
|
398
|
+
"forms.bindings.date": "Start date",
|
|
399
|
+
"forms.bindings.range": "Date range",
|
|
400
|
+
"forms.bindings.time": "Start time",
|
|
401
|
+
"forms.bindings.count": "Seats",
|
|
402
|
+
"forms.bindings.department": "Department",
|
|
403
|
+
"forms.bindings.engineering": "Engineering",
|
|
404
|
+
"forms.bindings.design": "Design",
|
|
405
|
+
"forms.bindings.team": "Team",
|
|
406
|
+
"forms.bindings.platform": "Platform",
|
|
407
|
+
"forms.bindings.research": "Research",
|
|
408
|
+
"forms.bindings.dependent": "The team options reload when the department changes.",
|
|
409
|
+
"forms.bindings.saved": "Preferences saved.",
|
|
410
|
+
"common.yes": "Yes",
|
|
411
|
+
"common.no": "No",
|
|
412
|
+
"common.close": "Close",
|
|
413
|
+
"common.dismiss": "Dismiss",
|
|
414
|
+
"common.copy": "Copy",
|
|
415
|
+
"common.copied": "Copied",
|
|
416
|
+
"common.copiedToClipboard": "Copied to clipboard",
|
|
417
|
+
"common.copyFailed": "Copy failed",
|
|
418
|
+
"common.clear": "Clear",
|
|
419
|
+
"common.clearAll": "Clear all",
|
|
420
|
+
"common.clearSelection": "Clear selection",
|
|
421
|
+
"common.search": "Search",
|
|
422
|
+
"common.searchPlaceholder": "Search…",
|
|
423
|
+
"common.loading": "Loading…",
|
|
424
|
+
"common.noResults": "No results",
|
|
425
|
+
"common.noMatches": "No matches.",
|
|
426
|
+
"common.selectPlaceholder": "Select…",
|
|
427
|
+
"common.selectAll": "Select all",
|
|
428
|
+
"common.deselectAll": "Deselect all",
|
|
429
|
+
"common.showOptions": "Show options",
|
|
430
|
+
"common.remove": "Remove",
|
|
431
|
+
"common.removeItem": "Remove {label}",
|
|
432
|
+
"common.removed": "Removed {label}.",
|
|
433
|
+
"common.back": "Back",
|
|
434
|
+
"common.next": "Next",
|
|
435
|
+
"common.previous": "Previous",
|
|
436
|
+
"common.finish": "Finish",
|
|
437
|
+
"common.exit": "Exit",
|
|
438
|
+
"common.cancel": "Cancel",
|
|
439
|
+
"common.save": "Save",
|
|
440
|
+
"common.send": "Send",
|
|
441
|
+
"common.stop": "Stop",
|
|
442
|
+
"common.retry": "Retry",
|
|
443
|
+
"common.edit": "Edit",
|
|
444
|
+
"common.delete": "Delete",
|
|
445
|
+
"common.filter": "Filter",
|
|
446
|
+
"common.sort": "Sort",
|
|
447
|
+
"common.viewAll": "View all",
|
|
448
|
+
"common.moreActions": "More actions",
|
|
449
|
+
"common.openMenu": "Open menu",
|
|
450
|
+
"common.more": "{count} more",
|
|
451
|
+
"common.moreInfo": "More information about {label}",
|
|
452
|
+
"common.fieldInvalid": "Field invalid",
|
|
453
|
+
"common.invalid": "invalid: {error}",
|
|
454
|
+
"common.resize": "Resize",
|
|
455
|
+
"common.progress": "Progress",
|
|
456
|
+
"common.main": "Main",
|
|
457
|
+
"common.settings": "Settings",
|
|
458
|
+
"common.notifications": "Notifications",
|
|
459
|
+
"common.unread": "Unread:",
|
|
460
|
+
"common.results": "{count, plural, one {# result} other {# results}}",
|
|
461
|
+
"common.trend": "Trend",
|
|
462
|
+
"skip.main": "Skip to main content",
|
|
463
|
+
"skip.content": "Skip to content",
|
|
464
|
+
"skip.canvas": "Skip to canvas",
|
|
465
|
+
"skip.document": "Skip to document",
|
|
466
|
+
"skip.signIn": "Skip to sign-in form",
|
|
467
|
+
"skip.step": "Skip to step",
|
|
468
|
+
"nav.navigation": "Navigation",
|
|
469
|
+
"nav.openNavigation": "Open navigation",
|
|
470
|
+
"nav.closeNavigation": "Close navigation",
|
|
471
|
+
"nav.sidebar": "Sidebar",
|
|
472
|
+
"nav.expandSidebar": "Expand sidebar",
|
|
473
|
+
"nav.collapseSidebar": "Collapse sidebar",
|
|
474
|
+
"nav.onThisPage": "On this page",
|
|
475
|
+
"nav.pageActions": "Page actions",
|
|
476
|
+
"breadcrumbs.label": "Breadcrumb",
|
|
477
|
+
"breadcrumbs.expand": "{count, plural, one {Show # more level} other {Show # more levels}}",
|
|
478
|
+
"pagination.label": "Pagination",
|
|
479
|
+
"pagination.previous": "Previous page",
|
|
480
|
+
"pagination.next": "Next page",
|
|
481
|
+
"pagination.page": "Page {page}",
|
|
482
|
+
"pagination.of": "of",
|
|
483
|
+
"calendar.chooseMonth": "{label}, choose a month",
|
|
484
|
+
"calendar.chooseYear": "{label}, choose a year",
|
|
485
|
+
"calendar.previousYear": "Previous year",
|
|
486
|
+
"calendar.nextYear": "Next year",
|
|
487
|
+
"calendar.previousYears": "Previous {count} years",
|
|
488
|
+
"calendar.nextYears": "Next {count} years",
|
|
489
|
+
"calendar.month": "Month",
|
|
490
|
+
"calendar.year": "Year",
|
|
491
|
+
"calendar.label": "Calendar",
|
|
492
|
+
"calendar.localeDefaults": "Locale defaults",
|
|
493
|
+
"calendar.previousMonth": "Previous month",
|
|
494
|
+
"calendar.nextMonth": "Next month",
|
|
495
|
+
"calendar.today": "Today",
|
|
496
|
+
"periodPicker.previousYear": "Previous year",
|
|
497
|
+
"periodPicker.nextYear": "Next year",
|
|
498
|
+
"periodPicker.quarter": "Q{quarter} {year}",
|
|
499
|
+
"periodPicker.previousYears": "Previous 12 years",
|
|
500
|
+
"periodPicker.nextYears": "Next 12 years",
|
|
501
|
+
"periodPicker.yearPage": "{start}–{end}",
|
|
502
|
+
"periodPicker.yearTitle": "{year}",
|
|
503
|
+
"periodPicker.chooseYear": "Choose year",
|
|
504
|
+
"periodPicker.week": "Week {week}, {year}",
|
|
505
|
+
"periodPicker.chooseMonth": "Choose month",
|
|
506
|
+
"periodPicker.range": "{start} – {end}",
|
|
507
|
+
"periodPicker.presets": "Period presets",
|
|
508
|
+
"periodPicker.thisWeek": "This week",
|
|
509
|
+
"periodPicker.lastWeek": "Last week",
|
|
510
|
+
"periodPicker.thisMonth": "This month",
|
|
511
|
+
"periodPicker.lastMonth": "Last month",
|
|
512
|
+
"periodPicker.thisQuarter": "This quarter",
|
|
513
|
+
"periodPicker.lastQuarter": "Last quarter",
|
|
514
|
+
"periodPicker.thisYear": "This year",
|
|
515
|
+
"periodPicker.lastYear": "Last year",
|
|
516
|
+
"periodPicker.billingMonth": "Billing month",
|
|
517
|
+
"periodPicker.reportingQuarters": "Reporting quarters",
|
|
518
|
+
"periodPicker.reportingWeek": "Reporting week",
|
|
519
|
+
"periodPicker.reportingYear": "Reporting year",
|
|
520
|
+
"periodPicker.yearCalendar": "Inline year selection",
|
|
521
|
+
"periodPicker.wholePeriodDescription": "The value represents a whole period, starting at local midnight.",
|
|
522
|
+
"periodPicker.rangeDescription": "Select two quarters to include every whole quarter between them.",
|
|
523
|
+
"periodPicker.isoDescription": "ISO weeks always run Monday to Sunday and use the ISO week-year.",
|
|
524
|
+
"periodPicker.placeholder": "Pick a period",
|
|
525
|
+
"periodPicker.choose": "Choose period",
|
|
526
|
+
"datePicker.placeholder": "Pick a date",
|
|
527
|
+
"datePicker.rangePlaceholder": "Pick a date range",
|
|
528
|
+
"datePicker.choose": "Choose date",
|
|
529
|
+
"datePicker.chooseRange": "Choose date range",
|
|
530
|
+
"datePicker.presets": "Presets",
|
|
531
|
+
"fieldArray.item": "Item {n}",
|
|
532
|
+
"fieldArray.examples.parameters": "Tool parameters",
|
|
533
|
+
"fieldArray.examples.description": "Configure the tools to run in order.",
|
|
534
|
+
"fieldArray.examples.tool": "Tool",
|
|
535
|
+
"fieldArray.examples.timeout": "Timeout (ms)",
|
|
536
|
+
"fieldArray.examples.routing": "Routing rules",
|
|
537
|
+
"fieldArray.examples.destination": "Destination",
|
|
538
|
+
"fieldArray.examples.weight": "Weight",
|
|
539
|
+
"fieldArray.examples.steps": "Steps",
|
|
540
|
+
"fieldArray.examples.headers": "Headers",
|
|
541
|
+
"fieldArray.examples.key": "Key",
|
|
542
|
+
"fieldArray.examples.value": "Value",
|
|
543
|
+
"fieldArray.duplicate": "Duplicate {item}",
|
|
544
|
+
"fieldArray.duplicated": "Duplicated {item}.",
|
|
545
|
+
"fieldArray.moveUp": "Move up {item}",
|
|
546
|
+
"fieldArray.moveDown": "Move down {item}",
|
|
547
|
+
"fieldArray.moved": "Moved to position {n} of {total}.",
|
|
548
|
+
"fieldArray.remove": "Remove {item}",
|
|
549
|
+
"fieldArray.removed": "Removed {item}.",
|
|
550
|
+
"fieldArray.empty": "No items yet.",
|
|
551
|
+
"fieldArray.add": "Add item",
|
|
552
|
+
"fieldArray.added": "Added {item}.",
|
|
553
|
+
"fieldArray.limit": "Limit of {max} items reached.",
|
|
554
|
+
"numberInput.decrease": "Decrease",
|
|
555
|
+
"numberInput.increase": "Increase",
|
|
556
|
+
"otp.character": "Character {index} of {total}",
|
|
557
|
+
"password.show": "Show password",
|
|
558
|
+
"password.hide": "Hide password",
|
|
559
|
+
"password.strength": "Strength:",
|
|
560
|
+
"password.tooWeak": "Too weak",
|
|
561
|
+
"password.weak": "Weak",
|
|
562
|
+
"password.fair": "Fair",
|
|
563
|
+
"password.good": "Good",
|
|
564
|
+
"password.strong": "Strong",
|
|
565
|
+
"multiSelect.moreSelected": "more selected",
|
|
566
|
+
"tokenInput.entries": "Entries",
|
|
567
|
+
"link.external": "(opens in a new tab)",
|
|
568
|
+
"toast.region": "Notifications",
|
|
569
|
+
"toast.dismiss": "Dismiss notification",
|
|
570
|
+
"theme.label": "Theme",
|
|
571
|
+
"theme.light": "Light",
|
|
572
|
+
"theme.dark": "Dark",
|
|
573
|
+
"theme.highContrast": "High contrast",
|
|
574
|
+
"theme.system": "System",
|
|
575
|
+
"userMenu.label": "Account menu for {name}",
|
|
576
|
+
"userMenu.signOut": "Sign out",
|
|
577
|
+
"notifications.markAllRead": "Mark all as read",
|
|
578
|
+
"notifications.empty": "New notifications will show up here.",
|
|
579
|
+
"workspace.switch": "Switch workspace",
|
|
580
|
+
"workspace.create": "Create workspace",
|
|
581
|
+
"workspace.search": "Find a workspace…",
|
|
582
|
+
"workspace.empty": "No workspaces match.",
|
|
583
|
+
"commandPalette.label": "Command palette",
|
|
584
|
+
"commandPalette.placeholder": "Type a command or search…",
|
|
585
|
+
"commandPalette.recent": "Recent",
|
|
586
|
+
"commandPalette.trigger": "Search or run a command",
|
|
587
|
+
"commandPalette.navigate": "navigate",
|
|
588
|
+
"commandPalette.run": "run",
|
|
589
|
+
"commandPalette.close": "close",
|
|
590
|
+
"theme.cycle": "Theme: {current}. Switch to {next}",
|
|
591
|
+
"notifications.trigger": "{title}, {count} unread",
|
|
592
|
+
"notifications.new": "{count} new",
|
|
593
|
+
"notifications.emptyTitle": "You're all caught up",
|
|
594
|
+
"tokenInput.added": "Added {items}.",
|
|
595
|
+
"tokenInput.limit": "Limit of {max} reached.",
|
|
596
|
+
"avatar.more": "more",
|
|
597
|
+
"statusTimeline.label": "Status history",
|
|
598
|
+
"statusTimeline.empty": "No status history",
|
|
599
|
+
"statusTimeline.showFewer": "Show fewer",
|
|
600
|
+
"statusTimeline.showEarlier": "Show {count} earlier {count, plural, one {event} other {events}}",
|
|
601
|
+
"statusTimeline.actor": "by",
|
|
602
|
+
"stepper.step": "Step {step} of {total}",
|
|
603
|
+
"stepper.complete": "completed",
|
|
604
|
+
"stepper.current": "current step",
|
|
605
|
+
"stepper.upcoming": "not started",
|
|
606
|
+
"stepper.error": "error",
|
|
607
|
+
"sparkline.noData": "{label}: no data",
|
|
608
|
+
"sparkline.single": "{label}: {value}",
|
|
609
|
+
"sparkline.summary": "{label}: {direction}{change} from {first} to {last} over {count} points (low {min}, high {max})",
|
|
610
|
+
"sparkline.up": "trending up",
|
|
611
|
+
"sparkline.down": "trending down",
|
|
612
|
+
"sparkline.flat": "flat",
|
|
613
|
+
"table.scrollable": "Scrollable table",
|
|
614
|
+
"codeBlock.code": "Code",
|
|
615
|
+
"codeBlock.languageCode": "{language} code",
|
|
616
|
+
"codeBlock.wrap": "Wrap lines",
|
|
617
|
+
"kbd.command": "Command",
|
|
618
|
+
"kbd.option": "Option",
|
|
619
|
+
"kbd.shift": "Shift",
|
|
620
|
+
"kbd.control": "Control",
|
|
621
|
+
"kbd.enter": "Enter",
|
|
622
|
+
"kbd.backspace": "Backspace",
|
|
623
|
+
"kbd.tab": "Tab",
|
|
624
|
+
"kbd.escape": "Escape",
|
|
625
|
+
"kbd.up": "Up arrow",
|
|
626
|
+
"kbd.down": "Down arrow",
|
|
627
|
+
"kbd.left": "Left arrow",
|
|
628
|
+
"kbd.right": "Right arrow",
|
|
629
|
+
"kbd.upDown": "Up and down arrows",
|
|
630
|
+
"settings.section": "Settings section",
|
|
631
|
+
"wizard.exitTitle": "Leave this setup?",
|
|
632
|
+
"wizard.exitDescription": "Your progress on this step will be lost.",
|
|
633
|
+
"wizard.leave": "Leave",
|
|
634
|
+
"wizard.progressSummary": "{label} summary",
|
|
635
|
+
"wizard.stepAnnouncement": "Step {position} of {total}: {label}",
|
|
636
|
+
"wizard.finishing": "Finishing…",
|
|
637
|
+
"wizard.title": "Create resource",
|
|
638
|
+
"wizard.details": "Details",
|
|
639
|
+
"wizard.review": "Review",
|
|
640
|
+
"wizard.stay": "Stay",
|
|
641
|
+
"canvas.palette": "Palette",
|
|
642
|
+
"canvas.inspector": "Inspector",
|
|
643
|
+
"canvas.console": "Console",
|
|
644
|
+
"canvas.main": "Canvas",
|
|
645
|
+
"canvas.smallScreen": "Open on a larger screen to edit. The canvas is read-only here.",
|
|
646
|
+
"print.pageBreak": "Page break",
|
|
647
|
+
"split.list": "List",
|
|
648
|
+
"split.details": "Details",
|
|
649
|
+
"inspector.pin": "Pin panel",
|
|
650
|
+
"inspector.close": "Close panel",
|
|
651
|
+
"inspector.toggle": "Toggle panel",
|
|
652
|
+
"calendar.tomorrow": "Tomorrow",
|
|
653
|
+
"calendar.previousWeek": "Previous week",
|
|
654
|
+
"calendar.nextWeek": "Next week",
|
|
655
|
+
"calendar.now": "now",
|
|
656
|
+
"calendar.unavailable": "(unavailable)",
|
|
657
|
+
"calendar.availableTimes": "Available times",
|
|
658
|
+
"calendar.agenda": "Agenda",
|
|
659
|
+
"calendar.emptyTitle": "Nothing scheduled",
|
|
660
|
+
"calendar.emptyDescription": "There is no scheduled work in this period.",
|
|
661
|
+
"table.loadMore": "Load more",
|
|
662
|
+
"table.loadingMore": "Loading…",
|
|
663
|
+
"table.loadMoreGroup": "Load more items",
|
|
664
|
+
"table.moreAvailable": "More items available.",
|
|
665
|
+
"table.loadedSummary": "{count, plural, one {# item loaded} other {# items loaded}}",
|
|
666
|
+
"table.loadedAnnouncement": "{count, plural, one {# item added.} other {# items added.}}",
|
|
667
|
+
"table.rows": "Rows",
|
|
668
|
+
"table.collectionNoun": "{count, plural, one {item} other {items}}",
|
|
669
|
+
"table.visibleCount": "{noun}:",
|
|
670
|
+
"table.truncatedNote": "{count, plural, one {Only the first {formattedCount} {noun} is shown; more exist.} other {Only the first {formattedCount} {noun} are shown; more exist.}}",
|
|
671
|
+
"table.rowsPerPage": "Rows per page",
|
|
672
|
+
"table.pagination": "{noun} pagination",
|
|
673
|
+
"table.selectAllPage": "Select all rows on this page",
|
|
674
|
+
"table.selectRow": "Select {label}",
|
|
675
|
+
"table.selection": "Selection",
|
|
676
|
+
"table.actions": "Actions",
|
|
677
|
+
"table.rowActions": "Actions for {label}",
|
|
678
|
+
"table.emptyDescription": "Nothing matches the current filters.",
|
|
679
|
+
"table.columns": "Columns",
|
|
680
|
+
"table.visibleColumns": "Visible columns",
|
|
681
|
+
"table.density": "Row density",
|
|
682
|
+
"table.comfortable": "Comfortable rows",
|
|
683
|
+
"table.compact": "Compact rows",
|
|
684
|
+
"table.editRow": "Edit {label}",
|
|
685
|
+
"filters.label": "Filters",
|
|
686
|
+
"filters.savedView": "Saved view",
|
|
687
|
+
"filters.savedViews": "Saved views",
|
|
688
|
+
"filters.add": "Add filter",
|
|
689
|
+
"filters.active": "Active filters",
|
|
690
|
+
"filters.remove": "Remove filter {field}: {value}",
|
|
691
|
+
"loading.table": "Loading table",
|
|
692
|
+
"loading.list": "Loading list",
|
|
693
|
+
"loading.page": "Loading page",
|
|
694
|
+
"bulk.label": "Bulk actions",
|
|
695
|
+
"bulk.of": "of {total}",
|
|
696
|
+
"bulk.selected": "{count, plural, other {selected}}",
|
|
697
|
+
"bulk.item": "item",
|
|
698
|
+
"bulk.items": "items",
|
|
699
|
+
"actionBar.unsaved": "You have unsaved changes",
|
|
700
|
+
"actionBar.saved": "All changes saved",
|
|
701
|
+
"actionBar.save": "Save changes",
|
|
702
|
+
"actionBar.discard": "Discard",
|
|
703
|
+
"actionBar.saving": "Saving…",
|
|
704
|
+
"toolbar.label": "Page toolbar",
|
|
705
|
+
"toolbar.view": "View",
|
|
706
|
+
"globalSearch.label": "Global search",
|
|
707
|
+
"globalSearch.placeholder": "Search pages, records and actions…",
|
|
708
|
+
"globalSearch.pages": "Pages",
|
|
709
|
+
"globalSearch.records": "Records",
|
|
710
|
+
"globalSearch.actions": "Actions",
|
|
711
|
+
"error.retry": "Try again",
|
|
712
|
+
"error.retrying": "Retrying…",
|
|
713
|
+
"error.retryingStatus": "Retrying",
|
|
714
|
+
"error.requestId": "Request ID",
|
|
715
|
+
"error.copyRequestId": "Copy request ID",
|
|
716
|
+
"error.requestIdCopied": "Request ID copied",
|
|
717
|
+
"error.details": "Technical details",
|
|
718
|
+
"dateRange.label": "Date range",
|
|
719
|
+
"dateRange.any": "Any date",
|
|
720
|
+
"common.clearItem": "Clear {label}",
|
|
721
|
+
"upload.label": "Upload files",
|
|
722
|
+
"upload.files": "Files",
|
|
723
|
+
"upload.failed": "Upload failed",
|
|
724
|
+
"upload.typeRejected": "File type not accepted",
|
|
725
|
+
"upload.tooLarge": "Exceeds the {size} limit",
|
|
726
|
+
"upload.drop": "Drag files here or",
|
|
727
|
+
"upload.uploading": "Uploading {name}",
|
|
728
|
+
"upload.notUploaded": "{error} · not uploaded",
|
|
729
|
+
"upload.uploaded": "{size} · uploaded",
|
|
730
|
+
"upload.retry": "Retry {name}",
|
|
731
|
+
"upload.browse": "Browse files",
|
|
732
|
+
"upload.hint": "{types} · max {size} per file",
|
|
733
|
+
"upload.done": "{name} uploaded.",
|
|
734
|
+
"upload.error": "{name} failed to upload.",
|
|
735
|
+
"upload.added": "{count, plural, one {# file added.} other {# files added.}}",
|
|
736
|
+
"upload.rejected": "{count} rejected.",
|
|
737
|
+
"upload.removed": "{name} removed.",
|
|
738
|
+
"comments.label": "Comments",
|
|
739
|
+
"comments.placeholder": "Add a comment…",
|
|
740
|
+
"comments.submit": "Comment",
|
|
741
|
+
"comments.write": "Write a comment",
|
|
742
|
+
"calendar.events": "{count, plural, one {# event} other {# events}}",
|
|
743
|
+
"common.expandItem": "Expand {label}",
|
|
744
|
+
"common.collapseItem": "Collapse {label}",
|
|
745
|
+
"kanban.label": "Board",
|
|
746
|
+
"kanban.roleDescription": "draggable card",
|
|
747
|
+
"kanban.instructions": "Press Space to pick up the card. Use the arrow keys to move it, Space or Enter to drop it, Escape to cancel.",
|
|
748
|
+
"kanban.pickedUp": "Picked up {card}. Position {position} of {total} in {column}.",
|
|
749
|
+
"kanban.moved": "{card} moved to position {position} of {total} in {column}.",
|
|
750
|
+
"kanban.dropped": "{card} dropped at position {position} of {total} in {column}.",
|
|
751
|
+
"kanban.cancelled": "Move cancelled. {card} returned to {column}.",
|
|
752
|
+
"kanban.empty": "No cards",
|
|
753
|
+
"kanban.cards": "{count, plural, one {# card} other {# cards}}",
|
|
754
|
+
"chat.messageLabel": "Message",
|
|
755
|
+
"chat.placeholder": "Message the assistant…",
|
|
756
|
+
"chat.send": "Send message",
|
|
757
|
+
"chat.stop": "Stop generating",
|
|
758
|
+
"chat.attach": "Attach files",
|
|
759
|
+
"chat.attachments": "Attachments",
|
|
760
|
+
"chat.hintSend": "to send",
|
|
761
|
+
"chat.hintNewLine": "for a new line",
|
|
762
|
+
"chat.shiftEnter": "Shift + Enter",
|
|
763
|
+
"chat.overLimit": "characters, over the limit",
|
|
764
|
+
"chat.conversation": "Conversation",
|
|
765
|
+
"chat.messages": "Messages",
|
|
766
|
+
"chat.details": "Details",
|
|
767
|
+
"chat.resizePanel": "Resize {panel} panel",
|
|
768
|
+
"chat.scrollToBottom": "Scroll to latest message",
|
|
769
|
+
"chat.suggestions": "Suggested prompts",
|
|
770
|
+
"chat.sources": "Sources",
|
|
771
|
+
"chat.source": "Source {index}: {title}",
|
|
772
|
+
"chat.you": "You",
|
|
773
|
+
"chat.assistant": "Assistant",
|
|
774
|
+
"chat.system": "System",
|
|
775
|
+
"chat.tool": "Tool",
|
|
776
|
+
"chat.participant": "Participant",
|
|
777
|
+
"chat.responding": "{author} is responding…",
|
|
778
|
+
"chat.actionsFor": "Actions for {name} message",
|
|
779
|
+
"chat.copyMessage": "Copy message",
|
|
780
|
+
"chat.copyCode": "Copy code",
|
|
781
|
+
"chat.copiedCode": "Copied code",
|
|
782
|
+
"chat.goodResponse": "Good response",
|
|
783
|
+
"chat.badResponse": "Bad response",
|
|
784
|
+
"chat.taskDone": "Done",
|
|
785
|
+
"chat.taskNotDone": "Not done",
|
|
786
|
+
"chat.image": "Image: {alt}",
|
|
787
|
+
"chat.untitled": "untitled",
|
|
788
|
+
"chat.openSource": "Open source",
|
|
789
|
+
"toolCall.calling": "Calling",
|
|
790
|
+
"toolCall.called": "Called",
|
|
791
|
+
"toolCall.failed": "Failed to call",
|
|
792
|
+
"toolCall.arguments": "Arguments",
|
|
793
|
+
"toolCall.result": "Result",
|
|
794
|
+
"toolCall.waiting": "Waiting for the result…",
|
|
795
|
+
"chat.surfaceExampleTitle": "Review your details",
|
|
796
|
+
"chat.surfaceExampleName": "Name",
|
|
797
|
+
"chat.surfaceExampleSubmit": "Submit",
|
|
798
|
+
"chat.surfaceExampleChoice": "Language",
|
|
799
|
+
"chat.surfaceExampleEnglish": "English",
|
|
800
|
+
"chat.surfaceExampleSpanish": "Spanish",
|
|
801
|
+
"chat.surfaceExampleNotify": "Send updates",
|
|
802
|
+
"chat.surfaceExampleBadge": "Draft",
|
|
803
|
+
"chat.surfaceExampleNotice": "Check the information before submitting.",
|
|
804
|
+
"chat.surfaceExampleStatus": "Submitted for {name}",
|
|
805
|
+
"chat.surfaceExamplePatch": "Update name",
|
|
806
|
+
"chat.surfaceExampleRemove": "Remove content",
|
|
807
|
+
"chat.surfaceExampleReset": "Reset",
|
|
808
|
+
"chat.surfaceExampleUnsupported": "Show unsupported content",
|
|
809
|
+
"chat.surfaceExampleRejected": "Unsupported content was rejected.",
|
|
810
|
+
"chat.surfaceExampleLink": "Read the documentation",
|
|
811
|
+
"chat.surfaceUnsupported": "This content cannot be shown",
|
|
812
|
+
"chat.surfaceAgentContent": "Agent content",
|
|
813
|
+
"chat.typing": "{author} is typing",
|
|
814
|
+
"chat.feedback": "Response feedback",
|
|
815
|
+
"chat.feedbackTitle": "What went wrong?",
|
|
816
|
+
"chat.feedbackReason": "Reason",
|
|
817
|
+
"chat.feedbackComment": "Comment (optional)",
|
|
818
|
+
"chat.feedbackPlaceholder": "Tell us more…",
|
|
819
|
+
"chat.feedbackSubmit": "Send feedback",
|
|
820
|
+
"chat.feedbackThanks": "Thanks for your feedback",
|
|
821
|
+
"chat.feedbackCleared": "Feedback removed",
|
|
822
|
+
"chat.reasonInaccurate": "Inaccurate",
|
|
823
|
+
"chat.reasonUnhelpful": "Not helpful",
|
|
824
|
+
"chat.reasonIncomplete": "Incomplete",
|
|
825
|
+
"chat.reasonUnsafe": "Harmful or unsafe",
|
|
826
|
+
"chat.reasonOther": "Other",
|
|
827
|
+
"chat.regenerate": "Regenerate",
|
|
828
|
+
"chat.uploading": "Uploading {name}",
|
|
829
|
+
"chat.uploadFailed": "Upload failed",
|
|
830
|
+
"chat.retryUpload": "Retry uploading {name}",
|
|
831
|
+
"chat.dropFiles": "Drop files to attach",
|
|
832
|
+
"chat.fileTooLarge": "{name} is larger than {max}",
|
|
833
|
+
"chat.fileTypeNotAllowed": "{name} is not an allowed file type",
|
|
834
|
+
"chat.tooManyFiles": "You can attach up to {max} files",
|
|
835
|
+
"chat.model": "Model",
|
|
836
|
+
"chat.selectModel": "Select a model",
|
|
837
|
+
"chat.capabilityVision": "Vision",
|
|
838
|
+
"chat.capabilityTools": "Tools",
|
|
839
|
+
"chat.capabilityReasoning": "Reasoning",
|
|
840
|
+
"chat.capabilityFiles": "Files",
|
|
841
|
+
"chat.capabilityWeb": "Web search",
|
|
842
|
+
"chat.capabilityAudio": "Audio",
|
|
843
|
+
"chat.contextWindow": "{size} context",
|
|
844
|
+
"chat.unavailable": "Unavailable",
|
|
845
|
+
"credentialDisclosure.title": "Credential secret",
|
|
846
|
+
"credentialDisclosure.description": "Copy this value and store it securely.",
|
|
847
|
+
"credentialDisclosure.credentialId": "Credential ID",
|
|
848
|
+
"credentialDisclosure.expiry": "Expires",
|
|
849
|
+
"credentialDisclosure.secret": "Secret",
|
|
850
|
+
"credentialDisclosure.show": "Show secret",
|
|
851
|
+
"credentialDisclosure.hide": "Hide secret",
|
|
852
|
+
"credentialDisclosure.copy": "Copy secret",
|
|
853
|
+
"credentialDisclosure.copied": "Copied",
|
|
854
|
+
"credentialDisclosure.success": "Secret copied to clipboard",
|
|
855
|
+
"credentialDisclosure.failure": "Copy failed. Select and copy the value manually.",
|
|
856
|
+
"credentialDisclosure.close": "Close",
|
|
857
|
+
"credentialDisclosure.warningTitle": "Save this new secret",
|
|
858
|
+
"credentialDisclosure.warningText": "This value replaces the previous secret. Copy it now; it is shown only once.",
|
|
859
|
+
"splitButton.more": "More options",
|
|
860
|
+
"secret.show": "Show secret",
|
|
861
|
+
"secret.hide": "Hide secret",
|
|
862
|
+
"secret.copy": "Copy secret",
|
|
863
|
+
"secret.copied": "Secret copied to clipboard",
|
|
864
|
+
"secret.hidden": "Value hidden",
|
|
865
|
+
"secret.rotate": "Rotate",
|
|
866
|
+
"secret.rotateTitle": "Rotate this secret?",
|
|
867
|
+
"secret.rotateDescription": "A new value is generated and the current one stops working. Anything still using it fails until it is updated.",
|
|
868
|
+
"secret.rotateConfirm": "Rotate secret",
|
|
869
|
+
"secret.rotated": "Secret rotated",
|
|
870
|
+
"secret.rotateFailed": "Rotation failed",
|
|
871
|
+
"secret.created": "Created",
|
|
872
|
+
"secret.lastUsed": "Last used",
|
|
873
|
+
"secret.neverUsed": "Never used",
|
|
874
|
+
"kv.key": "Key",
|
|
875
|
+
"kv.value": "Value",
|
|
876
|
+
"kv.keyRow": "Key, row {row}",
|
|
877
|
+
"kv.valueRow": "Value, row {row}",
|
|
878
|
+
"kv.secretRow": "Secret value, row {row}",
|
|
879
|
+
"kv.removeRow": "Remove row {row}",
|
|
880
|
+
"kv.rowRemoved": "Row removed",
|
|
881
|
+
"kv.add": "Add variable",
|
|
882
|
+
"kv.empty": "No variables yet.",
|
|
883
|
+
"kv.paste": "Paste .env",
|
|
884
|
+
"kv.pasteLabel": ".env contents",
|
|
885
|
+
"kv.pasteHint": "One KEY=value per line. Lines starting with # are ignored; existing keys are updated.",
|
|
886
|
+
"kv.import": "Add variables",
|
|
887
|
+
"kv.imported": "{count, plural, one {# variable imported} other {# variables imported}}",
|
|
888
|
+
"kv.copyEnv": "Copy as .env",
|
|
889
|
+
"kv.errDuplicate": "Duplicate key",
|
|
890
|
+
"kv.errPattern": "Use letters, digits and underscores, not starting with a digit",
|
|
891
|
+
"kv.errKeyRequired": "Key is required",
|
|
892
|
+
"kv.errValueRequired": "Value is required",
|
|
893
|
+
"diff.label": "Diff",
|
|
894
|
+
"diff.view": "Diff view",
|
|
895
|
+
"diff.split": "Split",
|
|
896
|
+
"diff.unified": "Unified",
|
|
897
|
+
"diff.addedLine": "Added line {line}:",
|
|
898
|
+
"diff.removedLine": "Removed line {line}:",
|
|
899
|
+
"diff.additions": "{count, plural, one {# addition} other {# additions}}",
|
|
900
|
+
"diff.deletions": "{count, plural, one {# deletion} other {# deletions}}",
|
|
901
|
+
"diff.expand": "{count, plural, one {Expand # line} other {Expand # lines}}",
|
|
902
|
+
"diff.noChanges": "No changes",
|
|
903
|
+
"diff.old": "Old",
|
|
904
|
+
"diff.new": "New",
|
|
905
|
+
"combobox.create": "Create “{label}”",
|
|
906
|
+
"combobox.loadFailed": "Couldn’t load options.",
|
|
907
|
+
"terminal.label": "Terminal output",
|
|
908
|
+
"terminal.toolbar": "Terminal actions",
|
|
909
|
+
"terminal.jumpToLatest": "Jump to latest",
|
|
910
|
+
"terminal.newLines": "{count, plural, one {# new line} other {# new lines}}",
|
|
911
|
+
"terminal.wrap": "Wrap lines",
|
|
912
|
+
"terminal.copyAll": "Copy all",
|
|
913
|
+
"terminal.search": "Search output",
|
|
914
|
+
"terminal.matches": "{current} of {total}",
|
|
915
|
+
"terminal.noMatches": "No matches",
|
|
916
|
+
"terminal.nextMatch": "Next match",
|
|
917
|
+
"terminal.previousMatch": "Previous match",
|
|
918
|
+
"dateField.label": "Date",
|
|
919
|
+
"dateField.year": "Year",
|
|
920
|
+
"dateField.month": "Month",
|
|
921
|
+
"dateField.day": "Day",
|
|
922
|
+
"dateField.start": "Start date",
|
|
923
|
+
"dateField.end": "End date",
|
|
924
|
+
"dateField.segmentInRange": "{range}, {segment}",
|
|
925
|
+
"timePicker.label": "Time",
|
|
926
|
+
"timePicker.hours": "Hours",
|
|
927
|
+
"timePicker.minutes": "Minutes",
|
|
928
|
+
"timePicker.seconds": "Seconds",
|
|
929
|
+
"timePicker.period": "AM/PM",
|
|
930
|
+
"timePicker.empty": "Empty",
|
|
931
|
+
"datePicker.time": "Time",
|
|
932
|
+
"datePicker.done": "Done",
|
|
933
|
+
"datePicker.dateTimePlaceholder": "Pick a date and time",
|
|
934
|
+
"timeRange.placeholder": "Pick a time range",
|
|
935
|
+
"timeRange.choose": "Choose time range",
|
|
936
|
+
"timeRange.presets": "Quick ranges",
|
|
937
|
+
"timeRange.lastMinutes": "Last {count, plural, one {minute} other {# minutes}}",
|
|
938
|
+
"timeRange.lastHours": "Last {count, plural, one {hour} other {# hours}}",
|
|
939
|
+
"timeRange.lastDays": "Last {count, plural, one {day} other {# days}}",
|
|
940
|
+
"timeRange.custom": "Custom range",
|
|
941
|
+
"timeRange.mode": "Range type",
|
|
942
|
+
"timeRange.relative": "Relative",
|
|
943
|
+
"timeRange.absolute": "Absolute",
|
|
944
|
+
"timeRange.last": "Last",
|
|
945
|
+
"timeRange.amount": "Amount",
|
|
946
|
+
"timeRange.unit": "Unit",
|
|
947
|
+
"timeRange.minutes": "Minutes",
|
|
948
|
+
"timeRange.hours": "Hours",
|
|
949
|
+
"timeRange.days": "Days",
|
|
950
|
+
"timeRange.start": "Start",
|
|
951
|
+
"timeRange.end": "End",
|
|
952
|
+
"timeRange.startTime": "Start time",
|
|
953
|
+
"timeRange.endTime": "End time",
|
|
954
|
+
"timeRange.apply": "Apply",
|
|
955
|
+
"timeRange.endBeforeStart": "The end must be after the start.",
|
|
956
|
+
"timeRange.incomplete": "Pick a start and an end.",
|
|
957
|
+
"permissionMatrix.label": "Permissions",
|
|
958
|
+
"permissionMatrix.permission": "Permission",
|
|
959
|
+
"permissionMatrix.allowed": "Allowed",
|
|
960
|
+
"permissionMatrix.denied": "Denied",
|
|
961
|
+
"permissionMatrix.inherited": "Inherited",
|
|
962
|
+
"permissionMatrix.inheritedAs": "Inherited ({state})",
|
|
963
|
+
"permissionMatrix.cell": "{permission}, {role}: {state}",
|
|
964
|
+
"permissionMatrix.readOnly": "Read-only",
|
|
965
|
+
"permissionMatrix.readOnlyRole": "{role} permissions cannot be changed.",
|
|
966
|
+
"queryBuilder.label": "Query",
|
|
967
|
+
"queryBuilder.group": "Condition group",
|
|
968
|
+
"queryBuilder.combinator": "Combine conditions with",
|
|
969
|
+
"queryBuilder.and": "AND",
|
|
970
|
+
"queryBuilder.or": "OR",
|
|
971
|
+
"queryBuilder.condition": "Condition {index}",
|
|
972
|
+
"queryBuilder.field": "Field",
|
|
973
|
+
"queryBuilder.operator": "Operator",
|
|
974
|
+
"queryBuilder.value": "Value",
|
|
975
|
+
"queryBuilder.valueFrom": "From",
|
|
976
|
+
"queryBuilder.valueTo": "To",
|
|
977
|
+
"queryBuilder.rangeInverted": "'From' must not be after 'To'.",
|
|
978
|
+
"queryBuilder.addCondition": "Add condition",
|
|
979
|
+
"queryBuilder.addGroup": "Add group",
|
|
980
|
+
"queryBuilder.removeCondition": "Remove condition {index}",
|
|
981
|
+
"queryBuilder.removeGroup": "Remove group",
|
|
982
|
+
"queryBuilder.empty": "No conditions: every record matches.",
|
|
983
|
+
"queryBuilder.true": "true",
|
|
984
|
+
"queryBuilder.false": "false",
|
|
985
|
+
"queryBuilder.between": "{from} and {to}",
|
|
986
|
+
"queryBuilder.op.eq": "is",
|
|
987
|
+
"queryBuilder.op.neq": "is not",
|
|
988
|
+
"queryBuilder.op.contains": "contains",
|
|
989
|
+
"queryBuilder.op.notContains": "does not contain",
|
|
990
|
+
"queryBuilder.op.startsWith": "starts with",
|
|
991
|
+
"queryBuilder.op.endsWith": "ends with",
|
|
992
|
+
"queryBuilder.op.gt": "greater than",
|
|
993
|
+
"queryBuilder.op.gte": "at least",
|
|
994
|
+
"queryBuilder.op.lt": "less than",
|
|
995
|
+
"queryBuilder.op.lte": "at most",
|
|
996
|
+
"queryBuilder.op.between": "is between",
|
|
997
|
+
"queryBuilder.op.in": "is any of",
|
|
998
|
+
"queryBuilder.op.notIn": "is none of",
|
|
999
|
+
"queryBuilder.op.before": "is before",
|
|
1000
|
+
"queryBuilder.op.after": "is after",
|
|
1001
|
+
"queryBuilder.op.isEmpty": "is empty",
|
|
1002
|
+
"queryBuilder.op.isNotEmpty": "is not empty",
|
|
1003
|
+
"queryBuilder.op.isTrue": "is true",
|
|
1004
|
+
"queryBuilder.op.isFalse": "is false",
|
|
1005
|
+
"scheduleInput.label": "Schedule",
|
|
1006
|
+
"scheduleInput.frequency": "Frequency",
|
|
1007
|
+
"scheduleInput.hourly": "Hourly",
|
|
1008
|
+
"scheduleInput.daily": "Daily",
|
|
1009
|
+
"scheduleInput.weekly": "Weekly",
|
|
1010
|
+
"scheduleInput.monthly": "Monthly",
|
|
1011
|
+
"scheduleInput.custom": "Custom",
|
|
1012
|
+
"scheduleInput.atMinute": "At minute",
|
|
1013
|
+
"scheduleInput.atTime": "At",
|
|
1014
|
+
"scheduleInput.onDays": "On",
|
|
1015
|
+
"scheduleInput.dayOfMonth": "Day of month",
|
|
1016
|
+
"scheduleInput.expression": "Cron expression",
|
|
1017
|
+
"scheduleInput.expressionHint": "minute hour day-of-month month day-of-week",
|
|
1018
|
+
"scheduleInput.nextRuns": "Next runs ({timeZone})",
|
|
1019
|
+
"scheduleInput.noRuns": "No upcoming runs.",
|
|
1020
|
+
"scheduleInput.localTime": "local time",
|
|
1021
|
+
"cron.error.empty": "Enter a cron expression.",
|
|
1022
|
+
"cron.error.fieldCount": "Expected 5 fields (minute hour day month weekday), found {count}.",
|
|
1023
|
+
"cron.error.invalid": "Invalid {field} value “{value}”.",
|
|
1024
|
+
"cron.error.range": "{field} value “{value}” is outside {min}–{max}.",
|
|
1025
|
+
"cron.error.step": "Invalid step “{value}” in {field}.",
|
|
1026
|
+
"cron.error.macro": "Unsupported macro “{value}”.",
|
|
1027
|
+
"cron.field.minute": "minute",
|
|
1028
|
+
"cron.field.hour": "hour",
|
|
1029
|
+
"cron.field.dayOfMonth": "day of month",
|
|
1030
|
+
"cron.field.month": "month",
|
|
1031
|
+
"cron.field.dayOfWeek": "day of week",
|
|
1032
|
+
"cron.everyMinute": "Every minute",
|
|
1033
|
+
"cron.everyNMinutes": "Every {count, plural, one {minute} other {# minutes}}",
|
|
1034
|
+
"cron.everyHour": "Every hour",
|
|
1035
|
+
"cron.everyHourAt": "Every hour at {count, plural, one {minute} other {minutes}} {minutes}",
|
|
1036
|
+
"cron.everyNHours": "Every {count, plural, one {hour} other {# hours}}",
|
|
1037
|
+
"cron.everyNHoursAt": "Every {count, plural, one {hour} other {# hours}} at minute {minute}",
|
|
1038
|
+
"cron.minutesPast": "At {count, plural, one {minute} other {minutes}} {minutes} past the hour",
|
|
1039
|
+
"cron.at": "At {times}",
|
|
1040
|
+
"cron.dailyAt": "Every day at {times}",
|
|
1041
|
+
"cron.weekdaysAt": "Every weekday at {times}",
|
|
1042
|
+
"cron.weeklyAt": "Every {days} at {times}",
|
|
1043
|
+
"cron.monthlyAt": "Monthly on {count, plural, one {day} other {days}} {days} at {times}",
|
|
1044
|
+
"cron.betweenHours": "between {start} and {end}",
|
|
1045
|
+
"cron.duringHours": "during {count, plural, one {hour} other {hours}} {hours}",
|
|
1046
|
+
"cron.onWeekdays": "on weekdays",
|
|
1047
|
+
"cron.onDays": "on {days}",
|
|
1048
|
+
"cron.onDaysOfMonth": "on {count, plural, one {day} other {days}} {days} of the month",
|
|
1049
|
+
"cron.or": "{a} or {b}",
|
|
1050
|
+
"cron.inMonths": "in {months}",
|
|
1051
|
+
"cron.join": "{base}, {part}"
|
|
1052
|
+
};
|
|
1053
|
+
//#endregion
|
|
1054
|
+
//#region src/i18n/messages/es.ts
|
|
1055
|
+
/** Built-in Spanish catalog. */
|
|
1056
|
+
const es = {
|
|
1057
|
+
"resourceDetail.overview": "Resumen",
|
|
1058
|
+
"resourceDetail.activity": "Actividad",
|
|
1059
|
+
"resourceDetail.settings": "Configuración",
|
|
1060
|
+
"resourceDetail.sections": "Secciones del recurso",
|
|
1061
|
+
"error.title": "No se pudieron cargar los despliegues",
|
|
1062
|
+
"error.message": "El servicio no respondió a tiempo. Tus datos están a salvo; vuelve a intentarlo en un momento.",
|
|
1063
|
+
"error.support": "Contactar con soporte",
|
|
1064
|
+
"emptyState.noAccess.title": "No tienes acceso a {resource}",
|
|
1065
|
+
"emptyState.noAccess.description": "Pide a {owner} que te asigne un rol con permisos de {resource}.",
|
|
1066
|
+
"emptyState.noAccess.request": "Solicitar acceso",
|
|
1067
|
+
"emptyState.noAccess.requested": "Acceso solicitado",
|
|
1068
|
+
"emptyState.noAccess.sent": "Solicitud de acceso enviada",
|
|
1069
|
+
"emptyState.noResults.queryTitleBefore": "No hay {entity} que coincidan con “",
|
|
1070
|
+
"emptyState.noResults.queryTitleAfter": "”",
|
|
1071
|
+
"emptyState.noResults.title": "No se encontraron {entity}",
|
|
1072
|
+
"emptyState.noResults.description": "Revisa la ortografía o prueba una búsqueda más amplia{count, plural, =0 {} one { con {count} filtro aplicado} other { con {count} filtros aplicados}}.",
|
|
1073
|
+
"emptyState.noResults.clearFilters": "Borrar filtros",
|
|
1074
|
+
"emptyState.noResults.clearSearch": "Borrar búsqueda",
|
|
1075
|
+
"emptyState.firstRun.title": "Crea tu primer proyecto",
|
|
1076
|
+
"emptyState.firstRun.description": "Los proyectos agrupan tus servicios, entornos y despliegues. Crea uno desde un repositorio en un par de minutos.",
|
|
1077
|
+
"emptyState.firstRun.action": "Nuevo proyecto",
|
|
1078
|
+
"emptyState.firstRun.guide": "Leer la guía",
|
|
1079
|
+
"callout.title": "Has usado el 92% de tus minutos de compilación",
|
|
1080
|
+
"callout.description": "Las compilaciones se pondrán en cola al alcanzar el límite mensual. Mejora el plan o reduce las compilaciones simultáneas.",
|
|
1081
|
+
"callout.upgrade": "Mejorar el plan",
|
|
1082
|
+
"callout.viewUsage": "Ver uso",
|
|
1083
|
+
"descriptionList.title": "Configuración",
|
|
1084
|
+
"descriptionList.description": "Configuración de este despliegue.",
|
|
1085
|
+
"descriptionList.edit": "Editar",
|
|
1086
|
+
"descriptionList.copy": "Copiar {label}",
|
|
1087
|
+
"descriptionList.copied": "{label} copiado",
|
|
1088
|
+
"pageHeader.title": "Despliegues",
|
|
1089
|
+
"pageHeader.description": "Todas las compilaciones y versiones de este proyecto en sus entornos.",
|
|
1090
|
+
"pageHeader.moreActions": "Más acciones",
|
|
1091
|
+
"logViewer.title": "Registros",
|
|
1092
|
+
"logViewer.levelFilter": "Niveles de registro",
|
|
1093
|
+
"logViewer.searchLabel": "Buscar en los registros",
|
|
1094
|
+
"logViewer.searchPlaceholder": "Buscar…",
|
|
1095
|
+
"logViewer.follow": "Seguir",
|
|
1096
|
+
"logViewer.count": "{visible} de {total}",
|
|
1097
|
+
"logViewer.empty": "Ninguna línea coincide con los filtros actuales.",
|
|
1098
|
+
"logViewer.inspect": "Inspeccionar evento {timestamp}",
|
|
1099
|
+
"logViewer.copy": "Copiar línea {timestamp}",
|
|
1100
|
+
"pageHeader.sections": "Secciones de la página",
|
|
1101
|
+
"thumbnail.uploading": "Subiendo {label}",
|
|
1102
|
+
"thumbnail.error": "Error al subir",
|
|
1103
|
+
"overflowList.more": "+{count} más",
|
|
1104
|
+
"overflowList.title": "{count} más",
|
|
1105
|
+
"bottomSheet.handle": "Redimensionar panel",
|
|
1106
|
+
"bottomSheet.handleHint": "Flecha arriba expande, flecha abajo contrae.",
|
|
1107
|
+
"bottomSheet.expanded": "Panel expandido.",
|
|
1108
|
+
"bottomSheet.position": "Panel a la altura {count} de {total}.",
|
|
1109
|
+
"megaMenu.label": "Principal",
|
|
1110
|
+
"virtualList.empty": "Sin elementos.",
|
|
1111
|
+
"jsonViewer.copyPath": "Copiar ruta",
|
|
1112
|
+
"jsonViewer.copyValue": "Copiar valor",
|
|
1113
|
+
"jsonViewer.selectHint": "Selecciona un nodo para copiar su ruta o valor",
|
|
1114
|
+
"jsonViewer.truncated": "Truncado",
|
|
1115
|
+
"jsonViewer.copyFullHint": "Copiar valor copia el valor completo, sin truncar",
|
|
1116
|
+
"jsonViewer.keys": "{count, plural, one {# clave} other {# claves}}",
|
|
1117
|
+
"jsonViewer.items": "{count, plural, one {# elemento} other {# elementos}}",
|
|
1118
|
+
"jsonViewer.root": "(raíz)",
|
|
1119
|
+
"carousel.previous": "Diapositiva anterior",
|
|
1120
|
+
"carousel.next": "Diapositiva siguiente",
|
|
1121
|
+
"carousel.play": "Iniciar presentación automática",
|
|
1122
|
+
"carousel.pause": "Detener presentación automática",
|
|
1123
|
+
"carousel.slide": "{count} de {total}",
|
|
1124
|
+
"carousel.goTo": "Ir a la diapositiva {count}",
|
|
1125
|
+
"carousel.pickers": "Elegir diapositiva",
|
|
1126
|
+
"lightbox.title": "Visor multimedia",
|
|
1127
|
+
"lightbox.close": "Cerrar visor",
|
|
1128
|
+
"lightbox.zoomIn": "Acercar",
|
|
1129
|
+
"lightbox.zoomOut": "Alejar",
|
|
1130
|
+
"lightbox.thumbnails": "Miniaturas",
|
|
1131
|
+
"lightbox.counter": "{count} / {total}",
|
|
1132
|
+
"lightbox.status": "{count} de {total}: {label}",
|
|
1133
|
+
"lightbox.thumbnail": "Mostrar {count}: {label}",
|
|
1134
|
+
"tour.skip": "Omitir recorrido",
|
|
1135
|
+
"tour.close": "Terminar recorrido",
|
|
1136
|
+
"tour.counter": "Paso {count} de {total}",
|
|
1137
|
+
"listInput.key": "Clave",
|
|
1138
|
+
"listInput.value": "Valor",
|
|
1139
|
+
"listInput.add": "Añadir fila",
|
|
1140
|
+
"listInput.remove": "Quitar fila {count}",
|
|
1141
|
+
"listInput.moveUp": "Subir fila {count}",
|
|
1142
|
+
"listInput.moveDown": "Bajar fila {count}",
|
|
1143
|
+
"listInput.reveal": "Mostrar valor {count}",
|
|
1144
|
+
"listInput.duplicate": "Clave duplicada",
|
|
1145
|
+
"listInput.added": "{count, plural, one {Se añadió una fila.} other {Se añadieron # filas.}}",
|
|
1146
|
+
"listInput.removed": "Se quitó la fila {count}.",
|
|
1147
|
+
"listInput.moved": "Se movió a la posición {count}.",
|
|
1148
|
+
"listInput.limit": "Se alcanzó el límite de {count} filas.",
|
|
1149
|
+
"listInput.pasteHint": "Pega líneas CLAVE=valor para añadir varias filas.",
|
|
1150
|
+
"timer.paused": "En pausa",
|
|
1151
|
+
"timer.stopped": "Detenido",
|
|
1152
|
+
"timer.unitHours": "h",
|
|
1153
|
+
"timer.unitMinutes": "min",
|
|
1154
|
+
"timer.unitSeconds": "s",
|
|
1155
|
+
"treeList.error": "No se pudieron cargar los elementos.",
|
|
1156
|
+
"transferList.available": "Disponibles",
|
|
1157
|
+
"transferList.selected": "Seleccionados",
|
|
1158
|
+
"transferList.searchAvailable": "Buscar disponibles",
|
|
1159
|
+
"transferList.searchSelected": "Buscar seleccionados",
|
|
1160
|
+
"transferList.searchPlaceholder": "Filtrar…",
|
|
1161
|
+
"transferList.add": "Añadir marcados",
|
|
1162
|
+
"transferList.addAll": "Añadir todos",
|
|
1163
|
+
"transferList.remove": "Quitar marcados",
|
|
1164
|
+
"transferList.removeAll": "Quitar todos",
|
|
1165
|
+
"transferList.moveUp": "Subir marcados",
|
|
1166
|
+
"transferList.moveDown": "Bajar marcados",
|
|
1167
|
+
"transferList.actions": "Acciones de transferencia",
|
|
1168
|
+
"transferList.emptyAvailable": "Todo está seleccionado.",
|
|
1169
|
+
"transferList.emptySelected": "Aún no hay elementos seleccionados.",
|
|
1170
|
+
"transferList.reorderHint": "Alt+↑/↓ cambia el orden",
|
|
1171
|
+
"transferList.added": "{count, plural, one {Añadido # elemento.} other {Añadidos # elementos.}}",
|
|
1172
|
+
"transferList.removed": "{count, plural, one {Quitado # elemento.} other {Quitados # elementos.}}",
|
|
1173
|
+
"transferList.moved": "Orden cambiado.",
|
|
1174
|
+
"matchText.search": "Buscar nombres sin acentos",
|
|
1175
|
+
"matchText.results": "Nombres coincidentes",
|
|
1176
|
+
"virtualOptions.nodes": "Nodos (10.000 opciones)",
|
|
1177
|
+
"virtualOptions.remoteNodes": "Nodos remotos (5.000 opciones)",
|
|
1178
|
+
"virtualOptions.multiNodes": "Nodos (5.000 opciones)",
|
|
1179
|
+
"virtualOptions.node": "nodo-{index}",
|
|
1180
|
+
"virtualOptions.description": "Detalles adicionales del nodo",
|
|
1181
|
+
"virtualOptions.note": "Solo se montan las filas visibles. La búsqueda y el teclado siguen accediendo a todas las opciones.",
|
|
1182
|
+
"forms.invite.title": "Invitar a un miembro",
|
|
1183
|
+
"forms.bindings.width.xs": "Muy pequeño",
|
|
1184
|
+
"forms.bindings.width.sm": "Pequeño",
|
|
1185
|
+
"forms.bindings.width.md": "Mediano",
|
|
1186
|
+
"forms.bindings.width.lg": "Grande",
|
|
1187
|
+
"forms.bindings.width.xl": "Muy grande",
|
|
1188
|
+
"forms.bindings.helpers": "Vinculación manual",
|
|
1189
|
+
"forms.bindings.helpersSaved": "Se guardaron {count} plazas. Notificaciones: {enabled}.",
|
|
1190
|
+
"forms.bindings.title": "Vinculación de controles",
|
|
1191
|
+
"forms.bindings.disabled": "Desactivar campos",
|
|
1192
|
+
"forms.bindings.readOnly": "Campos de solo lectura",
|
|
1193
|
+
"forms.bindings.width": "Ancho del campo",
|
|
1194
|
+
"forms.bindings.fullWidth": "Ancho completo",
|
|
1195
|
+
"forms.bindings.name": "Nombre",
|
|
1196
|
+
"forms.bindings.note": "Nota",
|
|
1197
|
+
"forms.bindings.alerts": "Notificaciones",
|
|
1198
|
+
"forms.bindings.digest": "Resumen semanal",
|
|
1199
|
+
"forms.bindings.role": "Nivel de acceso",
|
|
1200
|
+
"forms.bindings.viewer": "Lector",
|
|
1201
|
+
"forms.bindings.editor": "Editor",
|
|
1202
|
+
"forms.bindings.tags": "Temas",
|
|
1203
|
+
"forms.bindings.updates": "Novedades",
|
|
1204
|
+
"forms.bindings.events": "Eventos",
|
|
1205
|
+
"forms.bindings.date": "Fecha de inicio",
|
|
1206
|
+
"forms.bindings.range": "Intervalo de fechas",
|
|
1207
|
+
"forms.bindings.time": "Hora de inicio",
|
|
1208
|
+
"forms.bindings.count": "Plazas",
|
|
1209
|
+
"forms.bindings.department": "Departamento",
|
|
1210
|
+
"forms.bindings.engineering": "Ingeniería",
|
|
1211
|
+
"forms.bindings.design": "Diseño",
|
|
1212
|
+
"forms.bindings.team": "Equipo",
|
|
1213
|
+
"forms.bindings.platform": "Plataforma",
|
|
1214
|
+
"forms.bindings.research": "Investigación",
|
|
1215
|
+
"forms.bindings.dependent": "Las opciones de equipo se recargan al cambiar el departamento.",
|
|
1216
|
+
"forms.bindings.saved": "Preferencias guardadas.",
|
|
1217
|
+
"fieldArray.item": "Elemento {n}",
|
|
1218
|
+
"fieldArray.examples.parameters": "Parámetros de herramientas",
|
|
1219
|
+
"fieldArray.examples.description": "Configura las herramientas para ejecutarlas en orden.",
|
|
1220
|
+
"fieldArray.examples.tool": "Herramienta",
|
|
1221
|
+
"fieldArray.examples.timeout": "Tiempo de espera (ms)",
|
|
1222
|
+
"fieldArray.examples.routing": "Reglas de enrutamiento",
|
|
1223
|
+
"fieldArray.examples.destination": "Destino",
|
|
1224
|
+
"fieldArray.examples.weight": "Peso",
|
|
1225
|
+
"fieldArray.examples.steps": "Pasos",
|
|
1226
|
+
"fieldArray.examples.headers": "Cabeceras",
|
|
1227
|
+
"fieldArray.examples.key": "Clave",
|
|
1228
|
+
"fieldArray.examples.value": "Valor",
|
|
1229
|
+
"fieldArray.duplicate": "Duplicar {item}",
|
|
1230
|
+
"fieldArray.duplicated": "Duplicado {item}.",
|
|
1231
|
+
"fieldArray.moveUp": "Subir {item}",
|
|
1232
|
+
"fieldArray.moveDown": "Bajar {item}",
|
|
1233
|
+
"fieldArray.moved": "Movido a la posición {n} de {total}.",
|
|
1234
|
+
"fieldArray.remove": "Quitar {item}",
|
|
1235
|
+
"fieldArray.removed": "Quitado {item}.",
|
|
1236
|
+
"fieldArray.empty": "Aún no hay elementos.",
|
|
1237
|
+
"fieldArray.add": "Añadir elemento",
|
|
1238
|
+
"fieldArray.added": "Añadido {item}.",
|
|
1239
|
+
"fieldArray.limit": "Límite de {max} elementos alcanzado.",
|
|
1240
|
+
"common.yes": "Sí",
|
|
1241
|
+
"common.no": "No",
|
|
1242
|
+
"statusTimeline.label": "Historial de estado",
|
|
1243
|
+
"statusTimeline.empty": "Sin historial de estado",
|
|
1244
|
+
"statusTimeline.showFewer": "Ver menos",
|
|
1245
|
+
"statusTimeline.showEarlier": "Ver {count} {count, plural, one {cambio anterior} other {cambios anteriores}}",
|
|
1246
|
+
"statusTimeline.actor": "por",
|
|
1247
|
+
"common.close": "Cerrar",
|
|
1248
|
+
"common.dismiss": "Descartar",
|
|
1249
|
+
"common.copy": "Copiar",
|
|
1250
|
+
"common.copied": "Copiado",
|
|
1251
|
+
"common.copiedToClipboard": "Copiado al portapapeles",
|
|
1252
|
+
"common.copyFailed": "No se pudo copiar",
|
|
1253
|
+
"common.clear": "Borrar",
|
|
1254
|
+
"common.clearAll": "Borrar todo",
|
|
1255
|
+
"common.clearSelection": "Borrar selección",
|
|
1256
|
+
"common.search": "Buscar",
|
|
1257
|
+
"common.searchPlaceholder": "Buscar…",
|
|
1258
|
+
"common.loading": "Cargando…",
|
|
1259
|
+
"common.noResults": "Sin resultados",
|
|
1260
|
+
"common.noMatches": "Sin coincidencias.",
|
|
1261
|
+
"common.selectPlaceholder": "Seleccionar…",
|
|
1262
|
+
"common.selectAll": "Seleccionar todo",
|
|
1263
|
+
"common.deselectAll": "Deseleccionar todo",
|
|
1264
|
+
"common.showOptions": "Mostrar opciones",
|
|
1265
|
+
"common.remove": "Quitar",
|
|
1266
|
+
"common.removeItem": "Quitar {label}",
|
|
1267
|
+
"common.removed": "Se quitó {label}.",
|
|
1268
|
+
"common.back": "Atrás",
|
|
1269
|
+
"common.next": "Siguiente",
|
|
1270
|
+
"common.previous": "Anterior",
|
|
1271
|
+
"common.finish": "Finalizar",
|
|
1272
|
+
"common.exit": "Salir",
|
|
1273
|
+
"common.cancel": "Cancelar",
|
|
1274
|
+
"common.save": "Guardar",
|
|
1275
|
+
"common.send": "Enviar",
|
|
1276
|
+
"common.stop": "Detener",
|
|
1277
|
+
"common.retry": "Reintentar",
|
|
1278
|
+
"common.edit": "Editar",
|
|
1279
|
+
"common.delete": "Eliminar",
|
|
1280
|
+
"common.filter": "Filtrar",
|
|
1281
|
+
"common.sort": "Ordenar",
|
|
1282
|
+
"common.viewAll": "Ver todo",
|
|
1283
|
+
"common.moreActions": "Más acciones",
|
|
1284
|
+
"common.openMenu": "Abrir menú",
|
|
1285
|
+
"common.more": "{count} más",
|
|
1286
|
+
"common.moreInfo": "Más información sobre {label}",
|
|
1287
|
+
"common.fieldInvalid": "Campo no válido",
|
|
1288
|
+
"common.invalid": "no válido: {error}",
|
|
1289
|
+
"common.resize": "Redimensionar",
|
|
1290
|
+
"common.progress": "Progreso",
|
|
1291
|
+
"common.main": "Principal",
|
|
1292
|
+
"common.settings": "Configuración",
|
|
1293
|
+
"common.notifications": "Notificaciones",
|
|
1294
|
+
"common.unread": "No leída:",
|
|
1295
|
+
"common.results": "{count, plural, one {# resultado} other {# resultados}}",
|
|
1296
|
+
"common.trend": "Tendencia",
|
|
1297
|
+
"skip.main": "Saltar al contenido principal",
|
|
1298
|
+
"skip.content": "Saltar al contenido",
|
|
1299
|
+
"skip.canvas": "Saltar al lienzo",
|
|
1300
|
+
"skip.document": "Saltar al documento",
|
|
1301
|
+
"skip.signIn": "Saltar al formulario de acceso",
|
|
1302
|
+
"skip.step": "Saltar al paso",
|
|
1303
|
+
"nav.navigation": "Navegación",
|
|
1304
|
+
"nav.openNavigation": "Abrir navegación",
|
|
1305
|
+
"nav.closeNavigation": "Cerrar navegación",
|
|
1306
|
+
"nav.sidebar": "Barra lateral",
|
|
1307
|
+
"nav.expandSidebar": "Expandir barra lateral",
|
|
1308
|
+
"nav.collapseSidebar": "Contraer barra lateral",
|
|
1309
|
+
"nav.onThisPage": "En esta página",
|
|
1310
|
+
"nav.pageActions": "Acciones de la página",
|
|
1311
|
+
"breadcrumbs.label": "Ruta de navegación",
|
|
1312
|
+
"breadcrumbs.expand": "{count, plural, one {Mostrar # nivel más} other {Mostrar # niveles más}}",
|
|
1313
|
+
"pagination.label": "Paginación",
|
|
1314
|
+
"pagination.previous": "Página anterior",
|
|
1315
|
+
"pagination.next": "Página siguiente",
|
|
1316
|
+
"pagination.page": "Página {page}",
|
|
1317
|
+
"pagination.of": "de",
|
|
1318
|
+
"calendar.chooseMonth": "{label}, elegir mes",
|
|
1319
|
+
"calendar.chooseYear": "{label}, elegir año",
|
|
1320
|
+
"calendar.previousYear": "Año anterior",
|
|
1321
|
+
"calendar.nextYear": "Año siguiente",
|
|
1322
|
+
"calendar.previousYears": "{count} años anteriores",
|
|
1323
|
+
"calendar.nextYears": "{count} años siguientes",
|
|
1324
|
+
"calendar.month": "Mes",
|
|
1325
|
+
"calendar.year": "Año",
|
|
1326
|
+
"calendar.label": "Calendario",
|
|
1327
|
+
"calendar.localeDefaults": "Valores predeterminados regionales",
|
|
1328
|
+
"calendar.previousMonth": "Mes anterior",
|
|
1329
|
+
"calendar.nextMonth": "Mes siguiente",
|
|
1330
|
+
"calendar.today": "Hoy",
|
|
1331
|
+
"periodPicker.previousYear": "Año anterior",
|
|
1332
|
+
"periodPicker.nextYear": "Año siguiente",
|
|
1333
|
+
"periodPicker.quarter": "T{quarter} {year}",
|
|
1334
|
+
"periodPicker.previousYears": "12 años anteriores",
|
|
1335
|
+
"periodPicker.nextYears": "12 años siguientes",
|
|
1336
|
+
"periodPicker.yearPage": "{start}–{end}",
|
|
1337
|
+
"periodPicker.yearTitle": "{year}",
|
|
1338
|
+
"periodPicker.chooseYear": "Elegir año",
|
|
1339
|
+
"periodPicker.week": "Semana {week} de {year}",
|
|
1340
|
+
"periodPicker.chooseMonth": "Elegir mes",
|
|
1341
|
+
"periodPicker.range": "{start} – {end}",
|
|
1342
|
+
"periodPicker.presets": "Periodos predefinidos",
|
|
1343
|
+
"periodPicker.thisWeek": "Esta semana",
|
|
1344
|
+
"periodPicker.lastWeek": "La semana pasada",
|
|
1345
|
+
"periodPicker.thisMonth": "Este mes",
|
|
1346
|
+
"periodPicker.lastMonth": "El mes pasado",
|
|
1347
|
+
"periodPicker.thisQuarter": "Este trimestre",
|
|
1348
|
+
"periodPicker.lastQuarter": "El trimestre pasado",
|
|
1349
|
+
"periodPicker.thisYear": "Este año",
|
|
1350
|
+
"periodPicker.lastYear": "El año pasado",
|
|
1351
|
+
"periodPicker.billingMonth": "Mes de facturación",
|
|
1352
|
+
"periodPicker.reportingQuarters": "Trimestres del informe",
|
|
1353
|
+
"periodPicker.reportingWeek": "Semana del informe",
|
|
1354
|
+
"periodPicker.reportingYear": "Año del informe",
|
|
1355
|
+
"periodPicker.yearCalendar": "Selección de año en línea",
|
|
1356
|
+
"periodPicker.wholePeriodDescription": "El valor representa un periodo completo, que comienza a medianoche local.",
|
|
1357
|
+
"periodPicker.rangeDescription": "Elige dos trimestres para incluir todos los trimestres completos entre ellos.",
|
|
1358
|
+
"periodPicker.isoDescription": "Las semanas ISO van de lunes a domingo y usan el año de semana ISO.",
|
|
1359
|
+
"periodPicker.placeholder": "Elige un periodo",
|
|
1360
|
+
"periodPicker.choose": "Elegir periodo",
|
|
1361
|
+
"datePicker.placeholder": "Elige una fecha",
|
|
1362
|
+
"datePicker.rangePlaceholder": "Elige un rango de fechas",
|
|
1363
|
+
"datePicker.choose": "Elegir fecha",
|
|
1364
|
+
"datePicker.chooseRange": "Elegir rango de fechas",
|
|
1365
|
+
"datePicker.presets": "Rangos predefinidos",
|
|
1366
|
+
"numberInput.decrease": "Disminuir",
|
|
1367
|
+
"numberInput.increase": "Aumentar",
|
|
1368
|
+
"otp.character": "Carácter {index} de {total}",
|
|
1369
|
+
"password.show": "Mostrar contraseña",
|
|
1370
|
+
"password.hide": "Ocultar contraseña",
|
|
1371
|
+
"password.strength": "Seguridad:",
|
|
1372
|
+
"password.tooWeak": "Muy débil",
|
|
1373
|
+
"password.weak": "Débil",
|
|
1374
|
+
"password.fair": "Aceptable",
|
|
1375
|
+
"password.good": "Buena",
|
|
1376
|
+
"password.strong": "Fuerte",
|
|
1377
|
+
"multiSelect.moreSelected": "más seleccionados",
|
|
1378
|
+
"tokenInput.entries": "Entradas",
|
|
1379
|
+
"link.external": "(se abre en una pestaña nueva)",
|
|
1380
|
+
"toast.region": "Notificaciones",
|
|
1381
|
+
"toast.dismiss": "Descartar notificación",
|
|
1382
|
+
"theme.label": "Tema",
|
|
1383
|
+
"theme.light": "Claro",
|
|
1384
|
+
"theme.dark": "Oscuro",
|
|
1385
|
+
"theme.highContrast": "Alto contraste",
|
|
1386
|
+
"theme.system": "Sistema",
|
|
1387
|
+
"userMenu.label": "Menú de la cuenta de {name}",
|
|
1388
|
+
"userMenu.signOut": "Cerrar sesión",
|
|
1389
|
+
"notifications.markAllRead": "Marcar todas como leídas",
|
|
1390
|
+
"notifications.empty": "Las notificaciones nuevas aparecerán aquí.",
|
|
1391
|
+
"workspace.switch": "Cambiar de espacio de trabajo",
|
|
1392
|
+
"workspace.create": "Crear espacio de trabajo",
|
|
1393
|
+
"workspace.search": "Buscar un espacio de trabajo…",
|
|
1394
|
+
"workspace.empty": "Ningún espacio de trabajo coincide.",
|
|
1395
|
+
"commandPalette.label": "Paleta de comandos",
|
|
1396
|
+
"commandPalette.placeholder": "Escribe un comando o busca…",
|
|
1397
|
+
"commandPalette.recent": "Recientes",
|
|
1398
|
+
"commandPalette.trigger": "Busca o ejecuta un comando",
|
|
1399
|
+
"commandPalette.navigate": "navegar",
|
|
1400
|
+
"commandPalette.run": "ejecutar",
|
|
1401
|
+
"commandPalette.close": "cerrar",
|
|
1402
|
+
"theme.cycle": "Tema: {current}. Cambiar a {next}",
|
|
1403
|
+
"notifications.trigger": "{title}, {count} sin leer",
|
|
1404
|
+
"notifications.new": "{count, plural, one {# nueva} other {# nuevas}}",
|
|
1405
|
+
"notifications.emptyTitle": "Estás al día",
|
|
1406
|
+
"tokenInput.added": "Se añadió {items}.",
|
|
1407
|
+
"tokenInput.limit": "Se alcanzó el límite de {max}.",
|
|
1408
|
+
"avatar.more": "más",
|
|
1409
|
+
"stepper.step": "Paso {step} de {total}",
|
|
1410
|
+
"stepper.complete": "completado",
|
|
1411
|
+
"stepper.current": "paso actual",
|
|
1412
|
+
"stepper.upcoming": "sin empezar",
|
|
1413
|
+
"stepper.error": "error",
|
|
1414
|
+
"sparkline.noData": "{label}: sin datos",
|
|
1415
|
+
"sparkline.single": "{label}: {value}",
|
|
1416
|
+
"sparkline.summary": "{label}: {direction}{change} de {first} a {last} en {count} puntos (mínimo {min}, máximo {max})",
|
|
1417
|
+
"sparkline.up": "al alza",
|
|
1418
|
+
"sparkline.down": "a la baja",
|
|
1419
|
+
"sparkline.flat": "estable",
|
|
1420
|
+
"table.scrollable": "Tabla desplazable",
|
|
1421
|
+
"codeBlock.code": "Código",
|
|
1422
|
+
"codeBlock.languageCode": "Código {language}",
|
|
1423
|
+
"codeBlock.wrap": "Ajustar líneas",
|
|
1424
|
+
"kbd.command": "Comando",
|
|
1425
|
+
"kbd.option": "Opción",
|
|
1426
|
+
"kbd.shift": "Mayúsculas",
|
|
1427
|
+
"kbd.control": "Control",
|
|
1428
|
+
"kbd.enter": "Intro",
|
|
1429
|
+
"kbd.backspace": "Retroceso",
|
|
1430
|
+
"kbd.tab": "Tabulador",
|
|
1431
|
+
"kbd.escape": "Escape",
|
|
1432
|
+
"kbd.up": "Flecha arriba",
|
|
1433
|
+
"kbd.down": "Flecha abajo",
|
|
1434
|
+
"kbd.left": "Flecha izquierda",
|
|
1435
|
+
"kbd.right": "Flecha derecha",
|
|
1436
|
+
"kbd.upDown": "Flechas arriba y abajo",
|
|
1437
|
+
"settings.section": "Sección de configuración",
|
|
1438
|
+
"wizard.exitTitle": "¿Salir de esta configuración?",
|
|
1439
|
+
"wizard.exitDescription": "Se perderá tu progreso en este paso.",
|
|
1440
|
+
"wizard.leave": "Salir",
|
|
1441
|
+
"wizard.progressSummary": "Resumen de {label}",
|
|
1442
|
+
"wizard.stepAnnouncement": "Paso {position} de {total}: {label}",
|
|
1443
|
+
"wizard.finishing": "Finalizando…",
|
|
1444
|
+
"wizard.title": "Crear recurso",
|
|
1445
|
+
"wizard.details": "Detalles",
|
|
1446
|
+
"wizard.review": "Revisar",
|
|
1447
|
+
"wizard.stay": "Quedarme",
|
|
1448
|
+
"canvas.palette": "Paleta",
|
|
1449
|
+
"canvas.inspector": "Inspector",
|
|
1450
|
+
"canvas.console": "Consola",
|
|
1451
|
+
"canvas.main": "Lienzo",
|
|
1452
|
+
"canvas.smallScreen": "Ábrelo en una pantalla más grande para editar. Aquí el lienzo es de solo lectura.",
|
|
1453
|
+
"print.pageBreak": "Salto de página",
|
|
1454
|
+
"split.list": "Lista",
|
|
1455
|
+
"split.details": "Detalles",
|
|
1456
|
+
"inspector.pin": "Fijar panel",
|
|
1457
|
+
"inspector.close": "Cerrar panel",
|
|
1458
|
+
"inspector.toggle": "Mostrar u ocultar panel",
|
|
1459
|
+
"calendar.tomorrow": "Mañana",
|
|
1460
|
+
"calendar.previousWeek": "Semana anterior",
|
|
1461
|
+
"calendar.nextWeek": "Semana siguiente",
|
|
1462
|
+
"calendar.now": "ahora",
|
|
1463
|
+
"calendar.unavailable": "(no disponible)",
|
|
1464
|
+
"calendar.availableTimes": "Horarios disponibles",
|
|
1465
|
+
"calendar.agenda": "Agenda",
|
|
1466
|
+
"calendar.emptyTitle": "Nada programado",
|
|
1467
|
+
"calendar.emptyDescription": "No hay trabajo programado en este periodo.",
|
|
1468
|
+
"table.loadMore": "Cargar más",
|
|
1469
|
+
"table.loadingMore": "Cargando…",
|
|
1470
|
+
"table.loadMoreGroup": "Cargar más elementos",
|
|
1471
|
+
"table.moreAvailable": "Hay más elementos disponibles.",
|
|
1472
|
+
"table.loadedSummary": "{count, plural, one {# elemento cargado} other {# elementos cargados}}",
|
|
1473
|
+
"table.loadedAnnouncement": "{count, plural, one {# elemento añadido.} other {# elementos añadidos.}}",
|
|
1474
|
+
"table.rows": "Filas",
|
|
1475
|
+
"table.collectionNoun": "{count, plural, one {elemento} other {elementos}}",
|
|
1476
|
+
"table.visibleCount": "{noun}:",
|
|
1477
|
+
"table.truncatedNote": "{count, plural, one {Solo se muestra el primer {formattedCount} {noun}; hay más.} other {Solo se muestran los primeros {formattedCount} {noun}; hay más.}}",
|
|
1478
|
+
"table.rowsPerPage": "Filas por página",
|
|
1479
|
+
"table.pagination": "Paginación: {noun}",
|
|
1480
|
+
"table.selectAllPage": "Seleccionar todas las filas de esta página",
|
|
1481
|
+
"table.selectRow": "Seleccionar {label}",
|
|
1482
|
+
"table.selection": "Selección",
|
|
1483
|
+
"table.actions": "Acciones",
|
|
1484
|
+
"table.rowActions": "Acciones de {label}",
|
|
1485
|
+
"table.emptyDescription": "Nada coincide con los filtros actuales.",
|
|
1486
|
+
"table.columns": "Columnas",
|
|
1487
|
+
"table.visibleColumns": "Columnas visibles",
|
|
1488
|
+
"table.density": "Densidad de filas",
|
|
1489
|
+
"table.comfortable": "Filas holgadas",
|
|
1490
|
+
"table.compact": "Filas compactas",
|
|
1491
|
+
"table.editRow": "Editar {label}",
|
|
1492
|
+
"filters.label": "Filtros",
|
|
1493
|
+
"filters.savedView": "Vista guardada",
|
|
1494
|
+
"filters.savedViews": "Vistas guardadas",
|
|
1495
|
+
"filters.add": "Añadir filtro",
|
|
1496
|
+
"filters.active": "Filtros activos",
|
|
1497
|
+
"filters.remove": "Quitar filtro {field}: {value}",
|
|
1498
|
+
"loading.table": "Cargando tabla",
|
|
1499
|
+
"loading.list": "Cargando lista",
|
|
1500
|
+
"loading.page": "Cargando página",
|
|
1501
|
+
"bulk.label": "Acciones en lote",
|
|
1502
|
+
"bulk.of": "de {total}",
|
|
1503
|
+
"bulk.selected": "{count, plural, one {seleccionado} other {seleccionados}}",
|
|
1504
|
+
"bulk.item": "elemento",
|
|
1505
|
+
"bulk.items": "elementos",
|
|
1506
|
+
"actionBar.unsaved": "Tienes cambios sin guardar",
|
|
1507
|
+
"actionBar.saved": "Todos los cambios guardados",
|
|
1508
|
+
"actionBar.save": "Guardar cambios",
|
|
1509
|
+
"actionBar.discard": "Descartar",
|
|
1510
|
+
"actionBar.saving": "Guardando…",
|
|
1511
|
+
"toolbar.label": "Barra de herramientas de la página",
|
|
1512
|
+
"toolbar.view": "Vista",
|
|
1513
|
+
"globalSearch.label": "Búsqueda global",
|
|
1514
|
+
"globalSearch.placeholder": "Busca páginas, registros y acciones…",
|
|
1515
|
+
"globalSearch.pages": "Páginas",
|
|
1516
|
+
"globalSearch.records": "Registros",
|
|
1517
|
+
"globalSearch.actions": "Acciones",
|
|
1518
|
+
"error.retry": "Reintentar",
|
|
1519
|
+
"error.retrying": "Reintentando…",
|
|
1520
|
+
"error.retryingStatus": "Reintentando",
|
|
1521
|
+
"error.requestId": "ID de la solicitud",
|
|
1522
|
+
"error.copyRequestId": "Copiar ID de la solicitud",
|
|
1523
|
+
"error.requestIdCopied": "ID de la solicitud copiado",
|
|
1524
|
+
"error.details": "Detalles técnicos",
|
|
1525
|
+
"dateRange.label": "Rango de fechas",
|
|
1526
|
+
"dateRange.any": "Cualquier fecha",
|
|
1527
|
+
"common.clearItem": "Borrar {label}",
|
|
1528
|
+
"upload.label": "Subir archivos",
|
|
1529
|
+
"upload.files": "Archivos",
|
|
1530
|
+
"upload.failed": "Error al subir",
|
|
1531
|
+
"upload.typeRejected": "Tipo de archivo no admitido",
|
|
1532
|
+
"upload.tooLarge": "Supera el límite de {size}",
|
|
1533
|
+
"upload.drop": "Arrastra archivos aquí o",
|
|
1534
|
+
"upload.uploading": "Subiendo {name}",
|
|
1535
|
+
"upload.notUploaded": "{error} · sin subir",
|
|
1536
|
+
"upload.uploaded": "{size} · subido",
|
|
1537
|
+
"upload.retry": "Reintentar {name}",
|
|
1538
|
+
"upload.browse": "Examinar archivos",
|
|
1539
|
+
"upload.hint": "{types} · máx. {size} por archivo",
|
|
1540
|
+
"upload.done": "{name} subido.",
|
|
1541
|
+
"upload.error": "No se pudo subir {name}.",
|
|
1542
|
+
"upload.added": "{count, plural, one {# archivo añadido.} other {# archivos añadidos.}}",
|
|
1543
|
+
"upload.rejected": "{count, plural, one {# rechazado.} other {# rechazados.}}",
|
|
1544
|
+
"upload.removed": "{name} eliminado.",
|
|
1545
|
+
"comments.label": "Comentarios",
|
|
1546
|
+
"comments.placeholder": "Añade un comentario…",
|
|
1547
|
+
"comments.submit": "Comentar",
|
|
1548
|
+
"comments.write": "Escribe un comentario",
|
|
1549
|
+
"calendar.events": "{count, plural, one {# evento} other {# eventos}}",
|
|
1550
|
+
"common.expandItem": "Expandir {label}",
|
|
1551
|
+
"common.collapseItem": "Contraer {label}",
|
|
1552
|
+
"kanban.label": "Tablero",
|
|
1553
|
+
"kanban.roleDescription": "tarjeta arrastrable",
|
|
1554
|
+
"kanban.instructions": "Pulsa Espacio para tomar la tarjeta. Usa las flechas para moverla, Espacio o Intro para soltarla y Escape para cancelar.",
|
|
1555
|
+
"kanban.pickedUp": "Has tomado {card}. Posición {position} de {total} en {column}.",
|
|
1556
|
+
"kanban.moved": "{card} movida a la posición {position} de {total} en {column}.",
|
|
1557
|
+
"kanban.dropped": "{card} soltada en la posición {position} de {total} en {column}.",
|
|
1558
|
+
"kanban.cancelled": "Movimiento cancelado. {card} vuelve a {column}.",
|
|
1559
|
+
"kanban.empty": "Sin tarjetas",
|
|
1560
|
+
"kanban.cards": "{count, plural, one {# tarjeta} other {# tarjetas}}",
|
|
1561
|
+
"chat.messageLabel": "Mensaje",
|
|
1562
|
+
"chat.placeholder": "Escribe al asistente…",
|
|
1563
|
+
"chat.send": "Enviar mensaje",
|
|
1564
|
+
"chat.stop": "Detener la generación",
|
|
1565
|
+
"chat.attach": "Adjuntar archivos",
|
|
1566
|
+
"chat.attachments": "Adjuntos",
|
|
1567
|
+
"chat.hintSend": "para enviar",
|
|
1568
|
+
"chat.hintNewLine": "para una línea nueva",
|
|
1569
|
+
"chat.shiftEnter": "Mayús + Intro",
|
|
1570
|
+
"chat.overLimit": "caracteres, por encima del límite",
|
|
1571
|
+
"chat.conversation": "Conversación",
|
|
1572
|
+
"chat.messages": "Mensajes",
|
|
1573
|
+
"chat.details": "Detalles",
|
|
1574
|
+
"chat.resizePanel": "Redimensionar el panel de {panel}",
|
|
1575
|
+
"chat.scrollToBottom": "Ir al último mensaje",
|
|
1576
|
+
"chat.suggestions": "Sugerencias",
|
|
1577
|
+
"chat.sources": "Fuentes",
|
|
1578
|
+
"chat.source": "Fuente {index}: {title}",
|
|
1579
|
+
"chat.you": "Tú",
|
|
1580
|
+
"chat.assistant": "Asistente",
|
|
1581
|
+
"chat.system": "Sistema",
|
|
1582
|
+
"chat.tool": "Herramienta",
|
|
1583
|
+
"chat.participant": "Participante",
|
|
1584
|
+
"chat.responding": "{author} está respondiendo…",
|
|
1585
|
+
"chat.actionsFor": "Acciones del mensaje de {name}",
|
|
1586
|
+
"chat.copyMessage": "Copiar mensaje",
|
|
1587
|
+
"chat.copyCode": "Copiar código",
|
|
1588
|
+
"chat.copiedCode": "Código copiado",
|
|
1589
|
+
"chat.goodResponse": "Buena respuesta",
|
|
1590
|
+
"chat.badResponse": "Mala respuesta",
|
|
1591
|
+
"chat.taskDone": "Hecho",
|
|
1592
|
+
"chat.taskNotDone": "Pendiente",
|
|
1593
|
+
"chat.image": "Imagen: {alt}",
|
|
1594
|
+
"chat.untitled": "sin título",
|
|
1595
|
+
"chat.openSource": "Abrir fuente",
|
|
1596
|
+
"toolCall.calling": "Llamando a",
|
|
1597
|
+
"toolCall.called": "Se llamó a",
|
|
1598
|
+
"toolCall.failed": "Falló la llamada a",
|
|
1599
|
+
"toolCall.arguments": "Argumentos",
|
|
1600
|
+
"toolCall.result": "Resultado",
|
|
1601
|
+
"toolCall.waiting": "Esperando el resultado…",
|
|
1602
|
+
"chat.surfaceExampleTitle": "Revisa tus datos",
|
|
1603
|
+
"chat.surfaceExampleName": "Nombre",
|
|
1604
|
+
"chat.surfaceExampleSubmit": "Enviar",
|
|
1605
|
+
"chat.surfaceExampleChoice": "Idioma",
|
|
1606
|
+
"chat.surfaceExampleEnglish": "Inglés",
|
|
1607
|
+
"chat.surfaceExampleSpanish": "Español",
|
|
1608
|
+
"chat.surfaceExampleNotify": "Enviar novedades",
|
|
1609
|
+
"chat.surfaceExampleBadge": "Borrador",
|
|
1610
|
+
"chat.surfaceExampleNotice": "Comprueba los datos antes de enviarlos.",
|
|
1611
|
+
"chat.surfaceExampleStatus": "Enviado para {name}",
|
|
1612
|
+
"chat.surfaceExamplePatch": "Actualizar nombre",
|
|
1613
|
+
"chat.surfaceExampleRemove": "Eliminar contenido",
|
|
1614
|
+
"chat.surfaceExampleReset": "Restablecer",
|
|
1615
|
+
"chat.surfaceExampleUnsupported": "Mostrar contenido no compatible",
|
|
1616
|
+
"chat.surfaceExampleRejected": "Se rechazó el contenido no compatible.",
|
|
1617
|
+
"chat.surfaceExampleLink": "Leer la documentación",
|
|
1618
|
+
"chat.surfaceUnsupported": "Este contenido no se puede mostrar",
|
|
1619
|
+
"chat.surfaceAgentContent": "Contenido del agente",
|
|
1620
|
+
"chat.typing": "{author} está escribiendo",
|
|
1621
|
+
"chat.feedback": "Valoración de la respuesta",
|
|
1622
|
+
"chat.feedbackTitle": "¿Qué ha fallado?",
|
|
1623
|
+
"chat.feedbackReason": "Motivo",
|
|
1624
|
+
"chat.feedbackComment": "Comentario (opcional)",
|
|
1625
|
+
"chat.feedbackPlaceholder": "Cuéntanos más…",
|
|
1626
|
+
"chat.feedbackSubmit": "Enviar valoración",
|
|
1627
|
+
"chat.feedbackThanks": "Gracias por tu valoración",
|
|
1628
|
+
"chat.feedbackCleared": "Valoración eliminada",
|
|
1629
|
+
"chat.reasonInaccurate": "Incorrecta",
|
|
1630
|
+
"chat.reasonUnhelpful": "No es útil",
|
|
1631
|
+
"chat.reasonIncomplete": "Incompleta",
|
|
1632
|
+
"chat.reasonUnsafe": "Dañina o insegura",
|
|
1633
|
+
"chat.reasonOther": "Otro",
|
|
1634
|
+
"chat.regenerate": "Regenerar",
|
|
1635
|
+
"chat.uploading": "Subiendo {name}",
|
|
1636
|
+
"chat.uploadFailed": "Error al subir",
|
|
1637
|
+
"chat.retryUpload": "Reintentar la subida de {name}",
|
|
1638
|
+
"chat.dropFiles": "Suelta archivos para adjuntarlos",
|
|
1639
|
+
"chat.fileTooLarge": "{name} supera {max}",
|
|
1640
|
+
"chat.fileTypeNotAllowed": "{name} no es un tipo de archivo permitido",
|
|
1641
|
+
"chat.tooManyFiles": "Puedes adjuntar hasta {max} archivos",
|
|
1642
|
+
"chat.model": "Modelo",
|
|
1643
|
+
"chat.selectModel": "Selecciona un modelo",
|
|
1644
|
+
"chat.capabilityVision": "Visión",
|
|
1645
|
+
"chat.capabilityTools": "Herramientas",
|
|
1646
|
+
"chat.capabilityReasoning": "Razonamiento",
|
|
1647
|
+
"chat.capabilityFiles": "Archivos",
|
|
1648
|
+
"chat.capabilityWeb": "Búsqueda web",
|
|
1649
|
+
"chat.capabilityAudio": "Audio",
|
|
1650
|
+
"chat.contextWindow": "Contexto de {size}",
|
|
1651
|
+
"chat.unavailable": "No disponible",
|
|
1652
|
+
"credentialDisclosure.title": "Secreto de la credencial",
|
|
1653
|
+
"credentialDisclosure.description": "Copia este valor y guárdalo de forma segura.",
|
|
1654
|
+
"credentialDisclosure.credentialId": "ID de credencial",
|
|
1655
|
+
"credentialDisclosure.expiry": "Caduca",
|
|
1656
|
+
"credentialDisclosure.secret": "Secreto",
|
|
1657
|
+
"credentialDisclosure.show": "Mostrar secreto",
|
|
1658
|
+
"credentialDisclosure.hide": "Ocultar secreto",
|
|
1659
|
+
"credentialDisclosure.copy": "Copiar secreto",
|
|
1660
|
+
"credentialDisclosure.copied": "Copiado",
|
|
1661
|
+
"credentialDisclosure.success": "Secreto copiado al portapapeles",
|
|
1662
|
+
"credentialDisclosure.failure": "No se pudo copiar. Selecciona y copia el valor manualmente.",
|
|
1663
|
+
"credentialDisclosure.close": "Cerrar",
|
|
1664
|
+
"credentialDisclosure.warningTitle": "Guarda este nuevo secreto",
|
|
1665
|
+
"credentialDisclosure.warningText": "Este valor reemplaza el secreto anterior. Cópialo ahora; se muestra una sola vez.",
|
|
1666
|
+
"splitButton.more": "Más opciones",
|
|
1667
|
+
"secret.show": "Mostrar secreto",
|
|
1668
|
+
"secret.hide": "Ocultar secreto",
|
|
1669
|
+
"secret.copy": "Copiar secreto",
|
|
1670
|
+
"secret.copied": "Secreto copiado al portapapeles",
|
|
1671
|
+
"secret.hidden": "Valor oculto",
|
|
1672
|
+
"secret.rotate": "Rotar",
|
|
1673
|
+
"secret.rotateTitle": "¿Rotar este secreto?",
|
|
1674
|
+
"secret.rotateDescription": "Se genera un valor nuevo y el actual deja de funcionar. Lo que aún lo use fallará hasta que se actualice.",
|
|
1675
|
+
"secret.rotateConfirm": "Rotar secreto",
|
|
1676
|
+
"secret.rotated": "Secreto rotado",
|
|
1677
|
+
"secret.rotateFailed": "No se pudo rotar",
|
|
1678
|
+
"secret.created": "Creado",
|
|
1679
|
+
"secret.lastUsed": "Último uso",
|
|
1680
|
+
"secret.neverUsed": "Nunca usado",
|
|
1681
|
+
"kv.key": "Clave",
|
|
1682
|
+
"kv.value": "Valor",
|
|
1683
|
+
"kv.keyRow": "Clave, fila {row}",
|
|
1684
|
+
"kv.valueRow": "Valor, fila {row}",
|
|
1685
|
+
"kv.secretRow": "Valor secreto, fila {row}",
|
|
1686
|
+
"kv.removeRow": "Quitar fila {row}",
|
|
1687
|
+
"kv.rowRemoved": "Fila quitada",
|
|
1688
|
+
"kv.add": "Añadir variable",
|
|
1689
|
+
"kv.empty": "Aún no hay variables.",
|
|
1690
|
+
"kv.paste": "Pegar .env",
|
|
1691
|
+
"kv.pasteLabel": "Contenido .env",
|
|
1692
|
+
"kv.pasteHint": "Una CLAVE=valor por línea. Las líneas que empiezan por # se ignoran; las claves existentes se actualizan.",
|
|
1693
|
+
"kv.import": "Añadir variables",
|
|
1694
|
+
"kv.imported": "{count, plural, one {# variable importada} other {# variables importadas}}",
|
|
1695
|
+
"kv.copyEnv": "Copiar como .env",
|
|
1696
|
+
"kv.errDuplicate": "Clave duplicada",
|
|
1697
|
+
"kv.errPattern": "Usa letras, dígitos y guiones bajos, sin empezar por un dígito",
|
|
1698
|
+
"kv.errKeyRequired": "La clave es obligatoria",
|
|
1699
|
+
"kv.errValueRequired": "El valor es obligatorio",
|
|
1700
|
+
"diff.label": "Diferencias",
|
|
1701
|
+
"diff.view": "Vista de diferencias",
|
|
1702
|
+
"diff.split": "Dividida",
|
|
1703
|
+
"diff.unified": "Unificada",
|
|
1704
|
+
"diff.addedLine": "Línea añadida {line}:",
|
|
1705
|
+
"diff.removedLine": "Línea eliminada {line}:",
|
|
1706
|
+
"diff.additions": "{count, plural, one {# adición} other {# adiciones}}",
|
|
1707
|
+
"diff.deletions": "{count, plural, one {# eliminación} other {# eliminaciones}}",
|
|
1708
|
+
"diff.expand": "{count, plural, one {Mostrar # línea} other {Mostrar # líneas}}",
|
|
1709
|
+
"diff.noChanges": "Sin cambios",
|
|
1710
|
+
"diff.old": "Anterior",
|
|
1711
|
+
"diff.new": "Nuevo",
|
|
1712
|
+
"combobox.create": "Crear «{label}»",
|
|
1713
|
+
"combobox.loadFailed": "No se pudieron cargar las opciones.",
|
|
1714
|
+
"terminal.label": "Salida de terminal",
|
|
1715
|
+
"terminal.toolbar": "Acciones de terminal",
|
|
1716
|
+
"terminal.jumpToLatest": "Ir a lo último",
|
|
1717
|
+
"terminal.newLines": "{count, plural, one {# línea nueva} other {# líneas nuevas}}",
|
|
1718
|
+
"terminal.wrap": "Ajustar líneas",
|
|
1719
|
+
"terminal.copyAll": "Copiar todo",
|
|
1720
|
+
"terminal.search": "Buscar en la salida",
|
|
1721
|
+
"terminal.matches": "{current} de {total}",
|
|
1722
|
+
"terminal.noMatches": "Sin coincidencias",
|
|
1723
|
+
"terminal.nextMatch": "Coincidencia siguiente",
|
|
1724
|
+
"terminal.previousMatch": "Coincidencia anterior",
|
|
1725
|
+
"dateField.label": "Fecha",
|
|
1726
|
+
"dateField.year": "Año",
|
|
1727
|
+
"dateField.month": "Mes",
|
|
1728
|
+
"dateField.day": "Día",
|
|
1729
|
+
"dateField.start": "Fecha de inicio",
|
|
1730
|
+
"dateField.end": "Fecha de fin",
|
|
1731
|
+
"dateField.segmentInRange": "{range}, {segment}",
|
|
1732
|
+
"timePicker.label": "Hora",
|
|
1733
|
+
"timePicker.hours": "Horas",
|
|
1734
|
+
"timePicker.minutes": "Minutos",
|
|
1735
|
+
"timePicker.seconds": "Segundos",
|
|
1736
|
+
"timePicker.period": "a. m./p. m.",
|
|
1737
|
+
"timePicker.empty": "Vacío",
|
|
1738
|
+
"datePicker.time": "Hora",
|
|
1739
|
+
"datePicker.done": "Listo",
|
|
1740
|
+
"datePicker.dateTimePlaceholder": "Elige fecha y hora",
|
|
1741
|
+
"timeRange.placeholder": "Elige un intervalo",
|
|
1742
|
+
"timeRange.choose": "Elegir intervalo de tiempo",
|
|
1743
|
+
"timeRange.presets": "Intervalos rápidos",
|
|
1744
|
+
"timeRange.lastMinutes": "{count, plural, one {Último minuto} other {Últimos # minutos}}",
|
|
1745
|
+
"timeRange.lastHours": "{count, plural, one {Última hora} other {Últimas # horas}}",
|
|
1746
|
+
"timeRange.lastDays": "{count, plural, one {Último día} other {Últimos # días}}",
|
|
1747
|
+
"timeRange.custom": "Intervalo personalizado",
|
|
1748
|
+
"timeRange.mode": "Tipo de intervalo",
|
|
1749
|
+
"timeRange.relative": "Relativo",
|
|
1750
|
+
"timeRange.absolute": "Absoluto",
|
|
1751
|
+
"timeRange.last": "Últimos",
|
|
1752
|
+
"timeRange.amount": "Cantidad",
|
|
1753
|
+
"timeRange.unit": "Unidad",
|
|
1754
|
+
"timeRange.minutes": "Minutos",
|
|
1755
|
+
"timeRange.hours": "Horas",
|
|
1756
|
+
"timeRange.days": "Días",
|
|
1757
|
+
"timeRange.start": "Inicio",
|
|
1758
|
+
"timeRange.end": "Fin",
|
|
1759
|
+
"timeRange.startTime": "Hora de inicio",
|
|
1760
|
+
"timeRange.endTime": "Hora de fin",
|
|
1761
|
+
"timeRange.apply": "Aplicar",
|
|
1762
|
+
"timeRange.endBeforeStart": "El fin debe ser posterior al inicio.",
|
|
1763
|
+
"timeRange.incomplete": "Elige un inicio y un fin.",
|
|
1764
|
+
"permissionMatrix.label": "Permisos",
|
|
1765
|
+
"permissionMatrix.permission": "Permiso",
|
|
1766
|
+
"permissionMatrix.allowed": "Permitido",
|
|
1767
|
+
"permissionMatrix.denied": "Denegado",
|
|
1768
|
+
"permissionMatrix.inherited": "Heredado",
|
|
1769
|
+
"permissionMatrix.inheritedAs": "Heredado ({state})",
|
|
1770
|
+
"permissionMatrix.cell": "{permission}, {role}: {state}",
|
|
1771
|
+
"permissionMatrix.readOnly": "Solo lectura",
|
|
1772
|
+
"permissionMatrix.readOnlyRole": "Los permisos de {role} no se pueden cambiar.",
|
|
1773
|
+
"queryBuilder.label": "Consulta",
|
|
1774
|
+
"queryBuilder.group": "Grupo de condiciones",
|
|
1775
|
+
"queryBuilder.combinator": "Combinar condiciones con",
|
|
1776
|
+
"queryBuilder.and": "Y",
|
|
1777
|
+
"queryBuilder.or": "O",
|
|
1778
|
+
"queryBuilder.condition": "Condición {index}",
|
|
1779
|
+
"queryBuilder.field": "Campo",
|
|
1780
|
+
"queryBuilder.operator": "Operador",
|
|
1781
|
+
"queryBuilder.value": "Valor",
|
|
1782
|
+
"queryBuilder.valueFrom": "Desde",
|
|
1783
|
+
"queryBuilder.valueTo": "Hasta",
|
|
1784
|
+
"queryBuilder.rangeInverted": "«Desde» no puede ser posterior a «Hasta».",
|
|
1785
|
+
"queryBuilder.addCondition": "Añadir condición",
|
|
1786
|
+
"queryBuilder.addGroup": "Añadir grupo",
|
|
1787
|
+
"queryBuilder.removeCondition": "Quitar condición {index}",
|
|
1788
|
+
"queryBuilder.removeGroup": "Quitar grupo",
|
|
1789
|
+
"queryBuilder.empty": "Sin condiciones: coinciden todos los registros.",
|
|
1790
|
+
"queryBuilder.true": "verdadero",
|
|
1791
|
+
"queryBuilder.false": "falso",
|
|
1792
|
+
"queryBuilder.between": "{from} y {to}",
|
|
1793
|
+
"queryBuilder.op.eq": "es",
|
|
1794
|
+
"queryBuilder.op.neq": "no es",
|
|
1795
|
+
"queryBuilder.op.contains": "contiene",
|
|
1796
|
+
"queryBuilder.op.notContains": "no contiene",
|
|
1797
|
+
"queryBuilder.op.startsWith": "empieza por",
|
|
1798
|
+
"queryBuilder.op.endsWith": "termina en",
|
|
1799
|
+
"queryBuilder.op.gt": "mayor que",
|
|
1800
|
+
"queryBuilder.op.gte": "al menos",
|
|
1801
|
+
"queryBuilder.op.lt": "menor que",
|
|
1802
|
+
"queryBuilder.op.lte": "como máximo",
|
|
1803
|
+
"queryBuilder.op.between": "está entre",
|
|
1804
|
+
"queryBuilder.op.in": "es alguno de",
|
|
1805
|
+
"queryBuilder.op.notIn": "no es ninguno de",
|
|
1806
|
+
"queryBuilder.op.before": "es anterior a",
|
|
1807
|
+
"queryBuilder.op.after": "es posterior a",
|
|
1808
|
+
"queryBuilder.op.isEmpty": "está vacío",
|
|
1809
|
+
"queryBuilder.op.isNotEmpty": "no está vacío",
|
|
1810
|
+
"queryBuilder.op.isTrue": "es verdadero",
|
|
1811
|
+
"queryBuilder.op.isFalse": "es falso",
|
|
1812
|
+
"scheduleInput.label": "Programación",
|
|
1813
|
+
"scheduleInput.frequency": "Frecuencia",
|
|
1814
|
+
"scheduleInput.hourly": "Cada hora",
|
|
1815
|
+
"scheduleInput.daily": "Diario",
|
|
1816
|
+
"scheduleInput.weekly": "Semanal",
|
|
1817
|
+
"scheduleInput.monthly": "Mensual",
|
|
1818
|
+
"scheduleInput.custom": "Personalizado",
|
|
1819
|
+
"scheduleInput.atMinute": "En el minuto",
|
|
1820
|
+
"scheduleInput.atTime": "A las",
|
|
1821
|
+
"scheduleInput.onDays": "Los días",
|
|
1822
|
+
"scheduleInput.dayOfMonth": "Día del mes",
|
|
1823
|
+
"scheduleInput.expression": "Expresión cron",
|
|
1824
|
+
"scheduleInput.expressionHint": "minuto hora día-del-mes mes día-de-la-semana",
|
|
1825
|
+
"scheduleInput.nextRuns": "Próximas ejecuciones ({timeZone})",
|
|
1826
|
+
"scheduleInput.noRuns": "Sin ejecuciones próximas.",
|
|
1827
|
+
"scheduleInput.localTime": "hora local",
|
|
1828
|
+
"cron.error.empty": "Escribe una expresión cron.",
|
|
1829
|
+
"cron.error.fieldCount": "Se esperaban 5 campos (minuto hora día mes día-semana); hay {count}.",
|
|
1830
|
+
"cron.error.invalid": "Valor de {field} no válido: «{value}».",
|
|
1831
|
+
"cron.error.range": "El valor de {field} «{value}» está fuera de {min}–{max}.",
|
|
1832
|
+
"cron.error.step": "Paso «{value}» no válido en {field}.",
|
|
1833
|
+
"cron.error.macro": "Macro «{value}» no admitida.",
|
|
1834
|
+
"cron.field.minute": "minuto",
|
|
1835
|
+
"cron.field.hour": "hora",
|
|
1836
|
+
"cron.field.dayOfMonth": "día del mes",
|
|
1837
|
+
"cron.field.month": "mes",
|
|
1838
|
+
"cron.field.dayOfWeek": "día de la semana",
|
|
1839
|
+
"cron.everyMinute": "Cada minuto",
|
|
1840
|
+
"cron.everyNMinutes": "Cada {count, plural, one {minuto} other {# minutos}}",
|
|
1841
|
+
"cron.everyHour": "Cada hora",
|
|
1842
|
+
"cron.everyHourAt": "Cada hora en {count, plural, one {el minuto} other {los minutos}} {minutes}",
|
|
1843
|
+
"cron.everyNHours": "Cada {count, plural, one {hora} other {# horas}}",
|
|
1844
|
+
"cron.everyNHoursAt": "Cada {count, plural, one {hora} other {# horas}} en el minuto {minute}",
|
|
1845
|
+
"cron.minutesPast": "En {count, plural, one {el minuto} other {los minutos}} {minutes} de cada hora",
|
|
1846
|
+
"cron.at": "A las {times}",
|
|
1847
|
+
"cron.dailyAt": "Todos los días a las {times}",
|
|
1848
|
+
"cron.weekdaysAt": "De lunes a viernes a las {times}",
|
|
1849
|
+
"cron.weeklyAt": "Cada {days} a las {times}",
|
|
1850
|
+
"cron.monthlyAt": "Cada mes, {count, plural, one {el día} other {los días}} {days}, a las {times}",
|
|
1851
|
+
"cron.betweenHours": "entre las {start} y las {end}",
|
|
1852
|
+
"cron.duringHours": "durante {count, plural, one {la hora} other {las horas}} {hours}",
|
|
1853
|
+
"cron.onWeekdays": "de lunes a viernes",
|
|
1854
|
+
"cron.onDays": "los {days}",
|
|
1855
|
+
"cron.onDaysOfMonth": "{count, plural, one {el día} other {los días}} {days} del mes",
|
|
1856
|
+
"cron.or": "{a} o {b}",
|
|
1857
|
+
"cron.inMonths": "en {months}",
|
|
1858
|
+
"cron.join": "{base}, {part}"
|
|
1859
|
+
};
|
|
1860
|
+
//#endregion
|
|
1861
|
+
//#region src/i18n/messages/index.ts
|
|
1862
|
+
/** Built-in catalogs, by language subtag. */
|
|
1863
|
+
const catalogs = {
|
|
1864
|
+
en,
|
|
1865
|
+
es
|
|
1866
|
+
};
|
|
1867
|
+
//#endregion
|
|
1868
|
+
//#region src/i18n/I18nProvider.tsx
|
|
1869
|
+
const I18nContext = createContext(null);
|
|
1870
|
+
const DEFAULT_I18N = {
|
|
1871
|
+
locale: "en",
|
|
1872
|
+
dir: "ltr",
|
|
1873
|
+
...createFormatters("en", en)
|
|
1874
|
+
};
|
|
1875
|
+
/** The built-in catalog for a locale's language, falling back to English. */
|
|
1876
|
+
function builtInMessages(locale) {
|
|
1877
|
+
const lang = locale.split(/[-_]/)[0]?.toLowerCase() ?? "";
|
|
1878
|
+
return catalogs[lang] ?? en;
|
|
1879
|
+
}
|
|
1880
|
+
/**
|
|
1881
|
+
* Locale, messages and direction for every kit component below it. Also sets Base UI's
|
|
1882
|
+
* direction, so arrow-key navigation (Tabs, Menu, Slider, Toolbar…) follows RTL.
|
|
1883
|
+
*/
|
|
1884
|
+
function I18nProvider({ locale, messages, dir, applyTo = "wrapper", children }) {
|
|
1885
|
+
const direction = dir ?? localeDirection(locale);
|
|
1886
|
+
const value = useMemo(() => {
|
|
1887
|
+
const merged = {
|
|
1888
|
+
...builtInMessages(locale),
|
|
1889
|
+
...messages
|
|
1890
|
+
};
|
|
1891
|
+
return {
|
|
1892
|
+
locale,
|
|
1893
|
+
dir: direction,
|
|
1894
|
+
...createFormatters(locale, merged)
|
|
1895
|
+
};
|
|
1896
|
+
}, [
|
|
1897
|
+
locale,
|
|
1898
|
+
messages,
|
|
1899
|
+
direction
|
|
1900
|
+
]);
|
|
1901
|
+
useEffect(() => {
|
|
1902
|
+
if (applyTo !== "document") return;
|
|
1903
|
+
const html = document.documentElement;
|
|
1904
|
+
const prev = {
|
|
1905
|
+
dir: html.getAttribute("dir"),
|
|
1906
|
+
lang: html.getAttribute("lang")
|
|
1907
|
+
};
|
|
1908
|
+
html.setAttribute("dir", direction);
|
|
1909
|
+
html.setAttribute("lang", locale);
|
|
1910
|
+
return () => {
|
|
1911
|
+
if (prev.dir === null) html.removeAttribute("dir");
|
|
1912
|
+
else html.setAttribute("dir", prev.dir);
|
|
1913
|
+
if (prev.lang === null) html.removeAttribute("lang");
|
|
1914
|
+
else html.setAttribute("lang", prev.lang);
|
|
1915
|
+
};
|
|
1916
|
+
}, [
|
|
1917
|
+
applyTo,
|
|
1918
|
+
direction,
|
|
1919
|
+
locale
|
|
1920
|
+
]);
|
|
1921
|
+
const content = /* @__PURE__ */ jsx(DirectionProvider, {
|
|
1922
|
+
direction,
|
|
1923
|
+
children
|
|
1924
|
+
});
|
|
1925
|
+
return /* @__PURE__ */ jsx(I18nContext.Provider, {
|
|
1926
|
+
value,
|
|
1927
|
+
children: applyTo === "wrapper" ? /* @__PURE__ */ jsx("div", {
|
|
1928
|
+
dir: direction,
|
|
1929
|
+
lang: locale,
|
|
1930
|
+
className: "contents",
|
|
1931
|
+
children: content
|
|
1932
|
+
}) : content
|
|
1933
|
+
});
|
|
1934
|
+
}
|
|
1935
|
+
/** Translator, Intl formatters, locale and direction. Outside an I18nProvider: English, LTR. */
|
|
1936
|
+
function useI18n() {
|
|
1937
|
+
return useContext(I18nContext) ?? DEFAULT_I18N;
|
|
1938
|
+
}
|
|
1939
|
+
/** The provider's value, or null outside one (lets components keep runtime-locale defaults). */
|
|
1940
|
+
function useOptionalI18n() {
|
|
1941
|
+
return useContext(I18nContext);
|
|
1942
|
+
}
|
|
1943
|
+
/**
|
|
1944
|
+
* `dir` for portalled overlays: rendered outside the provider's wrapper, they carry the
|
|
1945
|
+
* direction themselves. Undefined outside a provider, so the document's direction applies.
|
|
1946
|
+
*/
|
|
1947
|
+
function usePortalDir() {
|
|
1948
|
+
return useContext(I18nContext)?.dir;
|
|
1949
|
+
}
|
|
1950
|
+
//#endregion
|
|
1951
|
+
//#region src/density/density-context.ts
|
|
1952
|
+
const DensityContext = createContext(null);
|
|
1953
|
+
/** The nearest DensityProvider's density, or `comfortable` outside any provider. */
|
|
1954
|
+
function useDensity() {
|
|
1955
|
+
return useContext(DensityContext) ?? "comfortable";
|
|
1956
|
+
}
|
|
1957
|
+
//#endregion
|
|
1958
|
+
//#region src/utils/rtl.ts
|
|
1959
|
+
/** Mirrors a directional glyph (chevron, arrow) in right-to-left text. */
|
|
1960
|
+
const RTL_FLIP = "rtl:-scale-x-100";
|
|
1961
|
+
const DIRECTIONAL = /^(?:Chevrons?(?:Left|Right)|Arrow(?:Left|Right)\w*|Move(?:Left|Right)|Panel(?:Left|Right)\w*|Undo\d?|Redo\d?|Corner\w+(?:Left|Right)|Indent\w*|Outdent\w*)$/;
|
|
1962
|
+
/**
|
|
1963
|
+
* True for lucide icons that point along the inline axis (ChevronLeft, ArrowRight,
|
|
1964
|
+
* PanelLeftClose…), which mirror under RTL. Detected from the icon's displayName.
|
|
1965
|
+
*/
|
|
1966
|
+
function isDirectionalIcon(icon) {
|
|
1967
|
+
const name = icon?.displayName;
|
|
1968
|
+
return typeof name === "string" && DIRECTIONAL.test(name);
|
|
1969
|
+
}
|
|
1970
|
+
/** `RTL_FLIP` for a directional icon, else undefined. */
|
|
1971
|
+
const rtlIconClass = (icon) => isDirectionalIcon(icon) ? RTL_FLIP : void 0;
|
|
1972
|
+
//#endregion
|
|
1973
|
+
//#region src/components/Spinner/Spinner.tsx
|
|
1974
|
+
/** Indeterminate loading indicator; inherits currentColor. */
|
|
1975
|
+
function Spinner({ size = 16, label, className, ...props }) {
|
|
1976
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
1977
|
+
width: size,
|
|
1978
|
+
height: size,
|
|
1979
|
+
viewBox: "0 0 24 24",
|
|
1980
|
+
className: cn("block shrink-0 animate-spin motion-reduce:animate-[spin_1.6s_linear_infinite]", className),
|
|
1981
|
+
role: label ? "status" : void 0,
|
|
1982
|
+
"aria-label": label,
|
|
1983
|
+
"aria-hidden": label ? void 0 : true,
|
|
1984
|
+
...props,
|
|
1985
|
+
children: [/* @__PURE__ */ jsx("circle", {
|
|
1986
|
+
cx: "12",
|
|
1987
|
+
cy: "12",
|
|
1988
|
+
r: "9",
|
|
1989
|
+
fill: "none",
|
|
1990
|
+
stroke: "currentColor",
|
|
1991
|
+
strokeWidth: "2.6",
|
|
1992
|
+
strokeOpacity: "0.25"
|
|
1993
|
+
}), /* @__PURE__ */ jsx("path", {
|
|
1994
|
+
d: "M21 12a9 9 0 0 0-9-9",
|
|
1995
|
+
fill: "none",
|
|
1996
|
+
stroke: "currentColor",
|
|
1997
|
+
strokeWidth: "2.6",
|
|
1998
|
+
strokeLinecap: "round"
|
|
1999
|
+
})]
|
|
2000
|
+
});
|
|
2001
|
+
}
|
|
2002
|
+
//#endregion
|
|
2003
|
+
//#region src/components/Button/button.variants.ts
|
|
2004
|
+
const buttonVariants = tv({
|
|
2005
|
+
base: [
|
|
2006
|
+
"inline-flex shrink-0 items-center justify-center font-semibold whitespace-nowrap transition-colors select-none",
|
|
2007
|
+
"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring",
|
|
2008
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
|
|
2009
|
+
],
|
|
2010
|
+
variants: {
|
|
2011
|
+
variant: {
|
|
2012
|
+
primary: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90",
|
|
2013
|
+
secondary: "border border-border bg-card text-foreground shadow-sm hover:bg-secondary/70",
|
|
2014
|
+
soft: "bg-primary/14 text-primary-chip-text hover:bg-primary/20",
|
|
2015
|
+
ghost: "text-muted-foreground hover:bg-secondary/70 hover:text-foreground",
|
|
2016
|
+
destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90"
|
|
2017
|
+
},
|
|
2018
|
+
size: {
|
|
2019
|
+
/** Follows `data-density` (comfortable = md). */
|
|
2020
|
+
auto: "h-control gap-1.5 px-control text-[13px] rounded-lg",
|
|
2021
|
+
sm: "h-8 gap-1.5 px-3 text-[12.5px] rounded-md",
|
|
2022
|
+
md: "h-9 gap-1.5 px-3.5 text-[13px] rounded-lg",
|
|
2023
|
+
lg: "h-11 gap-2 px-5 text-[14.5px] rounded-lg"
|
|
2024
|
+
},
|
|
2025
|
+
iconOnly: { true: "px-0" }
|
|
2026
|
+
},
|
|
2027
|
+
compoundVariants: [
|
|
2028
|
+
{
|
|
2029
|
+
iconOnly: true,
|
|
2030
|
+
size: "auto",
|
|
2031
|
+
class: "size-control"
|
|
2032
|
+
},
|
|
2033
|
+
{
|
|
2034
|
+
iconOnly: true,
|
|
2035
|
+
size: "sm",
|
|
2036
|
+
class: "size-8"
|
|
2037
|
+
},
|
|
2038
|
+
{
|
|
2039
|
+
iconOnly: true,
|
|
2040
|
+
size: "md",
|
|
2041
|
+
class: "size-9"
|
|
2042
|
+
},
|
|
2043
|
+
{
|
|
2044
|
+
iconOnly: true,
|
|
2045
|
+
size: "lg",
|
|
2046
|
+
class: "size-11"
|
|
2047
|
+
}
|
|
2048
|
+
],
|
|
2049
|
+
defaultVariants: {
|
|
2050
|
+
variant: "primary",
|
|
2051
|
+
size: "auto",
|
|
2052
|
+
iconOnly: false
|
|
2053
|
+
}
|
|
2054
|
+
});
|
|
2055
|
+
/** Icon size (px) per button size. */
|
|
2056
|
+
const BUTTON_ICON_SIZE = {
|
|
2057
|
+
sm: 14,
|
|
2058
|
+
md: 15,
|
|
2059
|
+
lg: 17
|
|
2060
|
+
};
|
|
2061
|
+
/** Icon size for a button size, resolving `auto` through the density. */
|
|
2062
|
+
function buttonIconSize(size, density) {
|
|
2063
|
+
return BUTTON_ICON_SIZE[size === "auto" ? density === "compact" ? "sm" : "md" : size];
|
|
2064
|
+
}
|
|
2065
|
+
//#endregion
|
|
2066
|
+
//#region src/components/Button/Button.tsx
|
|
2067
|
+
/** Primary action control. Renders a native <button> unless `render` swaps the element. */
|
|
2068
|
+
function Button$1({ variant, size = "auto", iconOnly, icon: LeadingIcon, trailingIcon: TrailingIcon, loading = false, disabled, className, children, type = "button", ...props }) {
|
|
2069
|
+
const px = buttonIconSize(size, useDensity());
|
|
2070
|
+
return /* @__PURE__ */ jsxs(Button, {
|
|
2071
|
+
type,
|
|
2072
|
+
disabled: disabled || loading,
|
|
2073
|
+
focusableWhenDisabled: loading,
|
|
2074
|
+
"aria-busy": loading || void 0,
|
|
2075
|
+
className: cn(buttonVariants({
|
|
2076
|
+
variant,
|
|
2077
|
+
size,
|
|
2078
|
+
iconOnly
|
|
2079
|
+
}), className),
|
|
2080
|
+
...props,
|
|
2081
|
+
children: [
|
|
2082
|
+
loading ? /* @__PURE__ */ jsx(Spinner, { size: px }) : LeadingIcon && /* @__PURE__ */ jsx(LeadingIcon, {
|
|
2083
|
+
size: px,
|
|
2084
|
+
"aria-hidden": true,
|
|
2085
|
+
className: rtlIconClass(LeadingIcon)
|
|
2086
|
+
}),
|
|
2087
|
+
children,
|
|
2088
|
+
!loading && TrailingIcon && /* @__PURE__ */ jsx(TrailingIcon, {
|
|
2089
|
+
size: px,
|
|
2090
|
+
"aria-hidden": true,
|
|
2091
|
+
className: rtlIconClass(TrailingIcon)
|
|
2092
|
+
})
|
|
2093
|
+
]
|
|
2094
|
+
});
|
|
2095
|
+
}
|
|
2096
|
+
/** Square, icon-only button. `label` becomes its accessible name. */
|
|
2097
|
+
function IconButton({ icon: IconCmp, label, size = "auto", variant = "ghost", loading, className, ...props }) {
|
|
2098
|
+
const px = buttonIconSize(size, useDensity());
|
|
2099
|
+
return /* @__PURE__ */ jsx(Button$1, {
|
|
2100
|
+
"aria-label": label,
|
|
2101
|
+
size,
|
|
2102
|
+
variant,
|
|
2103
|
+
iconOnly: true,
|
|
2104
|
+
loading,
|
|
2105
|
+
className,
|
|
2106
|
+
...props,
|
|
2107
|
+
children: !loading && /* @__PURE__ */ jsx(IconCmp, {
|
|
2108
|
+
size: px,
|
|
2109
|
+
"aria-hidden": true,
|
|
2110
|
+
className: rtlIconClass(IconCmp)
|
|
2111
|
+
})
|
|
2112
|
+
});
|
|
2113
|
+
}
|
|
2114
|
+
//#endregion
|
|
2115
|
+
//#region src/components/LiveAnnouncer/live-announcer.variants.ts
|
|
2116
|
+
/** The announcer region is screen-reader only; it never takes space or colour. */
|
|
2117
|
+
const liveAnnouncerVariants = tv({ base: "sr-only" });
|
|
2118
|
+
//#endregion
|
|
2119
|
+
//#region src/components/LiveAnnouncer/LiveAnnouncer.tsx
|
|
2120
|
+
const AnnounceContext = createContext(null);
|
|
2121
|
+
const noop = () => {};
|
|
2122
|
+
/**
|
|
2123
|
+
* Screen-reader announcements for interactions that have no visible text change (drag and drop,
|
|
2124
|
+
* reorder, background saves). Renders polite and assertive `aria-live` regions and gives its
|
|
2125
|
+
* subtree `useAnnounce()`. Repeating the same message re-announces it.
|
|
2126
|
+
*/
|
|
2127
|
+
function LiveAnnouncer({ children, className }) {
|
|
2128
|
+
const [polite, setPolite] = useState("");
|
|
2129
|
+
const [assertive, setAssertive] = useState("");
|
|
2130
|
+
const announce = useCallback((message, politeness = "polite") => {
|
|
2131
|
+
const next = (prev) => prev === message ? `${message}\u00A0` : message;
|
|
2132
|
+
if (politeness === "assertive") setAssertive(next);
|
|
2133
|
+
else setPolite(next);
|
|
2134
|
+
}, []);
|
|
2135
|
+
const region = cn(liveAnnouncerVariants(), className);
|
|
2136
|
+
return /* @__PURE__ */ jsxs(AnnounceContext.Provider, {
|
|
2137
|
+
value: announce,
|
|
2138
|
+
children: [
|
|
2139
|
+
children,
|
|
2140
|
+
/* @__PURE__ */ jsx("div", {
|
|
2141
|
+
role: "status",
|
|
2142
|
+
"aria-live": "polite",
|
|
2143
|
+
"aria-atomic": "true",
|
|
2144
|
+
className: region,
|
|
2145
|
+
"data-live-announcer": "polite",
|
|
2146
|
+
children: polite
|
|
2147
|
+
}),
|
|
2148
|
+
/* @__PURE__ */ jsx("div", {
|
|
2149
|
+
"aria-live": "assertive",
|
|
2150
|
+
"aria-atomic": "true",
|
|
2151
|
+
className: region,
|
|
2152
|
+
"data-live-announcer": "assertive",
|
|
2153
|
+
children: assertive
|
|
2154
|
+
})
|
|
2155
|
+
]
|
|
2156
|
+
});
|
|
2157
|
+
}
|
|
2158
|
+
/**
|
|
2159
|
+
* The `announce(message, politeness?)` function of the nearest LiveAnnouncer. Outside one it is
|
|
2160
|
+
* a no-op, so components can call it unconditionally.
|
|
2161
|
+
*/
|
|
2162
|
+
function useAnnounce() {
|
|
2163
|
+
return useContext(AnnounceContext) ?? noop;
|
|
2164
|
+
}
|
|
2165
|
+
/** True when a LiveAnnouncer is already above this component (so it need not render its own). */
|
|
2166
|
+
function useHasLiveAnnouncer() {
|
|
2167
|
+
return useContext(AnnounceContext) !== null;
|
|
2168
|
+
}
|
|
2169
|
+
//#endregion
|
|
2170
|
+
//#region src/components/Field/field.variants.ts
|
|
2171
|
+
const fieldVariants = tv({ slots: {
|
|
2172
|
+
root: "flex min-w-0 flex-col gap-2 data-disabled:opacity-70",
|
|
2173
|
+
label: "inline-flex items-center gap-0.5 text-[13px] font-medium text-foreground data-disabled:cursor-not-allowed",
|
|
2174
|
+
required: "text-destructive-text",
|
|
2175
|
+
description: "text-[12px] leading-5 text-muted-foreground text-pretty",
|
|
2176
|
+
error: "flex items-start gap-1.5 text-[12px] leading-5 text-destructive-text",
|
|
2177
|
+
item: "flex",
|
|
2178
|
+
fieldset: "m-0 flex min-w-0 flex-col gap-3 border-0 p-0 data-disabled:opacity-70",
|
|
2179
|
+
legend: "p-0 text-[13px] font-semibold text-foreground",
|
|
2180
|
+
legendDescription: "-mt-2 text-[13px] leading-6 text-muted-foreground text-pretty"
|
|
2181
|
+
} });
|
|
2182
|
+
//#endregion
|
|
2183
|
+
//#region src/components/Field/Field.tsx
|
|
2184
|
+
const s = fieldVariants();
|
|
2185
|
+
/**
|
|
2186
|
+
* Groups a label, a control, a description and an error. Base UI wires the ids: the label
|
|
2187
|
+
* targets the control, and the description and error are linked with aria-describedby.
|
|
2188
|
+
* Pass `invalid` to drive the error from outside (e.g. a form library).
|
|
2189
|
+
*/
|
|
2190
|
+
function Field$1({ className, ...props }) {
|
|
2191
|
+
return /* @__PURE__ */ jsx(Field.Root, {
|
|
2192
|
+
className: cn(s.root(), className),
|
|
2193
|
+
...props
|
|
2194
|
+
});
|
|
2195
|
+
}
|
|
2196
|
+
/** Visible label; clicking it focuses the field's control. */
|
|
2197
|
+
function FieldLabel({ className, required, children, ...props }) {
|
|
2198
|
+
return /* @__PURE__ */ jsxs(Field.Label, {
|
|
2199
|
+
className: cn(s.label(), className),
|
|
2200
|
+
...props,
|
|
2201
|
+
children: [children, required && /* @__PURE__ */ jsx("span", {
|
|
2202
|
+
"aria-hidden": true,
|
|
2203
|
+
className: s.required(),
|
|
2204
|
+
children: "*"
|
|
2205
|
+
})]
|
|
2206
|
+
});
|
|
2207
|
+
}
|
|
2208
|
+
/** Helper text under the control, announced as part of its description. */
|
|
2209
|
+
function FieldDescription({ className, ...props }) {
|
|
2210
|
+
return /* @__PURE__ */ jsx(Field.Description, {
|
|
2211
|
+
className: cn(s.description(), className),
|
|
2212
|
+
...props
|
|
2213
|
+
});
|
|
2214
|
+
}
|
|
2215
|
+
/**
|
|
2216
|
+
* Validation message. Rendered only while the field is invalid (or when `match` says so)
|
|
2217
|
+
* and linked to the control through aria-describedby.
|
|
2218
|
+
*/
|
|
2219
|
+
function FieldError({ className, hideIcon, children, ...props }) {
|
|
2220
|
+
return /* @__PURE__ */ jsxs(Field.Error, {
|
|
2221
|
+
className: cn(s.error(), className),
|
|
2222
|
+
...props,
|
|
2223
|
+
children: [!hideIcon && /* @__PURE__ */ jsx(CircleAlert, {
|
|
2224
|
+
size: 13,
|
|
2225
|
+
"aria-hidden": true,
|
|
2226
|
+
className: "mt-[3px] shrink-0"
|
|
2227
|
+
}), /* @__PURE__ */ jsx("span", { children })]
|
|
2228
|
+
});
|
|
2229
|
+
}
|
|
2230
|
+
/** Wraps one checkbox or radio inside a group that lives in a Field. */
|
|
2231
|
+
function FieldItem({ className, ...props }) {
|
|
2232
|
+
return /* @__PURE__ */ jsx(Field.Item, {
|
|
2233
|
+
className: cn(s.item(), className),
|
|
2234
|
+
...props
|
|
2235
|
+
});
|
|
2236
|
+
}
|
|
2237
|
+
/** Groups related fields (or a checkbox/radio group) under a shared legend. */
|
|
2238
|
+
function Fieldset$1({ className, ...props }) {
|
|
2239
|
+
return /* @__PURE__ */ jsx(Fieldset.Root, {
|
|
2240
|
+
className: cn(s.fieldset(), className),
|
|
2241
|
+
...props
|
|
2242
|
+
});
|
|
2243
|
+
}
|
|
2244
|
+
/** The fieldset's accessible name. */
|
|
2245
|
+
function FieldsetLegend({ className, ...props }) {
|
|
2246
|
+
return /* @__PURE__ */ jsx(Fieldset.Legend, {
|
|
2247
|
+
className: cn(s.legend(), className),
|
|
2248
|
+
...props
|
|
2249
|
+
});
|
|
2250
|
+
}
|
|
2251
|
+
/** Supporting text under a legend. */
|
|
2252
|
+
function FieldsetDescription({ className, ...props }) {
|
|
2253
|
+
return /* @__PURE__ */ jsx("p", {
|
|
2254
|
+
className: cn(s.legendDescription(), className),
|
|
2255
|
+
...props
|
|
2256
|
+
});
|
|
2257
|
+
}
|
|
2258
|
+
//#endregion
|
|
2259
|
+
export { createFormatters as A, builtInMessages as C, catalogs as D, usePortalDir as E, cn as F, interpolate as M, localeDirection as N, es as O, tv as P, I18nProvider as S, useOptionalI18n as T, buttonVariants as _, FieldLabel as a, DensityContext as b, FieldsetLegend as c, useAnnounce as d, useHasLiveAnnouncer as f, BUTTON_ICON_SIZE as g, IconButton as h, FieldItem as i, formatBytes as j, en as k, fieldVariants as l, Button$1 as m, FieldDescription as n, Fieldset$1 as o, liveAnnouncerVariants as p, FieldError as r, FieldsetDescription as s, Field$1 as t, LiveAnnouncer as u, Spinner as v, useI18n as w, useDensity as x, RTL_FLIP as y };
|
|
2260
|
+
|
|
2261
|
+
//# sourceMappingURL=Field-knzMlyzO.js.map
|