@nice2dev/i18n 1.0.27 → 1.0.29

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/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx as O } from "react/jsx-runtime";
2
- import { useMemo as b, useContext as B, createContext as I, useEffect as L, useState as T, useCallback as ee } from "react";
3
- const x = [
2
+ import { useMemo as f, useContext as B, createContext as I, useEffect as L, useState as x, useCallback as ee } from "react";
3
+ const T = [
4
4
  "en",
5
5
  "pl",
6
6
  "de",
@@ -169,9 +169,317 @@ const x = [
169
169
  "tutorial.manifestEditor.intro.title": "Manifest editor",
170
170
  "tutorial.manifestEditor.intro.content": "Edit the manifest in schema-driven sections. Toggle Form ⇄ JSON per section; validation appears in the status bar.",
171
171
  "tutorial.schemaForm.intro.title": "Schema form",
172
+ "workflowDesigner.name": "Name",
173
+ "workflowDesigner.type": "Type",
174
+ "workflowDesigner.select": "— Select —",
175
+ "workflowDesigner.simulate": "Simulate",
176
+ "workflowDesigner.stop": "Stop",
177
+ "workflowDesigner.test": "Test",
178
+ "workflowDesigner.publish": "Publish",
179
+ "workflowDesigner.export": "Export",
180
+ "workflowDesigner.import": "Import",
181
+ "workflowDesigner.zoomIn": "Zoom in",
182
+ "workflowDesigner.zoomOut": "Zoom out",
183
+ "workflowDesigner.resetView": "Reset view",
184
+ "workflowDesigner.simulateFlow": "Simulate flow",
185
+ "workflowDesigner.testProcess": "Test process",
186
+ "workflowDesigner.publishProcess": "Publish process",
187
+ "workflowDesigner.exportBpmn": "Export BPMN XML",
188
+ "workflowDesigner.importBpmn": "Import BPMN XML",
189
+ "workflowDesigner.toolbar": "Workflow toolbar",
190
+ "workflowDesigner.bpmnToolbar": "BPMN designer toolbar",
191
+ "workflowDesigner.palette": "BPMN element palette",
192
+ "workflowDesigner.canvas": "Workflow canvas",
193
+ "workflowDesigner.bpmnCanvas": "BPMN canvas",
194
+ "workflowDesigner.minimap": "Minimap",
195
+ "workflowDesigner.expand": "Expand",
196
+ "workflowDesigner.collapse": "Collapse",
197
+ "workflowDesigner.connect": "Connect",
198
+ "workflowDesigner.startConnect": "Start connection",
199
+ "workflowDesigner.delete": "Delete",
200
+ "workflowDesigner.deleteElement": "Delete element",
201
+ "workflowDesigner.next": "Next",
202
+ "workflowDesigner.connectHint": "Click a target element to connect, or click empty space to cancel",
203
+ "workflowDesigner.properties": "Properties",
204
+ "workflowDesigner.propertiesOf": "Properties: {name}",
205
+ "workflowDesigner.assignee": "Assigned to",
206
+ "workflowDesigner.dueDate": "Due date",
207
+ "workflowDesigner.dueDatePlaceholder": "P3D (3 days)",
208
+ "workflowDesigner.priority": "Priority",
209
+ "workflowDesigner.documentation": "Documentation",
210
+ "workflowDesigner.timer": "Timer (ISO 8601)",
211
+ "workflowDesigner.timerPlaceholder": "PT1H (1 hour) or R3/PT1H (3 repetitions)",
212
+ "workflowDesigner.defaultFlow": "Default flow",
213
+ "workflowDesigner.flowOf": "Flow: {name}",
214
+ "workflowDesigner.condition": "Condition",
215
+ "workflowDesigner.deleteFlow": "Delete flow",
216
+ "workflowDesigner.variables": "Process variables",
217
+ "workflowDesigner.addVariable": "Add variable",
218
+ "workflowDesigner.simActiveElement": "Simulation active — current element:",
219
+ "workflowDesigner.simActiveState": "Simulation active — current state:",
220
+ "workflowDesigner.endSimulation": "End simulation",
221
+ "workflowDesigner.addState": "State",
222
+ "workflowDesigner.addApproval": "Approval",
223
+ "workflowDesigner.newState": "New state",
224
+ "workflowDesigner.stateLabel": "State: {name}",
225
+ "workflowDesigner.stateName": "State name",
226
+ "workflowDesigner.deleteState": "Delete state {name}",
227
+ "workflowDesigner.stateProps": "State properties",
228
+ "workflowDesigner.stateType": "State type",
229
+ "workflowDesigner.val.noInitial": "No initial state",
230
+ "workflowDesigner.val.multiInitial": "More than one initial state",
231
+ "workflowDesigner.val.noFinal": "No final state",
232
+ "workflowDesigner.val.deadEnd": 'State "{name}" has no outgoing transitions (dead-end)',
233
+ "workflowDesigner.val.orphan": 'State "{name}" is unreachable (orphan)',
234
+ "workflowDesigner.val.bpmnNoStart": "Process must have at least one start event",
235
+ "workflowDesigner.val.bpmnNoEnd": "Process must have at least one end event",
236
+ "workflowDesigner.val.startNoOut": 'Start event "{name}" has no outgoing flow',
237
+ "workflowDesigner.val.endNoIn": 'End event "{name}" has no incoming flow',
238
+ "workflowDesigner.val.unreachable": 'Element "{name}" is unreachable',
239
+ "workflowDesigner.val.elemNoOut": 'Element "{name}" has no outgoing flow',
240
+ "workflowDesigner.val.xorNoConditions": 'Exclusive gateway "{name}" should have conditions on its flows',
241
+ "tutorial.workflowDesigner.toolbar.title": "Toolbar",
242
+ "tutorial.workflowDesigner.toolbar.content": "Add states and approvals, run a simulation, then test or publish the workflow.",
243
+ "tutorial.workflowDesigner.canvas.title": "Canvas",
244
+ "tutorial.workflowDesigner.canvas.content": "Drag to arrange states, click one to edit it, and connect them into transitions.",
245
+ "tutorial.workflowDesigner.minimap.title": "Minimap",
246
+ "tutorial.workflowDesigner.minimap.content": "A bird’s-eye overview of the whole flow for quick navigation.",
247
+ "tutorial.themeBuilder.presets.title": "Presets",
248
+ "tutorial.themeBuilder.presets.content": "Start from a built-in preset, then customise — the fastest way to a coherent palette.",
249
+ "tutorial.themeBuilder.sections.title": "Token sections",
250
+ "tutorial.themeBuilder.sections.content": "Edit tokens by section: colors, backgrounds, text, borders, spacing and typography.",
251
+ "tutorial.themeBuilder.preview.title": "Live preview",
252
+ "tutorial.themeBuilder.preview.content": "Every change previews instantly across sample components, so you can judge the theme as you build it.",
253
+ "tutorial.themeBuilder.export.title": "Name, apply & export",
254
+ "tutorial.themeBuilder.export.content": "Name your theme, apply it to the page, or export it as JSON / CSS variables for reuse.",
255
+ "dataSourceBuilder.namePlaceholder": "Data source name…",
256
+ "dataSourceBuilder.nameAria": "Data source name",
257
+ "tutorial.dataSourceBuilder.name.title": "Name & key",
258
+ "tutorial.dataSourceBuilder.name.content": "Give the data source a readable name; its stable key (used by views) is generated automatically and shown next to it.",
259
+ "lifecycleHooks.enabled": "Enabled",
260
+ "lifecycleHooks.handler": "Handler",
261
+ "lifecycleHooks.selectHandler": "— select handler —",
262
+ "lifecycleHooks.handlerPlaceholder": "handler (e.g. scripts/on-create.js)",
263
+ "lifecycleHooks.conditionPlaceholder": "condition (optional)",
264
+ "lifecycleHooks.condition": "Condition",
265
+ "lifecycleHooks.moveUp": "Move up",
266
+ "lifecycleHooks.moveDown": "Move down",
267
+ "lifecycleHooks.removeBinding": "Remove binding",
268
+ "lifecycleHooks.addHandler": "Add handler",
269
+ "tutorial.lifecycleHooks.bindings.title": "Triggers & bindings",
270
+ "tutorial.lifecycleHooks.bindings.content": "Each trigger lists its bound handlers. Add a handler, toggle its enabled flag, reorder it, and optionally set a condition that gates execution.",
271
+ "revisionHistory.revisions": "Revisions",
272
+ "revisionHistory.compare": "Compare",
273
+ "revisionHistory.restore": "Restore",
274
+ "revisionHistory.diffEmpty": "Select a revision and choose another to compare.",
275
+ "tutorial.revisionHistory.list.title": "Revisions",
276
+ "tutorial.revisionHistory.list.content": "Select a revision, then click “Compare” on another to diff the two. “Restore” rolls back to that revision.",
277
+ "tutorial.revisionHistory.diff.title": "Diff",
278
+ "tutorial.revisionHistory.diff.content": "Review the side-by-side differences between the two selected revisions.",
279
+ "accessManager.roles": "Roles",
280
+ "accessManager.newRole": "New role…",
281
+ "accessManager.newRoleAria": "New role name",
282
+ "accessManager.add": "Add",
283
+ "accessManager.removeRole": "Remove role",
284
+ "accessManager.resources": "Resources",
285
+ "accessManager.applyDescendants": "Apply to all descendants",
286
+ "accessManager.empty": "Select a resource to edit its access.",
287
+ "accessManager.collapse": "Collapse",
288
+ "accessManager.expand": "Expand",
289
+ "tutorial.accessManager.tree.title": "Roles & resources",
290
+ "tutorial.accessManager.tree.content": "Add and remove roles, then pick a resource from the tree (modules → views / entities / actions) to edit its access.",
291
+ "tutorial.accessManager.matrix.title": "Permission matrix",
292
+ "tutorial.accessManager.matrix.content": "Grant each role its actions for the selected resource. Use the bulk controls, or “Apply to all descendants” to cascade grants down the tree.",
293
+ "viewEditor.name": "View name",
294
+ "viewEditor.kindAria": "View kind",
295
+ "viewEditor.kind.form": "Form",
296
+ "viewEditor.kind.detail": "Detail",
297
+ "viewEditor.kind.grid": "Grid",
298
+ "viewEditor.kind.dashboard": "Dashboard",
299
+ "viewEditor.kind.content": "Content",
300
+ "viewEditor.kind.report": "Report",
301
+ "viewEditor.kind.print": "Print",
302
+ "viewEditor.kind.mix": "Mix",
303
+ "viewEditor.fromEntity": "New from entity…",
304
+ "viewEditor.fromEntityAria": "New view from entity",
305
+ "viewEditor.export": "Export…",
306
+ "viewEditor.exportAria": "Export view",
307
+ "viewEditor.mode.design": "Design",
308
+ "viewEditor.mode.preview": "Preview",
309
+ "viewEditor.mode.source": "Source",
310
+ "viewEditor.valid": "✓ Valid",
311
+ "viewEditor.save": "Save",
312
+ "viewEditor.add": "Add",
313
+ "viewEditor.cat.Inputs": "Inputs",
314
+ "viewEditor.cat.Data": "Data",
315
+ "viewEditor.cat.BI": "BI",
316
+ "viewEditor.cat.Actions": "Actions",
317
+ "viewEditor.cat.Display": "Display",
318
+ "viewEditor.pal.textInput": "Text",
319
+ "viewEditor.pal.textArea": "Text area",
320
+ "viewEditor.pal.numberInput": "Number",
321
+ "viewEditor.pal.select": "Select",
322
+ "viewEditor.pal.checkbox": "Checkbox",
323
+ "viewEditor.pal.datePicker": "Date",
324
+ "viewEditor.pal.dataGrid": "Data grid",
325
+ "viewEditor.pal.chart": "Chart",
326
+ "viewEditor.pal.kpi": "KPI",
327
+ "viewEditor.pal.button": "Button",
328
+ "viewEditor.pal.text": "Text",
329
+ "viewEditor.pal.heading": "Heading",
330
+ "viewEditor.pal.badge": "Badge",
331
+ "viewEditor.pal.card": "Card",
332
+ "viewEditor.addRow": "Add row",
333
+ "viewEditor.canvasEmpty": "Add a row, then drop controls from the palette — or start “New from entity”.",
334
+ "viewEditor.removeCell": "Remove cell",
335
+ "viewEditor.emptyRow": "empty row",
336
+ "viewEditor.control": "Control",
337
+ "viewEditor.cp.label": "Label",
338
+ "viewEditor.cp.colSpan": "Column span",
339
+ "viewEditor.cp.binding": "Binding",
340
+ "viewEditor.cp.dataSource": "Data source",
341
+ "viewEditor.cp.none": "— none —",
342
+ "viewEditor.cp.field": "Field",
343
+ "viewEditor.cp.fieldPath": "field path",
344
+ "viewEditor.cp.twoWay": "Two-way",
345
+ "viewEditor.cp.permissions": "Permissions",
346
+ "viewEditor.cp.role": "role",
347
+ "viewEditor.cp.addPermission": "Permission",
348
+ "viewEditor.cp.events": "Events",
349
+ "viewEditor.cp.eventPlaceholder": "event (onClick / onValueChange…)",
350
+ "viewEditor.cp.removeEvent": "Remove event",
351
+ "viewEditor.cp.addEvent": "Event",
352
+ "viewEditor.remove": "Remove",
353
+ "viewEditor.ds.title": "Data sources",
354
+ "viewEditor.ds.hint": "Select a control to edit its props, binding & events.",
355
+ "viewEditor.ds.key": "key",
356
+ "viewEditor.ds.endpoint": "endpoint",
357
+ "viewEditor.ds.autoLoad": "auto-load",
358
+ "viewEditor.ds.add": "Data source",
359
+ "tutorial.viewEditor.palette.title": "Palette",
360
+ "tutorial.viewEditor.palette.content": "Add controls from the palette into the grid — inputs, data grids, charts, KPIs, buttons and display blocks.",
361
+ "tutorial.viewEditor.canvas.title": "Canvas",
362
+ "tutorial.viewEditor.canvas.content": "Arrange cells into rows and set each cell’s column span. Click a cell to configure it.",
363
+ "tutorial.viewEditor.props.title": "Properties",
364
+ "tutorial.viewEditor.props.content": "Configure the selected control: props, data binding, role permissions and event actions. With nothing selected, manage the view’s data sources.",
365
+ "tutorial.viewEditor.modes.title": "Design / Preview / Source",
366
+ "tutorial.viewEditor.modes.content": "Switch between the visual designer, a live preview, and the raw NiceViewDefinition JSON. Save when the view is valid.",
367
+ "manifestEditor.tab.scripts": "Scripts",
368
+ "manifestEditor.tab.lifecycle": "Lifecycle",
369
+ "manifestEditor.tab.history": "History",
370
+ "manifestEditor.status.valid": "✓ Valid",
371
+ "manifestEditor.status.issues": "issues",
372
+ "manifestEditor.sections": "sections",
373
+ "manifestEditor.output": "Output",
374
+ "tutorial.manifestEditor.sections.title": "Sections",
375
+ "tutorial.manifestEditor.sections.content": "The manifest is split into schema-driven sections — switch between them using the tabs at the top.",
376
+ "tutorial.manifestEditor.json.title": "Form ⇄ JSON",
377
+ "tutorial.manifestEditor.json.content": "Each section can be edited as a visual form or as raw JSON — use the toggle inside the section.",
378
+ "i18nEditor.keyHead": "Key",
379
+ "i18nEditor.removeLocale": "Remove locale",
380
+ "i18nEditor.keyAria": "Translation key",
381
+ "i18nEditor.removeKey": "Remove key",
382
+ "i18nEditor.empty": "No translation keys yet.",
383
+ "i18nEditor.newKeyPlaceholder": "new.key",
384
+ "i18nEditor.newKeyAria": "New key",
385
+ "i18nEditor.addKey": "Key",
386
+ "i18nEditor.newLocalePlaceholder": "locale (e.g. de)",
387
+ "i18nEditor.newLocaleAria": "New locale",
388
+ "i18nEditor.addLocale": "Locale",
389
+ "tutorial.i18nEditor.grid.title": "Keys × locales",
390
+ "tutorial.i18nEditor.grid.content": "Each row is a translation key and each column a locale. Edit a cell to set a translation; amber cells are still missing.",
391
+ "tutorial.i18nEditor.add.title": "Add keys & locales",
392
+ "tutorial.i18nEditor.add.content": "Add a new translation key or a new locale column here; new cells start empty and are flagged as missing.",
393
+ "moduleEditor.tab.entities": "Entities",
394
+ "moduleEditor.tab.i18n": "i18n",
395
+ "moduleEditor.tab.views": "Views",
396
+ "moduleEditor.tab.workflows": "Workflows",
397
+ "moduleEditor.tab.data": "Data",
398
+ "moduleEditor.tab.permissions": "Permissions",
399
+ "moduleEditor.tab.scripts": "Scripts",
400
+ "moduleEditor.tab.lifecycle": "Lifecycle",
401
+ "moduleEditor.tab.history": "History",
402
+ "moduleEditor.tab.source": "Source",
403
+ "moduleEditor.status.valid": "✓ Valid",
404
+ "moduleEditor.status.issues": "issues",
405
+ "moduleEditor.searchModules": "Search modules…",
406
+ "moduleEditor.loading": "Loading…",
407
+ "moduleEditor.noModules": "No modules. Open a source first.",
408
+ "moduleEditor.title": "Module Editor",
409
+ "moduleEditor.refresh": "Refresh",
410
+ "moduleEditor.validate": "Validate",
411
+ "moduleEditor.saving": "Saving…",
412
+ "moduleEditor.save": "Save",
413
+ "moduleEditor.output": "Output",
414
+ "moduleEditor.placeholder": "Select a module from the left to start editing.",
415
+ "moduleEditor.delete": "Delete",
416
+ "moduleEditor.views.select": "Select view",
417
+ "moduleEditor.views.placeholder": "— select view —",
418
+ "moduleEditor.views.new": "New view",
419
+ "moduleEditor.views.empty": "No view selected. Create one, then use “New from entity” inside the editor.",
420
+ "moduleEditor.workflows.select": "Select workflow",
421
+ "moduleEditor.workflows.placeholder": "— select workflow —",
422
+ "moduleEditor.workflows.new": "New workflow",
423
+ "moduleEditor.workflows.empty": "No workflow selected. Create one to start designing states and transitions.",
424
+ "moduleEditor.data.select": "Select data source",
425
+ "moduleEditor.data.placeholder": "— select data source —",
426
+ "moduleEditor.data.new": "New data source",
427
+ "moduleEditor.data.empty": "No data source selected. Create one to build a query from your module’s schema.",
428
+ "tutorial.moduleEditor.intro.title": "Module editor",
429
+ "tutorial.moduleEditor.intro.content": "Design a whole module end-to-end — manifest, entities, translations, views, workflows, data sources and permissions — then validate and save.",
430
+ "tutorial.moduleEditor.tabs.title": "Module parts",
431
+ "tutorial.moduleEditor.tabs.content": "Each tab edits one part of the module: Manifest sections, Entities, i18n, Views, Workflows, Data sources, Permissions and more.",
432
+ "tutorial.moduleEditor.output.title": "Output",
433
+ "tutorial.moduleEditor.output.content": "Validation results and load/save activity are logged here.",
434
+ "tutorial.schemaForm.viewToggle.title": "Form ⇄ JSON",
435
+ "tutorial.schemaForm.viewToggle.content": "Switch between the visual form and the raw JSON value — handy for power users and copy/paste.",
436
+ "tutorial.schemaForm.validation.title": "Live validation",
437
+ "tutorial.schemaForm.validation.content": "Values are validated against the schema as you type; any problems are listed below the form.",
438
+ "schemaForm.tab.form": "Form",
439
+ "schemaForm.tab.json": "JSON",
440
+ "schemaForm.tab.json.help": "Edit the raw JSON value directly",
441
+ "schemaForm.invalidJson": "Invalid JSON",
172
442
  "tutorial.schemaForm.intro.content": "This form is generated from a schema. Required fields and validation errors are flagged; use the JSON toggle for raw editing.",
173
443
  "tutorial.entityEditor.intro.title": "Entity editor",
174
444
  "tutorial.entityEditor.intro.content": "Add entities on the left, then edit each entity’s metadata and its fields (type, keys, constraints) on the right.",
445
+ "entityEditor.col.name": "Name",
446
+ "entityEditor.col.displayName": "Display name",
447
+ "entityEditor.col.table": "Table",
448
+ "entityEditor.col.fields": "Fields",
449
+ "entityEditor.col.fields.help": "Number of fields defined on this entity",
450
+ "entityEditor.col.flags": "Flags",
451
+ "entityEditor.flag.audited": "Audited — tracks who changed each record and when",
452
+ "entityEditor.flag.audited.abbr": "Audit",
453
+ "entityEditor.flag.softDelete": "Soft delete — rows are flagged deleted, never physically removed",
454
+ "entityEditor.flag.softDelete.abbr": "Soft-del",
455
+ "entityEditor.search": "Search entities…",
456
+ "entityEditor.empty": "No entities yet. Create one to get started.",
457
+ "entityEditor.new": "New entity",
458
+ "entityEditor.back": "Entities",
459
+ "entityEditor.backHint": "Back to the entity list",
460
+ "entityEditor.delete": "Delete",
461
+ "entityEditor.deleteHint": "Delete this entity",
462
+ "entityEditor.untitled": "Untitled entity",
463
+ "entityEditor.tab.general": "General",
464
+ "entityEditor.tab.fields": "Fields",
465
+ "entityEditor.tab.validation": "Validation",
466
+ "entityEditor.tab.er": "ER diagram",
467
+ "entityEditor.field.name": "Name",
468
+ "entityEditor.field.type": "Type",
469
+ "entityEditor.field.flags": "Constraints",
470
+ "entityEditor.field.flags.help": "Key / required / unique / indexed constraints on this field",
471
+ "entityEditor.flag.pk": "Primary key",
472
+ "entityEditor.flag.fk": "Foreign key",
473
+ "entityEditor.flag.required": "Required (NOT NULL)",
474
+ "entityEditor.flag.unique": "Unique",
475
+ "entityEditor.flag.indexed": "Indexed",
476
+ "entityEditor.field.back": "Fields",
477
+ "entityEditor.field.backHint": "Back to the field list",
478
+ "entityEditor.field.untitled": "New field",
479
+ "entityEditor.field.done": "Done",
480
+ "entityEditor.field.add": "Add field",
481
+ "entityEditor.field.search": "Search fields…",
482
+ "entityEditor.field.empty": "No fields yet. Add one to define this entity.",
175
483
  "tutorial.i18nEditor.intro.title": "Translations",
176
484
  "tutorial.i18nEditor.intro.content": "Edit translations as a keys × locales grid. Add keys and locales; amber cells mark missing translations.",
177
485
  "tutorial.formBuilder.intro.title": "Form builder",
@@ -1088,9 +1396,317 @@ const x = [
1088
1396
  "tutorial.manifestEditor.intro.title": "Edytor manifestu",
1089
1397
  "tutorial.manifestEditor.intro.content": "Edytuj manifest w sekcjach opartych na schemacie. Przełączaj Formularz ⇄ JSON w sekcji; walidacja widoczna na pasku statusu.",
1090
1398
  "tutorial.schemaForm.intro.title": "Formularz ze schematu",
1399
+ "workflowDesigner.name": "Nazwa",
1400
+ "workflowDesigner.type": "Typ",
1401
+ "workflowDesigner.select": "— Wybierz —",
1402
+ "workflowDesigner.simulate": "Symuluj",
1403
+ "workflowDesigner.stop": "Stop",
1404
+ "workflowDesigner.test": "Test",
1405
+ "workflowDesigner.publish": "Publikuj",
1406
+ "workflowDesigner.export": "Eksport",
1407
+ "workflowDesigner.import": "Import",
1408
+ "workflowDesigner.zoomIn": "Powiększ",
1409
+ "workflowDesigner.zoomOut": "Pomniejsz",
1410
+ "workflowDesigner.resetView": "Reset widoku",
1411
+ "workflowDesigner.simulateFlow": "Symuluj przepływ",
1412
+ "workflowDesigner.testProcess": "Testuj proces",
1413
+ "workflowDesigner.publishProcess": "Publikuj proces",
1414
+ "workflowDesigner.exportBpmn": "Eksportuj BPMN XML",
1415
+ "workflowDesigner.importBpmn": "Importuj BPMN XML",
1416
+ "workflowDesigner.toolbar": "Narzędzia workflow",
1417
+ "workflowDesigner.bpmnToolbar": "Narzędzia projektanta BPMN",
1418
+ "workflowDesigner.palette": "Paleta elementów BPMN",
1419
+ "workflowDesigner.canvas": "Obszar roboczy workflow",
1420
+ "workflowDesigner.bpmnCanvas": "Obszar roboczy BPMN",
1421
+ "workflowDesigner.minimap": "Minimapa",
1422
+ "workflowDesigner.expand": "Rozwiń",
1423
+ "workflowDesigner.collapse": "Zwiń",
1424
+ "workflowDesigner.connect": "Połącz",
1425
+ "workflowDesigner.startConnect": "Rozpocznij połączenie",
1426
+ "workflowDesigner.delete": "Usuń",
1427
+ "workflowDesigner.deleteElement": "Usuń element",
1428
+ "workflowDesigner.next": "Dalej",
1429
+ "workflowDesigner.connectHint": "Kliknij element docelowy, aby połączyć, lub kliknij pustą przestrzeń, aby anulować",
1430
+ "workflowDesigner.properties": "Właściwości",
1431
+ "workflowDesigner.propertiesOf": "Właściwości: {name}",
1432
+ "workflowDesigner.assignee": "Przypisany do",
1433
+ "workflowDesigner.dueDate": "Termin",
1434
+ "workflowDesigner.dueDatePlaceholder": "P3D (3 dni)",
1435
+ "workflowDesigner.priority": "Priorytet",
1436
+ "workflowDesigner.documentation": "Dokumentacja",
1437
+ "workflowDesigner.timer": "Timer (ISO 8601)",
1438
+ "workflowDesigner.timerPlaceholder": "PT1H (1 godzina) lub R3/PT1H (3 powtórzenia)",
1439
+ "workflowDesigner.defaultFlow": "Domyślny przepływ",
1440
+ "workflowDesigner.flowOf": "Przepływ: {name}",
1441
+ "workflowDesigner.condition": "Warunek",
1442
+ "workflowDesigner.deleteFlow": "Usuń przepływ",
1443
+ "workflowDesigner.variables": "Zmienne procesu",
1444
+ "workflowDesigner.addVariable": "Dodaj zmienną",
1445
+ "workflowDesigner.simActiveElement": "Symulacja aktywna — aktualny element:",
1446
+ "workflowDesigner.simActiveState": "Symulacja aktywna — aktualny stan:",
1447
+ "workflowDesigner.endSimulation": "Zakończ symulację",
1448
+ "workflowDesigner.addState": "Stan",
1449
+ "workflowDesigner.addApproval": "Zatwierdzenie",
1450
+ "workflowDesigner.newState": "Nowy stan",
1451
+ "workflowDesigner.stateLabel": "Stan: {name}",
1452
+ "workflowDesigner.stateName": "Nazwa stanu",
1453
+ "workflowDesigner.deleteState": "Usuń stan {name}",
1454
+ "workflowDesigner.stateProps": "Właściwości stanu",
1455
+ "workflowDesigner.stateType": "Typ stanu",
1456
+ "workflowDesigner.val.noInitial": "Brak stanu początkowego",
1457
+ "workflowDesigner.val.multiInitial": "Więcej niż jeden stan początkowy",
1458
+ "workflowDesigner.val.noFinal": "Brak stanu końcowego",
1459
+ "workflowDesigner.val.deadEnd": 'Stan "{name}" nie ma przejść wyjściowych (ślepy zaułek)',
1460
+ "workflowDesigner.val.orphan": 'Stan "{name}" jest nieosiągalny (sierota)',
1461
+ "workflowDesigner.val.bpmnNoStart": "Proces musi mieć co najmniej jedno zdarzenie początkowe",
1462
+ "workflowDesigner.val.bpmnNoEnd": "Proces musi mieć co najmniej jedno zdarzenie końcowe",
1463
+ "workflowDesigner.val.startNoOut": 'Zdarzenie początkowe "{name}" nie ma przepływu wyjściowego',
1464
+ "workflowDesigner.val.endNoIn": 'Zdarzenie końcowe "{name}" nie ma przepływu wejściowego',
1465
+ "workflowDesigner.val.unreachable": 'Element "{name}" jest nieosiągalny',
1466
+ "workflowDesigner.val.elemNoOut": 'Element "{name}" nie ma przepływu wyjściowego',
1467
+ "workflowDesigner.val.xorNoConditions": 'Bramka wykluczająca "{name}" powinna mieć warunki na przepływach',
1468
+ "tutorial.workflowDesigner.toolbar.title": "Pasek narzędzi",
1469
+ "tutorial.workflowDesigner.toolbar.content": "Dodawaj stany i zatwierdzenia, uruchom symulację, a następnie przetestuj lub opublikuj workflow.",
1470
+ "tutorial.workflowDesigner.canvas.title": "Obszar roboczy",
1471
+ "tutorial.workflowDesigner.canvas.content": "Przeciągaj, aby układać stany, kliknij jeden, aby go edytować, i łącz je w przejścia.",
1472
+ "tutorial.workflowDesigner.minimap.title": "Minimapa",
1473
+ "tutorial.workflowDesigner.minimap.content": "Widok z lotu ptaka całego przepływu dla szybkiej nawigacji.",
1474
+ "tutorial.themeBuilder.presets.title": "Presety",
1475
+ "tutorial.themeBuilder.presets.content": "Zacznij od wbudowanego presetu, a potem dostosuj — najszybsza droga do spójnej palety.",
1476
+ "tutorial.themeBuilder.sections.title": "Sekcje tokenów",
1477
+ "tutorial.themeBuilder.sections.content": "Edytuj tokeny wg sekcji: kolory, tła, tekst, obramowania, odstępy i typografia.",
1478
+ "tutorial.themeBuilder.preview.title": "Podgląd na żywo",
1479
+ "tutorial.themeBuilder.preview.content": "Każda zmiana jest natychmiast podglądana na przykładowych komponentach, więc oceniasz motyw na bieżąco.",
1480
+ "tutorial.themeBuilder.export.title": "Nazwa, zastosuj i eksport",
1481
+ "tutorial.themeBuilder.export.content": "Nazwij motyw, zastosuj go do strony lub wyeksportuj jako JSON / zmienne CSS do ponownego użycia.",
1482
+ "dataSourceBuilder.namePlaceholder": "Nazwa źródła danych…",
1483
+ "dataSourceBuilder.nameAria": "Nazwa źródła danych",
1484
+ "tutorial.dataSourceBuilder.name.title": "Nazwa i klucz",
1485
+ "tutorial.dataSourceBuilder.name.content": "Nadaj źródłu danych czytelną nazwę; jego stały klucz (używany przez widoki) jest generowany automatycznie i pokazany obok.",
1486
+ "lifecycleHooks.enabled": "Włączone",
1487
+ "lifecycleHooks.handler": "Handler",
1488
+ "lifecycleHooks.selectHandler": "— wybierz handler —",
1489
+ "lifecycleHooks.handlerPlaceholder": "handler (np. scripts/on-create.js)",
1490
+ "lifecycleHooks.conditionPlaceholder": "warunek (opcjonalny)",
1491
+ "lifecycleHooks.condition": "Warunek",
1492
+ "lifecycleHooks.moveUp": "Przesuń w górę",
1493
+ "lifecycleHooks.moveDown": "Przesuń w dół",
1494
+ "lifecycleHooks.removeBinding": "Usuń powiązanie",
1495
+ "lifecycleHooks.addHandler": "Dodaj handler",
1496
+ "tutorial.lifecycleHooks.bindings.title": "Wyzwalacze i powiązania",
1497
+ "tutorial.lifecycleHooks.bindings.content": "Każdy wyzwalacz wyświetla powiązane handlery. Dodaj handler, przełącz flagę włączenia, zmień kolejność i opcjonalnie ustaw warunek bramkujący wykonanie.",
1498
+ "revisionHistory.revisions": "Wersje",
1499
+ "revisionHistory.compare": "Porównaj",
1500
+ "revisionHistory.restore": "Przywróć",
1501
+ "revisionHistory.diffEmpty": "Wybierz wersję i wskaż drugą do porównania.",
1502
+ "tutorial.revisionHistory.list.title": "Wersje",
1503
+ "tutorial.revisionHistory.list.content": "Wybierz wersję, a następnie kliknij „Porównaj” przy innej, aby je zestawić. „Przywróć” cofa do tej wersji.",
1504
+ "tutorial.revisionHistory.diff.title": "Różnice",
1505
+ "tutorial.revisionHistory.diff.content": "Przejrzyj różnice obok siebie między dwiema wybranymi wersjami.",
1506
+ "accessManager.roles": "Role",
1507
+ "accessManager.newRole": "Nowa rola…",
1508
+ "accessManager.newRoleAria": "Nazwa nowej roli",
1509
+ "accessManager.add": "Dodaj",
1510
+ "accessManager.removeRole": "Usuń rolę",
1511
+ "accessManager.resources": "Zasoby",
1512
+ "accessManager.applyDescendants": "Zastosuj do wszystkich podrzędnych",
1513
+ "accessManager.empty": "Wybierz zasób, aby edytować jego dostęp.",
1514
+ "accessManager.collapse": "Zwiń",
1515
+ "accessManager.expand": "Rozwiń",
1516
+ "tutorial.accessManager.tree.title": "Role i zasoby",
1517
+ "tutorial.accessManager.tree.content": "Dodawaj i usuwaj role, a następnie wybierz zasób z drzewa (moduły → widoki / encje / akcje), aby edytować jego dostęp.",
1518
+ "tutorial.accessManager.matrix.title": "Macierz uprawnień",
1519
+ "tutorial.accessManager.matrix.content": "Przyznaj każdej roli jej akcje dla wybranego zasobu. Użyj kontrolek zbiorczych lub „Zastosuj do wszystkich podrzędnych”, aby skaskadować uprawnienia w dół drzewa.",
1520
+ "viewEditor.name": "Nazwa widoku",
1521
+ "viewEditor.kindAria": "Rodzaj widoku",
1522
+ "viewEditor.kind.form": "Formularz",
1523
+ "viewEditor.kind.detail": "Szczegóły",
1524
+ "viewEditor.kind.grid": "Siatka",
1525
+ "viewEditor.kind.dashboard": "Pulpit",
1526
+ "viewEditor.kind.content": "Treść",
1527
+ "viewEditor.kind.report": "Raport",
1528
+ "viewEditor.kind.print": "Wydruk",
1529
+ "viewEditor.kind.mix": "Mix",
1530
+ "viewEditor.fromEntity": "Nowy z encji…",
1531
+ "viewEditor.fromEntityAria": "Nowy widok z encji",
1532
+ "viewEditor.export": "Eksport…",
1533
+ "viewEditor.exportAria": "Eksportuj widok",
1534
+ "viewEditor.mode.design": "Projekt",
1535
+ "viewEditor.mode.preview": "Podgląd",
1536
+ "viewEditor.mode.source": "Źródło",
1537
+ "viewEditor.valid": "✓ Poprawny",
1538
+ "viewEditor.save": "Zapisz",
1539
+ "viewEditor.add": "Dodaj",
1540
+ "viewEditor.cat.Inputs": "Pola",
1541
+ "viewEditor.cat.Data": "Dane",
1542
+ "viewEditor.cat.BI": "BI",
1543
+ "viewEditor.cat.Actions": "Akcje",
1544
+ "viewEditor.cat.Display": "Wyświetlanie",
1545
+ "viewEditor.pal.textInput": "Tekst",
1546
+ "viewEditor.pal.textArea": "Pole tekstowe",
1547
+ "viewEditor.pal.numberInput": "Liczba",
1548
+ "viewEditor.pal.select": "Wybór",
1549
+ "viewEditor.pal.checkbox": "Pole wyboru",
1550
+ "viewEditor.pal.datePicker": "Data",
1551
+ "viewEditor.pal.dataGrid": "Siatka danych",
1552
+ "viewEditor.pal.chart": "Wykres",
1553
+ "viewEditor.pal.kpi": "KPI",
1554
+ "viewEditor.pal.button": "Przycisk",
1555
+ "viewEditor.pal.text": "Tekst",
1556
+ "viewEditor.pal.heading": "Nagłówek",
1557
+ "viewEditor.pal.badge": "Odznaka",
1558
+ "viewEditor.pal.card": "Karta",
1559
+ "viewEditor.addRow": "Dodaj wiersz",
1560
+ "viewEditor.canvasEmpty": "Dodaj wiersz, a następnie upuść kontrolki z palety — lub zacznij od „Nowy z encji”.",
1561
+ "viewEditor.removeCell": "Usuń komórkę",
1562
+ "viewEditor.emptyRow": "pusty wiersz",
1563
+ "viewEditor.control": "Kontrolka",
1564
+ "viewEditor.cp.label": "Etykieta",
1565
+ "viewEditor.cp.colSpan": "Szerokość kolumn",
1566
+ "viewEditor.cp.binding": "Powiązanie",
1567
+ "viewEditor.cp.dataSource": "Źródło danych",
1568
+ "viewEditor.cp.none": "— brak —",
1569
+ "viewEditor.cp.field": "Pole",
1570
+ "viewEditor.cp.fieldPath": "ścieżka pola",
1571
+ "viewEditor.cp.twoWay": "Dwukierunkowe",
1572
+ "viewEditor.cp.permissions": "Uprawnienia",
1573
+ "viewEditor.cp.role": "rola",
1574
+ "viewEditor.cp.addPermission": "Uprawnienie",
1575
+ "viewEditor.cp.events": "Zdarzenia",
1576
+ "viewEditor.cp.eventPlaceholder": "zdarzenie (onClick / onValueChange…)",
1577
+ "viewEditor.cp.removeEvent": "Usuń zdarzenie",
1578
+ "viewEditor.cp.addEvent": "Zdarzenie",
1579
+ "viewEditor.remove": "Usuń",
1580
+ "viewEditor.ds.title": "Źródła danych",
1581
+ "viewEditor.ds.hint": "Wybierz kontrolkę, aby edytować jej propsy, powiązanie i zdarzenia.",
1582
+ "viewEditor.ds.key": "klucz",
1583
+ "viewEditor.ds.endpoint": "punkt końcowy",
1584
+ "viewEditor.ds.autoLoad": "auto-ładowanie",
1585
+ "viewEditor.ds.add": "Źródło danych",
1586
+ "tutorial.viewEditor.palette.title": "Paleta",
1587
+ "tutorial.viewEditor.palette.content": "Dodawaj kontrolki z palety do siatki — pola, siatki danych, wykresy, KPI, przyciski i bloki wyświetlania.",
1588
+ "tutorial.viewEditor.canvas.title": "Płótno",
1589
+ "tutorial.viewEditor.canvas.content": "Układaj komórki w wiersze i ustawiaj szerokość kolumn każdej komórki. Kliknij komórkę, aby ją skonfigurować.",
1590
+ "tutorial.viewEditor.props.title": "Właściwości",
1591
+ "tutorial.viewEditor.props.content": "Skonfiguruj wybraną kontrolkę: propsy, powiązanie danych, uprawnienia ról i akcje zdarzeń. Gdy nic nie jest wybrane, zarządzaj źródłami danych widoku.",
1592
+ "tutorial.viewEditor.modes.title": "Projekt / Podgląd / Źródło",
1593
+ "tutorial.viewEditor.modes.content": "Przełączaj między wizualnym projektantem, podglądem na żywo i surowym JSON-em NiceViewDefinition. Zapisz, gdy widok jest poprawny.",
1594
+ "manifestEditor.tab.scripts": "Skrypty",
1595
+ "manifestEditor.tab.lifecycle": "Cykl życia",
1596
+ "manifestEditor.tab.history": "Historia",
1597
+ "manifestEditor.status.valid": "✓ Poprawny",
1598
+ "manifestEditor.status.issues": "problemów",
1599
+ "manifestEditor.sections": "sekcji",
1600
+ "manifestEditor.output": "Wyjście",
1601
+ "tutorial.manifestEditor.sections.title": "Sekcje",
1602
+ "tutorial.manifestEditor.sections.content": "Manifest jest podzielony na sekcje sterowane schematem — przełączaj je zakładkami u góry.",
1603
+ "tutorial.manifestEditor.json.title": "Formularz ⇄ JSON",
1604
+ "tutorial.manifestEditor.json.content": "Każdą sekcję można edytować jako wizualny formularz lub surowy JSON — użyj przełącznika w sekcji.",
1605
+ "i18nEditor.keyHead": "Klucz",
1606
+ "i18nEditor.removeLocale": "Usuń język",
1607
+ "i18nEditor.keyAria": "Klucz tłumaczenia",
1608
+ "i18nEditor.removeKey": "Usuń klucz",
1609
+ "i18nEditor.empty": "Brak kluczy tłumaczeń.",
1610
+ "i18nEditor.newKeyPlaceholder": "nowy.klucz",
1611
+ "i18nEditor.newKeyAria": "Nowy klucz",
1612
+ "i18nEditor.addKey": "Klucz",
1613
+ "i18nEditor.newLocalePlaceholder": "język (np. de)",
1614
+ "i18nEditor.newLocaleAria": "Nowy język",
1615
+ "i18nEditor.addLocale": "Język",
1616
+ "tutorial.i18nEditor.grid.title": "Klucze × języki",
1617
+ "tutorial.i18nEditor.grid.content": "Każdy wiersz to klucz tłumaczenia, a każda kolumna to język. Edytuj komórkę, aby ustawić tłumaczenie; bursztynowe komórki są nadal puste.",
1618
+ "tutorial.i18nEditor.add.title": "Dodaj klucze i języki",
1619
+ "tutorial.i18nEditor.add.content": "Dodaj nowy klucz tłumaczenia lub nową kolumnę języka; nowe komórki są puste i oznaczone jako brakujące.",
1620
+ "moduleEditor.tab.entities": "Encje",
1621
+ "moduleEditor.tab.i18n": "i18n",
1622
+ "moduleEditor.tab.views": "Widoki",
1623
+ "moduleEditor.tab.workflows": "Procesy",
1624
+ "moduleEditor.tab.data": "Dane",
1625
+ "moduleEditor.tab.permissions": "Uprawnienia",
1626
+ "moduleEditor.tab.scripts": "Skrypty",
1627
+ "moduleEditor.tab.lifecycle": "Cykl życia",
1628
+ "moduleEditor.tab.history": "Historia",
1629
+ "moduleEditor.tab.source": "Źródło",
1630
+ "moduleEditor.status.valid": "✓ Poprawny",
1631
+ "moduleEditor.status.issues": "problemów",
1632
+ "moduleEditor.searchModules": "Szukaj modułów…",
1633
+ "moduleEditor.loading": "Ładowanie…",
1634
+ "moduleEditor.noModules": "Brak modułów. Otwórz najpierw źródło.",
1635
+ "moduleEditor.title": "Edytor modułów",
1636
+ "moduleEditor.refresh": "Odśwież",
1637
+ "moduleEditor.validate": "Waliduj",
1638
+ "moduleEditor.saving": "Zapisywanie…",
1639
+ "moduleEditor.save": "Zapisz",
1640
+ "moduleEditor.output": "Wyjście",
1641
+ "moduleEditor.placeholder": "Wybierz moduł z listy po lewej, aby rozpocząć edycję.",
1642
+ "moduleEditor.delete": "Usuń",
1643
+ "moduleEditor.views.select": "Wybierz widok",
1644
+ "moduleEditor.views.placeholder": "— wybierz widok —",
1645
+ "moduleEditor.views.new": "Nowy widok",
1646
+ "moduleEditor.views.empty": "Nie wybrano widoku. Utwórz nowy, a następnie użyj „Nowy z encji” w edytorze.",
1647
+ "moduleEditor.workflows.select": "Wybierz proces",
1648
+ "moduleEditor.workflows.placeholder": "— wybierz proces —",
1649
+ "moduleEditor.workflows.new": "Nowy proces",
1650
+ "moduleEditor.workflows.empty": "Nie wybrano procesu. Utwórz nowy, aby zaprojektować stany i przejścia.",
1651
+ "moduleEditor.data.select": "Wybierz źródło danych",
1652
+ "moduleEditor.data.placeholder": "— wybierz źródło danych —",
1653
+ "moduleEditor.data.new": "Nowe źródło danych",
1654
+ "moduleEditor.data.empty": "Nie wybrano źródła danych. Utwórz nowe, aby zbudować zapytanie ze schematu modułu.",
1655
+ "tutorial.moduleEditor.intro.title": "Edytor modułów",
1656
+ "tutorial.moduleEditor.intro.content": "Projektuj cały moduł od początku do końca — manifest, encje, tłumaczenia, widoki, procesy, źródła danych i uprawnienia — a następnie waliduj i zapisz.",
1657
+ "tutorial.moduleEditor.tabs.title": "Części modułu",
1658
+ "tutorial.moduleEditor.tabs.content": "Każda zakładka edytuje jedną część modułu: sekcje manifestu, encje, i18n, widoki, procesy, źródła danych, uprawnienia i więcej.",
1659
+ "tutorial.moduleEditor.output.title": "Wyjście",
1660
+ "tutorial.moduleEditor.output.content": "Wyniki walidacji oraz aktywność wczytywania/zapisu są tu rejestrowane.",
1661
+ "tutorial.schemaForm.viewToggle.title": "Formularz ⇄ JSON",
1662
+ "tutorial.schemaForm.viewToggle.content": "Przełączaj między formularzem wizualnym a surową wartością JSON — wygodne dla zaawansowanych i do kopiowania.",
1663
+ "tutorial.schemaForm.validation.title": "Walidacja na żywo",
1664
+ "tutorial.schemaForm.validation.content": "Wartości są walidowane względem schematu na bieżąco; ewentualne problemy są wypisane pod formularzem.",
1665
+ "schemaForm.tab.form": "Formularz",
1666
+ "schemaForm.tab.json": "JSON",
1667
+ "schemaForm.tab.json.help": "Edytuj surową wartość JSON bezpośrednio",
1668
+ "schemaForm.invalidJson": "Nieprawidłowy JSON",
1091
1669
  "tutorial.schemaForm.intro.content": "Ten formularz jest generowany ze schematu. Pola wymagane i błędy walidacji są oznaczane; użyj przełącznika JSON do edycji surowej.",
1092
1670
  "tutorial.entityEditor.intro.title": "Edytor encji",
1093
1671
  "tutorial.entityEditor.intro.content": "Dodawaj encje po lewej, a po prawej edytuj metadane encji i jej pola (typ, klucze, ograniczenia).",
1672
+ "entityEditor.col.name": "Nazwa",
1673
+ "entityEditor.col.displayName": "Nazwa wyświetlana",
1674
+ "entityEditor.col.table": "Tabela",
1675
+ "entityEditor.col.fields": "Pola",
1676
+ "entityEditor.col.fields.help": "Liczba pól zdefiniowanych w tej encji",
1677
+ "entityEditor.col.flags": "Flagi",
1678
+ "entityEditor.flag.audited": "Audytowane — śledzi, kto i kiedy zmienił każdy rekord",
1679
+ "entityEditor.flag.audited.abbr": "Audyt",
1680
+ "entityEditor.flag.softDelete": "Miękkie usuwanie — rekordy są oznaczane jako usunięte, nigdy fizycznie kasowane",
1681
+ "entityEditor.flag.softDelete.abbr": "Miękkie",
1682
+ "entityEditor.search": "Szukaj encji…",
1683
+ "entityEditor.empty": "Brak encji. Utwórz pierwszą, aby zacząć.",
1684
+ "entityEditor.new": "Nowa encja",
1685
+ "entityEditor.back": "Encje",
1686
+ "entityEditor.backHint": "Powrót do listy encji",
1687
+ "entityEditor.delete": "Usuń",
1688
+ "entityEditor.deleteHint": "Usuń tę encję",
1689
+ "entityEditor.untitled": "Encja bez nazwy",
1690
+ "entityEditor.tab.general": "Ogólne",
1691
+ "entityEditor.tab.fields": "Pola",
1692
+ "entityEditor.tab.validation": "Walidacja",
1693
+ "entityEditor.tab.er": "Diagram ER",
1694
+ "entityEditor.field.name": "Nazwa",
1695
+ "entityEditor.field.type": "Typ",
1696
+ "entityEditor.field.flags": "Ograniczenia",
1697
+ "entityEditor.field.flags.help": "Ograniczenia pola: klucz / wymagane / unikalne / indeksowane",
1698
+ "entityEditor.flag.pk": "Klucz główny",
1699
+ "entityEditor.flag.fk": "Klucz obcy",
1700
+ "entityEditor.flag.required": "Wymagane (NOT NULL)",
1701
+ "entityEditor.flag.unique": "Unikalne",
1702
+ "entityEditor.flag.indexed": "Indeksowane",
1703
+ "entityEditor.field.back": "Pola",
1704
+ "entityEditor.field.backHint": "Powrót do listy pól",
1705
+ "entityEditor.field.untitled": "Nowe pole",
1706
+ "entityEditor.field.done": "Gotowe",
1707
+ "entityEditor.field.add": "Dodaj pole",
1708
+ "entityEditor.field.search": "Szukaj pól…",
1709
+ "entityEditor.field.empty": "Brak pól. Dodaj pierwsze, aby zdefiniować tę encję.",
1094
1710
  "tutorial.i18nEditor.intro.title": "Tłumaczenia",
1095
1711
  "tutorial.i18nEditor.intro.content": "Edytuj tłumaczenia w siatce klucze × locale. Dodawaj klucze i języki; bursztynowe komórki oznaczają braki.",
1096
1712
  "tutorial.formBuilder.intro.title": "Kreator formularzy",
@@ -2569,6 +3185,314 @@ const x = [
2569
3185
  "tutorial.manifestEditor.intro.title": "Manifest-Editor",
2570
3186
  "tutorial.manifestEditor.intro.content": "Bearbeiten Sie das Manifest in schemagesteuerten Abschnitten. Schalten Sie pro Abschnitt zwischen Formular ⇄ JSON um; die Validierung erscheint in der Statusleiste.",
2571
3187
  "tutorial.schemaForm.intro.title": "Schema-Formular",
3188
+ "workflowDesigner.name": "Name",
3189
+ "workflowDesigner.type": "Typ",
3190
+ "workflowDesigner.select": "— Auswählen —",
3191
+ "workflowDesigner.simulate": "Simulieren",
3192
+ "workflowDesigner.stop": "Stopp",
3193
+ "workflowDesigner.test": "Test",
3194
+ "workflowDesigner.publish": "Veröffentlichen",
3195
+ "workflowDesigner.export": "Export",
3196
+ "workflowDesigner.import": "Import",
3197
+ "workflowDesigner.zoomIn": "Vergrößern",
3198
+ "workflowDesigner.zoomOut": "Verkleinern",
3199
+ "workflowDesigner.resetView": "Ansicht zurücksetzen",
3200
+ "workflowDesigner.simulateFlow": "Ablauf simulieren",
3201
+ "workflowDesigner.testProcess": "Prozess testen",
3202
+ "workflowDesigner.publishProcess": "Prozess veröffentlichen",
3203
+ "workflowDesigner.exportBpmn": "BPMN-XML exportieren",
3204
+ "workflowDesigner.importBpmn": "BPMN-XML importieren",
3205
+ "workflowDesigner.toolbar": "Workflow-Symbolleiste",
3206
+ "workflowDesigner.bpmnToolbar": "BPMN-Designer-Symbolleiste",
3207
+ "workflowDesigner.palette": "BPMN-Elementpalette",
3208
+ "workflowDesigner.canvas": "Workflow-Arbeitsfläche",
3209
+ "workflowDesigner.bpmnCanvas": "BPMN-Arbeitsfläche",
3210
+ "workflowDesigner.minimap": "Minikarte",
3211
+ "workflowDesigner.expand": "Erweitern",
3212
+ "workflowDesigner.collapse": "Reduzieren",
3213
+ "workflowDesigner.connect": "Verbinden",
3214
+ "workflowDesigner.startConnect": "Verbindung starten",
3215
+ "workflowDesigner.delete": "Löschen",
3216
+ "workflowDesigner.deleteElement": "Element löschen",
3217
+ "workflowDesigner.next": "Weiter",
3218
+ "workflowDesigner.connectHint": "Klicken Sie auf ein Zielelement, um zu verbinden, oder auf eine leere Fläche, um abzubrechen",
3219
+ "workflowDesigner.properties": "Eigenschaften",
3220
+ "workflowDesigner.propertiesOf": "Eigenschaften: {name}",
3221
+ "workflowDesigner.assignee": "Zugewiesen an",
3222
+ "workflowDesigner.dueDate": "Fälligkeitsdatum",
3223
+ "workflowDesigner.dueDatePlaceholder": "P3D (3 Tage)",
3224
+ "workflowDesigner.priority": "Priorität",
3225
+ "workflowDesigner.documentation": "Dokumentation",
3226
+ "workflowDesigner.timer": "Timer (ISO 8601)",
3227
+ "workflowDesigner.timerPlaceholder": "PT1H (1 Stunde) oder R3/PT1H (3 Wiederholungen)",
3228
+ "workflowDesigner.defaultFlow": "Standardablauf",
3229
+ "workflowDesigner.flowOf": "Ablauf: {name}",
3230
+ "workflowDesigner.condition": "Bedingung",
3231
+ "workflowDesigner.deleteFlow": "Ablauf löschen",
3232
+ "workflowDesigner.variables": "Prozessvariablen",
3233
+ "workflowDesigner.addVariable": "Variable hinzufügen",
3234
+ "workflowDesigner.simActiveElement": "Simulation aktiv — aktuelles Element:",
3235
+ "workflowDesigner.simActiveState": "Simulation aktiv — aktueller Zustand:",
3236
+ "workflowDesigner.endSimulation": "Simulation beenden",
3237
+ "workflowDesigner.addState": "Zustand",
3238
+ "workflowDesigner.addApproval": "Genehmigung",
3239
+ "workflowDesigner.newState": "Neuer Zustand",
3240
+ "workflowDesigner.stateLabel": "Zustand: {name}",
3241
+ "workflowDesigner.stateName": "Zustandsname",
3242
+ "workflowDesigner.deleteState": "Zustand {name} löschen",
3243
+ "workflowDesigner.stateProps": "Zustandseigenschaften",
3244
+ "workflowDesigner.stateType": "Zustandstyp",
3245
+ "workflowDesigner.val.noInitial": "Kein Anfangszustand",
3246
+ "workflowDesigner.val.multiInitial": "Mehr als ein Anfangszustand",
3247
+ "workflowDesigner.val.noFinal": "Kein Endzustand",
3248
+ "workflowDesigner.val.deadEnd": 'Zustand "{name}" hat keine ausgehenden Übergänge (Sackgasse)',
3249
+ "workflowDesigner.val.orphan": 'Zustand "{name}" ist nicht erreichbar (verwaist)',
3250
+ "workflowDesigner.val.bpmnNoStart": "Der Prozess muss mindestens ein Startereignis haben",
3251
+ "workflowDesigner.val.bpmnNoEnd": "Der Prozess muss mindestens ein Endereignis haben",
3252
+ "workflowDesigner.val.startNoOut": 'Startereignis "{name}" hat keinen ausgehenden Ablauf',
3253
+ "workflowDesigner.val.endNoIn": 'Endereignis "{name}" hat keinen eingehenden Ablauf',
3254
+ "workflowDesigner.val.unreachable": 'Element "{name}" ist nicht erreichbar',
3255
+ "workflowDesigner.val.elemNoOut": 'Element "{name}" hat keinen ausgehenden Ablauf',
3256
+ "workflowDesigner.val.xorNoConditions": 'Exklusives Gateway "{name}" sollte Bedingungen an seinen Abläufen haben',
3257
+ "tutorial.workflowDesigner.toolbar.title": "Symbolleiste",
3258
+ "tutorial.workflowDesigner.toolbar.content": "Fügen Sie Zustände und Genehmigungen hinzu, führen Sie eine Simulation aus und testen oder veröffentlichen Sie dann den Workflow.",
3259
+ "tutorial.workflowDesigner.canvas.title": "Arbeitsfläche",
3260
+ "tutorial.workflowDesigner.canvas.content": "Ziehen Sie, um Zustände anzuordnen, klicken Sie auf einen, um ihn zu bearbeiten, und verbinden Sie sie zu Übergängen.",
3261
+ "tutorial.workflowDesigner.minimap.title": "Minikarte",
3262
+ "tutorial.workflowDesigner.minimap.content": "Eine Vogelperspektive des gesamten Ablaufs für die schnelle Navigation.",
3263
+ "entityEditor.col.name": "Name",
3264
+ "entityEditor.col.displayName": "Anzeigename",
3265
+ "entityEditor.col.table": "Tabelle",
3266
+ "entityEditor.col.fields": "Felder",
3267
+ "entityEditor.col.fields.help": "Anzahl der für diese Entität definierten Felder",
3268
+ "entityEditor.col.flags": "Flags",
3269
+ "entityEditor.flag.audited": "Auditiert — verfolgt, wer jeden Datensatz wann geändert hat",
3270
+ "entityEditor.flag.audited.abbr": "Audit",
3271
+ "entityEditor.flag.softDelete": "Soft-Delete — Zeilen werden als gelöscht markiert, aber nie physisch entfernt",
3272
+ "entityEditor.flag.softDelete.abbr": "Soft-Del",
3273
+ "entityEditor.search": "Entitäten suchen…",
3274
+ "entityEditor.empty": "Noch keine Entitäten. Erstellen Sie eine, um zu beginnen.",
3275
+ "entityEditor.new": "Neue Entität",
3276
+ "entityEditor.back": "Entitäten",
3277
+ "entityEditor.backHint": "Zurück zur Entitätsliste",
3278
+ "entityEditor.delete": "Löschen",
3279
+ "entityEditor.deleteHint": "Diese Entität löschen",
3280
+ "entityEditor.untitled": "Unbenannte Entität",
3281
+ "entityEditor.tab.general": "Allgemein",
3282
+ "entityEditor.tab.fields": "Felder",
3283
+ "entityEditor.tab.validation": "Validierung",
3284
+ "entityEditor.tab.er": "ER-Diagramm",
3285
+ "entityEditor.field.name": "Name",
3286
+ "entityEditor.field.type": "Typ",
3287
+ "entityEditor.field.flags": "Einschränkungen",
3288
+ "entityEditor.field.flags.help": "Schlüssel-/Pflicht-/Eindeutigkeits-/Index-Einschränkungen für dieses Feld",
3289
+ "entityEditor.flag.pk": "Primärschlüssel",
3290
+ "entityEditor.flag.fk": "Fremdschlüssel",
3291
+ "entityEditor.flag.required": "Erforderlich (NOT NULL)",
3292
+ "entityEditor.flag.unique": "Eindeutig",
3293
+ "entityEditor.flag.indexed": "Indiziert",
3294
+ "entityEditor.field.back": "Felder",
3295
+ "entityEditor.field.backHint": "Zurück zur Feldliste",
3296
+ "entityEditor.field.untitled": "Neues Feld",
3297
+ "entityEditor.field.done": "Fertig",
3298
+ "entityEditor.field.add": "Feld hinzufügen",
3299
+ "entityEditor.field.search": "Felder suchen…",
3300
+ "entityEditor.field.empty": "Noch keine Felder. Fügen Sie eines hinzu, um diese Entität zu definieren.",
3301
+ "tutorial.themeBuilder.presets.title": "Presets",
3302
+ "tutorial.themeBuilder.presets.content": "Beginnen Sie mit einem integrierten Preset und passen Sie es dann an — der schnellste Weg zu einer stimmigen Palette.",
3303
+ "tutorial.themeBuilder.sections.title": "Token-Abschnitte",
3304
+ "tutorial.themeBuilder.sections.content": "Bearbeiten Sie Tokens nach Abschnitt: Farben, Hintergründe, Text, Rahmen, Abstände und Typografie.",
3305
+ "tutorial.themeBuilder.preview.title": "Live-Vorschau",
3306
+ "tutorial.themeBuilder.preview.content": "Jede Änderung wird sofort an Beispielkomponenten angezeigt, sodass Sie das Theme beim Erstellen beurteilen können.",
3307
+ "tutorial.themeBuilder.export.title": "Benennen, anwenden & exportieren",
3308
+ "tutorial.themeBuilder.export.content": "Benennen Sie Ihr Theme, wenden Sie es auf die Seite an oder exportieren Sie es als JSON / CSS-Variablen zur Wiederverwendung.",
3309
+ "dataSourceBuilder.namePlaceholder": "Name der Datenquelle…",
3310
+ "dataSourceBuilder.nameAria": "Name der Datenquelle",
3311
+ "tutorial.dataSourceBuilder.name.title": "Name & Schlüssel",
3312
+ "tutorial.dataSourceBuilder.name.content": "Geben Sie der Datenquelle einen lesbaren Namen; ihr stabiler Schlüssel (von Ansichten genutzt) wird automatisch erzeugt und daneben angezeigt.",
3313
+ "lifecycleHooks.enabled": "Aktiviert",
3314
+ "lifecycleHooks.handler": "Handler",
3315
+ "lifecycleHooks.selectHandler": "— Handler wählen —",
3316
+ "lifecycleHooks.handlerPlaceholder": "Handler (z. B. scripts/on-create.js)",
3317
+ "lifecycleHooks.conditionPlaceholder": "Bedingung (optional)",
3318
+ "lifecycleHooks.condition": "Bedingung",
3319
+ "lifecycleHooks.moveUp": "Nach oben",
3320
+ "lifecycleHooks.moveDown": "Nach unten",
3321
+ "lifecycleHooks.removeBinding": "Bindung entfernen",
3322
+ "lifecycleHooks.addHandler": "Handler hinzufügen",
3323
+ "tutorial.lifecycleHooks.bindings.title": "Trigger & Bindungen",
3324
+ "tutorial.lifecycleHooks.bindings.content": "Jeder Trigger listet seine gebundenen Handler. Fügen Sie einen Handler hinzu, schalten Sie das Aktiviert-Flag um, ändern Sie die Reihenfolge und legen Sie optional eine Bedingung fest, die die Ausführung steuert.",
3325
+ "revisionHistory.revisions": "Versionen",
3326
+ "revisionHistory.compare": "Vergleichen",
3327
+ "revisionHistory.restore": "Wiederherstellen",
3328
+ "revisionHistory.diffEmpty": "Wählen Sie eine Version und eine weitere zum Vergleich.",
3329
+ "tutorial.revisionHistory.list.title": "Versionen",
3330
+ "tutorial.revisionHistory.list.content": "Wählen Sie eine Version und klicken Sie bei einer anderen auf „Vergleichen“, um sie gegenüberzustellen. „Wiederherstellen“ setzt auf diese Version zurück.",
3331
+ "tutorial.revisionHistory.diff.title": "Unterschiede",
3332
+ "tutorial.revisionHistory.diff.content": "Prüfen Sie die Unterschiede der beiden ausgewählten Versionen nebeneinander.",
3333
+ "accessManager.roles": "Rollen",
3334
+ "accessManager.newRole": "Neue Rolle…",
3335
+ "accessManager.newRoleAria": "Name der neuen Rolle",
3336
+ "accessManager.add": "Hinzufügen",
3337
+ "accessManager.removeRole": "Rolle entfernen",
3338
+ "accessManager.resources": "Ressourcen",
3339
+ "accessManager.applyDescendants": "Auf alle Nachfahren anwenden",
3340
+ "accessManager.empty": "Wählen Sie eine Ressource, um ihren Zugriff zu bearbeiten.",
3341
+ "accessManager.collapse": "Einklappen",
3342
+ "accessManager.expand": "Ausklappen",
3343
+ "tutorial.accessManager.tree.title": "Rollen & Ressourcen",
3344
+ "tutorial.accessManager.tree.content": "Fügen Sie Rollen hinzu oder entfernen Sie sie, und wählen Sie dann eine Ressource aus dem Baum (Module → Ansichten / Entitäten / Aktionen), um ihren Zugriff zu bearbeiten.",
3345
+ "tutorial.accessManager.matrix.title": "Berechtigungsmatrix",
3346
+ "tutorial.accessManager.matrix.content": "Gewähren Sie jeder Rolle ihre Aktionen für die ausgewählte Ressource. Nutzen Sie die Sammelaktionen oder „Auf alle Nachfahren anwenden“, um Berechtigungen im Baum nach unten zu kaskadieren.",
3347
+ "viewEditor.name": "Ansichtsname",
3348
+ "viewEditor.kindAria": "Ansichtstyp",
3349
+ "viewEditor.kind.form": "Formular",
3350
+ "viewEditor.kind.detail": "Detail",
3351
+ "viewEditor.kind.grid": "Raster",
3352
+ "viewEditor.kind.dashboard": "Dashboard",
3353
+ "viewEditor.kind.content": "Inhalt",
3354
+ "viewEditor.kind.report": "Bericht",
3355
+ "viewEditor.kind.print": "Druck",
3356
+ "viewEditor.kind.mix": "Mix",
3357
+ "viewEditor.fromEntity": "Neu aus Entität…",
3358
+ "viewEditor.fromEntityAria": "Neue Ansicht aus Entität",
3359
+ "viewEditor.export": "Export…",
3360
+ "viewEditor.exportAria": "Ansicht exportieren",
3361
+ "viewEditor.mode.design": "Design",
3362
+ "viewEditor.mode.preview": "Vorschau",
3363
+ "viewEditor.mode.source": "Quelle",
3364
+ "viewEditor.valid": "✓ Gültig",
3365
+ "viewEditor.save": "Speichern",
3366
+ "viewEditor.add": "Hinzufügen",
3367
+ "viewEditor.cat.Inputs": "Eingaben",
3368
+ "viewEditor.cat.Data": "Daten",
3369
+ "viewEditor.cat.BI": "BI",
3370
+ "viewEditor.cat.Actions": "Aktionen",
3371
+ "viewEditor.cat.Display": "Anzeige",
3372
+ "viewEditor.pal.textInput": "Text",
3373
+ "viewEditor.pal.textArea": "Textbereich",
3374
+ "viewEditor.pal.numberInput": "Zahl",
3375
+ "viewEditor.pal.select": "Auswahl",
3376
+ "viewEditor.pal.checkbox": "Kontrollkästchen",
3377
+ "viewEditor.pal.datePicker": "Datum",
3378
+ "viewEditor.pal.dataGrid": "Datenraster",
3379
+ "viewEditor.pal.chart": "Diagramm",
3380
+ "viewEditor.pal.kpi": "KPI",
3381
+ "viewEditor.pal.button": "Schaltfläche",
3382
+ "viewEditor.pal.text": "Text",
3383
+ "viewEditor.pal.heading": "Überschrift",
3384
+ "viewEditor.pal.badge": "Abzeichen",
3385
+ "viewEditor.pal.card": "Karte",
3386
+ "viewEditor.addRow": "Zeile hinzufügen",
3387
+ "viewEditor.canvasEmpty": "Fügen Sie eine Zeile hinzu und ziehen Sie Steuerelemente aus der Palette — oder starten Sie mit „Neu aus Entität“.",
3388
+ "viewEditor.removeCell": "Zelle entfernen",
3389
+ "viewEditor.emptyRow": "leere Zeile",
3390
+ "viewEditor.control": "Steuerelement",
3391
+ "viewEditor.cp.label": "Beschriftung",
3392
+ "viewEditor.cp.colSpan": "Spaltenbreite",
3393
+ "viewEditor.cp.binding": "Bindung",
3394
+ "viewEditor.cp.dataSource": "Datenquelle",
3395
+ "viewEditor.cp.none": "— keine —",
3396
+ "viewEditor.cp.field": "Feld",
3397
+ "viewEditor.cp.fieldPath": "Feldpfad",
3398
+ "viewEditor.cp.twoWay": "Bidirektional",
3399
+ "viewEditor.cp.permissions": "Berechtigungen",
3400
+ "viewEditor.cp.role": "Rolle",
3401
+ "viewEditor.cp.addPermission": "Berechtigung",
3402
+ "viewEditor.cp.events": "Ereignisse",
3403
+ "viewEditor.cp.eventPlaceholder": "Ereignis (onClick / onValueChange…)",
3404
+ "viewEditor.cp.removeEvent": "Ereignis entfernen",
3405
+ "viewEditor.cp.addEvent": "Ereignis",
3406
+ "viewEditor.remove": "Entfernen",
3407
+ "viewEditor.ds.title": "Datenquellen",
3408
+ "viewEditor.ds.hint": "Wählen Sie ein Steuerelement, um Props, Bindung & Ereignisse zu bearbeiten.",
3409
+ "viewEditor.ds.key": "Schlüssel",
3410
+ "viewEditor.ds.endpoint": "Endpunkt",
3411
+ "viewEditor.ds.autoLoad": "Auto-Laden",
3412
+ "viewEditor.ds.add": "Datenquelle",
3413
+ "tutorial.viewEditor.palette.title": "Palette",
3414
+ "tutorial.viewEditor.palette.content": "Fügen Sie Steuerelemente aus der Palette in das Raster ein — Eingaben, Datenraster, Diagramme, KPIs, Schaltflächen und Anzeigeblöcke.",
3415
+ "tutorial.viewEditor.canvas.title": "Arbeitsfläche",
3416
+ "tutorial.viewEditor.canvas.content": "Ordnen Sie Zellen in Zeilen an und legen Sie die Spaltenbreite jeder Zelle fest. Klicken Sie auf eine Zelle, um sie zu konfigurieren.",
3417
+ "tutorial.viewEditor.props.title": "Eigenschaften",
3418
+ "tutorial.viewEditor.props.content": "Konfigurieren Sie das ausgewählte Steuerelement: Props, Datenbindung, Rollenberechtigungen und Ereignisaktionen. Wenn nichts ausgewählt ist, verwalten Sie die Datenquellen der Ansicht.",
3419
+ "tutorial.viewEditor.modes.title": "Design / Vorschau / Quelle",
3420
+ "tutorial.viewEditor.modes.content": "Wechseln Sie zwischen dem visuellen Designer, einer Live-Vorschau und dem rohen NiceViewDefinition-JSON. Speichern Sie, wenn die Ansicht gültig ist.",
3421
+ "manifestEditor.tab.scripts": "Skripte",
3422
+ "manifestEditor.tab.lifecycle": "Lebenszyklus",
3423
+ "manifestEditor.tab.history": "Verlauf",
3424
+ "manifestEditor.status.valid": "✓ Gültig",
3425
+ "manifestEditor.status.issues": "Probleme",
3426
+ "manifestEditor.sections": "Abschnitte",
3427
+ "manifestEditor.output": "Ausgabe",
3428
+ "tutorial.manifestEditor.sections.title": "Abschnitte",
3429
+ "tutorial.manifestEditor.sections.content": "Das Manifest ist in schemabasierte Abschnitte unterteilt — wechseln Sie über die Tabs oben.",
3430
+ "tutorial.manifestEditor.json.title": "Formular ⇄ JSON",
3431
+ "tutorial.manifestEditor.json.content": "Jeder Abschnitt kann als visuelles Formular oder als rohes JSON bearbeitet werden — nutzen Sie den Umschalter im Abschnitt.",
3432
+ "i18nEditor.keyHead": "Schlüssel",
3433
+ "i18nEditor.removeLocale": "Sprache entfernen",
3434
+ "i18nEditor.keyAria": "Übersetzungsschlüssel",
3435
+ "i18nEditor.removeKey": "Schlüssel entfernen",
3436
+ "i18nEditor.empty": "Noch keine Übersetzungsschlüssel.",
3437
+ "i18nEditor.newKeyPlaceholder": "neuer.schlüssel",
3438
+ "i18nEditor.newKeyAria": "Neuer Schlüssel",
3439
+ "i18nEditor.addKey": "Schlüssel",
3440
+ "i18nEditor.newLocalePlaceholder": "Sprache (z. B. de)",
3441
+ "i18nEditor.newLocaleAria": "Neue Sprache",
3442
+ "i18nEditor.addLocale": "Sprache",
3443
+ "tutorial.i18nEditor.grid.title": "Schlüssel × Sprachen",
3444
+ "tutorial.i18nEditor.grid.content": "Jede Zeile ist ein Übersetzungsschlüssel und jede Spalte eine Sprache. Bearbeiten Sie eine Zelle, um eine Übersetzung festzulegen; bernsteinfarbene Zellen fehlen noch.",
3445
+ "tutorial.i18nEditor.add.title": "Schlüssel & Sprachen hinzufügen",
3446
+ "tutorial.i18nEditor.add.content": "Fügen Sie hier einen neuen Übersetzungsschlüssel oder eine neue Sprachspalte hinzu; neue Zellen sind leer und werden als fehlend markiert.",
3447
+ "moduleEditor.tab.entities": "Entitäten",
3448
+ "moduleEditor.tab.i18n": "i18n",
3449
+ "moduleEditor.tab.views": "Ansichten",
3450
+ "moduleEditor.tab.workflows": "Workflows",
3451
+ "moduleEditor.tab.data": "Daten",
3452
+ "moduleEditor.tab.permissions": "Berechtigungen",
3453
+ "moduleEditor.tab.scripts": "Skripte",
3454
+ "moduleEditor.tab.lifecycle": "Lebenszyklus",
3455
+ "moduleEditor.tab.history": "Verlauf",
3456
+ "moduleEditor.tab.source": "Quelle",
3457
+ "moduleEditor.status.valid": "✓ Gültig",
3458
+ "moduleEditor.status.issues": "Probleme",
3459
+ "moduleEditor.searchModules": "Module suchen…",
3460
+ "moduleEditor.loading": "Wird geladen…",
3461
+ "moduleEditor.noModules": "Keine Module. Öffnen Sie zuerst eine Quelle.",
3462
+ "moduleEditor.title": "Modul-Editor",
3463
+ "moduleEditor.refresh": "Aktualisieren",
3464
+ "moduleEditor.validate": "Validieren",
3465
+ "moduleEditor.saving": "Wird gespeichert…",
3466
+ "moduleEditor.save": "Speichern",
3467
+ "moduleEditor.output": "Ausgabe",
3468
+ "moduleEditor.placeholder": "Wählen Sie links ein Modul, um mit der Bearbeitung zu beginnen.",
3469
+ "moduleEditor.delete": "Löschen",
3470
+ "moduleEditor.views.select": "Ansicht wählen",
3471
+ "moduleEditor.views.placeholder": "— Ansicht wählen —",
3472
+ "moduleEditor.views.new": "Neue Ansicht",
3473
+ "moduleEditor.views.empty": "Keine Ansicht ausgewählt. Erstellen Sie eine und nutzen Sie „Neu aus Entität“ im Editor.",
3474
+ "moduleEditor.workflows.select": "Workflow wählen",
3475
+ "moduleEditor.workflows.placeholder": "— Workflow wählen —",
3476
+ "moduleEditor.workflows.new": "Neuer Workflow",
3477
+ "moduleEditor.workflows.empty": "Kein Workflow ausgewählt. Erstellen Sie einen, um Zustände und Übergänge zu entwerfen.",
3478
+ "moduleEditor.data.select": "Datenquelle wählen",
3479
+ "moduleEditor.data.placeholder": "— Datenquelle wählen —",
3480
+ "moduleEditor.data.new": "Neue Datenquelle",
3481
+ "moduleEditor.data.empty": "Keine Datenquelle ausgewählt. Erstellen Sie eine, um eine Abfrage aus dem Modulschema zu erstellen.",
3482
+ "tutorial.moduleEditor.intro.title": "Modul-Editor",
3483
+ "tutorial.moduleEditor.intro.content": "Entwerfen Sie ein ganzes Modul von Anfang bis Ende — Manifest, Entitäten, Übersetzungen, Ansichten, Workflows, Datenquellen und Berechtigungen — und validieren und speichern Sie dann.",
3484
+ "tutorial.moduleEditor.tabs.title": "Modulteile",
3485
+ "tutorial.moduleEditor.tabs.content": "Jeder Tab bearbeitet einen Teil des Moduls: Manifest-Abschnitte, Entitäten, i18n, Ansichten, Workflows, Datenquellen, Berechtigungen und mehr.",
3486
+ "tutorial.moduleEditor.output.title": "Ausgabe",
3487
+ "tutorial.moduleEditor.output.content": "Validierungsergebnisse sowie Lade-/Speichervorgänge werden hier protokolliert.",
3488
+ "tutorial.schemaForm.viewToggle.title": "Formular ⇄ JSON",
3489
+ "tutorial.schemaForm.viewToggle.content": "Wechseln Sie zwischen dem visuellen Formular und dem rohen JSON-Wert — praktisch für Profis und zum Kopieren.",
3490
+ "tutorial.schemaForm.validation.title": "Live-Validierung",
3491
+ "tutorial.schemaForm.validation.content": "Werte werden während der Eingabe gegen das Schema geprüft; Probleme werden unter dem Formular aufgelistet.",
3492
+ "schemaForm.tab.form": "Formular",
3493
+ "schemaForm.tab.json": "JSON",
3494
+ "schemaForm.tab.json.help": "Den rohen JSON-Wert direkt bearbeiten",
3495
+ "schemaForm.invalidJson": "Ungültiges JSON",
2572
3496
  "tutorial.schemaForm.intro.content": "Dieses Formular wird aus einem Schema erzeugt. Pflichtfelder und Validierungsfehler werden markiert; nutzen Sie den JSON-Umschalter für die Rohbearbeitung.",
2573
3497
  "tutorial.entityEditor.intro.title": "Entitäten-Editor",
2574
3498
  "tutorial.entityEditor.intro.content": "Fügen Sie links Entitäten hinzu und bearbeiten Sie rechts die Metadaten jeder Entität sowie ihre Felder (Typ, Schlüssel, Einschränkungen).",
@@ -2719,7 +3643,7 @@ const x = [
2719
3643
  "tutorial.dmxEditor.intro.title": "DMX-Editor",
2720
3644
  "tutorial.dmxEditor.intro.content": "Wählen Sie das FTDI-Gerät und den Port und stellen Sie dann den Wert jedes DMX-Kanals mit den Reglern ein, um Ihre Lichtgeräte live zu steuern.",
2721
3645
  "sidebar.prefs.order.visibilityHint": "Die Reihenfolge gilt für die obersten Einträge innerhalb jeder Quellgruppe. Klappen Sie einen Quell-Header zu, um beim Überprüfen der Änderung nur die obersten Einträge zu sehen."
2722
- }, Ce = {
3646
+ }, Se = {
2723
3647
  "tutorial.viewEditor.intro.title": "Éditeur de vues",
2724
3648
  "tutorial.viewEditor.intro.content": "Concevez n’importe quel type de vue au même endroit : choisissez le type (ou générez depuis une entité), faites glisser des contrôles depuis la palette dans les cellules de la grille, puis configurez chaque cellule — liaison de données, permissions par rôle et actions d’événement. Basculez Conception / Aperçu / Source et enregistrez quand c’est valide.",
2725
3649
  ok: "OK",
@@ -3445,6 +4369,314 @@ const x = [
3445
4369
  "tutorial.manifestEditor.intro.title": "Éditeur de manifeste",
3446
4370
  "tutorial.manifestEditor.intro.content": "Modifiez le manifeste par sections pilotées par schéma. Basculez entre Formulaire ⇄ JSON par section ; la validation apparaît dans la barre d’état.",
3447
4371
  "tutorial.schemaForm.intro.title": "Formulaire de schéma",
4372
+ "workflowDesigner.name": "Nom",
4373
+ "workflowDesigner.type": "Type",
4374
+ "workflowDesigner.select": "— Sélectionner —",
4375
+ "workflowDesigner.simulate": "Simuler",
4376
+ "workflowDesigner.stop": "Arrêter",
4377
+ "workflowDesigner.test": "Test",
4378
+ "workflowDesigner.publish": "Publier",
4379
+ "workflowDesigner.export": "Exporter",
4380
+ "workflowDesigner.import": "Importer",
4381
+ "workflowDesigner.zoomIn": "Zoom avant",
4382
+ "workflowDesigner.zoomOut": "Zoom arrière",
4383
+ "workflowDesigner.resetView": "Réinitialiser la vue",
4384
+ "workflowDesigner.simulateFlow": "Simuler le flux",
4385
+ "workflowDesigner.testProcess": "Tester le processus",
4386
+ "workflowDesigner.publishProcess": "Publier le processus",
4387
+ "workflowDesigner.exportBpmn": "Exporter le XML BPMN",
4388
+ "workflowDesigner.importBpmn": "Importer le XML BPMN",
4389
+ "workflowDesigner.toolbar": "Barre d’outils du workflow",
4390
+ "workflowDesigner.bpmnToolbar": "Barre d’outils du concepteur BPMN",
4391
+ "workflowDesigner.palette": "Palette d’éléments BPMN",
4392
+ "workflowDesigner.canvas": "Zone de travail du workflow",
4393
+ "workflowDesigner.bpmnCanvas": "Zone de travail BPMN",
4394
+ "workflowDesigner.minimap": "Minicarte",
4395
+ "workflowDesigner.expand": "Développer",
4396
+ "workflowDesigner.collapse": "Réduire",
4397
+ "workflowDesigner.connect": "Connecter",
4398
+ "workflowDesigner.startConnect": "Démarrer la connexion",
4399
+ "workflowDesigner.delete": "Supprimer",
4400
+ "workflowDesigner.deleteElement": "Supprimer l’élément",
4401
+ "workflowDesigner.next": "Suivant",
4402
+ "workflowDesigner.connectHint": "Cliquez sur un élément cible pour connecter, ou sur un espace vide pour annuler",
4403
+ "workflowDesigner.properties": "Propriétés",
4404
+ "workflowDesigner.propertiesOf": "Propriétés : {name}",
4405
+ "workflowDesigner.assignee": "Affecté à",
4406
+ "workflowDesigner.dueDate": "Échéance",
4407
+ "workflowDesigner.dueDatePlaceholder": "P3D (3 jours)",
4408
+ "workflowDesigner.priority": "Priorité",
4409
+ "workflowDesigner.documentation": "Documentation",
4410
+ "workflowDesigner.timer": "Minuteur (ISO 8601)",
4411
+ "workflowDesigner.timerPlaceholder": "PT1H (1 heure) ou R3/PT1H (3 répétitions)",
4412
+ "workflowDesigner.defaultFlow": "Flux par défaut",
4413
+ "workflowDesigner.flowOf": "Flux : {name}",
4414
+ "workflowDesigner.condition": "Condition",
4415
+ "workflowDesigner.deleteFlow": "Supprimer le flux",
4416
+ "workflowDesigner.variables": "Variables du processus",
4417
+ "workflowDesigner.addVariable": "Ajouter une variable",
4418
+ "workflowDesigner.simActiveElement": "Simulation active — élément actuel :",
4419
+ "workflowDesigner.simActiveState": "Simulation active — état actuel :",
4420
+ "workflowDesigner.endSimulation": "Terminer la simulation",
4421
+ "workflowDesigner.addState": "État",
4422
+ "workflowDesigner.addApproval": "Approbation",
4423
+ "workflowDesigner.newState": "Nouvel état",
4424
+ "workflowDesigner.stateLabel": "État : {name}",
4425
+ "workflowDesigner.stateName": "Nom de l’état",
4426
+ "workflowDesigner.deleteState": "Supprimer l’état {name}",
4427
+ "workflowDesigner.stateProps": "Propriétés de l’état",
4428
+ "workflowDesigner.stateType": "Type d’état",
4429
+ "workflowDesigner.val.noInitial": "Aucun état initial",
4430
+ "workflowDesigner.val.multiInitial": "Plus d’un état initial",
4431
+ "workflowDesigner.val.noFinal": "Aucun état final",
4432
+ "workflowDesigner.val.deadEnd": 'L’état "{name}" n’a aucune transition sortante (impasse)',
4433
+ "workflowDesigner.val.orphan": 'L’état "{name}" est inaccessible (orphelin)',
4434
+ "workflowDesigner.val.bpmnNoStart": "Le processus doit comporter au moins un événement de début",
4435
+ "workflowDesigner.val.bpmnNoEnd": "Le processus doit comporter au moins un événement de fin",
4436
+ "workflowDesigner.val.startNoOut": 'L’événement de début "{name}" n’a aucun flux sortant',
4437
+ "workflowDesigner.val.endNoIn": 'L’événement de fin "{name}" n’a aucun flux entrant',
4438
+ "workflowDesigner.val.unreachable": 'L’élément "{name}" est inaccessible',
4439
+ "workflowDesigner.val.elemNoOut": 'L’élément "{name}" n’a aucun flux sortant',
4440
+ "workflowDesigner.val.xorNoConditions": 'La passerelle exclusive "{name}" devrait avoir des conditions sur ses flux',
4441
+ "tutorial.workflowDesigner.toolbar.title": "Barre d’outils",
4442
+ "tutorial.workflowDesigner.toolbar.content": "Ajoutez des états et des approbations, lancez une simulation, puis testez ou publiez le workflow.",
4443
+ "tutorial.workflowDesigner.canvas.title": "Zone de travail",
4444
+ "tutorial.workflowDesigner.canvas.content": "Faites glisser pour disposer les états, cliquez sur l’un pour le modifier et reliez-les en transitions.",
4445
+ "tutorial.workflowDesigner.minimap.title": "Minicarte",
4446
+ "tutorial.workflowDesigner.minimap.content": "Une vue d’ensemble de tout le flux pour une navigation rapide.",
4447
+ "entityEditor.col.name": "Nom",
4448
+ "entityEditor.col.displayName": "Nom d’affichage",
4449
+ "entityEditor.col.table": "Table",
4450
+ "entityEditor.col.fields": "Champs",
4451
+ "entityEditor.col.fields.help": "Nombre de champs définis sur cette entité",
4452
+ "entityEditor.col.flags": "Indicateurs",
4453
+ "entityEditor.flag.audited": "Audité — suit qui a modifié chaque enregistrement et quand",
4454
+ "entityEditor.flag.audited.abbr": "Audit",
4455
+ "entityEditor.flag.softDelete": "Suppression logique — les lignes sont marquées comme supprimées, jamais physiquement effacées",
4456
+ "entityEditor.flag.softDelete.abbr": "Suppr. log.",
4457
+ "entityEditor.search": "Rechercher des entités…",
4458
+ "entityEditor.empty": "Aucune entité pour l’instant. Créez-en une pour commencer.",
4459
+ "entityEditor.new": "Nouvelle entité",
4460
+ "entityEditor.back": "Entités",
4461
+ "entityEditor.backHint": "Retour à la liste des entités",
4462
+ "entityEditor.delete": "Supprimer",
4463
+ "entityEditor.deleteHint": "Supprimer cette entité",
4464
+ "entityEditor.untitled": "Entité sans titre",
4465
+ "entityEditor.tab.general": "Général",
4466
+ "entityEditor.tab.fields": "Champs",
4467
+ "entityEditor.tab.validation": "Validation",
4468
+ "entityEditor.tab.er": "Diagramme ER",
4469
+ "entityEditor.field.name": "Nom",
4470
+ "entityEditor.field.type": "Type",
4471
+ "entityEditor.field.flags": "Contraintes",
4472
+ "entityEditor.field.flags.help": "Contraintes de clé / obligatoire / unique / indexé sur ce champ",
4473
+ "entityEditor.flag.pk": "Clé primaire",
4474
+ "entityEditor.flag.fk": "Clé étrangère",
4475
+ "entityEditor.flag.required": "Obligatoire (NOT NULL)",
4476
+ "entityEditor.flag.unique": "Unique",
4477
+ "entityEditor.flag.indexed": "Indexé",
4478
+ "entityEditor.field.back": "Champs",
4479
+ "entityEditor.field.backHint": "Retour à la liste des champs",
4480
+ "entityEditor.field.untitled": "Nouveau champ",
4481
+ "entityEditor.field.done": "Terminé",
4482
+ "entityEditor.field.add": "Ajouter un champ",
4483
+ "entityEditor.field.search": "Rechercher des champs…",
4484
+ "entityEditor.field.empty": "Aucun champ pour l’instant. Ajoutez-en un pour définir cette entité.",
4485
+ "tutorial.themeBuilder.presets.title": "Préréglages",
4486
+ "tutorial.themeBuilder.presets.content": "Partez d’un préréglage intégré, puis personnalisez — le moyen le plus rapide d’obtenir une palette cohérente.",
4487
+ "tutorial.themeBuilder.sections.title": "Sections de tokens",
4488
+ "tutorial.themeBuilder.sections.content": "Modifiez les tokens par section : couleurs, arrière-plans, texte, bordures, espacements et typographie.",
4489
+ "tutorial.themeBuilder.preview.title": "Aperçu en direct",
4490
+ "tutorial.themeBuilder.preview.content": "Chaque modification est prévisualisée instantanément sur des composants d’exemple, pour juger le thème pendant sa création.",
4491
+ "tutorial.themeBuilder.export.title": "Nommer, appliquer et exporter",
4492
+ "tutorial.themeBuilder.export.content": "Nommez votre thème, appliquez-le à la page ou exportez-le en JSON / variables CSS pour le réutiliser.",
4493
+ "dataSourceBuilder.namePlaceholder": "Nom de la source de données…",
4494
+ "dataSourceBuilder.nameAria": "Nom de la source de données",
4495
+ "tutorial.dataSourceBuilder.name.title": "Nom et clé",
4496
+ "tutorial.dataSourceBuilder.name.content": "Donnez à la source de données un nom lisible ; sa clé stable (utilisée par les vues) est générée automatiquement et affichée à côté.",
4497
+ "lifecycleHooks.enabled": "Activé",
4498
+ "lifecycleHooks.handler": "Gestionnaire",
4499
+ "lifecycleHooks.selectHandler": "— choisir un gestionnaire —",
4500
+ "lifecycleHooks.handlerPlaceholder": "gestionnaire (p. ex. scripts/on-create.js)",
4501
+ "lifecycleHooks.conditionPlaceholder": "condition (facultative)",
4502
+ "lifecycleHooks.condition": "Condition",
4503
+ "lifecycleHooks.moveUp": "Monter",
4504
+ "lifecycleHooks.moveDown": "Descendre",
4505
+ "lifecycleHooks.removeBinding": "Supprimer la liaison",
4506
+ "lifecycleHooks.addHandler": "Ajouter un gestionnaire",
4507
+ "tutorial.lifecycleHooks.bindings.title": "Déclencheurs et liaisons",
4508
+ "tutorial.lifecycleHooks.bindings.content": "Chaque déclencheur liste ses gestionnaires liés. Ajoutez un gestionnaire, basculez son indicateur d’activation, réordonnez-le et définissez éventuellement une condition qui régit l’exécution.",
4509
+ "revisionHistory.revisions": "Versions",
4510
+ "revisionHistory.compare": "Comparer",
4511
+ "revisionHistory.restore": "Restaurer",
4512
+ "revisionHistory.diffEmpty": "Sélectionnez une version et choisissez-en une autre à comparer.",
4513
+ "tutorial.revisionHistory.list.title": "Versions",
4514
+ "tutorial.revisionHistory.list.content": "Sélectionnez une version, puis cliquez sur « Comparer » sur une autre pour les comparer. « Restaurer » revient à cette version.",
4515
+ "tutorial.revisionHistory.diff.title": "Différences",
4516
+ "tutorial.revisionHistory.diff.content": "Examinez les différences côte à côte entre les deux versions sélectionnées.",
4517
+ "accessManager.roles": "Rôles",
4518
+ "accessManager.newRole": "Nouveau rôle…",
4519
+ "accessManager.newRoleAria": "Nom du nouveau rôle",
4520
+ "accessManager.add": "Ajouter",
4521
+ "accessManager.removeRole": "Supprimer le rôle",
4522
+ "accessManager.resources": "Ressources",
4523
+ "accessManager.applyDescendants": "Appliquer à tous les descendants",
4524
+ "accessManager.empty": "Sélectionnez une ressource pour modifier son accès.",
4525
+ "accessManager.collapse": "Réduire",
4526
+ "accessManager.expand": "Développer",
4527
+ "tutorial.accessManager.tree.title": "Rôles et ressources",
4528
+ "tutorial.accessManager.tree.content": "Ajoutez et supprimez des rôles, puis choisissez une ressource dans l’arbre (modules → vues / entités / actions) pour modifier son accès.",
4529
+ "tutorial.accessManager.matrix.title": "Matrice des autorisations",
4530
+ "tutorial.accessManager.matrix.content": "Accordez à chaque rôle ses actions pour la ressource sélectionnée. Utilisez les contrôles groupés ou « Appliquer à tous les descendants » pour propager les autorisations dans l’arbre.",
4531
+ "viewEditor.name": "Nom de la vue",
4532
+ "viewEditor.kindAria": "Type de vue",
4533
+ "viewEditor.kind.form": "Formulaire",
4534
+ "viewEditor.kind.detail": "Détail",
4535
+ "viewEditor.kind.grid": "Grille",
4536
+ "viewEditor.kind.dashboard": "Tableau de bord",
4537
+ "viewEditor.kind.content": "Contenu",
4538
+ "viewEditor.kind.report": "Rapport",
4539
+ "viewEditor.kind.print": "Impression",
4540
+ "viewEditor.kind.mix": "Mix",
4541
+ "viewEditor.fromEntity": "Nouveau depuis une entité…",
4542
+ "viewEditor.fromEntityAria": "Nouvelle vue depuis une entité",
4543
+ "viewEditor.export": "Exporter…",
4544
+ "viewEditor.exportAria": "Exporter la vue",
4545
+ "viewEditor.mode.design": "Conception",
4546
+ "viewEditor.mode.preview": "Aperçu",
4547
+ "viewEditor.mode.source": "Source",
4548
+ "viewEditor.valid": "✓ Valide",
4549
+ "viewEditor.save": "Enregistrer",
4550
+ "viewEditor.add": "Ajouter",
4551
+ "viewEditor.cat.Inputs": "Saisies",
4552
+ "viewEditor.cat.Data": "Données",
4553
+ "viewEditor.cat.BI": "BI",
4554
+ "viewEditor.cat.Actions": "Actions",
4555
+ "viewEditor.cat.Display": "Affichage",
4556
+ "viewEditor.pal.textInput": "Texte",
4557
+ "viewEditor.pal.textArea": "Zone de texte",
4558
+ "viewEditor.pal.numberInput": "Nombre",
4559
+ "viewEditor.pal.select": "Sélection",
4560
+ "viewEditor.pal.checkbox": "Case à cocher",
4561
+ "viewEditor.pal.datePicker": "Date",
4562
+ "viewEditor.pal.dataGrid": "Grille de données",
4563
+ "viewEditor.pal.chart": "Graphique",
4564
+ "viewEditor.pal.kpi": "KPI",
4565
+ "viewEditor.pal.button": "Bouton",
4566
+ "viewEditor.pal.text": "Texte",
4567
+ "viewEditor.pal.heading": "Titre",
4568
+ "viewEditor.pal.badge": "Badge",
4569
+ "viewEditor.pal.card": "Carte",
4570
+ "viewEditor.addRow": "Ajouter une ligne",
4571
+ "viewEditor.canvasEmpty": "Ajoutez une ligne, puis déposez des contrôles depuis la palette — ou démarrez « Nouveau depuis une entité ».",
4572
+ "viewEditor.removeCell": "Supprimer la cellule",
4573
+ "viewEditor.emptyRow": "ligne vide",
4574
+ "viewEditor.control": "Contrôle",
4575
+ "viewEditor.cp.label": "Libellé",
4576
+ "viewEditor.cp.colSpan": "Largeur de colonne",
4577
+ "viewEditor.cp.binding": "Liaison",
4578
+ "viewEditor.cp.dataSource": "Source de données",
4579
+ "viewEditor.cp.none": "— aucune —",
4580
+ "viewEditor.cp.field": "Champ",
4581
+ "viewEditor.cp.fieldPath": "chemin du champ",
4582
+ "viewEditor.cp.twoWay": "Bidirectionnel",
4583
+ "viewEditor.cp.permissions": "Autorisations",
4584
+ "viewEditor.cp.role": "rôle",
4585
+ "viewEditor.cp.addPermission": "Autorisation",
4586
+ "viewEditor.cp.events": "Événements",
4587
+ "viewEditor.cp.eventPlaceholder": "événement (onClick / onValueChange…)",
4588
+ "viewEditor.cp.removeEvent": "Supprimer l’événement",
4589
+ "viewEditor.cp.addEvent": "Événement",
4590
+ "viewEditor.remove": "Supprimer",
4591
+ "viewEditor.ds.title": "Sources de données",
4592
+ "viewEditor.ds.hint": "Sélectionnez un contrôle pour modifier ses props, sa liaison et ses événements.",
4593
+ "viewEditor.ds.key": "clé",
4594
+ "viewEditor.ds.endpoint": "point de terminaison",
4595
+ "viewEditor.ds.autoLoad": "chargement auto",
4596
+ "viewEditor.ds.add": "Source de données",
4597
+ "tutorial.viewEditor.palette.title": "Palette",
4598
+ "tutorial.viewEditor.palette.content": "Ajoutez des contrôles depuis la palette dans la grille — saisies, grilles de données, graphiques, KPI, boutons et blocs d’affichage.",
4599
+ "tutorial.viewEditor.canvas.title": "Zone de travail",
4600
+ "tutorial.viewEditor.canvas.content": "Disposez les cellules en lignes et définissez la largeur de colonne de chaque cellule. Cliquez sur une cellule pour la configurer.",
4601
+ "tutorial.viewEditor.props.title": "Propriétés",
4602
+ "tutorial.viewEditor.props.content": "Configurez le contrôle sélectionné : props, liaison de données, autorisations de rôle et actions d’événement. Sans sélection, gérez les sources de données de la vue.",
4603
+ "tutorial.viewEditor.modes.title": "Conception / Aperçu / Source",
4604
+ "tutorial.viewEditor.modes.content": "Basculez entre le concepteur visuel, un aperçu en direct et le JSON brut NiceViewDefinition. Enregistrez lorsque la vue est valide.",
4605
+ "manifestEditor.tab.scripts": "Scripts",
4606
+ "manifestEditor.tab.lifecycle": "Cycle de vie",
4607
+ "manifestEditor.tab.history": "Historique",
4608
+ "manifestEditor.status.valid": "✓ Valide",
4609
+ "manifestEditor.status.issues": "problèmes",
4610
+ "manifestEditor.sections": "sections",
4611
+ "manifestEditor.output": "Sortie",
4612
+ "tutorial.manifestEditor.sections.title": "Sections",
4613
+ "tutorial.manifestEditor.sections.content": "Le manifeste est divisé en sections basées sur un schéma — passez de l’une à l’autre via les onglets en haut.",
4614
+ "tutorial.manifestEditor.json.title": "Formulaire ⇄ JSON",
4615
+ "tutorial.manifestEditor.json.content": "Chaque section peut être éditée comme un formulaire visuel ou en JSON brut — utilisez le bouton dans la section.",
4616
+ "i18nEditor.keyHead": "Clé",
4617
+ "i18nEditor.removeLocale": "Supprimer la langue",
4618
+ "i18nEditor.keyAria": "Clé de traduction",
4619
+ "i18nEditor.removeKey": "Supprimer la clé",
4620
+ "i18nEditor.empty": "Aucune clé de traduction.",
4621
+ "i18nEditor.newKeyPlaceholder": "nouvelle.clé",
4622
+ "i18nEditor.newKeyAria": "Nouvelle clé",
4623
+ "i18nEditor.addKey": "Clé",
4624
+ "i18nEditor.newLocalePlaceholder": "langue (p. ex. de)",
4625
+ "i18nEditor.newLocaleAria": "Nouvelle langue",
4626
+ "i18nEditor.addLocale": "Langue",
4627
+ "tutorial.i18nEditor.grid.title": "Clés × langues",
4628
+ "tutorial.i18nEditor.grid.content": "Chaque ligne est une clé de traduction et chaque colonne une langue. Modifiez une cellule pour définir une traduction ; les cellules ambrées sont encore manquantes.",
4629
+ "tutorial.i18nEditor.add.title": "Ajouter des clés et des langues",
4630
+ "tutorial.i18nEditor.add.content": "Ajoutez ici une nouvelle clé de traduction ou une nouvelle colonne de langue ; les nouvelles cellules sont vides et signalées comme manquantes.",
4631
+ "moduleEditor.tab.entities": "Entités",
4632
+ "moduleEditor.tab.i18n": "i18n",
4633
+ "moduleEditor.tab.views": "Vues",
4634
+ "moduleEditor.tab.workflows": "Workflows",
4635
+ "moduleEditor.tab.data": "Données",
4636
+ "moduleEditor.tab.permissions": "Autorisations",
4637
+ "moduleEditor.tab.scripts": "Scripts",
4638
+ "moduleEditor.tab.lifecycle": "Cycle de vie",
4639
+ "moduleEditor.tab.history": "Historique",
4640
+ "moduleEditor.tab.source": "Source",
4641
+ "moduleEditor.status.valid": "✓ Valide",
4642
+ "moduleEditor.status.issues": "problèmes",
4643
+ "moduleEditor.searchModules": "Rechercher des modules…",
4644
+ "moduleEditor.loading": "Chargement…",
4645
+ "moduleEditor.noModules": "Aucun module. Ouvrez d’abord une source.",
4646
+ "moduleEditor.title": "Éditeur de modules",
4647
+ "moduleEditor.refresh": "Actualiser",
4648
+ "moduleEditor.validate": "Valider",
4649
+ "moduleEditor.saving": "Enregistrement…",
4650
+ "moduleEditor.save": "Enregistrer",
4651
+ "moduleEditor.output": "Sortie",
4652
+ "moduleEditor.placeholder": "Sélectionnez un module à gauche pour commencer l’édition.",
4653
+ "moduleEditor.delete": "Supprimer",
4654
+ "moduleEditor.views.select": "Sélectionner une vue",
4655
+ "moduleEditor.views.placeholder": "— sélectionner une vue —",
4656
+ "moduleEditor.views.new": "Nouvelle vue",
4657
+ "moduleEditor.views.empty": "Aucune vue sélectionnée. Créez-en une, puis utilisez « Nouveau depuis une entité » dans l’éditeur.",
4658
+ "moduleEditor.workflows.select": "Sélectionner un workflow",
4659
+ "moduleEditor.workflows.placeholder": "— sélectionner un workflow —",
4660
+ "moduleEditor.workflows.new": "Nouveau workflow",
4661
+ "moduleEditor.workflows.empty": "Aucun workflow sélectionné. Créez-en un pour concevoir les états et les transitions.",
4662
+ "moduleEditor.data.select": "Sélectionner une source de données",
4663
+ "moduleEditor.data.placeholder": "— sélectionner une source de données —",
4664
+ "moduleEditor.data.new": "Nouvelle source de données",
4665
+ "moduleEditor.data.empty": "Aucune source de données sélectionnée. Créez-en une pour construire une requête à partir du schéma du module.",
4666
+ "tutorial.moduleEditor.intro.title": "Éditeur de modules",
4667
+ "tutorial.moduleEditor.intro.content": "Concevez un module entier de bout en bout — manifeste, entités, traductions, vues, workflows, sources de données et autorisations — puis validez et enregistrez.",
4668
+ "tutorial.moduleEditor.tabs.title": "Parties du module",
4669
+ "tutorial.moduleEditor.tabs.content": "Chaque onglet édite une partie du module : sections du manifeste, entités, i18n, vues, workflows, sources de données, autorisations et plus.",
4670
+ "tutorial.moduleEditor.output.title": "Sortie",
4671
+ "tutorial.moduleEditor.output.content": "Les résultats de validation et l’activité de chargement/enregistrement sont consignés ici.",
4672
+ "tutorial.schemaForm.viewToggle.title": "Formulaire ⇄ JSON",
4673
+ "tutorial.schemaForm.viewToggle.content": "Basculez entre le formulaire visuel et la valeur JSON brute — pratique pour les utilisateurs avancés et le copier-coller.",
4674
+ "tutorial.schemaForm.validation.title": "Validation en direct",
4675
+ "tutorial.schemaForm.validation.content": "Les valeurs sont validées selon le schéma au fur et à mesure ; les problèmes sont listés sous le formulaire.",
4676
+ "schemaForm.tab.form": "Formulaire",
4677
+ "schemaForm.tab.json": "JSON",
4678
+ "schemaForm.tab.json.help": "Modifier directement la valeur JSON brute",
4679
+ "schemaForm.invalidJson": "JSON invalide",
3448
4680
  "tutorial.schemaForm.intro.content": "Ce formulaire est généré à partir d’un schéma. Les champs obligatoires et les erreurs de validation sont signalés ; utilisez le bouton JSON pour l’édition brute.",
3449
4681
  "tutorial.entityEditor.intro.title": "Éditeur d’entités",
3450
4682
  "tutorial.entityEditor.intro.content": "Ajoutez des entités à gauche, puis modifiez à droite les métadonnées de chaque entité et ses champs (type, clés, contraintes).",
@@ -3595,7 +4827,7 @@ const x = [
3595
4827
  "tutorial.dmxEditor.intro.title": "Éditeur DMX",
3596
4828
  "tutorial.dmxEditor.intro.content": "Choisissez le périphérique FTDI et le port, puis réglez la valeur de chaque canal DMX avec les curseurs pour piloter vos projecteurs en direct.",
3597
4829
  "sidebar.prefs.order.visibilityHint": "L’ordre s’applique aux éléments de premier niveau dans chaque groupe de source. Repliez un en-tête de source pour ne voir que les entrées de premier niveau lors de la vérification."
3598
- }, Se = {
4830
+ }, Ce = {
3599
4831
  "tutorial.viewEditor.intro.title": "Editor de vistas",
3600
4832
  "tutorial.viewEditor.intro.content": "Crea cualquier tipo de vista desde un solo lugar: elige el tipo (o genéralo desde una entidad), arrastra controles desde la paleta a las celdas de la cuadrícula y configura cada celda — enlace de datos, permisos por rol y acciones de eventos. Cambia entre Diseño / Vista previa / Código y guarda cuando sea válido.",
3601
4833
  ok: "OK",
@@ -3981,6 +5213,314 @@ const x = [
3981
5213
  "tutorial.manifestEditor.intro.title": "Editor de manifiesto",
3982
5214
  "tutorial.manifestEditor.intro.content": "Edita el manifiesto en secciones basadas en esquema. Cambia entre Formulario ⇄ JSON por sección; la validación aparece en la barra de estado.",
3983
5215
  "tutorial.schemaForm.intro.title": "Formulario de esquema",
5216
+ "workflowDesigner.name": "Nombre",
5217
+ "workflowDesigner.type": "Tipo",
5218
+ "workflowDesigner.select": "— Seleccionar —",
5219
+ "workflowDesigner.simulate": "Simular",
5220
+ "workflowDesigner.stop": "Detener",
5221
+ "workflowDesigner.test": "Probar",
5222
+ "workflowDesigner.publish": "Publicar",
5223
+ "workflowDesigner.export": "Exportar",
5224
+ "workflowDesigner.import": "Importar",
5225
+ "workflowDesigner.zoomIn": "Acercar",
5226
+ "workflowDesigner.zoomOut": "Alejar",
5227
+ "workflowDesigner.resetView": "Restablecer vista",
5228
+ "workflowDesigner.simulateFlow": "Simular el flujo",
5229
+ "workflowDesigner.testProcess": "Probar el proceso",
5230
+ "workflowDesigner.publishProcess": "Publicar el proceso",
5231
+ "workflowDesigner.exportBpmn": "Exportar XML BPMN",
5232
+ "workflowDesigner.importBpmn": "Importar XML BPMN",
5233
+ "workflowDesigner.toolbar": "Barra de herramientas del flujo",
5234
+ "workflowDesigner.bpmnToolbar": "Barra de herramientas del diseñador BPMN",
5235
+ "workflowDesigner.palette": "Paleta de elementos BPMN",
5236
+ "workflowDesigner.canvas": "Lienzo del flujo",
5237
+ "workflowDesigner.bpmnCanvas": "Lienzo BPMN",
5238
+ "workflowDesigner.minimap": "Minimapa",
5239
+ "workflowDesigner.expand": "Expandir",
5240
+ "workflowDesigner.collapse": "Contraer",
5241
+ "workflowDesigner.connect": "Conectar",
5242
+ "workflowDesigner.startConnect": "Iniciar conexión",
5243
+ "workflowDesigner.delete": "Eliminar",
5244
+ "workflowDesigner.deleteElement": "Eliminar elemento",
5245
+ "workflowDesigner.next": "Siguiente",
5246
+ "workflowDesigner.connectHint": "Haz clic en un elemento de destino para conectar, o en un espacio vacío para cancelar",
5247
+ "workflowDesigner.properties": "Propiedades",
5248
+ "workflowDesigner.propertiesOf": "Propiedades: {name}",
5249
+ "workflowDesigner.assignee": "Asignado a",
5250
+ "workflowDesigner.dueDate": "Fecha límite",
5251
+ "workflowDesigner.dueDatePlaceholder": "P3D (3 días)",
5252
+ "workflowDesigner.priority": "Prioridad",
5253
+ "workflowDesigner.documentation": "Documentación",
5254
+ "workflowDesigner.timer": "Temporizador (ISO 8601)",
5255
+ "workflowDesigner.timerPlaceholder": "PT1H (1 hora) o R3/PT1H (3 repeticiones)",
5256
+ "workflowDesigner.defaultFlow": "Flujo predeterminado",
5257
+ "workflowDesigner.flowOf": "Flujo: {name}",
5258
+ "workflowDesigner.condition": "Condición",
5259
+ "workflowDesigner.deleteFlow": "Eliminar flujo",
5260
+ "workflowDesigner.variables": "Variables del proceso",
5261
+ "workflowDesigner.addVariable": "Añadir variable",
5262
+ "workflowDesigner.simActiveElement": "Simulación activa — elemento actual:",
5263
+ "workflowDesigner.simActiveState": "Simulación activa — estado actual:",
5264
+ "workflowDesigner.endSimulation": "Finalizar simulación",
5265
+ "workflowDesigner.addState": "Estado",
5266
+ "workflowDesigner.addApproval": "Aprobación",
5267
+ "workflowDesigner.newState": "Nuevo estado",
5268
+ "workflowDesigner.stateLabel": "Estado: {name}",
5269
+ "workflowDesigner.stateName": "Nombre del estado",
5270
+ "workflowDesigner.deleteState": "Eliminar estado {name}",
5271
+ "workflowDesigner.stateProps": "Propiedades del estado",
5272
+ "workflowDesigner.stateType": "Tipo de estado",
5273
+ "workflowDesigner.val.noInitial": "No hay estado inicial",
5274
+ "workflowDesigner.val.multiInitial": "Más de un estado inicial",
5275
+ "workflowDesigner.val.noFinal": "No hay estado final",
5276
+ "workflowDesigner.val.deadEnd": 'El estado "{name}" no tiene transiciones salientes (sin salida)',
5277
+ "workflowDesigner.val.orphan": 'El estado "{name}" es inalcanzable (huérfano)',
5278
+ "workflowDesigner.val.bpmnNoStart": "El proceso debe tener al menos un evento de inicio",
5279
+ "workflowDesigner.val.bpmnNoEnd": "El proceso debe tener al menos un evento de fin",
5280
+ "workflowDesigner.val.startNoOut": 'El evento de inicio "{name}" no tiene flujo saliente',
5281
+ "workflowDesigner.val.endNoIn": 'El evento de fin "{name}" no tiene flujo entrante',
5282
+ "workflowDesigner.val.unreachable": 'El elemento "{name}" es inalcanzable',
5283
+ "workflowDesigner.val.elemNoOut": 'El elemento "{name}" no tiene flujo saliente',
5284
+ "workflowDesigner.val.xorNoConditions": 'La compuerta exclusiva "{name}" debería tener condiciones en sus flujos',
5285
+ "tutorial.workflowDesigner.toolbar.title": "Barra de herramientas",
5286
+ "tutorial.workflowDesigner.toolbar.content": "Añade estados y aprobaciones, ejecuta una simulación y luego prueba o publica el flujo.",
5287
+ "tutorial.workflowDesigner.canvas.title": "Lienzo",
5288
+ "tutorial.workflowDesigner.canvas.content": "Arrastra para organizar los estados, haz clic en uno para editarlo y conéctalos en transiciones.",
5289
+ "tutorial.workflowDesigner.minimap.title": "Minimapa",
5290
+ "tutorial.workflowDesigner.minimap.content": "Una vista general de todo el flujo para una navegación rápida.",
5291
+ "entityEditor.col.name": "Nombre",
5292
+ "entityEditor.col.displayName": "Nombre visible",
5293
+ "entityEditor.col.table": "Tabla",
5294
+ "entityEditor.col.fields": "Campos",
5295
+ "entityEditor.col.fields.help": "Número de campos definidos en esta entidad",
5296
+ "entityEditor.col.flags": "Indicadores",
5297
+ "entityEditor.flag.audited": "Auditado — registra quién cambió cada registro y cuándo",
5298
+ "entityEditor.flag.audited.abbr": "Auditoría",
5299
+ "entityEditor.flag.softDelete": "Borrado lógico — las filas se marcan como eliminadas, nunca se borran físicamente",
5300
+ "entityEditor.flag.softDelete.abbr": "Borr. lóg.",
5301
+ "entityEditor.search": "Buscar entidades…",
5302
+ "entityEditor.empty": "Aún no hay entidades. Crea una para empezar.",
5303
+ "entityEditor.new": "Nueva entidad",
5304
+ "entityEditor.back": "Entidades",
5305
+ "entityEditor.backHint": "Volver a la lista de entidades",
5306
+ "entityEditor.delete": "Eliminar",
5307
+ "entityEditor.deleteHint": "Eliminar esta entidad",
5308
+ "entityEditor.untitled": "Entidad sin título",
5309
+ "entityEditor.tab.general": "General",
5310
+ "entityEditor.tab.fields": "Campos",
5311
+ "entityEditor.tab.validation": "Validación",
5312
+ "entityEditor.tab.er": "Diagrama ER",
5313
+ "entityEditor.field.name": "Nombre",
5314
+ "entityEditor.field.type": "Tipo",
5315
+ "entityEditor.field.flags": "Restricciones",
5316
+ "entityEditor.field.flags.help": "Restricciones de clave / obligatorio / único / indexado en este campo",
5317
+ "entityEditor.flag.pk": "Clave primaria",
5318
+ "entityEditor.flag.fk": "Clave foránea",
5319
+ "entityEditor.flag.required": "Obligatorio (NOT NULL)",
5320
+ "entityEditor.flag.unique": "Único",
5321
+ "entityEditor.flag.indexed": "Indexado",
5322
+ "entityEditor.field.back": "Campos",
5323
+ "entityEditor.field.backHint": "Volver a la lista de campos",
5324
+ "entityEditor.field.untitled": "Nuevo campo",
5325
+ "entityEditor.field.done": "Hecho",
5326
+ "entityEditor.field.add": "Añadir campo",
5327
+ "entityEditor.field.search": "Buscar campos…",
5328
+ "entityEditor.field.empty": "Aún no hay campos. Añade uno para definir esta entidad.",
5329
+ "tutorial.themeBuilder.presets.title": "Preajustes",
5330
+ "tutorial.themeBuilder.presets.content": "Empieza con un preajuste integrado y luego personaliza — la forma más rápida de lograr una paleta coherente.",
5331
+ "tutorial.themeBuilder.sections.title": "Secciones de tokens",
5332
+ "tutorial.themeBuilder.sections.content": "Edita los tokens por sección: colores, fondos, texto, bordes, espaciado y tipografía.",
5333
+ "tutorial.themeBuilder.preview.title": "Vista previa en vivo",
5334
+ "tutorial.themeBuilder.preview.content": "Cada cambio se previsualiza al instante en componentes de muestra, para juzgar el tema mientras lo creas.",
5335
+ "tutorial.themeBuilder.export.title": "Nombrar, aplicar y exportar",
5336
+ "tutorial.themeBuilder.export.content": "Da nombre a tu tema, aplícalo a la página o expórtalo como JSON / variables CSS para reutilizarlo.",
5337
+ "dataSourceBuilder.namePlaceholder": "Nombre del origen de datos…",
5338
+ "dataSourceBuilder.nameAria": "Nombre del origen de datos",
5339
+ "tutorial.dataSourceBuilder.name.title": "Nombre y clave",
5340
+ "tutorial.dataSourceBuilder.name.content": "Da al origen de datos un nombre legible; su clave estable (usada por las vistas) se genera automáticamente y se muestra al lado.",
5341
+ "lifecycleHooks.enabled": "Habilitado",
5342
+ "lifecycleHooks.handler": "Controlador",
5343
+ "lifecycleHooks.selectHandler": "— seleccionar controlador —",
5344
+ "lifecycleHooks.handlerPlaceholder": "controlador (p. ej. scripts/on-create.js)",
5345
+ "lifecycleHooks.conditionPlaceholder": "condición (opcional)",
5346
+ "lifecycleHooks.condition": "Condición",
5347
+ "lifecycleHooks.moveUp": "Subir",
5348
+ "lifecycleHooks.moveDown": "Bajar",
5349
+ "lifecycleHooks.removeBinding": "Quitar vinculación",
5350
+ "lifecycleHooks.addHandler": "Añadir controlador",
5351
+ "tutorial.lifecycleHooks.bindings.title": "Disparadores y vinculaciones",
5352
+ "tutorial.lifecycleHooks.bindings.content": "Cada disparador enumera sus controladores vinculados. Añade un controlador, alterna su indicador de habilitado, reordénalo y, opcionalmente, define una condición que controle la ejecución.",
5353
+ "revisionHistory.revisions": "Versiones",
5354
+ "revisionHistory.compare": "Comparar",
5355
+ "revisionHistory.restore": "Restaurar",
5356
+ "revisionHistory.diffEmpty": "Selecciona una versión y elige otra para comparar.",
5357
+ "tutorial.revisionHistory.list.title": "Versiones",
5358
+ "tutorial.revisionHistory.list.content": "Selecciona una versión y luego haz clic en «Comparar» en otra para compararlas. «Restaurar» revierte a esa versión.",
5359
+ "tutorial.revisionHistory.diff.title": "Diferencias",
5360
+ "tutorial.revisionHistory.diff.content": "Revisa las diferencias lado a lado entre las dos versiones seleccionadas.",
5361
+ "accessManager.roles": "Roles",
5362
+ "accessManager.newRole": "Nuevo rol…",
5363
+ "accessManager.newRoleAria": "Nombre del nuevo rol",
5364
+ "accessManager.add": "Añadir",
5365
+ "accessManager.removeRole": "Quitar rol",
5366
+ "accessManager.resources": "Recursos",
5367
+ "accessManager.applyDescendants": "Aplicar a todos los descendientes",
5368
+ "accessManager.empty": "Selecciona un recurso para editar su acceso.",
5369
+ "accessManager.collapse": "Contraer",
5370
+ "accessManager.expand": "Expandir",
5371
+ "tutorial.accessManager.tree.title": "Roles y recursos",
5372
+ "tutorial.accessManager.tree.content": "Añade y quita roles, luego elige un recurso del árbol (módulos → vistas / entidades / acciones) para editar su acceso.",
5373
+ "tutorial.accessManager.matrix.title": "Matriz de permisos",
5374
+ "tutorial.accessManager.matrix.content": "Concede a cada rol sus acciones para el recurso seleccionado. Usa los controles masivos o «Aplicar a todos los descendientes» para propagar los permisos por el árbol.",
5375
+ "viewEditor.name": "Nombre de la vista",
5376
+ "viewEditor.kindAria": "Tipo de vista",
5377
+ "viewEditor.kind.form": "Formulario",
5378
+ "viewEditor.kind.detail": "Detalle",
5379
+ "viewEditor.kind.grid": "Cuadrícula",
5380
+ "viewEditor.kind.dashboard": "Panel",
5381
+ "viewEditor.kind.content": "Contenido",
5382
+ "viewEditor.kind.report": "Informe",
5383
+ "viewEditor.kind.print": "Impresión",
5384
+ "viewEditor.kind.mix": "Mix",
5385
+ "viewEditor.fromEntity": "Nueva desde entidad…",
5386
+ "viewEditor.fromEntityAria": "Nueva vista desde entidad",
5387
+ "viewEditor.export": "Exportar…",
5388
+ "viewEditor.exportAria": "Exportar vista",
5389
+ "viewEditor.mode.design": "Diseño",
5390
+ "viewEditor.mode.preview": "Vista previa",
5391
+ "viewEditor.mode.source": "Origen",
5392
+ "viewEditor.valid": "✓ Válido",
5393
+ "viewEditor.save": "Guardar",
5394
+ "viewEditor.add": "Añadir",
5395
+ "viewEditor.cat.Inputs": "Entradas",
5396
+ "viewEditor.cat.Data": "Datos",
5397
+ "viewEditor.cat.BI": "BI",
5398
+ "viewEditor.cat.Actions": "Acciones",
5399
+ "viewEditor.cat.Display": "Visualización",
5400
+ "viewEditor.pal.textInput": "Texto",
5401
+ "viewEditor.pal.textArea": "Área de texto",
5402
+ "viewEditor.pal.numberInput": "Número",
5403
+ "viewEditor.pal.select": "Selección",
5404
+ "viewEditor.pal.checkbox": "Casilla",
5405
+ "viewEditor.pal.datePicker": "Fecha",
5406
+ "viewEditor.pal.dataGrid": "Cuadrícula de datos",
5407
+ "viewEditor.pal.chart": "Gráfico",
5408
+ "viewEditor.pal.kpi": "KPI",
5409
+ "viewEditor.pal.button": "Botón",
5410
+ "viewEditor.pal.text": "Texto",
5411
+ "viewEditor.pal.heading": "Encabezado",
5412
+ "viewEditor.pal.badge": "Insignia",
5413
+ "viewEditor.pal.card": "Tarjeta",
5414
+ "viewEditor.addRow": "Añadir fila",
5415
+ "viewEditor.canvasEmpty": "Añade una fila y luego suelta controles desde la paleta — o empieza con «Nueva desde entidad».",
5416
+ "viewEditor.removeCell": "Quitar celda",
5417
+ "viewEditor.emptyRow": "fila vacía",
5418
+ "viewEditor.control": "Control",
5419
+ "viewEditor.cp.label": "Etiqueta",
5420
+ "viewEditor.cp.colSpan": "Ancho de columna",
5421
+ "viewEditor.cp.binding": "Vinculación",
5422
+ "viewEditor.cp.dataSource": "Origen de datos",
5423
+ "viewEditor.cp.none": "— ninguno —",
5424
+ "viewEditor.cp.field": "Campo",
5425
+ "viewEditor.cp.fieldPath": "ruta del campo",
5426
+ "viewEditor.cp.twoWay": "Bidireccional",
5427
+ "viewEditor.cp.permissions": "Permisos",
5428
+ "viewEditor.cp.role": "rol",
5429
+ "viewEditor.cp.addPermission": "Permiso",
5430
+ "viewEditor.cp.events": "Eventos",
5431
+ "viewEditor.cp.eventPlaceholder": "evento (onClick / onValueChange…)",
5432
+ "viewEditor.cp.removeEvent": "Quitar evento",
5433
+ "viewEditor.cp.addEvent": "Evento",
5434
+ "viewEditor.remove": "Quitar",
5435
+ "viewEditor.ds.title": "Orígenes de datos",
5436
+ "viewEditor.ds.hint": "Selecciona un control para editar sus props, vinculación y eventos.",
5437
+ "viewEditor.ds.key": "clave",
5438
+ "viewEditor.ds.endpoint": "punto de conexión",
5439
+ "viewEditor.ds.autoLoad": "carga automática",
5440
+ "viewEditor.ds.add": "Origen de datos",
5441
+ "tutorial.viewEditor.palette.title": "Paleta",
5442
+ "tutorial.viewEditor.palette.content": "Añade controles desde la paleta a la cuadrícula — entradas, cuadrículas de datos, gráficos, KPI, botones y bloques de visualización.",
5443
+ "tutorial.viewEditor.canvas.title": "Lienzo",
5444
+ "tutorial.viewEditor.canvas.content": "Organiza las celdas en filas y define el ancho de columna de cada celda. Haz clic en una celda para configurarla.",
5445
+ "tutorial.viewEditor.props.title": "Propiedades",
5446
+ "tutorial.viewEditor.props.content": "Configura el control seleccionado: props, vinculación de datos, permisos de rol y acciones de evento. Sin selección, gestiona los orígenes de datos de la vista.",
5447
+ "tutorial.viewEditor.modes.title": "Diseño / Vista previa / Origen",
5448
+ "tutorial.viewEditor.modes.content": "Alterna entre el diseñador visual, una vista previa en vivo y el JSON sin procesar de NiceViewDefinition. Guarda cuando la vista sea válida.",
5449
+ "manifestEditor.tab.scripts": "Scripts",
5450
+ "manifestEditor.tab.lifecycle": "Ciclo de vida",
5451
+ "manifestEditor.tab.history": "Historial",
5452
+ "manifestEditor.status.valid": "✓ Válido",
5453
+ "manifestEditor.status.issues": "problemas",
5454
+ "manifestEditor.sections": "secciones",
5455
+ "manifestEditor.output": "Salida",
5456
+ "tutorial.manifestEditor.sections.title": "Secciones",
5457
+ "tutorial.manifestEditor.sections.content": "El manifiesto se divide en secciones basadas en esquema; cambia entre ellas con las pestañas de arriba.",
5458
+ "tutorial.manifestEditor.json.title": "Formulario ⇄ JSON",
5459
+ "tutorial.manifestEditor.json.content": "Cada sección se puede editar como formulario visual o como JSON sin procesar; usa el conmutador dentro de la sección.",
5460
+ "i18nEditor.keyHead": "Clave",
5461
+ "i18nEditor.removeLocale": "Quitar idioma",
5462
+ "i18nEditor.keyAria": "Clave de traducción",
5463
+ "i18nEditor.removeKey": "Quitar clave",
5464
+ "i18nEditor.empty": "Aún no hay claves de traducción.",
5465
+ "i18nEditor.newKeyPlaceholder": "nueva.clave",
5466
+ "i18nEditor.newKeyAria": "Nueva clave",
5467
+ "i18nEditor.addKey": "Clave",
5468
+ "i18nEditor.newLocalePlaceholder": "idioma (p. ej. de)",
5469
+ "i18nEditor.newLocaleAria": "Nuevo idioma",
5470
+ "i18nEditor.addLocale": "Idioma",
5471
+ "tutorial.i18nEditor.grid.title": "Claves × idiomas",
5472
+ "tutorial.i18nEditor.grid.content": "Cada fila es una clave de traducción y cada columna un idioma. Edita una celda para establecer una traducción; las celdas ámbar aún faltan.",
5473
+ "tutorial.i18nEditor.add.title": "Añadir claves e idiomas",
5474
+ "tutorial.i18nEditor.add.content": "Añade aquí una nueva clave de traducción o una nueva columna de idioma; las nuevas celdas están vacías y se marcan como faltantes.",
5475
+ "moduleEditor.tab.entities": "Entidades",
5476
+ "moduleEditor.tab.i18n": "i18n",
5477
+ "moduleEditor.tab.views": "Vistas",
5478
+ "moduleEditor.tab.workflows": "Flujos",
5479
+ "moduleEditor.tab.data": "Datos",
5480
+ "moduleEditor.tab.permissions": "Permisos",
5481
+ "moduleEditor.tab.scripts": "Scripts",
5482
+ "moduleEditor.tab.lifecycle": "Ciclo de vida",
5483
+ "moduleEditor.tab.history": "Historial",
5484
+ "moduleEditor.tab.source": "Origen",
5485
+ "moduleEditor.status.valid": "✓ Válido",
5486
+ "moduleEditor.status.issues": "problemas",
5487
+ "moduleEditor.searchModules": "Buscar módulos…",
5488
+ "moduleEditor.loading": "Cargando…",
5489
+ "moduleEditor.noModules": "No hay módulos. Abre primero un origen.",
5490
+ "moduleEditor.title": "Editor de módulos",
5491
+ "moduleEditor.refresh": "Actualizar",
5492
+ "moduleEditor.validate": "Validar",
5493
+ "moduleEditor.saving": "Guardando…",
5494
+ "moduleEditor.save": "Guardar",
5495
+ "moduleEditor.output": "Salida",
5496
+ "moduleEditor.placeholder": "Selecciona un módulo de la izquierda para empezar a editar.",
5497
+ "moduleEditor.delete": "Eliminar",
5498
+ "moduleEditor.views.select": "Seleccionar vista",
5499
+ "moduleEditor.views.placeholder": "— seleccionar vista —",
5500
+ "moduleEditor.views.new": "Nueva vista",
5501
+ "moduleEditor.views.empty": "Ninguna vista seleccionada. Crea una y luego usa «Nueva desde entidad» en el editor.",
5502
+ "moduleEditor.workflows.select": "Seleccionar flujo",
5503
+ "moduleEditor.workflows.placeholder": "— seleccionar flujo —",
5504
+ "moduleEditor.workflows.new": "Nuevo flujo",
5505
+ "moduleEditor.workflows.empty": "Ningún flujo seleccionado. Crea uno para diseñar estados y transiciones.",
5506
+ "moduleEditor.data.select": "Seleccionar origen de datos",
5507
+ "moduleEditor.data.placeholder": "— seleccionar origen de datos —",
5508
+ "moduleEditor.data.new": "Nuevo origen de datos",
5509
+ "moduleEditor.data.empty": "Ningún origen de datos seleccionado. Crea uno para construir una consulta a partir del esquema del módulo.",
5510
+ "tutorial.moduleEditor.intro.title": "Editor de módulos",
5511
+ "tutorial.moduleEditor.intro.content": "Diseña un módulo completo de principio a fin: manifiesto, entidades, traducciones, vistas, flujos, orígenes de datos y permisos; luego valida y guarda.",
5512
+ "tutorial.moduleEditor.tabs.title": "Partes del módulo",
5513
+ "tutorial.moduleEditor.tabs.content": "Cada pestaña edita una parte del módulo: secciones del manifiesto, entidades, i18n, vistas, flujos, orígenes de datos, permisos y más.",
5514
+ "tutorial.moduleEditor.output.title": "Salida",
5515
+ "tutorial.moduleEditor.output.content": "Los resultados de validación y la actividad de carga/guardado se registran aquí.",
5516
+ "tutorial.schemaForm.viewToggle.title": "Formulario ⇄ JSON",
5517
+ "tutorial.schemaForm.viewToggle.content": "Alterna entre el formulario visual y el valor JSON sin procesar — útil para usuarios avanzados y para copiar y pegar.",
5518
+ "tutorial.schemaForm.validation.title": "Validación en vivo",
5519
+ "tutorial.schemaForm.validation.content": "Los valores se validan contra el esquema mientras escribes; los problemas se enumeran debajo del formulario.",
5520
+ "schemaForm.tab.form": "Formulario",
5521
+ "schemaForm.tab.json": "JSON",
5522
+ "schemaForm.tab.json.help": "Editar directamente el valor JSON sin procesar",
5523
+ "schemaForm.invalidJson": "JSON no válido",
3984
5524
  "tutorial.schemaForm.intro.content": "Este formulario se genera a partir de un esquema. Los campos obligatorios y los errores de validación se resaltan; usa el conmutador JSON para la edición en bruto.",
3985
5525
  "tutorial.entityEditor.intro.title": "Editor de entidades",
3986
5526
  "tutorial.entityEditor.intro.content": "Añade entidades a la izquierda y edita a la derecha los metadatos de cada entidad y sus campos (tipo, claves, restricciones).",
@@ -5272,7 +6812,7 @@ const x = [
5272
6812
  "lang.ko": "Koreanska",
5273
6813
  "lang.zh": "Kinesiska",
5274
6814
  "lang.ar": "Arabiska"
5275
- }, Te = {
6815
+ }, xe = {
5276
6816
  ok: "OK",
5277
6817
  cancel: "Avbryt",
5278
6818
  save: "Lagre",
@@ -5335,7 +6875,7 @@ const x = [
5335
6875
  "lang.ko": "Koreansk",
5336
6876
  "lang.zh": "Kinesisk",
5337
6877
  "lang.ar": "Arabisk"
5338
- }, xe = {
6878
+ }, Te = {
5339
6879
  ok: "OK",
5340
6880
  cancel: "Annuller",
5341
6881
  save: "Gem",
@@ -5461,7 +7001,7 @@ const x = [
5461
7001
  "lang.ko": "Korea",
5462
7002
  "lang.zh": "Kiina",
5463
7003
  "lang.ar": "Arabia"
5464
- }, Me = {
7004
+ }, Ne = {
5465
7005
  ok: "OK",
5466
7006
  cancel: "Zrušit",
5467
7007
  save: "Uložit",
@@ -5824,7 +7364,7 @@ const x = [
5824
7364
  "wm.minimizeAll": "Minimalizovat vše",
5825
7365
  "wm.newWindow": "Nové okno",
5826
7366
  "wm.moveToFront": "Přenést dopředu"
5827
- }, Fe = {
7367
+ }, Me = {
5828
7368
  ok: "OK",
5829
7369
  cancel: "Zrušiť",
5830
7370
  save: "Uložiť",
@@ -5887,7 +7427,7 @@ const x = [
5887
7427
  "lang.ko": "Kórejčina",
5888
7428
  "lang.zh": "Čínština",
5889
7429
  "lang.ar": "Arabčina"
5890
- }, Ne = {
7430
+ }, Fe = {
5891
7431
  ok: "OK",
5892
7432
  cancel: "Mégse",
5893
7433
  save: "Mentés",
@@ -6446,6 +7986,314 @@ const x = [
6446
7986
  "tutorial.manifestEditor.intro.title": "Редактор маніфесту",
6447
7987
  "tutorial.manifestEditor.intro.content": "Редагуйте маніфест у розділах на основі схеми. Перемикайте Форма ⇄ JSON для кожного розділу; перевірка з’являється в рядку стану.",
6448
7988
  "tutorial.schemaForm.intro.title": "Форма за схемою",
7989
+ "workflowDesigner.name": "Назва",
7990
+ "workflowDesigner.type": "Тип",
7991
+ "workflowDesigner.select": "— Вибрати —",
7992
+ "workflowDesigner.simulate": "Симулювати",
7993
+ "workflowDesigner.stop": "Стоп",
7994
+ "workflowDesigner.test": "Тест",
7995
+ "workflowDesigner.publish": "Опублікувати",
7996
+ "workflowDesigner.export": "Експорт",
7997
+ "workflowDesigner.import": "Імпорт",
7998
+ "workflowDesigner.zoomIn": "Збільшити",
7999
+ "workflowDesigner.zoomOut": "Зменшити",
8000
+ "workflowDesigner.resetView": "Скинути вигляд",
8001
+ "workflowDesigner.simulateFlow": "Симулювати потік",
8002
+ "workflowDesigner.testProcess": "Тестувати процес",
8003
+ "workflowDesigner.publishProcess": "Опублікувати процес",
8004
+ "workflowDesigner.exportBpmn": "Експортувати BPMN XML",
8005
+ "workflowDesigner.importBpmn": "Імпортувати BPMN XML",
8006
+ "workflowDesigner.toolbar": "Панель інструментів робочого процесу",
8007
+ "workflowDesigner.bpmnToolbar": "Панель інструментів конструктора BPMN",
8008
+ "workflowDesigner.palette": "Палітра елементів BPMN",
8009
+ "workflowDesigner.canvas": "Полотно робочого процесу",
8010
+ "workflowDesigner.bpmnCanvas": "Полотно BPMN",
8011
+ "workflowDesigner.minimap": "Мінікарта",
8012
+ "workflowDesigner.expand": "Розгорнути",
8013
+ "workflowDesigner.collapse": "Згорнути",
8014
+ "workflowDesigner.connect": "З’єднати",
8015
+ "workflowDesigner.startConnect": "Почати з’єднання",
8016
+ "workflowDesigner.delete": "Видалити",
8017
+ "workflowDesigner.deleteElement": "Видалити елемент",
8018
+ "workflowDesigner.next": "Далі",
8019
+ "workflowDesigner.connectHint": "Натисніть на цільовий елемент, щоб з’єднати, або на порожнє місце, щоб скасувати",
8020
+ "workflowDesigner.properties": "Властивості",
8021
+ "workflowDesigner.propertiesOf": "Властивості: {name}",
8022
+ "workflowDesigner.assignee": "Призначено",
8023
+ "workflowDesigner.dueDate": "Термін",
8024
+ "workflowDesigner.dueDatePlaceholder": "P3D (3 дні)",
8025
+ "workflowDesigner.priority": "Пріоритет",
8026
+ "workflowDesigner.documentation": "Документація",
8027
+ "workflowDesigner.timer": "Таймер (ISO 8601)",
8028
+ "workflowDesigner.timerPlaceholder": "PT1H (1 година) або R3/PT1H (3 повторення)",
8029
+ "workflowDesigner.defaultFlow": "Потік за замовчуванням",
8030
+ "workflowDesigner.flowOf": "Потік: {name}",
8031
+ "workflowDesigner.condition": "Умова",
8032
+ "workflowDesigner.deleteFlow": "Видалити потік",
8033
+ "workflowDesigner.variables": "Змінні процесу",
8034
+ "workflowDesigner.addVariable": "Додати змінну",
8035
+ "workflowDesigner.simActiveElement": "Симуляція активна — поточний елемент:",
8036
+ "workflowDesigner.simActiveState": "Симуляція активна — поточний стан:",
8037
+ "workflowDesigner.endSimulation": "Завершити симуляцію",
8038
+ "workflowDesigner.addState": "Стан",
8039
+ "workflowDesigner.addApproval": "Затвердження",
8040
+ "workflowDesigner.newState": "Новий стан",
8041
+ "workflowDesigner.stateLabel": "Стан: {name}",
8042
+ "workflowDesigner.stateName": "Назва стану",
8043
+ "workflowDesigner.deleteState": "Видалити стан {name}",
8044
+ "workflowDesigner.stateProps": "Властивості стану",
8045
+ "workflowDesigner.stateType": "Тип стану",
8046
+ "workflowDesigner.val.noInitial": "Немає початкового стану",
8047
+ "workflowDesigner.val.multiInitial": "Більше одного початкового стану",
8048
+ "workflowDesigner.val.noFinal": "Немає кінцевого стану",
8049
+ "workflowDesigner.val.deadEnd": 'Стан "{name}" не має вихідних переходів (глухий кут)',
8050
+ "workflowDesigner.val.orphan": 'Стан "{name}" недосяжний (сирота)',
8051
+ "workflowDesigner.val.bpmnNoStart": "Процес повинен мати щонайменше одну початкову подію",
8052
+ "workflowDesigner.val.bpmnNoEnd": "Процес повинен мати щонайменше одну кінцеву подію",
8053
+ "workflowDesigner.val.startNoOut": 'Початкова подія "{name}" не має вихідного потоку',
8054
+ "workflowDesigner.val.endNoIn": 'Кінцева подія "{name}" не має вхідного потоку',
8055
+ "workflowDesigner.val.unreachable": 'Елемент "{name}" недосяжний',
8056
+ "workflowDesigner.val.elemNoOut": 'Елемент "{name}" не має вихідного потоку',
8057
+ "workflowDesigner.val.xorNoConditions": 'Виключний шлюз "{name}" повинен мати умови на потоках',
8058
+ "tutorial.workflowDesigner.toolbar.title": "Панель інструментів",
8059
+ "tutorial.workflowDesigner.toolbar.content": "Додавайте стани та затвердження, запустіть симуляцію, а потім протестуйте або опублікуйте робочий процес.",
8060
+ "tutorial.workflowDesigner.canvas.title": "Полотно",
8061
+ "tutorial.workflowDesigner.canvas.content": "Перетягуйте, щоб розташувати стани, клацніть один, щоб редагувати, і з’єднуйте їх у переходи.",
8062
+ "tutorial.workflowDesigner.minimap.title": "Мінікарта",
8063
+ "tutorial.workflowDesigner.minimap.content": "Огляд усього потоку з висоти пташиного польоту для швидкої навігації.",
8064
+ "entityEditor.col.name": "Назва",
8065
+ "entityEditor.col.displayName": "Відображувана назва",
8066
+ "entityEditor.col.table": "Таблиця",
8067
+ "entityEditor.col.fields": "Поля",
8068
+ "entityEditor.col.fields.help": "Кількість полів, визначених для цієї сутності",
8069
+ "entityEditor.col.flags": "Прапорці",
8070
+ "entityEditor.flag.audited": "Аудит — відстежує, хто і коли змінив кожен запис",
8071
+ "entityEditor.flag.audited.abbr": "Аудит",
8072
+ "entityEditor.flag.softDelete": "М’яке видалення — рядки позначаються як видалені, але фізично не вилучаються",
8073
+ "entityEditor.flag.softDelete.abbr": "М’яке вид.",
8074
+ "entityEditor.search": "Пошук сутностей…",
8075
+ "entityEditor.empty": "Сутностей ще немає. Створіть одну, щоб почати.",
8076
+ "entityEditor.new": "Нова сутність",
8077
+ "entityEditor.back": "Сутності",
8078
+ "entityEditor.backHint": "Назад до списку сутностей",
8079
+ "entityEditor.delete": "Видалити",
8080
+ "entityEditor.deleteHint": "Видалити цю сутність",
8081
+ "entityEditor.untitled": "Сутність без назви",
8082
+ "entityEditor.tab.general": "Загальне",
8083
+ "entityEditor.tab.fields": "Поля",
8084
+ "entityEditor.tab.validation": "Перевірка",
8085
+ "entityEditor.tab.er": "ER-діаграма",
8086
+ "entityEditor.field.name": "Назва",
8087
+ "entityEditor.field.type": "Тип",
8088
+ "entityEditor.field.flags": "Обмеження",
8089
+ "entityEditor.field.flags.help": "Обмеження ключа / обов’язковості / унікальності / індексу для цього поля",
8090
+ "entityEditor.flag.pk": "Первинний ключ",
8091
+ "entityEditor.flag.fk": "Зовнішній ключ",
8092
+ "entityEditor.flag.required": "Обов’язкове (NOT NULL)",
8093
+ "entityEditor.flag.unique": "Унікальне",
8094
+ "entityEditor.flag.indexed": "Індексоване",
8095
+ "entityEditor.field.back": "Поля",
8096
+ "entityEditor.field.backHint": "Назад до списку полів",
8097
+ "entityEditor.field.untitled": "Нове поле",
8098
+ "entityEditor.field.done": "Готово",
8099
+ "entityEditor.field.add": "Додати поле",
8100
+ "entityEditor.field.search": "Пошук полів…",
8101
+ "entityEditor.field.empty": "Полів ще немає. Додайте одне, щоб визначити цю сутність.",
8102
+ "tutorial.themeBuilder.presets.title": "Пресети",
8103
+ "tutorial.themeBuilder.presets.content": "Почніть із вбудованого пресету, потім налаштуйте — найшвидший шлях до узгодженої палітри.",
8104
+ "tutorial.themeBuilder.sections.title": "Секції токенів",
8105
+ "tutorial.themeBuilder.sections.content": "Редагуйте токени за секціями: кольори, фони, текст, межі, відступи й типографіка.",
8106
+ "tutorial.themeBuilder.preview.title": "Живий перегляд",
8107
+ "tutorial.themeBuilder.preview.content": "Кожна зміна миттєво відображається на зразкових компонентах, тож ви оцінюєте тему під час створення.",
8108
+ "tutorial.themeBuilder.export.title": "Назва, застосування та експорт",
8109
+ "tutorial.themeBuilder.export.content": "Назвіть тему, застосуйте її до сторінки або експортуйте як JSON / змінні CSS для повторного використання.",
8110
+ "dataSourceBuilder.namePlaceholder": "Назва джерела даних…",
8111
+ "dataSourceBuilder.nameAria": "Назва джерела даних",
8112
+ "tutorial.dataSourceBuilder.name.title": "Назва та ключ",
8113
+ "tutorial.dataSourceBuilder.name.content": "Дайте джерелу даних читабельну назву; його стабільний ключ (використовується поданнями) генерується автоматично та показується поруч.",
8114
+ "lifecycleHooks.enabled": "Увімкнено",
8115
+ "lifecycleHooks.handler": "Обробник",
8116
+ "lifecycleHooks.selectHandler": "— виберіть обробник —",
8117
+ "lifecycleHooks.handlerPlaceholder": "обробник (напр. scripts/on-create.js)",
8118
+ "lifecycleHooks.conditionPlaceholder": "умова (необов’язково)",
8119
+ "lifecycleHooks.condition": "Умова",
8120
+ "lifecycleHooks.moveUp": "Вгору",
8121
+ "lifecycleHooks.moveDown": "Вниз",
8122
+ "lifecycleHooks.removeBinding": "Видалити прив’язку",
8123
+ "lifecycleHooks.addHandler": "Додати обробник",
8124
+ "tutorial.lifecycleHooks.bindings.title": "Тригери та прив’язки",
8125
+ "tutorial.lifecycleHooks.bindings.content": "Кожен тригер перелічує свої прив’язані обробники. Додайте обробник, перемкніть прапорець увімкнення, змініть порядок і за потреби задайте умову, що керує виконанням.",
8126
+ "revisionHistory.revisions": "Версії",
8127
+ "revisionHistory.compare": "Порівняти",
8128
+ "revisionHistory.restore": "Відновити",
8129
+ "revisionHistory.diffEmpty": "Виберіть версію та вкажіть іншу для порівняння.",
8130
+ "tutorial.revisionHistory.list.title": "Версії",
8131
+ "tutorial.revisionHistory.list.content": "Виберіть версію, потім натисніть «Порівняти» на іншій, щоб зіставити їх. «Відновити» повертає до цієї версії.",
8132
+ "tutorial.revisionHistory.diff.title": "Відмінності",
8133
+ "tutorial.revisionHistory.diff.content": "Перегляньте відмінності між двома вибраними версіями поруч.",
8134
+ "accessManager.roles": "Ролі",
8135
+ "accessManager.newRole": "Нова роль…",
8136
+ "accessManager.newRoleAria": "Назва нової ролі",
8137
+ "accessManager.add": "Додати",
8138
+ "accessManager.removeRole": "Видалити роль",
8139
+ "accessManager.resources": "Ресурси",
8140
+ "accessManager.applyDescendants": "Застосувати до всіх нащадків",
8141
+ "accessManager.empty": "Виберіть ресурс, щоб редагувати його доступ.",
8142
+ "accessManager.collapse": "Згорнути",
8143
+ "accessManager.expand": "Розгорнути",
8144
+ "tutorial.accessManager.tree.title": "Ролі та ресурси",
8145
+ "tutorial.accessManager.tree.content": "Додавайте та видаляйте ролі, потім виберіть ресурс із дерева (модулі → подання / сутності / дії), щоб редагувати його доступ.",
8146
+ "tutorial.accessManager.matrix.title": "Матриця дозволів",
8147
+ "tutorial.accessManager.matrix.content": "Надайте кожній ролі її дії для вибраного ресурсу. Використовуйте групові елементи керування або «Застосувати до всіх нащадків», щоб каскадувати дозволи вниз по дереву.",
8148
+ "viewEditor.name": "Назва подання",
8149
+ "viewEditor.kindAria": "Тип подання",
8150
+ "viewEditor.kind.form": "Форма",
8151
+ "viewEditor.kind.detail": "Деталі",
8152
+ "viewEditor.kind.grid": "Сітка",
8153
+ "viewEditor.kind.dashboard": "Дашборд",
8154
+ "viewEditor.kind.content": "Вміст",
8155
+ "viewEditor.kind.report": "Звіт",
8156
+ "viewEditor.kind.print": "Друк",
8157
+ "viewEditor.kind.mix": "Мікс",
8158
+ "viewEditor.fromEntity": "Нове з сутності…",
8159
+ "viewEditor.fromEntityAria": "Нове подання з сутності",
8160
+ "viewEditor.export": "Експорт…",
8161
+ "viewEditor.exportAria": "Експортувати подання",
8162
+ "viewEditor.mode.design": "Дизайн",
8163
+ "viewEditor.mode.preview": "Перегляд",
8164
+ "viewEditor.mode.source": "Джерело",
8165
+ "viewEditor.valid": "✓ Дійсний",
8166
+ "viewEditor.save": "Зберегти",
8167
+ "viewEditor.add": "Додати",
8168
+ "viewEditor.cat.Inputs": "Поля вводу",
8169
+ "viewEditor.cat.Data": "Дані",
8170
+ "viewEditor.cat.BI": "BI",
8171
+ "viewEditor.cat.Actions": "Дії",
8172
+ "viewEditor.cat.Display": "Відображення",
8173
+ "viewEditor.pal.textInput": "Текст",
8174
+ "viewEditor.pal.textArea": "Текстова область",
8175
+ "viewEditor.pal.numberInput": "Число",
8176
+ "viewEditor.pal.select": "Вибір",
8177
+ "viewEditor.pal.checkbox": "Прапорець",
8178
+ "viewEditor.pal.datePicker": "Дата",
8179
+ "viewEditor.pal.dataGrid": "Сітка даних",
8180
+ "viewEditor.pal.chart": "Діаграма",
8181
+ "viewEditor.pal.kpi": "KPI",
8182
+ "viewEditor.pal.button": "Кнопка",
8183
+ "viewEditor.pal.text": "Текст",
8184
+ "viewEditor.pal.heading": "Заголовок",
8185
+ "viewEditor.pal.badge": "Бейдж",
8186
+ "viewEditor.pal.card": "Картка",
8187
+ "viewEditor.addRow": "Додати рядок",
8188
+ "viewEditor.canvasEmpty": "Додайте рядок, потім перетягніть контролі з палітри — або почніть із «Нове з сутності».",
8189
+ "viewEditor.removeCell": "Видалити клітинку",
8190
+ "viewEditor.emptyRow": "порожній рядок",
8191
+ "viewEditor.control": "Контроль",
8192
+ "viewEditor.cp.label": "Підпис",
8193
+ "viewEditor.cp.colSpan": "Ширина стовпця",
8194
+ "viewEditor.cp.binding": "Прив’язка",
8195
+ "viewEditor.cp.dataSource": "Джерело даних",
8196
+ "viewEditor.cp.none": "— немає —",
8197
+ "viewEditor.cp.field": "Поле",
8198
+ "viewEditor.cp.fieldPath": "шлях поля",
8199
+ "viewEditor.cp.twoWay": "Двостороннє",
8200
+ "viewEditor.cp.permissions": "Дозволи",
8201
+ "viewEditor.cp.role": "роль",
8202
+ "viewEditor.cp.addPermission": "Дозвіл",
8203
+ "viewEditor.cp.events": "Події",
8204
+ "viewEditor.cp.eventPlaceholder": "подія (onClick / onValueChange…)",
8205
+ "viewEditor.cp.removeEvent": "Видалити подію",
8206
+ "viewEditor.cp.addEvent": "Подія",
8207
+ "viewEditor.remove": "Видалити",
8208
+ "viewEditor.ds.title": "Джерела даних",
8209
+ "viewEditor.ds.hint": "Виберіть контроль, щоб редагувати його props, прив’язку та події.",
8210
+ "viewEditor.ds.key": "ключ",
8211
+ "viewEditor.ds.endpoint": "кінцева точка",
8212
+ "viewEditor.ds.autoLoad": "автозавантаження",
8213
+ "viewEditor.ds.add": "Джерело даних",
8214
+ "tutorial.viewEditor.palette.title": "Палітра",
8215
+ "tutorial.viewEditor.palette.content": "Додавайте контролі з палітри в сітку — поля вводу, сітки даних, діаграми, KPI, кнопки та блоки відображення.",
8216
+ "tutorial.viewEditor.canvas.title": "Полотно",
8217
+ "tutorial.viewEditor.canvas.content": "Розташовуйте клітинки в рядки та задавайте ширину стовпця кожної клітинки. Клацніть клітинку, щоб налаштувати її.",
8218
+ "tutorial.viewEditor.props.title": "Властивості",
8219
+ "tutorial.viewEditor.props.content": "Налаштуйте вибраний контроль: props, прив’язку даних, дозволи ролей і дії подій. Коли нічого не вибрано, керуйте джерелами даних подання.",
8220
+ "tutorial.viewEditor.modes.title": "Дизайн / Перегляд / Джерело",
8221
+ "tutorial.viewEditor.modes.content": "Перемикайтеся між візуальним дизайнером, живим переглядом і необробленим JSON NiceViewDefinition. Зберігайте, коли подання дійсне.",
8222
+ "manifestEditor.tab.scripts": "Скрипти",
8223
+ "manifestEditor.tab.lifecycle": "Життєвий цикл",
8224
+ "manifestEditor.tab.history": "Історія",
8225
+ "manifestEditor.status.valid": "✓ Дійсний",
8226
+ "manifestEditor.status.issues": "проблем",
8227
+ "manifestEditor.sections": "секцій",
8228
+ "manifestEditor.output": "Вивід",
8229
+ "tutorial.manifestEditor.sections.title": "Секції",
8230
+ "tutorial.manifestEditor.sections.content": "Маніфест поділено на секції на основі схеми — перемикайтеся між ними вкладками вгорі.",
8231
+ "tutorial.manifestEditor.json.title": "Форма ⇄ JSON",
8232
+ "tutorial.manifestEditor.json.content": "Кожну секцію можна редагувати як візуальну форму або як необроблений JSON — скористайтеся перемикачем у секції.",
8233
+ "i18nEditor.keyHead": "Ключ",
8234
+ "i18nEditor.removeLocale": "Видалити мову",
8235
+ "i18nEditor.keyAria": "Ключ перекладу",
8236
+ "i18nEditor.removeKey": "Видалити ключ",
8237
+ "i18nEditor.empty": "Поки немає ключів перекладу.",
8238
+ "i18nEditor.newKeyPlaceholder": "новий.ключ",
8239
+ "i18nEditor.newKeyAria": "Новий ключ",
8240
+ "i18nEditor.addKey": "Ключ",
8241
+ "i18nEditor.newLocalePlaceholder": "мова (напр. de)",
8242
+ "i18nEditor.newLocaleAria": "Нова мова",
8243
+ "i18nEditor.addLocale": "Мова",
8244
+ "tutorial.i18nEditor.grid.title": "Ключі × мови",
8245
+ "tutorial.i18nEditor.grid.content": "Кожен рядок — ключ перекладу, а кожна колонка — мова. Відредагуйте клітинку, щоб задати переклад; бурштинові клітинки досі порожні.",
8246
+ "tutorial.i18nEditor.add.title": "Додати ключі та мови",
8247
+ "tutorial.i18nEditor.add.content": "Додайте тут новий ключ перекладу або нову колонку мови; нові клітинки порожні й позначені як відсутні.",
8248
+ "moduleEditor.tab.entities": "Сутності",
8249
+ "moduleEditor.tab.i18n": "i18n",
8250
+ "moduleEditor.tab.views": "Подання",
8251
+ "moduleEditor.tab.workflows": "Процеси",
8252
+ "moduleEditor.tab.data": "Дані",
8253
+ "moduleEditor.tab.permissions": "Дозволи",
8254
+ "moduleEditor.tab.scripts": "Скрипти",
8255
+ "moduleEditor.tab.lifecycle": "Життєвий цикл",
8256
+ "moduleEditor.tab.history": "Історія",
8257
+ "moduleEditor.tab.source": "Джерело",
8258
+ "moduleEditor.status.valid": "✓ Дійсний",
8259
+ "moduleEditor.status.issues": "проблем",
8260
+ "moduleEditor.searchModules": "Пошук модулів…",
8261
+ "moduleEditor.loading": "Завантаження…",
8262
+ "moduleEditor.noModules": "Немає модулів. Спершу відкрийте джерело.",
8263
+ "moduleEditor.title": "Редактор модулів",
8264
+ "moduleEditor.refresh": "Оновити",
8265
+ "moduleEditor.validate": "Перевірити",
8266
+ "moduleEditor.saving": "Збереження…",
8267
+ "moduleEditor.save": "Зберегти",
8268
+ "moduleEditor.output": "Вивід",
8269
+ "moduleEditor.placeholder": "Виберіть модуль ліворуч, щоб почати редагування.",
8270
+ "moduleEditor.delete": "Видалити",
8271
+ "moduleEditor.views.select": "Вибрати подання",
8272
+ "moduleEditor.views.placeholder": "— виберіть подання —",
8273
+ "moduleEditor.views.new": "Нове подання",
8274
+ "moduleEditor.views.empty": "Подання не вибрано. Створіть його, а потім скористайтеся «Нове з сутності» в редакторі.",
8275
+ "moduleEditor.workflows.select": "Вибрати процес",
8276
+ "moduleEditor.workflows.placeholder": "— виберіть процес —",
8277
+ "moduleEditor.workflows.new": "Новий процес",
8278
+ "moduleEditor.workflows.empty": "Процес не вибрано. Створіть його, щоб проєктувати стани та переходи.",
8279
+ "moduleEditor.data.select": "Вибрати джерело даних",
8280
+ "moduleEditor.data.placeholder": "— виберіть джерело даних —",
8281
+ "moduleEditor.data.new": "Нове джерело даних",
8282
+ "moduleEditor.data.empty": "Джерело даних не вибрано. Створіть його, щоб побудувати запит зі схеми модуля.",
8283
+ "tutorial.moduleEditor.intro.title": "Редактор модулів",
8284
+ "tutorial.moduleEditor.intro.content": "Проєктуйте цілий модуль від початку до кінця — маніфест, сутності, переклади, подання, процеси, джерела даних і дозволи — потім перевіряйте та зберігайте.",
8285
+ "tutorial.moduleEditor.tabs.title": "Частини модуля",
8286
+ "tutorial.moduleEditor.tabs.content": "Кожна вкладка редагує одну частину модуля: секції маніфесту, сутності, i18n, подання, процеси, джерела даних, дозволи тощо.",
8287
+ "tutorial.moduleEditor.output.title": "Вивід",
8288
+ "tutorial.moduleEditor.output.content": "Тут реєструються результати перевірки та дії завантаження/збереження.",
8289
+ "tutorial.schemaForm.viewToggle.title": "Форма ⇄ JSON",
8290
+ "tutorial.schemaForm.viewToggle.content": "Перемикайтеся між візуальною формою та необробленим значенням JSON — зручно для досвідчених користувачів і копіювання.",
8291
+ "tutorial.schemaForm.validation.title": "Валідація в реальному часі",
8292
+ "tutorial.schemaForm.validation.content": "Значення перевіряються за схемою під час введення; будь-які проблеми перелічені під формою.",
8293
+ "schemaForm.tab.form": "Форма",
8294
+ "schemaForm.tab.json": "JSON",
8295
+ "schemaForm.tab.json.help": "Редагувати необроблене значення JSON напряму",
8296
+ "schemaForm.invalidJson": "Некоректний JSON",
6449
8297
  "tutorial.schemaForm.intro.content": "Ця форма генерується зі схеми. Обов’язкові поля та помилки перевірки підсвічуються; використовуйте перемикач JSON для прямого редагування.",
6450
8298
  "tutorial.entityEditor.intro.title": "Редактор сутностей",
6451
8299
  "tutorial.entityEditor.intro.content": "Додавайте сутності ліворуч, а праворуч редагуйте метадані кожної сутності та її поля (тип, ключі, обмеження).",
@@ -7297,7 +9145,7 @@ const x = [
7297
9145
  "wm.minimizeAll": "すべて最小化",
7298
9146
  "wm.newWindow": "新しいウィンドウ",
7299
9147
  "wm.moveToFront": "最前面に移動"
7300
- }, Ve = {
9148
+ }, He = {
7301
9149
  ok: "확인",
7302
9150
  cancel: "취소",
7303
9151
  save: "저장",
@@ -7660,7 +9508,7 @@ const x = [
7660
9508
  "wm.minimizeAll": "모두 최소화",
7661
9509
  "wm.newWindow": "새 창",
7662
9510
  "wm.moveToFront": "맨 앞으로"
7663
- }, He = {
9511
+ }, Ve = {
7664
9512
  ok: "确定",
7665
9513
  cancel: "取消",
7666
9514
  save: "保存",
@@ -8397,7 +10245,7 @@ const x = [
8397
10245
  error: "त्रुटि",
8398
10246
  success: "सफलता",
8399
10247
  search: "खोजें"
8400
- }, Ue = {
10248
+ }, Ke = {
8401
10249
  ok: "ঠিক আছে",
8402
10250
  cancel: "বাতিল",
8403
10251
  save: "সংরক্ষণ",
@@ -8408,7 +10256,7 @@ const x = [
8408
10256
  error: "ত্রুটি",
8409
10257
  success: "সফল",
8410
10258
  search: "অনুসন্ধান"
8411
- }, Ke = {
10259
+ }, Ue = {
8412
10260
  ok: "ตกลง",
8413
10261
  cancel: "ยกเลิก",
8414
10262
  save: "บันทึก",
@@ -8419,7 +10267,7 @@ const x = [
8419
10267
  error: "ข้อผิดพลาด",
8420
10268
  success: "สำเร็จ",
8421
10269
  search: "ค้นหา"
8422
- }, Ge = {
10270
+ }, Ze = {
8423
10271
  ok: "OK",
8424
10272
  cancel: "Hủy",
8425
10273
  save: "Lưu",
@@ -8430,7 +10278,7 @@ const x = [
8430
10278
  error: "Lỗi",
8431
10279
  success: "Thành công",
8432
10280
  search: "Tìm kiếm"
8433
- }, Ze = {
10281
+ }, Ge = {
8434
10282
  ok: "OK",
8435
10283
  cancel: "Batal",
8436
10284
  save: "Simpan",
@@ -8474,34 +10322,34 @@ const x = [
8474
10322
  error: "Ralat",
8475
10323
  success: "Berjaya",
8476
10324
  search: "Cari"
8477
- }, w = {
10325
+ }, E = {
8478
10326
  en: ke,
8479
10327
  pl: ye,
8480
10328
  de: ze,
8481
- fr: Ce,
8482
- es: Se,
10329
+ fr: Se,
10330
+ es: Ce,
8483
10331
  it: De,
8484
10332
  pt: je,
8485
10333
  nl: Ae,
8486
10334
  sv: Pe,
8487
- no: Te,
8488
- da: xe,
10335
+ no: xe,
10336
+ da: Te,
8489
10337
  fi: Be,
8490
- cs: Me,
8491
- sk: Fe,
8492
- hu: Ne,
10338
+ cs: Ne,
10339
+ sk: Me,
10340
+ hu: Fe,
8493
10341
  ro: Re,
8494
10342
  bg: Le,
8495
10343
  uk: Oe,
8496
10344
  ja: Ie,
8497
- ko: Ve,
8498
- zh: He,
10345
+ ko: He,
10346
+ zh: Ve,
8499
10347
  ar: qe,
8500
10348
  hi: We,
8501
- bn: Ue,
8502
- th: Ke,
8503
- vi: Ge,
8504
- id: Ze,
10349
+ bn: Ke,
10350
+ th: Ue,
10351
+ vi: Ze,
10352
+ id: Ge,
8505
10353
  sw: Je,
8506
10354
  fil: Xe,
8507
10355
  ms: Ye
@@ -8557,29 +10405,29 @@ const x = [
8557
10405
  "pl-PL": { formal: X, informal: Y },
8558
10406
  pl: { formal: X, informal: Y }
8559
10407
  };
8560
- function Kt(e) {
10408
+ function Ut(e) {
8561
10409
  var t;
8562
- return { ...w.pl, ...((t = $e.pl) == null ? void 0 : t[e]) ?? {} };
10410
+ return { ...E.pl, ...((t = $e.pl) == null ? void 0 : t[e]) ?? {} };
8563
10411
  }
8564
- const _e = (e, t) => t, te = I(_e), Gt = ({
10412
+ const Qe = (e, t) => t, te = I(Qe), Zt = ({
8565
10413
  t: e,
8566
10414
  lang: t = "en",
8567
10415
  overrides: i,
8568
10416
  children: o
8569
10417
  }) => {
8570
- const r = b(() => {
10418
+ const r = f(() => {
8571
10419
  if (e)
8572
10420
  return e;
8573
- const a = w[t] ?? w.en, n = i ? { ...a, ...i } : a;
10421
+ const a = E[t] ?? E.en, n = i ? { ...a, ...i } : a;
8574
10422
  return (s, l) => n[s] ?? l;
8575
10423
  }, [e, t, i]);
8576
10424
  return /* @__PURE__ */ O(te.Provider, { value: r, children: o });
8577
10425
  };
8578
- function Zt() {
10426
+ function Gt() {
8579
10427
  return { t: B(te) };
8580
10428
  }
8581
10429
  function Jt(e = "en", t) {
8582
- const i = w[e] ?? w.en, o = t ? { ...i, ...t } : i;
10430
+ const i = E[e] ?? E.en, o = t ? { ...i, ...t } : i;
8583
10431
  return (r, a) => o[r] ?? a;
8584
10432
  }
8585
10433
  function Xt(e, t = {}) {
@@ -8595,15 +10443,15 @@ function Xt(e, t = {}) {
8595
10443
  }
8596
10444
  ), i;
8597
10445
  }
8598
- function Qe(e) {
8599
- return x.includes(e);
10446
+ function _e(e) {
10447
+ return T.includes(e);
8600
10448
  }
8601
10449
  function Yt() {
8602
10450
  var t;
8603
10451
  if (typeof navigator > "u")
8604
10452
  return "en";
8605
10453
  const e = (t = navigator.language) == null ? void 0 : t.split("-")[0];
8606
- return Qe(e) ? e : "en";
10454
+ return _e(e) ? e : "en";
8607
10455
  }
8608
10456
  function oe(e, t) {
8609
10457
  var a;
@@ -8777,7 +10625,7 @@ function it(e, t, i) {
8777
10625
  }
8778
10626
  return new Intl.DateTimeFormat(t, r).format(o);
8779
10627
  }
8780
- function H(e, t, i) {
10628
+ function V(e, t, i) {
8781
10629
  return e.replace(/#/g, String(i));
8782
10630
  }
8783
10631
  function rt(e, t = {}, i = {}) {
@@ -8801,20 +10649,20 @@ function rt(e, t = {}, i = {}) {
8801
10649
  case "plural": {
8802
10650
  if (typeof d != "number" || !l.options)
8803
10651
  return n;
8804
- const u = oe(d, o), v = `=${d}`, p = l.options[v] ?? l.options[u] ?? l.options.other ?? "";
8805
- return H(p, l.name, d);
10652
+ const u = oe(d, o), w = `=${d}`, p = l.options[w] ?? l.options[u] ?? l.options.other ?? "";
10653
+ return V(p, l.name, d);
8806
10654
  }
8807
10655
  case "selectordinal": {
8808
10656
  if (typeof d != "number" || !l.options)
8809
10657
  return n;
8810
- const u = ie(d, o), v = l.options[u] ?? l.options.other ?? "";
8811
- return H(v, l.name, d);
10658
+ const u = ie(d, o), w = l.options[u] ?? l.options.other ?? "";
10659
+ return V(w, l.name, d);
8812
10660
  }
8813
10661
  case "select": {
8814
10662
  if (!l.options)
8815
10663
  return n;
8816
10664
  const u = l.options[String(d)] ?? l.options.other ?? "";
8817
- return H(u, l.name, d);
10665
+ return V(u, l.name, d);
8818
10666
  }
8819
10667
  default:
8820
10668
  return n;
@@ -8827,11 +10675,11 @@ function $t(e, t = "en") {
8827
10675
  return a ? rt(n, a, { lang: t }) : n;
8828
10676
  };
8829
10677
  }
8830
- function _t(e, t, i = "en") {
10678
+ function Qt(e, t, i = "en") {
8831
10679
  const o = oe(e, i);
8832
10680
  return (t[o] ?? t.other).replace(/#/g, String(e));
8833
10681
  }
8834
- function Qt(e, t, i = "en") {
10682
+ function _t(e, t, i = "en") {
8835
10683
  const o = ie(e, i);
8836
10684
  return (t[o] ?? t.other).replace(/#/g, String(e));
8837
10685
  }
@@ -8913,7 +10761,7 @@ function ct(e) {
8913
10761
  "text-align: right": "text-align: end"
8914
10762
  }[e] || e;
8915
10763
  }
8916
- const G = I({
10764
+ const Z = I({
8917
10765
  dir: "ltr",
8918
10766
  isRTL: !1,
8919
10767
  flip: (e) => e,
@@ -8927,7 +10775,7 @@ const G = I({
8927
10775
  L(() => {
8928
10776
  t && st(e);
8929
10777
  }, [e, t]);
8930
- const a = b(
10778
+ const a = f(
8931
10779
  () => ({
8932
10780
  dir: r,
8933
10781
  isRTL: o,
@@ -8936,13 +10784,13 @@ const G = I({
8936
10784
  }),
8937
10785
  [r, o]
8938
10786
  );
8939
- return /* @__PURE__ */ O(G.Provider, { value: a, children: i });
10787
+ return /* @__PURE__ */ O(Z.Provider, { value: a, children: i });
8940
10788
  };
8941
10789
  function ro() {
8942
- return B(G);
10790
+ return B(Z);
8943
10791
  }
8944
10792
  function ao() {
8945
- return B(G).isRTL;
10793
+ return B(Z).isRTL;
8946
10794
  }
8947
10795
  function no(e) {
8948
10796
  const t = [], i = [
@@ -8975,18 +10823,18 @@ function so(e) {
8975
10823
  };
8976
10824
  }
8977
10825
  function lo() {
8978
- return Object.keys(w.en);
10826
+ return Object.keys(E.en);
8979
10827
  }
8980
10828
  function ut(e) {
8981
10829
  if (e === "en")
8982
10830
  return [];
8983
- const t = w.en, i = w[e], o = [];
10831
+ const t = E.en, i = E[e], o = [];
8984
10832
  for (const [r, a] of Object.entries(t))
8985
10833
  i[r] || o.push({ key: r, englishValue: a });
8986
10834
  return o;
8987
10835
  }
8988
10836
  function pt(e) {
8989
- const t = Object.keys(w.en).length, i = Object.keys(w[e]).length, o = t - i, r = Math.round(i / t * 100);
10837
+ const t = Object.keys(E.en).length, i = Object.keys(E[e]).length, o = t - i, r = Math.round(i / t * 100);
8990
10838
  return {
8991
10839
  lang: e,
8992
10840
  totalKeys: t,
@@ -8996,7 +10844,7 @@ function pt(e) {
8996
10844
  };
8997
10845
  }
8998
10846
  function mt() {
8999
- return x.map((e) => pt(e));
10847
+ return T.map((e) => pt(e));
9000
10848
  }
9001
10849
  function co(e, t) {
9002
10850
  const i = t.map((o) => {
@@ -9086,22 +10934,22 @@ function ht(e, t = "medium") {
9086
10934
  const n = r instanceof Date ? r : new Date(r), s = a instanceof Date ? a : new Date(a);
9087
10935
  return o.formatRange(n, s);
9088
10936
  },
9089
- formatRelative: (r) => wt(r instanceof Date ? r : new Date(r), i)
10937
+ formatRelative: (r) => Et(r instanceof Date ? r : new Date(r), i)
9090
10938
  };
9091
10939
  }
9092
10940
  function po(e, t = "medium") {
9093
- return b(() => ht(e, t), [e, t]);
10941
+ return f(() => ht(e, t), [e, t]);
9094
10942
  }
9095
- function vt(e, t = "short") {
10943
+ function wt(e, t = "short") {
9096
10944
  const i = D(e), o = new Intl.DateTimeFormat(i, { timeStyle: t });
9097
10945
  return {
9098
10946
  format: (r) => o.format(r instanceof Date ? r : new Date(r))
9099
10947
  };
9100
10948
  }
9101
10949
  function mo(e, t = "short") {
9102
- return b(() => vt(e, t), [e, t]);
10950
+ return f(() => wt(e, t), [e, t]);
9103
10951
  }
9104
- function ft(e) {
10952
+ function vt(e) {
9105
10953
  const t = D(e);
9106
10954
  return {
9107
10955
  format: (i) => new Intl.NumberFormat(t).format(i),
@@ -9110,18 +10958,18 @@ function ft(e) {
9110
10958
  };
9111
10959
  }
9112
10960
  function go(e) {
9113
- return b(() => ft(e), [e]);
10961
+ return f(() => vt(e), [e]);
9114
10962
  }
9115
- function bt(e, t = "USD") {
10963
+ function ft(e, t = "USD") {
9116
10964
  const i = D(e), o = new Intl.NumberFormat(i, { style: "currency", currency: t });
9117
10965
  return {
9118
10966
  format: (r) => o.format(r)
9119
10967
  };
9120
10968
  }
9121
10969
  function ho(e, t = "USD") {
9122
- return b(() => bt(e, t), [e, t]);
10970
+ return f(() => ft(e, t), [e, t]);
9123
10971
  }
9124
- function wt(e, t) {
10972
+ function Et(e, t) {
9125
10973
  const i = Date.now(), o = e.getTime() - i, r = Math.abs(o), a = new Intl.RelativeTimeFormat(t, { numeric: "auto" });
9126
10974
  return r < 6e4 ? a.format(Math.round(o / 1e3), "second") : r < 36e5 ? a.format(Math.round(o / 6e4), "minute") : r < 864e5 ? a.format(Math.round(o / 36e5), "hour") : r < 2592e6 ? a.format(Math.round(o / 864e5), "day") : r < 31536e6 ? a.format(Math.round(o / 2592e6), "month") : a.format(Math.round(o / 31536e6), "year");
9127
10975
  }
@@ -9277,12 +11125,12 @@ const ae = [
9277
11125
  }
9278
11126
  }
9279
11127
  ];
9280
- function Et(e, t) {
11128
+ function bt(e, t) {
9281
11129
  const i = ae.find((o) => o.en.toLowerCase() === e.toLowerCase());
9282
11130
  return i == null ? void 0 : i.translations[t];
9283
11131
  }
9284
- function vo(e, t, i = 0.8) {
9285
- const o = w.en, r = w[t], a = e.toLowerCase().trim();
11132
+ function wo(e, t, i = 0.8) {
11133
+ const o = E.en, r = E[t], a = e.toLowerCase().trim();
9286
11134
  let n;
9287
11135
  for (const [s, l] of Object.entries(o)) {
9288
11136
  const d = r[s];
@@ -9293,16 +11141,16 @@ function vo(e, t, i = 0.8) {
9293
11141
  }
9294
11142
  return n;
9295
11143
  }
9296
- function fo(e) {
11144
+ function vo(e) {
9297
11145
  return ae.filter((t) => t.translations[e] != null).map((t) => ({
9298
11146
  en: t.en,
9299
11147
  translation: t.translations[e]
9300
11148
  }));
9301
11149
  }
9302
- function bo(e) {
9303
- const t = w[e], i = w.en, o = [];
11150
+ function fo(e) {
11151
+ const t = E[e], i = E.en, o = [];
9304
11152
  for (const [r, a] of Object.entries(i)) {
9305
- const n = Et(a, e), s = t[r];
11153
+ const n = bt(a, e), s = t[r];
9306
11154
  n && s && s !== n && o.push({ key: r, currentTranslation: s, glossaryTranslation: n });
9307
11155
  }
9308
11156
  return o;
@@ -9385,45 +11233,45 @@ const ne = {
9385
11233
  "Pacific/Fiji"
9386
11234
  ]
9387
11235
  };
9388
- function Z() {
11236
+ function G() {
9389
11237
  try {
9390
11238
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
9391
11239
  } catch {
9392
11240
  return "UTC";
9393
11241
  }
9394
11242
  }
9395
- function wo(e) {
11243
+ function Eo(e) {
9396
11244
  try {
9397
11245
  return new Intl.DateTimeFormat("en", { timeZone: e }), !0;
9398
11246
  } catch {
9399
11247
  return !1;
9400
11248
  }
9401
11249
  }
9402
- function M(e, t = "en", i = /* @__PURE__ */ new Date()) {
9403
- var E, F;
11250
+ function N(e, t = "en", i = /* @__PURE__ */ new Date()) {
11251
+ var b, M;
9404
11252
  const o = D(t), r = new Intl.DateTimeFormat(o, {
9405
11253
  timeZone: e,
9406
11254
  timeZoneName: "long"
9407
11255
  }), a = new Intl.DateTimeFormat(o, {
9408
11256
  timeZone: e,
9409
11257
  timeZoneName: "short"
9410
- }), n = r.formatToParts(i), s = a.formatToParts(i), l = ((E = n.find((A) => A.type === "timeZoneName")) == null ? void 0 : E.value) || e, d = ((F = s.find((A) => A.type === "timeZoneName")) == null ? void 0 : F.value) || e, u = new Date(i.toLocaleString("en-US", { timeZone: "UTC" })), v = new Date(i.toLocaleString("en-US", { timeZone: e })), p = Math.round((v.getTime() - u.getTime()) / 6e4), m = new Date(i.getFullYear(), 0, 1), f = new Date(i.getFullYear(), 6, 1), g = U(e, m), y = U(e, f), z = U(e, i), k = Math.min(g, y), j = z !== k && g !== y;
11258
+ }), n = r.formatToParts(i), s = a.formatToParts(i), l = ((b = n.find((A) => A.type === "timeZoneName")) == null ? void 0 : b.value) || e, d = ((M = s.find((A) => A.type === "timeZoneName")) == null ? void 0 : M.value) || e, u = new Date(i.toLocaleString("en-US", { timeZone: "UTC" })), w = new Date(i.toLocaleString("en-US", { timeZone: e })), p = Math.round((w.getTime() - u.getTime()) / 6e4), m = new Date(i.getFullYear(), 0, 1), v = new Date(i.getFullYear(), 6, 1), g = K(e, m), y = K(e, v), z = K(e, i), k = Math.min(g, y), j = z !== k && g !== y;
9411
11259
  return {
9412
11260
  id: e,
9413
11261
  displayName: l,
9414
11262
  shortName: d,
9415
11263
  offsetMinutes: p,
9416
- offsetString: St(p),
11264
+ offsetString: Ct(p),
9417
11265
  isDST: j
9418
11266
  };
9419
11267
  }
9420
- function Eo(e = "en", t = /* @__PURE__ */ new Date()) {
9421
- return Object.values(ne).flat().map((o) => M(o, e, t));
11268
+ function bo(e = "en", t = /* @__PURE__ */ new Date()) {
11269
+ return Object.values(ne).flat().map((o) => N(o, e, t));
9422
11270
  }
9423
11271
  function ko(e = "en", t = /* @__PURE__ */ new Date()) {
9424
11272
  const i = {};
9425
11273
  for (const [o, r] of Object.entries(ne))
9426
- i[o] = r.map((a) => M(a, e, t));
11274
+ i[o] = r.map((a) => N(a, e, t));
9427
11275
  return i;
9428
11276
  }
9429
11277
  function se(e, t, i) {
@@ -9431,14 +11279,14 @@ function se(e, t, i) {
9431
11279
  return new Date(e.getTime() + s);
9432
11280
  }
9433
11281
  function yt(e, t) {
9434
- const i = t || Z();
11282
+ const i = t || G();
9435
11283
  return se(e, i, "UTC");
9436
11284
  }
9437
11285
  function zt(e, t) {
9438
- const i = t || Z();
11286
+ const i = t || G();
9439
11287
  return se(e, "UTC", i);
9440
11288
  }
9441
- function Ct(e, t, i = {}) {
11289
+ function St(e, t, i = {}) {
9442
11290
  const o = D(e), { dateStyle: r = "medium", timeStyle: a = "short", nameStyle: n = "short" } = i, s = new Intl.DateTimeFormat(o, {
9443
11291
  timeZone: t,
9444
11292
  dateStyle: r,
@@ -9455,7 +11303,7 @@ function Ct(e, t, i = {}) {
9455
11303
  return {
9456
11304
  format: (u) => s.format(u),
9457
11305
  formatWithZone: (u) => l.format(u),
9458
- getOffset: (u) => M(t, e, u).offsetString,
11306
+ getOffset: (u) => N(t, e, u).offsetString,
9459
11307
  getAbbreviation: (u) => {
9460
11308
  var p;
9461
11309
  return ((p = d.formatToParts(u).find((m) => m.type === "timeZoneName")) == null ? void 0 : p.value) || "";
@@ -9463,7 +11311,7 @@ function Ct(e, t, i = {}) {
9463
11311
  };
9464
11312
  }
9465
11313
  function W(e, t = /* @__PURE__ */ new Date()) {
9466
- return M(e, "en", t).isDST;
11314
+ return N(e, "en", t).isDST;
9467
11315
  }
9468
11316
  function yo(e, t = /* @__PURE__ */ new Date()) {
9469
11317
  const i = W(e, t), o = new Date(t), r = new Date(t);
@@ -9482,7 +11330,7 @@ function yo(e, t = /* @__PURE__ */ new Date()) {
9482
11330
  return null;
9483
11331
  }
9484
11332
  function zo(e, t, i) {
9485
- const [o] = T(() => Z()), r = t || o, a = b(() => Ct(e, r, i), [e, r, i]), n = b(() => M(r, e), [r, e]);
11333
+ const [o] = x(() => G()), r = t || o, a = f(() => St(e, r, i), [e, r, i]), n = f(() => N(r, e), [r, e]);
9486
11334
  return {
9487
11335
  timezone: r,
9488
11336
  info: n,
@@ -9494,15 +11342,15 @@ function zo(e, t, i) {
9494
11342
  fromUTC: (s) => zt(s, r)
9495
11343
  };
9496
11344
  }
9497
- function U(e, t) {
11345
+ function K(e, t) {
9498
11346
  const i = t.toLocaleString("en-US", { timeZone: "UTC" }), o = t.toLocaleString("en-US", { timeZone: e }), r = new Date(i), a = new Date(o);
9499
11347
  return Math.round((a.getTime() - r.getTime()) / 6e4);
9500
11348
  }
9501
- function St(e) {
11349
+ function Ct(e) {
9502
11350
  const t = e >= 0 ? "+" : "-", i = Math.abs(e), o = Math.floor(i / 60), r = i % 60;
9503
11351
  return `${t}${o.toString().padStart(2, "0")}:${r.toString().padStart(2, "0")}`;
9504
11352
  }
9505
- const V = {
11353
+ const H = {
9506
11354
  gregory: {
9507
11355
  id: "gregory",
9508
11356
  displayName: "Gregorian",
@@ -9680,22 +11528,22 @@ function de(e, t = "gregory", i = {}) {
9680
11528
  month: "long",
9681
11529
  day: "numeric",
9682
11530
  era: "long"
9683
- }, u = new Intl.DateTimeFormat(o, d), v = new Intl.DateTimeFormat(o, { calendar: t, month: "long" }), p = new Intl.DateTimeFormat(o, { calendar: t, weekday: "long" });
11531
+ }, u = new Intl.DateTimeFormat(o, d), w = new Intl.DateTimeFormat(o, { calendar: t, month: "long" }), p = new Intl.DateTimeFormat(o, { calendar: t, weekday: "long" });
9684
11532
  return {
9685
11533
  format: (m) => l.format(m),
9686
11534
  formatWithEra: (m) => u.format(m),
9687
- getMonthName: (m) => v.format(m),
11535
+ getMonthName: (m) => w.format(m),
9688
11536
  getMonthNames: () => {
9689
- const m = [], f = new Date(2024, 0, 15);
11537
+ const m = [], v = new Date(2024, 0, 15);
9690
11538
  for (let g = 0; g < 12; g++)
9691
- f.setMonth(g), m.push(v.format(f));
11539
+ v.setMonth(g), m.push(w.format(v));
9692
11540
  return m;
9693
11541
  },
9694
11542
  getWeekdayName: (m) => p.format(m),
9695
11543
  getWeekdayNames: () => {
9696
- const m = [], f = new Date(2024, 0, 7);
11544
+ const m = [], v = new Date(2024, 0, 7);
9697
11545
  for (let g = 0; g < 7; g++)
9698
- f.setDate(7 + g), m.push(p.format(f));
11546
+ v.setDate(7 + g), m.push(p.format(v));
9699
11547
  return m;
9700
11548
  },
9701
11549
  parseParts: (m) => {
@@ -9709,10 +11557,10 @@ function de(e, t = "gregory", i = {}) {
9709
11557
  }).formatToParts(m);
9710
11558
  return {
9711
11559
  calendar: t,
9712
- year: parseInt(((y = g.find((E) => E.type === "year")) == null ? void 0 : y.value) || "0", 10),
9713
- month: parseInt(((z = g.find((E) => E.type === "month")) == null ? void 0 : z.value) || "0", 10),
9714
- day: parseInt(((k = g.find((E) => E.type === "day")) == null ? void 0 : k.value) || "0", 10),
9715
- era: (j = g.find((E) => E.type === "era")) == null ? void 0 : j.value,
11560
+ year: parseInt(((y = g.find((b) => b.type === "year")) == null ? void 0 : y.value) || "0", 10),
11561
+ month: parseInt(((z = g.find((b) => b.type === "month")) == null ? void 0 : z.value) || "0", 10),
11562
+ day: parseInt(((k = g.find((b) => b.type === "day")) == null ? void 0 : k.value) || "0", 10),
11563
+ era: (j = g.find((b) => b.type === "era")) == null ? void 0 : j.value,
9716
11564
  gregorianDate: m
9717
11565
  };
9718
11566
  },
@@ -9731,7 +11579,7 @@ function ce(e, t, i = "en") {
9731
11579
  function Dt(e, t = "en") {
9732
11580
  return ce(/* @__PURE__ */ new Date(), e, t);
9733
11581
  }
9734
- const Co = [
11582
+ const So = [
9735
11583
  "Muharram",
9736
11584
  "Safar",
9737
11585
  "Rabi' al-Awwal",
@@ -9748,7 +11596,7 @@ const Co = [
9748
11596
  function jt(e) {
9749
11597
  return (11 * e + 14) % 30 < 11;
9750
11598
  }
9751
- function So(e, t) {
11599
+ function Co(e, t) {
9752
11600
  return t === 12 ? jt(e) ? 30 : 29 : t % 2 === 1 ? 30 : 29;
9753
11601
  }
9754
11602
  const Do = [
@@ -9782,7 +11630,7 @@ const Do = [
9782
11630
  function Ao(e) {
9783
11631
  return (7 * e + 1) % 19 < 7;
9784
11632
  }
9785
- const K = [
11633
+ const U = [
9786
11634
  { name: "Meiji", kanji: "明治", startDate: new Date(1868, 9, 23) },
9787
11635
  { name: "Taisho", kanji: "大正", startDate: new Date(1912, 6, 30) },
9788
11636
  { name: "Showa", kanji: "昭和", startDate: new Date(1926, 11, 25) },
@@ -9790,16 +11638,16 @@ const K = [
9790
11638
  { name: "Reiwa", kanji: "令和", startDate: new Date(2019, 4, 1) }
9791
11639
  ];
9792
11640
  function At(e) {
9793
- for (let t = K.length - 1; t >= 0; t--)
9794
- if (e >= K[t].startDate)
9795
- return K[t];
11641
+ for (let t = U.length - 1; t >= 0; t--)
11642
+ if (e >= U[t].startDate)
11643
+ return U[t];
9796
11644
  return null;
9797
11645
  }
9798
11646
  function Po(e) {
9799
11647
  const t = At(e);
9800
11648
  return t ? e.getFullYear() - t.startDate.getFullYear() + 1 : null;
9801
11649
  }
9802
- const To = [
11650
+ const xo = [
9803
11651
  "Farvardin",
9804
11652
  "Ordibehesht",
9805
11653
  "Khordad",
@@ -9813,7 +11661,7 @@ const To = [
9813
11661
  "Bahman",
9814
11662
  "Esfand"
9815
11663
  ];
9816
- function xo(e) {
11664
+ function To(e) {
9817
11665
  return ((e - 474) % 2820 + 2820) % 2820 * 682 % 2816 < 682;
9818
11666
  }
9819
11667
  const Pt = [
@@ -9833,7 +11681,7 @@ const Pt = [
9833
11681
  function Bo(e) {
9834
11682
  return Pt[(e - 4) % 12];
9835
11683
  }
9836
- const Tt = [
11684
+ const xt = [
9837
11685
  "Jia",
9838
11686
  "Yi",
9839
11687
  "Bing",
@@ -9845,14 +11693,14 @@ const Tt = [
9845
11693
  "Ren",
9846
11694
  "Gui"
9847
11695
  ];
9848
- function Mo(e) {
9849
- return Tt[(e - 4) % 10];
11696
+ function No(e) {
11697
+ return xt[(e - 4) % 10];
9850
11698
  }
9851
- function Fo(e, t, i) {
9852
- const o = t || le[e], r = b(
11699
+ function Mo(e, t, i) {
11700
+ const o = t || le[e], r = f(
9853
11701
  () => de(e, o, i),
9854
11702
  [e, o, i]
9855
- ), a = b(() => V[o], [o]), n = b(() => Dt(o, e), [o, e]);
11703
+ ), a = f(() => H[o], [o]), n = f(() => Dt(o, e), [o, e]);
9856
11704
  return {
9857
11705
  calendar: o,
9858
11706
  info: a,
@@ -9868,11 +11716,11 @@ function Fo(e, t, i) {
9868
11716
  toCalendar: (s) => ce(s, o, e)
9869
11717
  };
9870
11718
  }
9871
- function No() {
9872
- return Object.keys(V);
11719
+ function Fo() {
11720
+ return Object.keys(H);
9873
11721
  }
9874
11722
  function Ro(e, t = "en") {
9875
- const i = { ...V[e] };
11723
+ const i = { ...H[e] };
9876
11724
  try {
9877
11725
  const o = D(t), a = new Intl.DisplayNames([o], { type: "calendar" }).of(e);
9878
11726
  a && (i.displayName = a);
@@ -9882,7 +11730,7 @@ function Ro(e, t = "en") {
9882
11730
  }
9883
11731
  function Lo(e) {
9884
11732
  const t = le[e], i = /* @__PURE__ */ new Set([t]);
9885
- for (const [o, r] of Object.entries(V))
11733
+ for (const [o, r] of Object.entries(H))
9886
11734
  r.associatedLanguages.includes(e) && i.add(o);
9887
11735
  return i.add("gregory"), Array.from(i);
9888
11736
  }
@@ -9941,7 +11789,7 @@ const J = {
9941
11789
  X: "Χ",
9942
11790
  Y: "Ÿ",
9943
11791
  Z: "Ž"
9944
- }, xt = {
11792
+ }, Tt = {
9945
11793
  ...J,
9946
11794
  // Additional mappings
9947
11795
  a: "ặ",
@@ -9956,21 +11804,21 @@ const J = {
9956
11804
  O: "Ộ",
9957
11805
  U: "Ụ",
9958
11806
  Y: "Ỵ"
9959
- }, Bt = "‪", Mt = "‫", _ = "‬", Ft = "~∼~≈";
11807
+ }, Bt = "‪", Nt = "‫", Q = "‬", Mt = "~∼~≈";
9960
11808
  function Oo(e, t = !1) {
9961
- const i = t ? xt : J;
11809
+ const i = t ? Tt : J;
9962
11810
  return e.split("").map((o) => i[o] || o).join("");
9963
11811
  }
9964
11812
  function Io(e, t = "[", i = "]") {
9965
11813
  return `${t}${e}${i}`;
9966
11814
  }
9967
- function Nt(e, t = 0.3, i = !1) {
11815
+ function Ft(e, t = 0.3, i = !1) {
9968
11816
  if (i)
9969
11817
  return Rt(e);
9970
11818
  const r = Math.ceil(e.length * (1 + t)) - e.length;
9971
11819
  if (r <= 0)
9972
11820
  return e;
9973
- const a = Ft[0].repeat(r);
11821
+ const a = Mt[0].repeat(r);
9974
11822
  return e + a;
9975
11823
  }
9976
11824
  function Rt(e) {
@@ -9978,7 +11826,7 @@ function Rt(e) {
9978
11826
  return e.split("").map((i) => t.has(i) ? i + i : i).join("");
9979
11827
  }
9980
11828
  function Lt(e, t = !1) {
9981
- return t ? `${Mt}${e}${_}` : `${Bt}${e}${_}`;
11829
+ return t ? `${Nt}${e}${Q}` : `${Bt}${e}${Q}`;
9982
11830
  }
9983
11831
  function ue(e, t = {}) {
9984
11832
  const {
@@ -9991,17 +11839,17 @@ function ue(e, t = {}) {
9991
11839
  preserveHtml: l = !0,
9992
11840
  prefix: d = "[",
9993
11841
  suffix: u = "]"
9994
- } = t, v = /* @__PURE__ */ new Map();
11842
+ } = t, w = /* @__PURE__ */ new Map();
9995
11843
  let p = e, m = 0;
9996
- s && (p = p.replace(/\{[^}]+\}/g, (f) => {
11844
+ s && (p = p.replace(/\{[^}]+\}/g, (v) => {
9997
11845
  const g = `__PH${m++}__`;
9998
- return v.set(g, f), g;
9999
- })), l && (p = p.replace(/<[^>]+>/g, (f) => {
11846
+ return w.set(g, v), g;
11847
+ })), l && (p = p.replace(/<[^>]+>/g, (v) => {
10000
11848
  const g = `__PH${m++}__`;
10001
- return v.set(g, f), g;
10002
- })), r && (p = Ot(p, v)), o > 0 && (p = Nt(p, o, n)), a && (p = Lt(p)), i && (p = `${d}${p}${u}`);
10003
- for (const [f, g] of v.entries())
10004
- p = p.replace(f, g);
11849
+ return w.set(g, v), g;
11850
+ })), r && (p = Ot(p, w)), o > 0 && (p = Ft(p, o, n)), a && (p = Lt(p)), i && (p = `${d}${p}${u}`);
11851
+ for (const [v, g] of w.entries())
11852
+ p = p.replace(v, g);
10005
11853
  return p;
10006
11854
  }
10007
11855
  function Ot(e, t) {
@@ -10047,7 +11895,7 @@ function P(e) {
10047
11895
  };
10048
11896
  }
10049
11897
  }
10050
- function Vo(e, t) {
11898
+ function Ho(e, t) {
10051
11899
  const i = {};
10052
11900
  for (const [o, r] of Object.entries(e))
10053
11901
  i[o] = ue(r, t);
@@ -10056,13 +11904,13 @@ function Vo(e, t) {
10056
11904
  function It(e) {
10057
11905
  return /[^\x00-\x7F]/.test(e);
10058
11906
  }
10059
- function Vt(e) {
11907
+ function Ht(e) {
10060
11908
  if (!e || /^[\d.,-]+$/.test(e) || e.startsWith("["))
10061
11909
  return !1;
10062
11910
  const t = /[a-zA-Z]{2,}/.test(e), i = It(e);
10063
11911
  return t && !i;
10064
11912
  }
10065
- function Ho(e, t) {
11913
+ function Vo(e, t) {
10066
11914
  const i = {
10067
11915
  totalKeys: Object.keys(e).length,
10068
11916
  hardcodedStrings: [],
@@ -10075,8 +11923,8 @@ function Ho(e, t) {
10075
11923
  i.emptyValues.push(o), i.potentialIssues++;
10076
11924
  continue;
10077
11925
  }
10078
- if (Vt(r) && i.hardcodedStrings.push(o), t && t[o]) {
10079
- const a = Q(r), n = Q(t[o]), s = a.filter((d) => !n.includes(d)), l = n.filter((d) => !a.includes(d));
11926
+ if (Ht(r) && i.hardcodedStrings.push(o), t && t[o]) {
11927
+ const a = _(r), n = _(t[o]), s = a.filter((d) => !n.includes(d)), l = n.filter((d) => !a.includes(d));
10080
11928
  (s.length > 0 || l.length > 0) && (i.placeholderMismatches.push({
10081
11929
  key: o,
10082
11930
  placeholders: [
@@ -10088,7 +11936,7 @@ function Ho(e, t) {
10088
11936
  }
10089
11937
  return i;
10090
11938
  }
10091
- function Q(e) {
11939
+ function _(e) {
10092
11940
  return (e.match(/\{([^}]+)\}/g) || []).map((i) => i.replace(/[{}]/g, "").split(",")[0].trim());
10093
11941
  }
10094
11942
  const pe = I(null);
@@ -10097,7 +11945,7 @@ function qo({
10097
11945
  initialEnabled: t = !1,
10098
11946
  initialMode: i = "full"
10099
11947
  }) {
10100
- const [o, r] = T(t), [a, n] = T(i), s = b(() => P(a), [a]), l = b(() => (u) => o ? ue(u, s) : u, [o, s]), d = b(
11948
+ const [o, r] = x(t), [a, n] = x(i), s = f(() => P(a), [a]), l = f(() => (u) => o ? ue(u, s) : u, [o, s]), d = f(
10101
11949
  () => ({
10102
11950
  enabled: o,
10103
11951
  mode: a,
@@ -10123,7 +11971,7 @@ function Wo() {
10123
11971
  transform: (t) => t
10124
11972
  };
10125
11973
  }
10126
- const Uo = {
11974
+ const Ko = {
10127
11975
  /** Minimal: brackets only */
10128
11976
  MINIMAL: { addBrackets: !0, addAccents: !1, expansionFactor: 0 },
10129
11977
  /** Accented: brackets + accents */
@@ -10141,7 +11989,7 @@ const Uo = {
10141
11989
  /** CJK: Short expansion, no accents (CJK often shorter) */
10142
11990
  CJK: { addBrackets: !0, addAccents: !1, expansionFactor: -0.1 }
10143
11991
  };
10144
- class Ht {
11992
+ class Vt {
10145
11993
  constructor(t = 0) {
10146
11994
  this.cache = /* @__PURE__ */ new Map(), this.ttl = t;
10147
11995
  }
@@ -10194,23 +12042,23 @@ function me(e) {
10194
12042
  onLoadStart: s,
10195
12043
  onLoadComplete: l,
10196
12044
  onLoadError: d
10197
- } = e, u = new Ht(o), v = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Map();
12045
+ } = e, u = new Vt(o), w = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Map();
10198
12046
  let m = i;
10199
- const f = /* @__PURE__ */ new Set();
12047
+ const v = /* @__PURE__ */ new Set();
10200
12048
  function g() {
10201
12049
  const c = z();
10202
- f.forEach((h) => h(c));
12050
+ v.forEach((h) => h(c));
10203
12051
  }
10204
12052
  function y(c, h) {
10205
12053
  return h ? `${c}:${h}` : c;
10206
12054
  }
10207
12055
  function z() {
10208
12056
  const c = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Set();
10209
- for (const C of x)
10210
- u.has(C) && c.add(C);
10211
- for (const C of v) {
10212
- const N = C.split(":")[0];
10213
- h.add(N);
12057
+ for (const S of T)
12058
+ u.has(S) && c.add(S);
12059
+ for (const S of w) {
12060
+ const F = S.split(":")[0];
12061
+ h.add(F);
10214
12062
  }
10215
12063
  return {
10216
12064
  loadedLanguages: c,
@@ -10220,77 +12068,77 @@ function me(e) {
10220
12068
  };
10221
12069
  }
10222
12070
  async function k(c, h) {
10223
- const C = y(c, h), N = u.get(c, h);
10224
- if (N)
10225
- return N;
10226
- if (v.has(C))
10227
- return new Promise((S) => {
12071
+ const S = y(c, h), F = u.get(c, h);
12072
+ if (F)
12073
+ return F;
12074
+ if (w.has(S))
12075
+ return new Promise((C) => {
10228
12076
  const R = setInterval(() => {
10229
- v.has(C) || (clearInterval(R), S(u.get(c, h)));
12077
+ w.has(S) || (clearInterval(R), C(u.get(c, h)));
10230
12078
  }, 50);
10231
12079
  });
10232
- v.add(C), p.delete(c), s == null || s(c, h), g();
12080
+ w.add(S), p.delete(c), s == null || s(c, h), g();
10233
12081
  try {
10234
- const S = await t(c, h);
10235
- return u.set(c, S, h), l == null || l(c, h), S;
10236
- } catch (S) {
10237
- const R = S instanceof Error ? S : new Error(String(S));
12082
+ const C = await t(c, h);
12083
+ return u.set(c, C, h), l == null || l(c, h), C;
12084
+ } catch (C) {
12085
+ const R = C instanceof Error ? C : new Error(String(C));
10238
12086
  return p.set(c, R), d == null || d(c, R, h), c !== i && !h ? (console.warn(`Failed to load ${c}, falling back to ${i}`), k(i, h)) : null;
10239
12087
  } finally {
10240
- v.delete(C), g();
12088
+ w.delete(S), g();
10241
12089
  }
10242
12090
  }
10243
12091
  async function j(c) {
10244
12092
  await Promise.all(c.map((h) => k(h)));
10245
12093
  }
10246
- async function E() {
12094
+ async function b() {
10247
12095
  r.length !== 0 && await Promise.allSettled(
10248
12096
  r.map((c) => a.length > 0 ? Promise.all(a.map((h) => k(c, h))) : k(c))
10249
12097
  );
10250
12098
  }
10251
- function F(c, h) {
12099
+ function M(c, h) {
10252
12100
  return u.get(c, h);
10253
12101
  }
10254
12102
  function A(c, h) {
10255
12103
  return u.has(c, h);
10256
12104
  }
10257
12105
  function he(c) {
10258
- for (const h of v)
12106
+ for (const h of w)
10259
12107
  if (h === c || h.startsWith(`${c}:`))
10260
12108
  return !0;
10261
12109
  return !1;
10262
12110
  }
10263
- function ve() {
12111
+ function we() {
10264
12112
  return u.getStats().languages;
10265
12113
  }
10266
- function fe(c) {
12114
+ function ve(c) {
10267
12115
  c ? u.delete(c) : u.clear(), g();
10268
12116
  }
10269
- async function be(c) {
12117
+ async function fe(c) {
10270
12118
  A(c) || await k(c), m = c, g();
10271
12119
  }
10272
- function we() {
12120
+ function Ee() {
10273
12121
  return m;
10274
12122
  }
10275
- function Ee(c) {
10276
- return f.add(c), () => f.delete(c);
12123
+ function be(c) {
12124
+ return v.add(c), () => v.delete(c);
10277
12125
  }
10278
12126
  return {
10279
12127
  loadLanguage: k,
10280
12128
  loadLanguages: j,
10281
- preloadLanguages: E,
10282
- getTranslations: F,
12129
+ preloadLanguages: b,
12130
+ getTranslations: M,
10283
12131
  isLoaded: A,
10284
12132
  isLoading: he,
10285
- getLoadedLanguages: ve,
10286
- clearCache: fe,
12133
+ getLoadedLanguages: we,
12134
+ clearCache: ve,
10287
12135
  getState: z,
10288
- setLanguage: be,
10289
- getCurrentLanguage: we,
10290
- subscribe: Ee
12136
+ setLanguage: fe,
12137
+ getCurrentLanguage: Ee,
12138
+ subscribe: be
10291
12139
  };
10292
12140
  }
10293
- function Ko(e, t) {
12141
+ function Uo(e, t) {
10294
12142
  return me({
10295
12143
  ...t,
10296
12144
  loadFn: async (i, o) => {
@@ -10301,34 +12149,34 @@ function Ko(e, t) {
10301
12149
  }
10302
12150
  });
10303
12151
  }
10304
- function Go(e, t) {
12152
+ function Zo(e, t) {
10305
12153
  return me({
10306
12154
  ...t,
10307
12155
  loadFn: async (i, o) => (await e(i, o)).default
10308
12156
  });
10309
12157
  }
10310
12158
  const ge = I(null);
10311
- function Zo({
12159
+ function Go({
10312
12160
  children: e,
10313
12161
  loader: t,
10314
12162
  initialLanguage: i,
10315
12163
  namespace: o
10316
12164
  }) {
10317
- const [r, a] = T(() => t.getState()), [n, s] = T(null);
12165
+ const [r, a] = x(() => t.getState()), [n, s] = x(null);
10318
12166
  L(() => t.subscribe(a), [t]), L(() => {
10319
12167
  i && !t.isLoaded(i, o) && t.loadLanguage(i, o).catch(s);
10320
12168
  }, [t, i, o]);
10321
- const l = b(() => t.getTranslations(r.currentLanguage, o) || {}, [t, r.currentLanguage, o]), d = ee(
10322
- async (v) => {
12169
+ const l = f(() => t.getTranslations(r.currentLanguage, o) || {}, [t, r.currentLanguage, o]), d = ee(
12170
+ async (w) => {
10323
12171
  s(null);
10324
12172
  try {
10325
- await t.setLanguage(v);
12173
+ await t.setLanguage(w);
10326
12174
  } catch (p) {
10327
12175
  s(p instanceof Error ? p : new Error(String(p)));
10328
12176
  }
10329
12177
  },
10330
12178
  [t]
10331
- ), u = b(
12179
+ ), u = f(
10332
12180
  () => ({
10333
12181
  loader: t,
10334
12182
  translations: l,
@@ -10397,28 +12245,28 @@ function Xo(e, t, i) {
10397
12245
  async function Yo(e, t) {
10398
12246
  const { fallback: i = "en", preferredLanguages: o = [] } = t || {};
10399
12247
  for (const a of o)
10400
- if (x.includes(a))
12248
+ if (T.includes(a))
10401
12249
  return await e.setLanguage(a), a;
10402
12250
  const r = navigator.language.split("-")[0].toLowerCase();
10403
- return x.includes(r) ? (await e.setLanguage(r), r) : (await e.setLanguage(i), i);
12251
+ return T.includes(r) ? (await e.setLanguage(r), r) : (await e.setLanguage(i), i);
10404
12252
  }
10405
12253
  export {
10406
- V as CALENDAR_INFO,
10407
- Tt as CELESTIAL_STEMS,
12254
+ H as CALENDAR_INFO,
12255
+ xt as CELESTIAL_STEMS,
10408
12256
  Pt as CHINESE_ZODIAC,
10409
12257
  le as DEFAULT_CALENDAR,
10410
- Zo as DynamicI18nProvider,
12258
+ Go as DynamicI18nProvider,
10411
12259
  Do as HEBREW_MONTHS,
10412
12260
  jo as HEBREW_MONTHS_LEAP,
10413
- Co as HIJRI_MONTHS,
10414
- K as JAPANESE_ERAS,
12261
+ So as HIJRI_MONTHS,
12262
+ U as JAPANESE_ERAS,
10415
12263
  ae as NICE_GLOSSARY,
10416
- w as NICE_I18N_DICTIONARIES,
12264
+ E as NICE_I18N_DICTIONARIES,
10417
12265
  $e as NICE_I18N_VARIANTS,
10418
- x as NICE_SUPPORTED_LANGS,
10419
- Gt as NiceI18nProvider,
10420
- To as PERSIAN_MONTHS,
10421
- Uo as PSEUDO_PRESETS,
12266
+ T as NICE_SUPPORTED_LANGS,
12267
+ Zt as NiceI18nProvider,
12268
+ xo as PERSIAN_MONTHS,
12269
+ Ko as PSEUDO_PRESETS,
10422
12270
  qo as PseudoLocalizationProvider,
10423
12271
  io as RTLProvider,
10424
12272
  q as RTL_CSS_VARS,
@@ -10427,27 +12275,27 @@ export {
10427
12275
  Oo as addAccents,
10428
12276
  Lt as addBidiMarkers,
10429
12277
  Io as addBrackets,
10430
- Ho as analyzeDictionary,
12278
+ Vo as analyzeDictionary,
10431
12279
  no as analyzeStylesForRTL,
10432
12280
  It as containsNonAscii,
10433
12281
  se as convertTimezone,
10434
12282
  de as createCalendarFormatter,
10435
- bt as createCurrencyFormatter,
12283
+ ft as createCurrencyFormatter,
10436
12284
  ht as createDateFormatter,
10437
12285
  me as createDynamicLoader,
10438
- Ko as createFetchLoader,
12286
+ Uo as createFetchLoader,
10439
12287
  $t as createICUTranslator,
10440
- Go as createImportLoader,
10441
- ft as createNumberFormatter,
10442
- vt as createTimeFormatter,
10443
- Ct as createTimezoneFormatter,
12288
+ Zo as createImportLoader,
12289
+ vt as createNumberFormatter,
12290
+ wt as createTimeFormatter,
12291
+ St as createTimezoneFormatter,
10444
12292
  Jt as createTranslator,
10445
12293
  Yo as detectAndLoad,
10446
12294
  Yt as detectBrowserLanguage,
10447
- Vt as detectHardcodedText,
10448
- Z as detectTimezone,
10449
- Nt as expandText,
10450
- vo as findSimilarTranslation,
12295
+ Ht as detectHardcodedText,
12296
+ G as detectTimezone,
12297
+ Ft as expandText,
12298
+ wo as findSimilarTranslation,
10451
12299
  dt as flipAlignment,
10452
12300
  oo as flipHorizontal,
10453
12301
  rt as formatICU,
@@ -10455,16 +12303,16 @@ export {
10455
12303
  zt as fromUTC,
10456
12304
  uo as generateCoverageReport,
10457
12305
  co as generateTranslationCode,
10458
- Eo as getAllTimezones,
12306
+ bo as getAllTimezones,
10459
12307
  mt as getAllTranslationStats,
10460
- No as getAvailableCalendars,
12308
+ Fo as getAvailableCalendars,
10461
12309
  Ro as getCalendarInfo,
10462
- Mo as getCelestialStem,
12310
+ No as getCelestialStem,
10463
12311
  Bo as getChineseZodiac,
10464
12312
  Dt as getCurrentCalendarDate,
10465
12313
  to as getDocumentDirection,
10466
- fo as getGlossaryForLanguage,
10467
- So as getHijriMonthDays,
12314
+ vo as getGlossaryForLanguage,
12315
+ Co as getHijriMonthDays,
10468
12316
  At as getJapaneseEra,
10469
12317
  Po as getJapaneseYear,
10470
12318
  D as getLocaleTag,
@@ -10478,29 +12326,29 @@ export {
10478
12326
  Lo as getRecommendedCalendars,
10479
12327
  lo as getSourceKeys,
10480
12328
  nt as getTextDirection,
10481
- M as getTimezoneInfo,
12329
+ N as getTimezoneInfo,
10482
12330
  ko as getTimezonesGrouped,
10483
12331
  pt as getTranslationStats,
10484
12332
  W as isDSTActive,
10485
12333
  Ao as isHebrewLeapYear,
10486
12334
  jt as isHijriLeapYear,
10487
- xo as isPersianLeapYear,
12335
+ To as isPersianLeapYear,
10488
12336
  re as isRTLLanguage,
10489
- Qe as isSupported,
10490
- wo as isValidTimezone,
10491
- Et as lookupGlossary,
10492
- Qt as ordinal,
10493
- _t as plural,
12337
+ _e as isSupported,
12338
+ Eo as isValidTimezone,
12339
+ bt as lookupGlossary,
12340
+ _t as ordinal,
12341
+ Qt as plural,
10494
12342
  Xo as preloadWithStrategy,
10495
12343
  ue as pseudoLocalize,
10496
- Vo as pseudoLocalizeDictionary,
10497
- Kt as resolvePlVariant,
12344
+ Ho as pseudoLocalizeDictionary,
12345
+ Ut as resolvePlVariant,
10498
12346
  lt as rtlValue,
10499
12347
  eo as select,
10500
12348
  st as setDocumentDirection,
10501
12349
  ce as toCalendar,
10502
12350
  yt as toUTC,
10503
- Fo as useCalendar,
12351
+ Mo as useCalendar,
10504
12352
  qt as useDynamicI18n,
10505
12353
  Jo as useDynamicTranslation,
10506
12354
  ao as useIsRTL,
@@ -10508,9 +12356,9 @@ export {
10508
12356
  po as useNiceDateFormat,
10509
12357
  go as useNiceNumberFormat,
10510
12358
  mo as useNiceTimeFormat,
10511
- Zt as useNiceTranslation,
12359
+ Gt as useNiceTranslation,
10512
12360
  Wo as usePseudoLocalization,
10513
12361
  ro as useRTL,
10514
12362
  zo as useTimezone,
10515
- bo as validateAgainstGlossary
12363
+ fo as validateAgainstGlossary
10516
12364
  };