@nice2dev/i18n 1.0.21 → 1.0.22

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
- import { jsx as B } from "react/jsx-runtime";
2
- import { useMemo as b, useContext as N, createContext as I, useEffect as L, useState as P, useCallback as ee } from "react";
3
- const j = [
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 x, useCallback as ee } from "react";
3
+ const T = [
4
4
  "en",
5
5
  "pl",
6
6
  "de",
@@ -40,7 +40,7 @@ const j = [
40
40
  // Filipino
41
41
  "ms"
42
42
  // Malay
43
- ], ye = {
43
+ ], Ee = {
44
44
  // ── Global / Generic ──
45
45
  ok: "OK",
46
46
  cancel: "Cancel",
@@ -144,6 +144,180 @@ const j = [
144
144
  "navShell.home.sections.openTabs": "Open now",
145
145
  "navShell.home.sections.shortcuts": "Your shortcuts",
146
146
  "navShell.home.sections.allViews": "All views",
147
+ // ── NiceTutorial (autoplay controls) ──
148
+ "tutorial.play": "Play",
149
+ "tutorial.pause": "Pause",
150
+ "tutorial.speed": "Speed",
151
+ "tutorial.close": "Close",
152
+ // ── NiceTutorial launcher (generic) ──
153
+ "tutorial.start": "Tutorial",
154
+ "tutorial.startAria": "Start tutorial",
155
+ "tutorial.next": "Next",
156
+ "tutorial.back": "Back",
157
+ "tutorial.finish": "Finish",
158
+ "tutorial.skip": "Skip",
159
+ "tutorial.stepOf": "of",
160
+ // ── NiceModuleEditor tour ──
161
+ "tutorial.moduleEditor.browser.title": "Module browser",
162
+ "tutorial.moduleEditor.browser.content": "Pick a module here to open its manifest, entities and translations.",
163
+ "tutorial.moduleEditor.validate.title": "Validate",
164
+ "tutorial.moduleEditor.validate.content": "Check the module against the manifest schema. Issues appear in the status bar and output.",
165
+ "tutorial.moduleEditor.save.title": "Save",
166
+ "tutorial.moduleEditor.save.content": "Persist your changes through the configured data provider (e.g. write files back to disk).",
167
+ "tutorial.manifestEditor.intro.title": "Manifest editor",
168
+ "tutorial.manifestEditor.intro.content": "Edit the manifest in schema-driven sections. Toggle Form ⇄ JSON per section; validation appears in the status bar.",
169
+ "tutorial.schemaForm.intro.title": "Schema form",
170
+ "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.",
171
+ "tutorial.entityEditor.intro.title": "Entity editor",
172
+ "tutorial.entityEditor.intro.content": "Add entities on the left, then edit each entity’s metadata and its fields (type, keys, constraints) on the right.",
173
+ "tutorial.i18nEditor.intro.title": "Translations",
174
+ "tutorial.i18nEditor.intro.content": "Edit translations as a keys × locales grid. Add keys and locales; amber cells mark missing translations.",
175
+ "tutorial.formBuilder.intro.title": "Form builder",
176
+ "tutorial.formBuilder.intro.content": "Drag fields from the palette onto the canvas, then configure each field in the properties panel. Export the schema when done.",
177
+ "tutorial.formDesigner.intro.title": "Form designer",
178
+ "tutorial.formDesigner.intro.content": "Design data-entry forms with sections, lookups and calculated fields; bind them to your entity and preview live.",
179
+ "tutorial.paymentProviderConfig.intro.title": "Payment provider",
180
+ "tutorial.paymentProviderConfig.intro.content": "Pick a provider, fill its credentials (secrets are masked), choose test/live, enable methods and copy the webhook URL.",
181
+ "tutorial.webhookTester.intro.title": "Webhook tester",
182
+ "tutorial.webhookTester.intro.content": "Pick a saved payload (or write one), optionally sign it, send it to the endpoint and inspect the response.",
183
+ "tutorial.apiDesigner.intro.title": "API designer",
184
+ "tutorial.apiDesigner.intro.content": "Define endpoints, parameters, request/response schemas and security for your OpenAPI document.",
185
+ "tutorial.apiTester.intro.title": "API tester",
186
+ "tutorial.apiTester.intro.content": "Build requests with collections and environment variables, send them and assert on the responses.",
187
+ "tutorial.integrationBuilder.intro.title": "Integration builder",
188
+ "tutorial.integrationBuilder.intro.content": "Wire a flow of nodes (triggers → actions → error handling) and connect them to build an integration.",
189
+ "tutorial.scriptRunner.intro.title": "Script runner",
190
+ "tutorial.scriptRunner.intro.content": "Write a script and sample input, click Run, then inspect the result and captured logs below.",
191
+ "tutorial.lifecycleHooks.intro.title": "Lifecycle hooks",
192
+ "tutorial.lifecycleHooks.intro.content": "Bind handlers to each trigger, set their order and enable flag, and add an optional condition that gates execution.",
193
+ "tutorial.revisionHistory.intro.title": "Revision history",
194
+ "tutorial.revisionHistory.intro.content": "Pick a revision, choose another to compare, review the side-by-side diff, then restore an earlier version if needed.",
195
+ "tutorial.markdownEditor.intro.title": "Markdown editor",
196
+ "tutorial.markdownEditor.intro.content": "Write Markdown with the formatting toolbar; toggle the live preview to see the rendered result, and export to HTML.",
197
+ "tutorial.htmlEditor.intro.title": "Rich text editor",
198
+ "tutorial.htmlEditor.intro.content": "Format text with the toolbar, insert links, images and tables, and switch to HTML or Markdown source when you need it.",
199
+ "tutorial.documentEditor.intro.title": "Document editor",
200
+ "tutorial.documentEditor.intro.content": "Compose a document from blocks: use the toolbar or slash commands to add headings, lists, media and more, then export to HTML.",
201
+ "tutorial.codeEditor.intro.title": "Code editor",
202
+ "tutorial.codeEditor.intro.content": "Edit code with syntax highlighting, IntelliSense and the toolbar. Ctrl+S saves; the status bar shows the cursor position and any problems.",
203
+ "tutorial.kanbanBoard.intro.title": "Kanban board",
204
+ "tutorial.kanbanBoard.intro.content": 'Drag cards between columns to change their status, add cards with the "+" button, and click a card to edit its details.',
205
+ "tutorial.queryBuilder.intro.title": "Query builder",
206
+ "tutorial.queryBuilder.intro.content": "Add tables, pick columns, define joins, conditions and sorting visually — the SQL is generated for you. Switch to the SQL tab to review it.",
207
+ "tutorial.stateDesigner.intro.title": "State designer",
208
+ "tutorial.stateDesigner.intro.content": "Model your store as slices with fields and actions, pick a target (e.g. Zustand) and export ready-to-use state-management code.",
209
+ "tutorial.componentDesigner.intro.title": "Component designer",
210
+ "tutorial.componentDesigner.intro.content": "Name your component, declare its props with types and requirements, and preview the generated TypeScript interface live.",
211
+ "tutorial.pageBuilder.intro.title": "Page builder",
212
+ "tutorial.pageBuilder.intro.content": "Drag components from the sidebar onto the responsive grid, switch the desktop/tablet/mobile preview, and save the layout.",
213
+ "tutorial.lowCodeStudio.intro.title": "Low-code studio",
214
+ "tutorial.lowCodeStudio.intro.content": "Drag components from the sidebar onto the canvas, then switch between Design, Preview and Code tabs to build and export your app.",
215
+ "tutorial.testBuilder.intro.title": "Test builder",
216
+ "tutorial.testBuilder.intro.content": "Build test suites visually: add cases and interaction steps with assertions, run them, and export to a ready-to-run .test.tsx file.",
217
+ "tutorial.workflowDesigner.intro.title": "Workflow designer",
218
+ "tutorial.workflowDesigner.intro.content": "Add states and transitions on the canvas, validate the flow, simulate it, then test or publish your workflow.",
219
+ "tutorial.themeBuilder.intro.title": "Theme builder",
220
+ "tutorial.themeBuilder.intro.content": "Start from a preset, tweak colors, typography and other tokens by section, preview live, then apply or export the theme.",
221
+ "tutorial.filterBuilder.intro.title": "Filter builder",
222
+ "tutorial.filterBuilder.intro.content": "Build complex AND/OR filter trees: add conditions and nested groups, choose fields and operators, and save reusable presets.",
223
+ "tutorial.diagramDesigner.intro.title": "Diagram designer",
224
+ "tutorial.diagramDesigner.intro.content": "Drag shapes from the palette onto the canvas, connect them with connectors, edit properties on the right, then export to SVG, PNG or JSON.",
225
+ "tutorial.reportBuilder.intro.title": "Report builder",
226
+ "tutorial.reportBuilder.intro.content": "Drag sections onto the report, bind them to data sources, arrange the layout, then export to PDF, HTML or XLSX.",
227
+ "tutorial.erpReportDesigner.intro.title": "Report designer",
228
+ "tutorial.erpReportDesigner.intro.content": "Lay out banded reports: drop elements (fields, expressions, charts) into bands, bind data connections, edit properties, then preview and export.",
229
+ "tutorial.recipeEditor.intro.title": "Recipe editor",
230
+ "tutorial.recipeEditor.intro.content": "Edit recipe details, add and reorder ingredients and steps, attach photos, and import or export the recipe as JSON.",
231
+ "tutorial.pipelineEditor.intro.title": "Pipeline editor",
232
+ "tutorial.pipelineEditor.intro.content": "Build a CI/CD pipeline from stages, jobs and steps; set triggers, variables and secrets; then validate, save and run it.",
233
+ "tutorial.mergeRequestBuilder.intro.title": "Merge request builder",
234
+ "tutorial.mergeRequestBuilder.intro.content": "Pick source and target branches, write the title and description, add reviewers, labels and linked issues, then preview and submit.",
235
+ "tutorial.automationRuleEditor.intro.title": "Automation rule editor",
236
+ "tutorial.automationRuleEditor.intro.content": "Define the trigger, add optional conditions, then list the actions to run — switch between the three sections using the tabs.",
237
+ "tutorial.sceneActionBuilder.intro.title": "Scene action builder",
238
+ "tutorial.sceneActionBuilder.intro.content": "Add an action per device, set its target state and an optional delay, reorder them, and preview the scene sequence.",
239
+ "tutorial.backupTagEditor.intro.title": "Backup tags",
240
+ "tutorial.backupTagEditor.intro.content": "Tag this backup for easy retrieval: type a label and pick a color, or add one of the suggested tags; auto-generated tags are protected.",
241
+ "tutorial.dataMergeBuilder.intro.title": "Data merge",
242
+ "tutorial.dataMergeBuilder.intro.content": "Walk through the steps: choose source and target branches, preview changes, resolve conflicts, set options, then confirm the merge.",
243
+ "tutorial.invoiceLineEditor.intro.title": "Invoice lines",
244
+ "tutorial.invoiceLineEditor.intro.content": "Add line items with quantity, unit price, VAT and discount — net, gross and the VAT breakdown are calculated automatically.",
245
+ "tutorial.keyValueEditor.intro.title": "Key/value editor",
246
+ "tutorial.keyValueEditor.intro.content": "Add key/value rows for headers, params, env vars or config; mask secret values, toggle rows on/off, and watch for duplicate keys.",
247
+ "tutorial.imageEditor.intro.title": "Image editor",
248
+ "tutorial.imageEditor.intro.content": "Use the toolbar to crop, rotate, flip, adjust brightness/contrast and annotate; undo/redo your edits, then save the result.",
249
+ "tutorial.cropEditor.intro.title": "Crop editor",
250
+ "tutorial.cropEditor.intro.content": "Drag the crop box over the image, pick an aspect ratio, rotate, flip or zoom, then use the result.",
251
+ "tutorial.pdfAnnotationEditor.intro.title": "PDF annotations",
252
+ "tutorial.pdfAnnotationEditor.intro.content": "Pick a tool from the toolbar (highlight, underline, freehand, text…), mark up the page, navigate pages and zoom as needed.",
253
+ "tutorial.videoEditor.intro.title": "Video editor",
254
+ "tutorial.videoEditor.intro.content": "Add media to the timeline tracks, trim and arrange clips, edit clip properties, preview playback, then export the video.",
255
+ // ── Phase 4: domain-package editors ──
256
+ "tutorial.viewBuilder.intro.title": "View builder",
257
+ "tutorial.viewBuilder.intro.content": "Drag controls from the palette into the grid cells, configure each cell in the properties panel, and import, export or save the view.",
258
+ "tutorial.dashboardDesigner.intro.title": "Dashboard designer",
259
+ "tutorial.dashboardDesigner.intro.content": "Drag widgets from the palette onto the grid, resize and arrange them, configure each in the property panel, then preview or export the dashboard.",
260
+ "tutorial.workflowDesignerCanvas.intro.title": "Workflow designer",
261
+ "tutorial.workflowDesignerCanvas.intro.content": "Add trigger, action and condition nodes to the canvas and connect them; manage variables, validate the flow, then export it.",
262
+ "tutorial.armatureEditor.intro.title": "Armature editor",
263
+ "tutorial.armatureEditor.intro.content": "Select bones to edit their transforms, add or reparent bones, configure IK chains, and save or load poses.",
264
+ "tutorial.morphTargetEditor.intro.title": "Morph target editor",
265
+ "tutorial.morphTargetEditor.intro.content": "Blend the mesh’s morph targets with the per-target influence sliders, create or delete targets, and preview the interpolation.",
266
+ "tutorial.terrainEditor.intro.title": "Terrain editor",
267
+ "tutorial.terrainEditor.intro.content": "Sculpt the heightmap with brushes (raise, lower, flatten, smooth, noise), splat texture layers, generate procedural terrain, and import/export heightmaps.",
268
+ "tutorial.materialEditor.intro.title": "Material editor",
269
+ "tutorial.materialEditor.intro.content": "Build a shader as a node graph: drag nodes from the palette, wire their ports together, edit properties, and preview the compiled material.",
270
+ "tutorial.particleEditor.intro.title": "Particle editor",
271
+ "tutorial.particleEditor.intro.content": "Pick a particle system, tune its emitter and modules in the inspector, and play, pause or stop the live preview.",
272
+ "tutorial.uvEditor.intro.title": "UV editor",
273
+ "tutorial.uvEditor.intro.content": "Edit the mesh’s UV layout over the texture: select and transform UVs with the tools, switch UV channels, and apply your changes.",
274
+ "tutorial.fontEditor.intro.title": "Font editor",
275
+ "tutorial.fontEditor.intro.content": "Edit glyphs on the unicode grid, adjust font metrics and per-glyph paths and bearings, then export the font.",
276
+ "tutorial.iconEditor.intro.title": "Icon editor",
277
+ "tutorial.iconEditor.intro.content": "Draw and edit SVG shapes on the grid, tweak stroke and variant settings, preview on different backgrounds, and export to SVG, React or PNG.",
278
+ "tutorial.uiDesigner.intro.title": "UI designer",
279
+ "tutorial.uiDesigner.intro.content": "Drag components from the palette onto the canvas, edit their props in the panel, preview responsive breakpoints, and export to React/TSX.",
280
+ "tutorial.gameEditor.intro.title": "Game editor",
281
+ "tutorial.gameEditor.intro.content": "Build your scene in the viewport using the hierarchy and asset panels, tweak entities in the inspector, and save the project.",
282
+ "tutorial.levelEditor.intro.title": "Level editor",
283
+ "tutorial.levelEditor.intro.content": "Build the game world: place and snap objects across layers, paint terrain, lay out splines and lights, then bake lightmaps.",
284
+ "tutorial.gameMaterialEditor.intro.title": "Material editor",
285
+ "tutorial.gameMaterialEditor.intro.content": "Author a shader as a node graph: add and connect shader nodes, edit their properties, and compile the material.",
286
+ "tutorial.gameParticleEditor.intro.title": "Particle editor",
287
+ "tutorial.gameParticleEditor.intro.content": "Tune the particle system in the inspector — emitter, lifetime, curves and rendering — and play, pause or restart the live preview.",
288
+ "tutorial.floorPlanEditor.intro.title": "Floor plan editor",
289
+ "tutorial.floorPlanEditor.intro.content": "Draw rooms and zones with the tools, place devices on the plan, switch floors and toggle overlays like dimensions, grid and occupancy.",
290
+ "tutorial.buildingSceneEditor.intro.title": "Scene editor",
291
+ "tutorial.buildingSceneEditor.intro.content": "Create scenes that set multiple devices at once: pick a scene, choose device target states, then save or activate it.",
292
+ "tutorial.buildingAutomationEditor.intro.title": "Automation editor",
293
+ "tutorial.buildingAutomationEditor.intro.content": "Create building automations: pick one from the list, define its triggers, conditions and actions, then save, enable or delete it.",
294
+ "tutorial.spatialEditor.intro.title": "Spatial editor",
295
+ "tutorial.spatialEditor.intro.content": "Lay out floor plans across modes: draw walls, rooms and objects with the tools, manage layers, snap to the grid, then export.",
296
+ "tutorial.decisionTreeEditor.intro.title": "Decision tree editor",
297
+ "tutorial.decisionTreeEditor.intro.content": "Explore the decision tree: click nodes to inspect conditions and outcomes, toggle metrics, probabilities and samples, and highlight a path for an input.",
298
+ "tutorial.diagramEditor.intro.title": "Diagram editor",
299
+ "tutorial.diagramEditor.intro.content": "Pick a tool to add and connect nodes on the canvas, edit them in the property panel, and export the diagram from the toolbar.",
300
+ "tutorial.contractEditor.intro.title": "Contract editor",
301
+ "tutorial.contractEditor.intro.content": "Assemble the contract from the clause library, fill template variables, track versions and approvals, then save or export to PDF/DOCX/HTML.",
302
+ "tutorial.invoiceDesigner.intro.title": "Invoice designer",
303
+ "tutorial.invoiceDesigner.intro.content": "Drag elements onto the invoice canvas, bind them to data fields, align with the grid and rulers, then save or export to PDF.",
304
+ "tutorial.presentationEditor.intro.title": "Presentation editor",
305
+ "tutorial.presentationEditor.intro.content": "Build slides from the thumbnail rail, add and arrange elements on the canvas, edit them in the property panel, then present or export.",
306
+ // ── Phase 4 tail: standalone packages (ui-bi/ui-video/ui-ai/ui-math/ui-audio) ──
307
+ "tutorial.dashboardStudio.intro.title": "Dashboard studio",
308
+ "tutorial.dashboardStudio.intro.content": "Drag widgets from the palette onto the grid, bind them to data sources, add filters, then toggle Edit/View, refresh and save.",
309
+ "tutorial.biReportBuilder.intro.title": "Report builder",
310
+ "tutorial.biReportBuilder.intro.content": "Drag elements from the palette onto the report, bind them to data sources, switch design/preview, then export to PDF or Excel.",
311
+ "tutorial.etlBuilder.intro.title": "ETL builder",
312
+ "tutorial.etlBuilder.intro.content": "Wire sources → transformations → destinations into a pipeline, switch the views, then run it and save the configuration.",
313
+ "tutorial.videoEditorPro.intro.title": "Video editor",
314
+ "tutorial.videoEditorPro.intro.content": "Add media to the timeline, arrange and trim clips, apply effects and transitions, then configure and run the export.",
315
+ "tutorial.mlStudio.intro.title": "ML studio",
316
+ "tutorial.mlStudio.intro.content": "Work through the tabs: prepare datasets, run experiments, compare and pick models, then deploy the best one.",
317
+ "tutorial.mathEditor.intro.title": "Math editor",
318
+ "tutorial.mathEditor.intro.content": "Write equations as LaTeX or insert symbols from the palette; switch to handwriting input, and preview the rendered formula live.",
319
+ "tutorial.dmxEditor.intro.title": "DMX editor",
320
+ "tutorial.dmxEditor.intro.content": "Pick the FTDI device and port, then set each DMX channel’s value with the sliders to control your lighting fixtures live.",
147
321
  // ── Sidebar context menu ──
148
322
  "sidebar.menu.open": "Open",
149
323
  "sidebar.menu.openNewTab": "Open in new tab",
@@ -785,7 +959,7 @@ const j = [
785
959
  "vectorEditor.layers.hide": "Hide",
786
960
  "vectorEditor.layers.lock": "Lock",
787
961
  "vectorEditor.layers.unlock": "Unlock"
788
- }, Ee = {
962
+ }, ye = {
789
963
  ok: "OK",
790
964
  cancel: "Anuluj",
791
965
  save: "Zapisz",
@@ -887,6 +1061,180 @@ const j = [
887
1061
  "navShell.home.sections.openTabs": "Otwarte teraz",
888
1062
  "navShell.home.sections.shortcuts": "Twoje skróty",
889
1063
  "navShell.home.sections.allViews": "Wszystkie widoki",
1064
+ // ── NiceTutorial (autoplay controls) ──
1065
+ "tutorial.play": "Odtwórz",
1066
+ "tutorial.pause": "Pauza",
1067
+ "tutorial.speed": "Prędkość",
1068
+ "tutorial.close": "Zamknij",
1069
+ // ── NiceTutorial launcher (generic) ──
1070
+ "tutorial.start": "Samouczek",
1071
+ "tutorial.startAria": "Uruchom samouczek",
1072
+ "tutorial.next": "Dalej",
1073
+ "tutorial.back": "Wstecz",
1074
+ "tutorial.finish": "Zakończ",
1075
+ "tutorial.skip": "Pomiń",
1076
+ "tutorial.stepOf": "z",
1077
+ // ── NiceModuleEditor tour ──
1078
+ "tutorial.moduleEditor.browser.title": "Przeglądarka modułów",
1079
+ "tutorial.moduleEditor.browser.content": "Wybierz moduł, aby otworzyć jego manifest, encje i tłumaczenia.",
1080
+ "tutorial.moduleEditor.validate.title": "Walidacja",
1081
+ "tutorial.moduleEditor.validate.content": "Sprawdź moduł względem schematu manifestu. Problemy pojawią się na pasku statusu i w logach.",
1082
+ "tutorial.moduleEditor.save.title": "Zapis",
1083
+ "tutorial.moduleEditor.save.content": "Zapisz zmiany przez skonfigurowany data provider (np. zapis plików na dysk).",
1084
+ "tutorial.manifestEditor.intro.title": "Edytor manifestu",
1085
+ "tutorial.manifestEditor.intro.content": "Edytuj manifest w sekcjach opartych na schemacie. Przełączaj Formularz ⇄ JSON w sekcji; walidacja widoczna na pasku statusu.",
1086
+ "tutorial.schemaForm.intro.title": "Formularz ze schematu",
1087
+ "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.",
1088
+ "tutorial.entityEditor.intro.title": "Edytor encji",
1089
+ "tutorial.entityEditor.intro.content": "Dodawaj encje po lewej, a po prawej edytuj metadane encji i jej pola (typ, klucze, ograniczenia).",
1090
+ "tutorial.i18nEditor.intro.title": "Tłumaczenia",
1091
+ "tutorial.i18nEditor.intro.content": "Edytuj tłumaczenia w siatce klucze × locale. Dodawaj klucze i języki; bursztynowe komórki oznaczają braki.",
1092
+ "tutorial.formBuilder.intro.title": "Kreator formularzy",
1093
+ "tutorial.formBuilder.intro.content": "Przeciągaj pola z palety na kanwę, a potem konfiguruj każde pole w panelu właściwości. Na koniec wyeksportuj schemat.",
1094
+ "tutorial.formDesigner.intro.title": "Projektant formularzy",
1095
+ "tutorial.formDesigner.intro.content": "Projektuj formularze z sekcjami, lookupami i polami wyliczanymi; powiąż je z encją i podglądaj na żywo.",
1096
+ "tutorial.paymentProviderConfig.intro.title": "Dostawca płatności",
1097
+ "tutorial.paymentProviderConfig.intro.content": "Wybierz dostawcę, uzupełnij dane (sekrety są maskowane), wybierz test/live, włącz metody i skopiuj URL webhooka.",
1098
+ "tutorial.webhookTester.intro.title": "Tester webhooków",
1099
+ "tutorial.webhookTester.intro.content": "Wybierz zapisany payload (lub napisz własny), opcjonalnie go podpisz, wyślij na endpoint i sprawdź odpowiedź.",
1100
+ "tutorial.apiDesigner.intro.title": "Projektant API",
1101
+ "tutorial.apiDesigner.intro.content": "Zdefiniuj endpointy, parametry, schematy żądań/odpowiedzi i zabezpieczenia dokumentu OpenAPI.",
1102
+ "tutorial.apiTester.intro.title": "Tester API",
1103
+ "tutorial.apiTester.intro.content": "Buduj żądania z kolekcjami i zmiennymi środowiska, wysyłaj je i sprawdzaj asercje na odpowiedziach.",
1104
+ "tutorial.integrationBuilder.intro.title": "Kreator integracji",
1105
+ "tutorial.integrationBuilder.intro.content": "Połącz przepływ węzłów (wyzwalacze → akcje → obsługa błędów), aby zbudować integrację.",
1106
+ "tutorial.scriptRunner.intro.title": "Runner skryptów",
1107
+ "tutorial.scriptRunner.intro.content": "Napisz skrypt i przykładowe dane wejściowe, kliknij Uruchom, a poniżej sprawdź wynik i przechwycone logi.",
1108
+ "tutorial.lifecycleHooks.intro.title": "Haki cyklu życia",
1109
+ "tutorial.lifecycleHooks.intro.content": "Przypisz uchwyty do każdego wyzwalacza, ustaw ich kolejność i flagę włączenia oraz dodaj opcjonalny warunek wykonania.",
1110
+ "tutorial.revisionHistory.intro.title": "Historia wersji",
1111
+ "tutorial.revisionHistory.intro.content": "Wybierz wersję, wskaż drugą do porównania, przejrzyj różnice obok siebie, a w razie potrzeby przywróć wcześniejszą wersję.",
1112
+ "tutorial.markdownEditor.intro.title": "Edytor Markdown",
1113
+ "tutorial.markdownEditor.intro.content": "Pisz w Markdown za pomocą paska formatowania; włącz podgląd na żywo, aby zobaczyć wynik, i eksportuj do HTML.",
1114
+ "tutorial.htmlEditor.intro.title": "Edytor tekstu sformatowanego",
1115
+ "tutorial.htmlEditor.intro.content": "Formatuj tekst paskiem narzędzi, wstawiaj linki, obrazy i tabele oraz przełączaj się na źródło HTML lub Markdown, gdy tego potrzebujesz.",
1116
+ "tutorial.documentEditor.intro.title": "Edytor dokumentów",
1117
+ "tutorial.documentEditor.intro.content": "Twórz dokument z bloków: użyj paska narzędzi lub komend slash, aby dodać nagłówki, listy, media i więcej, a następnie wyeksportuj do HTML.",
1118
+ "tutorial.codeEditor.intro.title": "Edytor kodu",
1119
+ "tutorial.codeEditor.intro.content": "Edytuj kod z podświetlaniem składni, IntelliSense i paskiem narzędzi. Ctrl+S zapisuje; pasek stanu pokazuje pozycję kursora i ewentualne problemy.",
1120
+ "tutorial.kanbanBoard.intro.title": "Tablica Kanban",
1121
+ "tutorial.kanbanBoard.intro.content": 'Przeciągaj karty między kolumnami, aby zmienić ich status, dodawaj karty przyciskiem „+", a kliknij kartę, aby edytować jej szczegóły.',
1122
+ "tutorial.queryBuilder.intro.title": "Kreator zapytań",
1123
+ "tutorial.queryBuilder.intro.content": "Dodawaj tabele, wybieraj kolumny, definiuj złączenia, warunki i sortowanie wizualnie — SQL zostanie wygenerowany automatycznie. Przejdź na kartę SQL, aby go sprawdzić.",
1124
+ "tutorial.stateDesigner.intro.title": "Projektant stanu",
1125
+ "tutorial.stateDesigner.intro.content": "Modeluj magazyn jako wycinki z polami i akcjami, wybierz cel (np. Zustand) i wyeksportuj gotowy kod zarządzania stanem.",
1126
+ "tutorial.componentDesigner.intro.title": "Projektant komponentów",
1127
+ "tutorial.componentDesigner.intro.content": "Nazwij komponent, zadeklaruj jego właściwości wraz z typami i wymaganiami oraz zobacz na żywo wygenerowany interfejs TypeScript.",
1128
+ "tutorial.pageBuilder.intro.title": "Kreator stron",
1129
+ "tutorial.pageBuilder.intro.content": "Przeciągaj komponenty z paska bocznego na responsywną siatkę, przełączaj podgląd desktop/tablet/mobile i zapisz układ.",
1130
+ "tutorial.lowCodeStudio.intro.title": "Studio low-code",
1131
+ "tutorial.lowCodeStudio.intro.content": "Przeciągaj komponenty z paska bocznego na kanwę, a następnie przełączaj się między kartami Projekt, Podgląd i Kod, aby zbudować i wyeksportować aplikację.",
1132
+ "tutorial.testBuilder.intro.title": "Kreator testów",
1133
+ "tutorial.testBuilder.intro.content": "Buduj zestawy testów wizualnie: dodawaj przypadki i kroki interakcji z asercjami, uruchamiaj je i eksportuj do gotowego pliku .test.tsx.",
1134
+ "tutorial.workflowDesigner.intro.title": "Projektant przepływów",
1135
+ "tutorial.workflowDesigner.intro.content": "Dodawaj stany i przejścia na kanwie, sprawdzaj poprawność przepływu, symuluj go, a następnie testuj lub publikuj swój workflow.",
1136
+ "tutorial.themeBuilder.intro.title": "Kreator motywów",
1137
+ "tutorial.themeBuilder.intro.content": "Zacznij od gotowego motywu, dostosuj kolory, typografię i inne tokeny według sekcji, podglądaj na żywo, a następnie zastosuj lub wyeksportuj motyw.",
1138
+ "tutorial.filterBuilder.intro.title": "Kreator filtrów",
1139
+ "tutorial.filterBuilder.intro.content": "Buduj złożone drzewa filtrów AND/OR: dodawaj warunki i zagnieżdżone grupy, wybieraj pola i operatory oraz zapisuj wielokrotnego użytku presety.",
1140
+ "tutorial.diagramDesigner.intro.title": "Projektant diagramów",
1141
+ "tutorial.diagramDesigner.intro.content": "Przeciągaj kształty z palety na kanwę, łącz je konektorami, edytuj właściwości po prawej, a następnie eksportuj do SVG, PNG lub JSON.",
1142
+ "tutorial.reportBuilder.intro.title": "Kreator raportów",
1143
+ "tutorial.reportBuilder.intro.content": "Przeciągaj sekcje na raport, wiąż je ze źródłami danych, układaj układ, a następnie eksportuj do PDF, HTML lub XLSX.",
1144
+ "tutorial.erpReportDesigner.intro.title": "Projektant raportów",
1145
+ "tutorial.erpReportDesigner.intro.content": "Projektuj raporty pasmowe: umieszczaj elementy (pola, wyrażenia, wykresy) w pasmach, wiąż połączenia danych, edytuj właściwości, a następnie podglądaj i eksportuj.",
1146
+ "tutorial.recipeEditor.intro.title": "Edytor przepisów",
1147
+ "tutorial.recipeEditor.intro.content": "Edytuj szczegóły przepisu, dodawaj i zmieniaj kolejność składników i kroków, dołączaj zdjęcia oraz importuj lub eksportuj przepis jako JSON.",
1148
+ "tutorial.pipelineEditor.intro.title": "Edytor pipeline’ów",
1149
+ "tutorial.pipelineEditor.intro.content": "Zbuduj pipeline CI/CD z etapów, zadań i kroków; ustaw wyzwalacze, zmienne i sekrety; następnie sprawdź, zapisz i uruchom go.",
1150
+ "tutorial.mergeRequestBuilder.intro.title": "Kreator merge requestów",
1151
+ "tutorial.mergeRequestBuilder.intro.content": "Wybierz gałąź źródłową i docelową, napisz tytuł i opis, dodaj recenzentów, etykiety i powiązane zgłoszenia, a następnie podejrzyj i wyślij.",
1152
+ "tutorial.automationRuleEditor.intro.title": "Edytor reguł automatyzacji",
1153
+ "tutorial.automationRuleEditor.intro.content": "Zdefiniuj wyzwalacz, dodaj opcjonalne warunki, a następnie wypisz akcje do wykonania — przełączaj się między trzema sekcjami za pomocą kart.",
1154
+ "tutorial.sceneActionBuilder.intro.title": "Kreator akcji sceny",
1155
+ "tutorial.sceneActionBuilder.intro.content": "Dodaj akcję dla każdego urządzenia, ustaw jego stan docelowy i opcjonalne opóźnienie, zmieniaj kolejność i podglądaj sekwencję sceny.",
1156
+ "tutorial.backupTagEditor.intro.title": "Tagi kopii zapasowej",
1157
+ "tutorial.backupTagEditor.intro.content": "Otaguj tę kopię zapasową dla łatwego odnalezienia: wpisz etykietę i wybierz kolor lub dodaj jeden z sugerowanych tagów; tagi automatyczne są chronione.",
1158
+ "tutorial.dataMergeBuilder.intro.title": "Scalanie danych",
1159
+ "tutorial.dataMergeBuilder.intro.content": "Przejdź przez kroki: wybierz gałąź źródłową i docelową, podejrzyj zmiany, rozwiąż konflikty, ustaw opcje, a następnie potwierdź scalanie.",
1160
+ "tutorial.invoiceLineEditor.intro.title": "Pozycje faktury",
1161
+ "tutorial.invoiceLineEditor.intro.content": "Dodawaj pozycje z ilością, ceną jednostkową, VAT i rabatem — kwoty netto, brutto i rozbicie VAT są obliczane automatycznie.",
1162
+ "tutorial.keyValueEditor.intro.title": "Edytor klucz/wartość",
1163
+ "tutorial.keyValueEditor.intro.content": "Dodawaj wiersze klucz/wartość dla nagłówków, parametrów, zmiennych środowiskowych lub konfiguracji; maskuj sekrety, włączaj/wyłączaj wiersze i wykrywaj duplikaty kluczy.",
1164
+ "tutorial.imageEditor.intro.title": "Edytor obrazów",
1165
+ "tutorial.imageEditor.intro.content": "Użyj paska narzędzi, aby przyciąć, obrócić, odbić, dostosować jasność/kontrast i dodać adnotacje; cofaj/ponawiaj zmiany, a następnie zapisz wynik.",
1166
+ "tutorial.cropEditor.intro.title": "Edytor kadrowania",
1167
+ "tutorial.cropEditor.intro.content": "Przeciągnij ramkę kadrowania na obrazie, wybierz proporcje, obróć, odbij lub przybliż, a następnie użyj wyniku.",
1168
+ "tutorial.pdfAnnotationEditor.intro.title": "Adnotacje PDF",
1169
+ "tutorial.pdfAnnotationEditor.intro.content": "Wybierz narzędzie z paska (zakreślacz, podkreślenie, odręczne, tekst…), nanieś adnotacje na stronę, przechodź między stronami i przybliżaj w razie potrzeby.",
1170
+ "tutorial.videoEditor.intro.title": "Edytor wideo",
1171
+ "tutorial.videoEditor.intro.content": "Dodawaj media do ścieżek osi czasu, przycinaj i układaj klipy, edytuj właściwości klipów, podglądaj odtwarzanie, a następnie eksportuj wideo.",
1172
+ // ── Phase 4: edytory pakietów domenowych ──
1173
+ "tutorial.viewBuilder.intro.title": "Kreator widoków",
1174
+ "tutorial.viewBuilder.intro.content": "Przeciągaj kontrolki z palety do komórek siatki, konfiguruj każdą komórkę w panelu właściwości oraz importuj, eksportuj lub zapisz widok.",
1175
+ "tutorial.dashboardDesigner.intro.title": "Projektant dashboardów",
1176
+ "tutorial.dashboardDesigner.intro.content": "Przeciągaj widżety z palety na siatkę, zmieniaj ich rozmiar i układ, konfiguruj każdy w panelu właściwości, a następnie podglądaj lub eksportuj dashboard.",
1177
+ "tutorial.workflowDesignerCanvas.intro.title": "Projektant przepływów",
1178
+ "tutorial.workflowDesignerCanvas.intro.content": "Dodawaj na kanwę węzły wyzwalaczy, akcji i warunków i łącz je; zarządzaj zmiennymi, sprawdzaj poprawność przepływu, a następnie eksportuj.",
1179
+ "tutorial.armatureEditor.intro.title": "Edytor szkieletu",
1180
+ "tutorial.armatureEditor.intro.content": "Zaznaczaj kości, aby edytować ich transformacje, dodawaj lub zmieniaj rodzica kości, konfiguruj łańcuchy IK oraz zapisuj i wczytuj pozy.",
1181
+ "tutorial.morphTargetEditor.intro.title": "Edytor morph targetów",
1182
+ "tutorial.morphTargetEditor.intro.content": "Mieszaj morph targety siatki suwakami wpływu, twórz lub usuwaj cele i podglądaj interpolację.",
1183
+ "tutorial.terrainEditor.intro.title": "Edytor terenu",
1184
+ "tutorial.terrainEditor.intro.content": "Rzeźb mapę wysokości pędzlami (podnieś, obniż, spłaszcz, wygładź, szum), nakładaj warstwy tekstur, generuj teren proceduralnie oraz importuj/eksportuj mapy wysokości.",
1185
+ "tutorial.materialEditor.intro.title": "Edytor materiałów",
1186
+ "tutorial.materialEditor.intro.content": "Zbuduj shader jako graf węzłów: przeciągaj węzły z palety, łącz ich porty, edytuj właściwości i podglądaj skompilowany materiał.",
1187
+ "tutorial.particleEditor.intro.title": "Edytor cząstek",
1188
+ "tutorial.particleEditor.intro.content": "Wybierz system cząstek, dostrój jego emiter i moduły w inspektorze oraz odtwarzaj, pauzuj lub zatrzymuj podgląd na żywo.",
1189
+ "tutorial.uvEditor.intro.title": "Edytor UV",
1190
+ "tutorial.uvEditor.intro.content": "Edytuj układ UV siatki na teksturze: zaznaczaj i przekształcaj UV narzędziami, przełączaj kanały UV i zatwierdzaj zmiany.",
1191
+ "tutorial.fontEditor.intro.title": "Edytor fontów",
1192
+ "tutorial.fontEditor.intro.content": "Edytuj glify na siatce unicode, dostosuj metryki fontu oraz ścieżki i odstępy poszczególnych glifów, a następnie wyeksportuj font.",
1193
+ "tutorial.iconEditor.intro.title": "Edytor ikon",
1194
+ "tutorial.iconEditor.intro.content": "Rysuj i edytuj kształty SVG na siatce, dostosuj ustawienia obrysu i wariantu, podglądaj na różnych tłach i eksportuj do SVG, React lub PNG.",
1195
+ "tutorial.uiDesigner.intro.title": "Projektant UI",
1196
+ "tutorial.uiDesigner.intro.content": "Przeciągaj komponenty z palety na kanwę, edytuj ich właściwości w panelu, podglądaj responsywne punkty i eksportuj do React/TSX.",
1197
+ "tutorial.gameEditor.intro.title": "Edytor gier",
1198
+ "tutorial.gameEditor.intro.content": "Buduj scenę w widoku, korzystając z paneli hierarchii i zasobów, dostrajaj encje w inspektorze i zapisz projekt.",
1199
+ "tutorial.levelEditor.intro.title": "Edytor poziomów",
1200
+ "tutorial.levelEditor.intro.content": "Buduj świat gry: rozmieszczaj i przyciągaj obiekty na warstwach, maluj teren, układaj splajny i światła, a następnie wypiecz lightmapy.",
1201
+ "tutorial.gameMaterialEditor.intro.title": "Edytor materiałów",
1202
+ "tutorial.gameMaterialEditor.intro.content": "Twórz shader jako graf węzłów: dodawaj i łącz węzły shadera, edytuj ich właściwości i kompiluj materiał.",
1203
+ "tutorial.gameParticleEditor.intro.title": "Edytor cząstek",
1204
+ "tutorial.gameParticleEditor.intro.content": "Dostrój system cząstek w inspektorze — emiter, czas życia, krzywe i renderowanie — oraz odtwarzaj, pauzuj lub restartuj podgląd na żywo.",
1205
+ "tutorial.floorPlanEditor.intro.title": "Edytor rzutu kondygnacji",
1206
+ "tutorial.floorPlanEditor.intro.content": "Rysuj pomieszczenia i strefy narzędziami, rozmieszczaj urządzenia na planie, przełączaj kondygnacje i włączaj nakładki, takie jak wymiary, siatka i obłożenie.",
1207
+ "tutorial.buildingSceneEditor.intro.title": "Edytor scen",
1208
+ "tutorial.buildingSceneEditor.intro.content": "Twórz sceny ustawiające wiele urządzeń naraz: wybierz scenę, określ stany docelowe urządzeń, a następnie zapisz lub aktywuj.",
1209
+ "tutorial.buildingAutomationEditor.intro.title": "Edytor automatyzacji",
1210
+ "tutorial.buildingAutomationEditor.intro.content": "Twórz automatyzacje budynku: wybierz jedną z listy, zdefiniuj jej wyzwalacze, warunki i akcje, a następnie zapisz, włącz lub usuń.",
1211
+ "tutorial.spatialEditor.intro.title": "Edytor przestrzenny",
1212
+ "tutorial.spatialEditor.intro.content": "Projektuj rzuty w różnych trybach: rysuj ściany, pomieszczenia i obiekty narzędziami, zarządzaj warstwami, przyciągaj do siatki i eksportuj.",
1213
+ "tutorial.decisionTreeEditor.intro.title": "Edytor drzewa decyzyjnego",
1214
+ "tutorial.decisionTreeEditor.intro.content": "Eksploruj drzewo decyzyjne: klikaj węzły, aby sprawdzić warunki i wyniki, włączaj metryki, prawdopodobieństwa i próbki oraz podświetlaj ścieżkę dla danych wejściowych.",
1215
+ "tutorial.diagramEditor.intro.title": "Edytor diagramów",
1216
+ "tutorial.diagramEditor.intro.content": "Wybierz narzędzie, aby dodawać i łączyć węzły na kanwie, edytuj je w panelu właściwości i eksportuj diagram z paska narzędzi.",
1217
+ "tutorial.contractEditor.intro.title": "Edytor umów",
1218
+ "tutorial.contractEditor.intro.content": "Złóż umowę z biblioteki klauzul, uzupełnij zmienne szablonu, śledź wersje i zatwierdzenia, a następnie zapisz lub wyeksportuj do PDF/DOCX/HTML.",
1219
+ "tutorial.invoiceDesigner.intro.title": "Projektant faktur",
1220
+ "tutorial.invoiceDesigner.intro.content": "Przeciągaj elementy na kanwę faktury, wiąż je z polami danych, wyrównuj do siatki i linijek, a następnie zapisz lub wyeksportuj do PDF.",
1221
+ "tutorial.presentationEditor.intro.title": "Edytor prezentacji",
1222
+ "tutorial.presentationEditor.intro.content": "Buduj slajdy z paska miniatur, dodawaj i układaj elementy na kanwie, edytuj je w panelu właściwości, a następnie prezentuj lub eksportuj.",
1223
+ // ── Phase 4 tail: pakiety samodzielne (ui-bi/ui-video/ui-ai/ui-math/ui-audio) ──
1224
+ "tutorial.dashboardStudio.intro.title": "Studio dashboardów",
1225
+ "tutorial.dashboardStudio.intro.content": "Przeciągaj widżety z palety na siatkę, wiąż je ze źródłami danych, dodawaj filtry, a następnie przełączaj Edycja/Podgląd, odświeżaj i zapisz.",
1226
+ "tutorial.biReportBuilder.intro.title": "Kreator raportów",
1227
+ "tutorial.biReportBuilder.intro.content": "Przeciągaj elementy z palety na raport, wiąż je ze źródłami danych, przełączaj projekt/podgląd, a następnie eksportuj do PDF lub Excela.",
1228
+ "tutorial.etlBuilder.intro.title": "Kreator ETL",
1229
+ "tutorial.etlBuilder.intro.content": "Połącz źródła → transformacje → miejsca docelowe w potok, przełączaj widoki, a następnie uruchom go i zapisz konfigurację.",
1230
+ "tutorial.videoEditorPro.intro.title": "Edytor wideo",
1231
+ "tutorial.videoEditorPro.intro.content": "Dodawaj media na oś czasu, układaj i przycinaj klipy, nakładaj efekty i przejścia, a następnie skonfiguruj i uruchom eksport.",
1232
+ "tutorial.mlStudio.intro.title": "Studio ML",
1233
+ "tutorial.mlStudio.intro.content": "Przejdź przez karty: przygotuj zbiory danych, uruchom eksperymenty, porównaj i wybierz modele, a następnie wdroż najlepszy.",
1234
+ "tutorial.mathEditor.intro.title": "Edytor matematyczny",
1235
+ "tutorial.mathEditor.intro.content": "Pisz równania w LaTeX lub wstawiaj symbole z palety; przełącz się na pismo odręczne i podglądaj renderowany wzór na żywo.",
1236
+ "tutorial.dmxEditor.intro.title": "Edytor DMX",
1237
+ "tutorial.dmxEditor.intro.content": "Wybierz urządzenie i port FTDI, a następnie ustaw wartość każdego kanału DMX suwakami, aby sterować oprawami oświetleniowymi na żywo.",
890
1238
  // ── Sidebar context menu ──
891
1239
  "sidebar.menu.open": "Otwórz",
892
1240
  "sidebar.menu.openNewTab": "Otwórz w nowej karcie",
@@ -1491,7 +1839,7 @@ const j = [
1491
1839
  "vectorEditor.layers.hide": "Ukryj",
1492
1840
  "vectorEditor.layers.lock": "Zablokuj",
1493
1841
  "vectorEditor.layers.unlock": "Odblokuj"
1494
- }, Ce = {
1842
+ }, ze = {
1495
1843
  ok: "OK",
1496
1844
  cancel: "Abbrechen",
1497
1845
  save: "Speichern",
@@ -2193,8 +2541,179 @@ const j = [
2193
2541
  "vectorEditor.layers.show": "Einblenden",
2194
2542
  "vectorEditor.layers.hide": "Ausblenden",
2195
2543
  "vectorEditor.layers.lock": "Sperren",
2196
- "vectorEditor.layers.unlock": "Entsperren"
2197
- }, Se = {
2544
+ "vectorEditor.layers.unlock": "Entsperren",
2545
+ // Tutorials (1.0.22)
2546
+ "tutorial.play": "Abspielen",
2547
+ "tutorial.pause": "Pause",
2548
+ "tutorial.speed": "Geschwindigkeit",
2549
+ "tutorial.close": "Schließen",
2550
+ "tutorial.start": "Tutorial",
2551
+ "tutorial.startAria": "Tutorial starten",
2552
+ "tutorial.next": "Weiter",
2553
+ "tutorial.back": "Zurück",
2554
+ "tutorial.finish": "Fertig",
2555
+ "tutorial.skip": "Überspringen",
2556
+ "tutorial.stepOf": "von",
2557
+ "tutorial.moduleEditor.browser.title": "Modul-Browser",
2558
+ "tutorial.moduleEditor.browser.content": "Wählen Sie hier ein Modul, um sein Manifest, seine Entitäten und Übersetzungen zu öffnen.",
2559
+ "tutorial.moduleEditor.validate.title": "Prüfen",
2560
+ "tutorial.moduleEditor.validate.content": "Prüfen Sie das Modul gegen das Manifest-Schema. Probleme erscheinen in der Statusleiste und in der Ausgabe.",
2561
+ "tutorial.moduleEditor.save.title": "Speichern",
2562
+ "tutorial.moduleEditor.save.content": "Speichern Sie Ihre Änderungen über den konfigurierten Datenanbieter (z. B. Dateien zurück auf die Festplatte schreiben).",
2563
+ "tutorial.manifestEditor.intro.title": "Manifest-Editor",
2564
+ "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.",
2565
+ "tutorial.schemaForm.intro.title": "Schema-Formular",
2566
+ "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.",
2567
+ "tutorial.entityEditor.intro.title": "Entitäten-Editor",
2568
+ "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).",
2569
+ "tutorial.i18nEditor.intro.title": "Übersetzungen",
2570
+ "tutorial.i18nEditor.intro.content": "Bearbeiten Sie Übersetzungen als Raster aus Schlüsseln × Sprachen. Fügen Sie Schlüssel und Sprachen hinzu; bernsteinfarbene Zellen markieren fehlende Übersetzungen.",
2571
+ "tutorial.formBuilder.intro.title": "Formular-Builder",
2572
+ "tutorial.formBuilder.intro.content": "Ziehen Sie Felder aus der Palette auf die Arbeitsfläche und konfigurieren Sie jedes Feld im Eigenschaftenbereich. Exportieren Sie das Schema, wenn Sie fertig sind.",
2573
+ "tutorial.formDesigner.intro.title": "Formular-Designer",
2574
+ "tutorial.formDesigner.intro.content": "Gestalten Sie Eingabeformulare mit Abschnitten, Nachschlagefeldern und berechneten Feldern; binden Sie sie an Ihre Entität und sehen Sie eine Live-Vorschau.",
2575
+ "tutorial.paymentProviderConfig.intro.title": "Zahlungsanbieter",
2576
+ "tutorial.paymentProviderConfig.intro.content": "Wählen Sie einen Anbieter, geben Sie seine Zugangsdaten ein (Geheimnisse werden maskiert), wählen Sie Test/Live, aktivieren Sie Methoden und kopieren Sie die Webhook-URL.",
2577
+ "tutorial.webhookTester.intro.title": "Webhook-Tester",
2578
+ "tutorial.webhookTester.intro.content": "Wählen Sie eine gespeicherte Nutzlast (oder schreiben Sie eine), signieren Sie sie optional, senden Sie sie an den Endpunkt und prüfen Sie die Antwort.",
2579
+ "tutorial.apiDesigner.intro.title": "API-Designer",
2580
+ "tutorial.apiDesigner.intro.content": "Definieren Sie Endpunkte, Parameter, Anfrage-/Antwortschemata und Sicherheit für Ihr OpenAPI-Dokument.",
2581
+ "tutorial.apiTester.intro.title": "API-Tester",
2582
+ "tutorial.apiTester.intro.content": "Erstellen Sie Anfragen mit Sammlungen und Umgebungsvariablen, senden Sie sie und prüfen Sie die Antworten.",
2583
+ "tutorial.integrationBuilder.intro.title": "Integrations-Builder",
2584
+ "tutorial.integrationBuilder.intro.content": "Verdrahten Sie einen Ablauf aus Knoten (Auslöser → Aktionen → Fehlerbehandlung) und verbinden Sie sie, um eine Integration zu bauen.",
2585
+ "tutorial.scriptRunner.intro.title": "Skript-Runner",
2586
+ "tutorial.scriptRunner.intro.content": "Schreiben Sie ein Skript und Beispieleingaben, klicken Sie auf Ausführen und prüfen Sie unten das Ergebnis und die erfassten Protokolle.",
2587
+ "tutorial.lifecycleHooks.intro.title": "Lebenszyklus-Hooks",
2588
+ "tutorial.lifecycleHooks.intro.content": "Binden Sie Handler an jeden Auslöser, legen Sie ihre Reihenfolge und das Aktiv-Kennzeichen fest und fügen Sie eine optionale Bedingung hinzu, die die Ausführung steuert.",
2589
+ "tutorial.revisionHistory.intro.title": "Versionsverlauf",
2590
+ "tutorial.revisionHistory.intro.content": "Wählen Sie eine Version, wählen Sie eine weitere zum Vergleich, prüfen Sie den Side-by-Side-Vergleich und stellen Sie bei Bedarf eine frühere Version wieder her.",
2591
+ "tutorial.markdownEditor.intro.title": "Markdown-Editor",
2592
+ "tutorial.markdownEditor.intro.content": "Schreiben Sie Markdown mit der Formatierungsleiste; schalten Sie die Live-Vorschau ein, um das gerenderte Ergebnis zu sehen, und exportieren Sie nach HTML.",
2593
+ "tutorial.htmlEditor.intro.title": "Rich-Text-Editor",
2594
+ "tutorial.htmlEditor.intro.content": "Formatieren Sie Text mit der Symbolleiste, fügen Sie Links, Bilder und Tabellen ein und wechseln Sie bei Bedarf zur HTML- oder Markdown-Quelle.",
2595
+ "tutorial.documentEditor.intro.title": "Dokument-Editor",
2596
+ "tutorial.documentEditor.intro.content": "Erstellen Sie ein Dokument aus Blöcken: Nutzen Sie die Symbolleiste oder Slash-Befehle, um Überschriften, Listen, Medien und mehr hinzuzufügen, und exportieren Sie nach HTML.",
2597
+ "tutorial.codeEditor.intro.title": "Code-Editor",
2598
+ "tutorial.codeEditor.intro.content": "Bearbeiten Sie Code mit Syntaxhervorhebung, IntelliSense und der Symbolleiste. Strg+S speichert; die Statusleiste zeigt die Cursorposition und etwaige Probleme.",
2599
+ "tutorial.kanbanBoard.intro.title": "Kanban-Board",
2600
+ "tutorial.kanbanBoard.intro.content": "Ziehen Sie Karten zwischen Spalten, um ihren Status zu ändern, fügen Sie Karten mit der Schaltfläche „+“ hinzu und klicken Sie auf eine Karte, um ihre Details zu bearbeiten.",
2601
+ "tutorial.queryBuilder.intro.title": "Abfrage-Builder",
2602
+ "tutorial.queryBuilder.intro.content": "Fügen Sie Tabellen hinzu, wählen Sie Spalten, definieren Sie Joins, Bedingungen und Sortierung visuell – das SQL wird für Sie erzeugt. Wechseln Sie zum SQL-Tab, um es zu prüfen.",
2603
+ "tutorial.stateDesigner.intro.title": "State-Designer",
2604
+ "tutorial.stateDesigner.intro.content": "Modellieren Sie Ihren Store als Slices mit Feldern und Aktionen, wählen Sie ein Ziel (z. B. Zustand) und exportieren Sie einsatzfertigen State-Management-Code.",
2605
+ "tutorial.componentDesigner.intro.title": "Komponenten-Designer",
2606
+ "tutorial.componentDesigner.intro.content": "Benennen Sie Ihre Komponente, deklarieren Sie ihre Props mit Typen und Anforderungen und sehen Sie die erzeugte TypeScript-Schnittstelle live in der Vorschau.",
2607
+ "tutorial.pageBuilder.intro.title": "Seiten-Builder",
2608
+ "tutorial.pageBuilder.intro.content": "Ziehen Sie Komponenten aus der Seitenleiste auf das responsive Raster, wechseln Sie die Desktop-/Tablet-/Mobil-Vorschau und speichern Sie das Layout.",
2609
+ "tutorial.lowCodeStudio.intro.title": "Low-Code-Studio",
2610
+ "tutorial.lowCodeStudio.intro.content": "Ziehen Sie Komponenten aus der Seitenleiste auf die Arbeitsfläche und wechseln Sie zwischen den Tabs Design, Vorschau und Code, um Ihre App zu bauen und zu exportieren.",
2611
+ "tutorial.testBuilder.intro.title": "Test-Builder",
2612
+ "tutorial.testBuilder.intro.content": "Erstellen Sie Test-Suiten visuell: Fügen Sie Fälle und Interaktionsschritte mit Assertions hinzu, führen Sie sie aus und exportieren Sie in eine lauffähige .test.tsx-Datei.",
2613
+ "tutorial.workflowDesigner.intro.title": "Workflow-Designer",
2614
+ "tutorial.workflowDesigner.intro.content": "Fügen Sie Zustände und Übergänge auf der Arbeitsfläche hinzu, validieren Sie den Ablauf, simulieren Sie ihn und testen oder veröffentlichen Sie dann Ihren Workflow.",
2615
+ "tutorial.themeBuilder.intro.title": "Theme-Builder",
2616
+ "tutorial.themeBuilder.intro.content": "Starten Sie mit einer Vorlage, passen Sie Farben, Typografie und weitere Tokens abschnittsweise an, sehen Sie eine Live-Vorschau und wenden Sie das Theme an oder exportieren Sie es.",
2617
+ "tutorial.filterBuilder.intro.title": "Filter-Builder",
2618
+ "tutorial.filterBuilder.intro.content": "Bauen Sie komplexe UND/ODER-Filterbäume: Fügen Sie Bedingungen und verschachtelte Gruppen hinzu, wählen Sie Felder und Operatoren und speichern Sie wiederverwendbare Vorlagen.",
2619
+ "tutorial.diagramDesigner.intro.title": "Diagramm-Designer",
2620
+ "tutorial.diagramDesigner.intro.content": "Ziehen Sie Formen aus der Palette auf die Arbeitsfläche, verbinden Sie sie mit Konnektoren, bearbeiten Sie Eigenschaften rechts und exportieren Sie nach SVG, PNG oder JSON.",
2621
+ "tutorial.reportBuilder.intro.title": "Bericht-Builder",
2622
+ "tutorial.reportBuilder.intro.content": "Ziehen Sie Abschnitte auf den Bericht, binden Sie sie an Datenquellen, ordnen Sie das Layout an und exportieren Sie nach PDF, HTML oder XLSX.",
2623
+ "tutorial.erpReportDesigner.intro.title": "Bericht-Designer",
2624
+ "tutorial.erpReportDesigner.intro.content": "Gestalten Sie Bänderberichte: Platzieren Sie Elemente (Felder, Ausdrücke, Diagramme) in Bändern, binden Sie Datenverbindungen, bearbeiten Sie Eigenschaften und sehen Sie dann Vorschau und Export.",
2625
+ "tutorial.recipeEditor.intro.title": "Rezept-Editor",
2626
+ "tutorial.recipeEditor.intro.content": "Bearbeiten Sie die Rezeptdetails, fügen Sie Zutaten und Schritte hinzu und ordnen Sie sie neu, hängen Sie Fotos an und importieren oder exportieren Sie das Rezept als JSON.",
2627
+ "tutorial.pipelineEditor.intro.title": "Pipeline-Editor",
2628
+ "tutorial.pipelineEditor.intro.content": "Bauen Sie eine CI/CD-Pipeline aus Stufen, Jobs und Schritten; legen Sie Auslöser, Variablen und Geheimnisse fest und validieren, speichern und starten Sie sie dann.",
2629
+ "tutorial.mergeRequestBuilder.intro.title": "Merge-Request-Builder",
2630
+ "tutorial.mergeRequestBuilder.intro.content": "Wählen Sie Quell- und Zielbranch, schreiben Sie Titel und Beschreibung, fügen Sie Reviewer, Labels und verknüpfte Issues hinzu und prüfen und senden Sie dann.",
2631
+ "tutorial.automationRuleEditor.intro.title": "Automatisierungsregel-Editor",
2632
+ "tutorial.automationRuleEditor.intro.content": "Definieren Sie den Auslöser, fügen Sie optionale Bedingungen hinzu und listen Sie dann die auszuführenden Aktionen auf – wechseln Sie über die Tabs zwischen den drei Abschnitten.",
2633
+ "tutorial.sceneActionBuilder.intro.title": "Szenen-Aktions-Builder",
2634
+ "tutorial.sceneActionBuilder.intro.content": "Fügen Sie pro Gerät eine Aktion hinzu, legen Sie ihren Zielzustand und eine optionale Verzögerung fest, ordnen Sie sie neu und sehen Sie eine Vorschau der Szenensequenz.",
2635
+ "tutorial.backupTagEditor.intro.title": "Backup-Tags",
2636
+ "tutorial.backupTagEditor.intro.content": "Versehen Sie dieses Backup mit Tags zur einfachen Wiederfindung: Geben Sie eine Bezeichnung ein und wählen Sie eine Farbe, oder fügen Sie einen der vorgeschlagenen Tags hinzu; automatisch erzeugte Tags sind geschützt.",
2637
+ "tutorial.dataMergeBuilder.intro.title": "Daten-Zusammenführung",
2638
+ "tutorial.dataMergeBuilder.intro.content": "Gehen Sie die Schritte durch: Wählen Sie Quell- und Zielbranch, sehen Sie eine Vorschau der Änderungen, lösen Sie Konflikte, legen Sie Optionen fest und bestätigen Sie dann die Zusammenführung.",
2639
+ "tutorial.invoiceLineEditor.intro.title": "Rechnungspositionen",
2640
+ "tutorial.invoiceLineEditor.intro.content": "Fügen Sie Positionen mit Menge, Einzelpreis, MwSt. und Rabatt hinzu – Netto, Brutto und die MwSt.-Aufschlüsselung werden automatisch berechnet.",
2641
+ "tutorial.keyValueEditor.intro.title": "Schlüssel/Wert-Editor",
2642
+ "tutorial.keyValueEditor.intro.content": "Fügen Sie Schlüssel/Wert-Zeilen für Header, Parameter, Umgebungsvariablen oder Konfiguration hinzu; maskieren Sie geheime Werte, schalten Sie Zeilen ein/aus und achten Sie auf doppelte Schlüssel.",
2643
+ "tutorial.imageEditor.intro.title": "Bild-Editor",
2644
+ "tutorial.imageEditor.intro.content": "Nutzen Sie die Symbolleiste zum Zuschneiden, Drehen, Spiegeln, Anpassen von Helligkeit/Kontrast und Annotieren; machen Sie Bearbeitungen rückgängig oder wiederholen Sie sie und speichern Sie das Ergebnis.",
2645
+ "tutorial.cropEditor.intro.title": "Zuschneide-Editor",
2646
+ "tutorial.cropEditor.intro.content": "Ziehen Sie den Zuschneiderahmen über das Bild, wählen Sie ein Seitenverhältnis, drehen, spiegeln oder zoomen Sie und verwenden Sie dann das Ergebnis.",
2647
+ "tutorial.pdfAnnotationEditor.intro.title": "PDF-Anmerkungen",
2648
+ "tutorial.pdfAnnotationEditor.intro.content": "Wählen Sie ein Werkzeug aus der Symbolleiste (Hervorheben, Unterstreichen, Freihand, Text …), kommentieren Sie die Seite und navigieren und zoomen Sie nach Bedarf.",
2649
+ "tutorial.videoEditor.intro.title": "Video-Editor",
2650
+ "tutorial.videoEditor.intro.content": "Fügen Sie Medien zu den Timeline-Spuren hinzu, schneiden und ordnen Sie Clips, bearbeiten Sie Clip-Eigenschaften, sehen Sie eine Wiedergabe-Vorschau und exportieren Sie dann das Video.",
2651
+ "tutorial.viewBuilder.intro.title": "Ansichts-Builder",
2652
+ "tutorial.viewBuilder.intro.content": "Ziehen Sie Steuerelemente aus der Palette in die Rasterzellen, konfigurieren Sie jede Zelle im Eigenschaftenbereich und importieren, exportieren oder speichern Sie die Ansicht.",
2653
+ "tutorial.dashboardDesigner.intro.title": "Dashboard-Designer",
2654
+ "tutorial.dashboardDesigner.intro.content": "Ziehen Sie Widgets aus der Palette auf das Raster, ändern Sie ihre Größe und ordnen Sie sie an, konfigurieren Sie jedes im Eigenschaftenbereich und sehen Sie dann Vorschau oder Export des Dashboards.",
2655
+ "tutorial.workflowDesignerCanvas.intro.title": "Workflow-Designer",
2656
+ "tutorial.workflowDesignerCanvas.intro.content": "Fügen Sie Auslöser-, Aktions- und Bedingungsknoten zur Arbeitsfläche hinzu und verbinden Sie sie; verwalten Sie Variablen, validieren Sie den Ablauf und exportieren Sie ihn dann.",
2657
+ "tutorial.armatureEditor.intro.title": "Armature-Editor",
2658
+ "tutorial.armatureEditor.intro.content": "Wählen Sie Knochen, um ihre Transformationen zu bearbeiten, fügen Sie Knochen hinzu oder ordnen Sie sie neu zu, konfigurieren Sie IK-Ketten und speichern oder laden Sie Posen.",
2659
+ "tutorial.morphTargetEditor.intro.title": "Morph-Target-Editor",
2660
+ "tutorial.morphTargetEditor.intro.content": "Mischen Sie die Morph-Targets des Meshes mit den Einflussreglern pro Target, erstellen oder löschen Sie Targets und sehen Sie eine Vorschau der Interpolation.",
2661
+ "tutorial.terrainEditor.intro.title": "Terrain-Editor",
2662
+ "tutorial.terrainEditor.intro.content": "Formen Sie die Höhenkarte mit Pinseln (Anheben, Absenken, Glätten, Weichzeichnen, Rauschen), tragen Sie Texturebenen auf, erzeugen Sie prozedurales Terrain und importieren/exportieren Sie Höhenkarten.",
2663
+ "tutorial.materialEditor.intro.title": "Material-Editor",
2664
+ "tutorial.materialEditor.intro.content": "Bauen Sie einen Shader als Knotengraph: Ziehen Sie Knoten aus der Palette, verdrahten Sie ihre Ports, bearbeiten Sie Eigenschaften und sehen Sie eine Vorschau des kompilierten Materials.",
2665
+ "tutorial.particleEditor.intro.title": "Partikel-Editor",
2666
+ "tutorial.particleEditor.intro.content": "Wählen Sie ein Partikelsystem, justieren Sie seinen Emitter und seine Module im Inspektor und spielen, pausieren oder stoppen Sie die Live-Vorschau.",
2667
+ "tutorial.uvEditor.intro.title": "UV-Editor",
2668
+ "tutorial.uvEditor.intro.content": "Bearbeiten Sie das UV-Layout des Meshes über der Textur: Wählen und transformieren Sie UVs mit den Werkzeugen, wechseln Sie UV-Kanäle und wenden Sie Ihre Änderungen an.",
2669
+ "tutorial.fontEditor.intro.title": "Schriftart-Editor",
2670
+ "tutorial.fontEditor.intro.content": "Bearbeiten Sie Glyphen im Unicode-Raster, passen Sie Schriftmetriken sowie Pfade und Vorschübe pro Glyphe an und exportieren Sie dann die Schriftart.",
2671
+ "tutorial.iconEditor.intro.title": "Icon-Editor",
2672
+ "tutorial.iconEditor.intro.content": "Zeichnen und bearbeiten Sie SVG-Formen im Raster, passen Sie Kontur- und Varianteneinstellungen an, sehen Sie eine Vorschau auf verschiedenen Hintergründen und exportieren Sie nach SVG, React oder PNG.",
2673
+ "tutorial.uiDesigner.intro.title": "UI-Designer",
2674
+ "tutorial.uiDesigner.intro.content": "Ziehen Sie Komponenten aus der Palette auf die Arbeitsfläche, bearbeiten Sie ihre Props im Bereich, sehen Sie responsive Breakpoints in der Vorschau und exportieren Sie nach React/TSX.",
2675
+ "tutorial.gameEditor.intro.title": "Spiel-Editor",
2676
+ "tutorial.gameEditor.intro.content": "Bauen Sie Ihre Szene im Viewport mithilfe der Hierarchie- und Asset-Bereiche, justieren Sie Entitäten im Inspektor und speichern Sie das Projekt.",
2677
+ "tutorial.levelEditor.intro.title": "Level-Editor",
2678
+ "tutorial.levelEditor.intro.content": "Bauen Sie die Spielwelt: Platzieren und rasten Sie Objekte über Ebenen ein, malen Sie Terrain, legen Sie Splines und Lichter an und backen Sie dann Lightmaps.",
2679
+ "tutorial.gameMaterialEditor.intro.title": "Material-Editor",
2680
+ "tutorial.gameMaterialEditor.intro.content": "Erstellen Sie einen Shader als Knotengraph: Fügen Sie Shader-Knoten hinzu und verbinden Sie sie, bearbeiten Sie ihre Eigenschaften und kompilieren Sie das Material.",
2681
+ "tutorial.gameParticleEditor.intro.title": "Partikel-Editor",
2682
+ "tutorial.gameParticleEditor.intro.content": "Justieren Sie das Partikelsystem im Inspektor – Emitter, Lebensdauer, Kurven und Rendering – und spielen, pausieren oder starten Sie die Live-Vorschau neu.",
2683
+ "tutorial.floorPlanEditor.intro.title": "Grundriss-Editor",
2684
+ "tutorial.floorPlanEditor.intro.content": "Zeichnen Sie Räume und Zonen mit den Werkzeugen, platzieren Sie Geräte im Plan, wechseln Sie Etagen und schalten Sie Overlays wie Maße, Raster und Belegung um.",
2685
+ "tutorial.buildingSceneEditor.intro.title": "Szenen-Editor",
2686
+ "tutorial.buildingSceneEditor.intro.content": "Erstellen Sie Szenen, die mehrere Geräte auf einmal einstellen: Wählen Sie eine Szene, legen Sie die Zielzustände der Geräte fest und speichern oder aktivieren Sie sie.",
2687
+ "tutorial.buildingAutomationEditor.intro.title": "Automatisierungs-Editor",
2688
+ "tutorial.buildingAutomationEditor.intro.content": "Erstellen Sie Gebäudeautomatisierungen: Wählen Sie eine aus der Liste, definieren Sie ihre Auslöser, Bedingungen und Aktionen und speichern, aktivieren oder löschen Sie sie.",
2689
+ "tutorial.spatialEditor.intro.title": "Raum-Editor",
2690
+ "tutorial.spatialEditor.intro.content": "Gestalten Sie Grundrisse über verschiedene Modi: Zeichnen Sie Wände, Räume und Objekte mit den Werkzeugen, verwalten Sie Ebenen, rasten Sie am Raster ein und exportieren Sie.",
2691
+ "tutorial.decisionTreeEditor.intro.title": "Entscheidungsbaum-Editor",
2692
+ "tutorial.decisionTreeEditor.intro.content": "Erkunden Sie den Entscheidungsbaum: Klicken Sie auf Knoten, um Bedingungen und Ergebnisse zu prüfen, schalten Sie Metriken, Wahrscheinlichkeiten und Stichproben um und heben Sie einen Pfad für eine Eingabe hervor.",
2693
+ "tutorial.diagramEditor.intro.title": "Diagramm-Editor",
2694
+ "tutorial.diagramEditor.intro.content": "Wählen Sie ein Werkzeug, um Knoten auf der Arbeitsfläche hinzuzufügen und zu verbinden, bearbeiten Sie sie im Eigenschaftenbereich und exportieren Sie das Diagramm über die Symbolleiste.",
2695
+ "tutorial.contractEditor.intro.title": "Vertrags-Editor",
2696
+ "tutorial.contractEditor.intro.content": "Stellen Sie den Vertrag aus der Klauselbibliothek zusammen, füllen Sie Vorlagenvariablen aus, verfolgen Sie Versionen und Freigaben und speichern oder exportieren Sie nach PDF/DOCX/HTML.",
2697
+ "tutorial.invoiceDesigner.intro.title": "Rechnungs-Designer",
2698
+ "tutorial.invoiceDesigner.intro.content": "Ziehen Sie Elemente auf die Rechnungsfläche, binden Sie sie an Datenfelder, richten Sie sie mit Raster und Linealen aus und speichern oder exportieren Sie nach PDF.",
2699
+ "tutorial.presentationEditor.intro.title": "Präsentations-Editor",
2700
+ "tutorial.presentationEditor.intro.content": "Bauen Sie Folien aus der Miniaturleiste, fügen Sie Elemente auf der Fläche hinzu und ordnen Sie sie an, bearbeiten Sie sie im Eigenschaftenbereich und präsentieren oder exportieren Sie dann.",
2701
+ "tutorial.dashboardStudio.intro.title": "Dashboard-Studio",
2702
+ "tutorial.dashboardStudio.intro.content": "Ziehen Sie Widgets aus der Palette auf das Raster, binden Sie sie an Datenquellen, fügen Sie Filter hinzu und schalten Sie dann zwischen Bearbeiten/Ansicht um, aktualisieren und speichern Sie.",
2703
+ "tutorial.biReportBuilder.intro.title": "Bericht-Builder",
2704
+ "tutorial.biReportBuilder.intro.content": "Ziehen Sie Elemente aus der Palette auf den Bericht, binden Sie sie an Datenquellen, wechseln Sie zwischen Entwurf/Vorschau und exportieren Sie nach PDF oder Excel.",
2705
+ "tutorial.etlBuilder.intro.title": "ETL-Builder",
2706
+ "tutorial.etlBuilder.intro.content": "Verdrahten Sie Quellen → Transformationen → Ziele zu einer Pipeline, wechseln Sie die Ansichten und führen Sie sie dann aus und speichern Sie die Konfiguration.",
2707
+ "tutorial.videoEditorPro.intro.title": "Video-Editor",
2708
+ "tutorial.videoEditorPro.intro.content": "Fügen Sie Medien zur Timeline hinzu, ordnen und schneiden Sie Clips, wenden Sie Effekte und Übergänge an und konfigurieren und starten Sie dann den Export.",
2709
+ "tutorial.mlStudio.intro.title": "ML-Studio",
2710
+ "tutorial.mlStudio.intro.content": "Arbeiten Sie sich durch die Tabs: Bereiten Sie Datensätze vor, führen Sie Experimente durch, vergleichen und wählen Sie Modelle und stellen Sie das beste bereit.",
2711
+ "tutorial.mathEditor.intro.title": "Mathe-Editor",
2712
+ "tutorial.mathEditor.intro.content": "Schreiben Sie Gleichungen als LaTeX oder fügen Sie Symbole aus der Palette ein; wechseln Sie zur Handschrifteingabe und sehen Sie die gerenderte Formel live in der Vorschau.",
2713
+ "tutorial.dmxEditor.intro.title": "DMX-Editor",
2714
+ "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.",
2715
+ "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."
2716
+ }, Ce = {
2198
2717
  ok: "OK",
2199
2718
  cancel: "Annuler",
2200
2719
  save: "Enregistrer",
@@ -2896,8 +3415,179 @@ const j = [
2896
3415
  "vectorEditor.layers.show": "Afficher",
2897
3416
  "vectorEditor.layers.hide": "Masquer",
2898
3417
  "vectorEditor.layers.lock": "Verrouiller",
2899
- "vectorEditor.layers.unlock": "Déverrouiller"
2900
- }, ze = {
3418
+ "vectorEditor.layers.unlock": "Déverrouiller",
3419
+ // Tutorials (1.0.22)
3420
+ "tutorial.play": "Lecture",
3421
+ "tutorial.pause": "Pause",
3422
+ "tutorial.speed": "Vitesse",
3423
+ "tutorial.close": "Fermer",
3424
+ "tutorial.start": "Tutoriel",
3425
+ "tutorial.startAria": "Démarrer le tutoriel",
3426
+ "tutorial.next": "Suivant",
3427
+ "tutorial.back": "Précédent",
3428
+ "tutorial.finish": "Terminer",
3429
+ "tutorial.skip": "Passer",
3430
+ "tutorial.stepOf": "sur",
3431
+ "tutorial.moduleEditor.browser.title": "Explorateur de modules",
3432
+ "tutorial.moduleEditor.browser.content": "Sélectionnez ici un module pour ouvrir son manifeste, ses entités et ses traductions.",
3433
+ "tutorial.moduleEditor.validate.title": "Valider",
3434
+ "tutorial.moduleEditor.validate.content": "Vérifiez le module par rapport au schéma du manifeste. Les problèmes apparaissent dans la barre d’état et la sortie.",
3435
+ "tutorial.moduleEditor.save.title": "Enregistrer",
3436
+ "tutorial.moduleEditor.save.content": "Enregistrez vos modifications via le fournisseur de données configuré (par ex. réécrire les fichiers sur le disque).",
3437
+ "tutorial.manifestEditor.intro.title": "Éditeur de manifeste",
3438
+ "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.",
3439
+ "tutorial.schemaForm.intro.title": "Formulaire de schéma",
3440
+ "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.",
3441
+ "tutorial.entityEditor.intro.title": "Éditeur d’entités",
3442
+ "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).",
3443
+ "tutorial.i18nEditor.intro.title": "Traductions",
3444
+ "tutorial.i18nEditor.intro.content": "Modifiez les traductions sous forme de grille clés × langues. Ajoutez des clés et des langues ; les cellules ambrées signalent les traductions manquantes.",
3445
+ "tutorial.formBuilder.intro.title": "Générateur de formulaires",
3446
+ "tutorial.formBuilder.intro.content": "Faites glisser des champs depuis la palette vers le canevas, puis configurez chaque champ dans le panneau des propriétés. Exportez le schéma une fois terminé.",
3447
+ "tutorial.formDesigner.intro.title": "Concepteur de formulaires",
3448
+ "tutorial.formDesigner.intro.content": "Concevez des formulaires de saisie avec sections, listes de recherche et champs calculés ; liez-les à votre entité et prévisualisez en direct.",
3449
+ "tutorial.paymentProviderConfig.intro.title": "Prestataire de paiement",
3450
+ "tutorial.paymentProviderConfig.intro.content": "Choisissez un prestataire, renseignez ses identifiants (les secrets sont masqués), choisissez test/production, activez les méthodes et copiez l’URL du webhook.",
3451
+ "tutorial.webhookTester.intro.title": "Testeur de webhook",
3452
+ "tutorial.webhookTester.intro.content": "Choisissez une charge utile enregistrée (ou écrivez-en une), signez-la éventuellement, envoyez-la au point de terminaison et examinez la réponse.",
3453
+ "tutorial.apiDesigner.intro.title": "Concepteur d’API",
3454
+ "tutorial.apiDesigner.intro.content": "Définissez les points de terminaison, les paramètres, les schémas de requête/réponse et la sécurité de votre document OpenAPI.",
3455
+ "tutorial.apiTester.intro.title": "Testeur d’API",
3456
+ "tutorial.apiTester.intro.content": "Construisez des requêtes avec des collections et des variables d’environnement, envoyez-les et vérifiez les réponses.",
3457
+ "tutorial.integrationBuilder.intro.title": "Générateur d’intégrations",
3458
+ "tutorial.integrationBuilder.intro.content": "Reliez un flux de nœuds (déclencheurs → actions → gestion des erreurs) et connectez-les pour construire une intégration.",
3459
+ "tutorial.scriptRunner.intro.title": "Exécuteur de scripts",
3460
+ "tutorial.scriptRunner.intro.content": "Écrivez un script et un exemple d’entrée, cliquez sur Exécuter, puis examinez le résultat et les journaux capturés ci-dessous.",
3461
+ "tutorial.lifecycleHooks.intro.title": "Hooks de cycle de vie",
3462
+ "tutorial.lifecycleHooks.intro.content": "Associez des gestionnaires à chaque déclencheur, définissez leur ordre et leur indicateur d’activation, et ajoutez une condition facultative qui contrôle l’exécution.",
3463
+ "tutorial.revisionHistory.intro.title": "Historique des révisions",
3464
+ "tutorial.revisionHistory.intro.content": "Choisissez une révision, sélectionnez-en une autre à comparer, examinez la comparaison côte à côte, puis restaurez une version antérieure si nécessaire.",
3465
+ "tutorial.markdownEditor.intro.title": "Éditeur Markdown",
3466
+ "tutorial.markdownEditor.intro.content": "Écrivez du Markdown avec la barre de mise en forme ; activez l’aperçu en direct pour voir le rendu, puis exportez en HTML.",
3467
+ "tutorial.htmlEditor.intro.title": "Éditeur de texte enrichi",
3468
+ "tutorial.htmlEditor.intro.content": "Mettez en forme le texte avec la barre d’outils, insérez des liens, des images et des tableaux, et basculez vers la source HTML ou Markdown au besoin.",
3469
+ "tutorial.documentEditor.intro.title": "Éditeur de documents",
3470
+ "tutorial.documentEditor.intro.content": "Composez un document à partir de blocs : utilisez la barre d’outils ou les commandes slash pour ajouter des titres, des listes, des médias et plus, puis exportez en HTML.",
3471
+ "tutorial.codeEditor.intro.title": "Éditeur de code",
3472
+ "tutorial.codeEditor.intro.content": "Modifiez le code avec coloration syntaxique, IntelliSense et barre d’outils. Ctrl+S enregistre ; la barre d’état indique la position du curseur et les éventuels problèmes.",
3473
+ "tutorial.kanbanBoard.intro.title": "Tableau Kanban",
3474
+ "tutorial.kanbanBoard.intro.content": "Faites glisser les cartes entre les colonnes pour changer leur statut, ajoutez des cartes avec le bouton « + » et cliquez sur une carte pour modifier ses détails.",
3475
+ "tutorial.queryBuilder.intro.title": "Générateur de requêtes",
3476
+ "tutorial.queryBuilder.intro.content": "Ajoutez des tables, choisissez des colonnes, définissez visuellement les jointures, conditions et tris — le SQL est généré pour vous. Passez à l’onglet SQL pour le vérifier.",
3477
+ "tutorial.stateDesigner.intro.title": "Concepteur d’état",
3478
+ "tutorial.stateDesigner.intro.content": "Modélisez votre store en tranches avec des champs et des actions, choisissez une cible (par ex. Zustand) et exportez du code de gestion d’état prêt à l’emploi.",
3479
+ "tutorial.componentDesigner.intro.title": "Concepteur de composants",
3480
+ "tutorial.componentDesigner.intro.content": "Nommez votre composant, déclarez ses props avec leurs types et exigences, et prévisualisez en direct l’interface TypeScript générée.",
3481
+ "tutorial.pageBuilder.intro.title": "Générateur de pages",
3482
+ "tutorial.pageBuilder.intro.content": "Faites glisser des composants depuis la barre latérale sur la grille responsive, changez l’aperçu bureau/tablette/mobile et enregistrez la mise en page.",
3483
+ "tutorial.lowCodeStudio.intro.title": "Studio low-code",
3484
+ "tutorial.lowCodeStudio.intro.content": "Faites glisser des composants depuis la barre latérale sur le canevas, puis basculez entre les onglets Conception, Aperçu et Code pour construire et exporter votre application.",
3485
+ "tutorial.testBuilder.intro.title": "Générateur de tests",
3486
+ "tutorial.testBuilder.intro.content": "Construisez visuellement des suites de tests : ajoutez des cas et des étapes d’interaction avec des assertions, exécutez-les et exportez vers un fichier .test.tsx prêt à l’emploi.",
3487
+ "tutorial.workflowDesigner.intro.title": "Concepteur de workflow",
3488
+ "tutorial.workflowDesigner.intro.content": "Ajoutez des états et des transitions sur le canevas, validez le flux, simulez-le, puis testez ou publiez votre workflow.",
3489
+ "tutorial.themeBuilder.intro.title": "Générateur de thème",
3490
+ "tutorial.themeBuilder.intro.content": "Partez d’un préréglage, ajustez les couleurs, la typographie et d’autres jetons par section, prévisualisez en direct, puis appliquez ou exportez le thème.",
3491
+ "tutorial.filterBuilder.intro.title": "Générateur de filtres",
3492
+ "tutorial.filterBuilder.intro.content": "Construisez des arbres de filtres ET/OU complexes : ajoutez des conditions et des groupes imbriqués, choisissez les champs et opérateurs, et enregistrez des préréglages réutilisables.",
3493
+ "tutorial.diagramDesigner.intro.title": "Concepteur de diagrammes",
3494
+ "tutorial.diagramDesigner.intro.content": "Faites glisser des formes depuis la palette sur le canevas, reliez-les avec des connecteurs, modifiez les propriétés à droite, puis exportez en SVG, PNG ou JSON.",
3495
+ "tutorial.reportBuilder.intro.title": "Générateur de rapports",
3496
+ "tutorial.reportBuilder.intro.content": "Faites glisser des sections sur le rapport, liez-les à des sources de données, organisez la mise en page, puis exportez en PDF, HTML ou XLSX.",
3497
+ "tutorial.erpReportDesigner.intro.title": "Concepteur de rapports",
3498
+ "tutorial.erpReportDesigner.intro.content": "Disposez des rapports en bandes : déposez des éléments (champs, expressions, graphiques) dans les bandes, liez les connexions de données, modifiez les propriétés, puis prévisualisez et exportez.",
3499
+ "tutorial.recipeEditor.intro.title": "Éditeur de recettes",
3500
+ "tutorial.recipeEditor.intro.content": "Modifiez les détails de la recette, ajoutez et réorganisez les ingrédients et les étapes, joignez des photos et importez ou exportez la recette en JSON.",
3501
+ "tutorial.pipelineEditor.intro.title": "Éditeur de pipeline",
3502
+ "tutorial.pipelineEditor.intro.content": "Construisez un pipeline CI/CD à partir d’étapes, de tâches et de pas ; définissez déclencheurs, variables et secrets ; puis validez, enregistrez et exécutez-le.",
3503
+ "tutorial.mergeRequestBuilder.intro.title": "Générateur de merge request",
3504
+ "tutorial.mergeRequestBuilder.intro.content": "Choisissez les branches source et cible, rédigez le titre et la description, ajoutez relecteurs, étiquettes et tickets liés, puis prévisualisez et soumettez.",
3505
+ "tutorial.automationRuleEditor.intro.title": "Éditeur de règles d’automatisation",
3506
+ "tutorial.automationRuleEditor.intro.content": "Définissez le déclencheur, ajoutez des conditions facultatives, puis listez les actions à exécuter — basculez entre les trois sections à l’aide des onglets.",
3507
+ "tutorial.sceneActionBuilder.intro.title": "Générateur d’actions de scène",
3508
+ "tutorial.sceneActionBuilder.intro.content": "Ajoutez une action par appareil, définissez son état cible et un délai facultatif, réorganisez-les et prévisualisez la séquence de la scène.",
3509
+ "tutorial.backupTagEditor.intro.title": "Étiquettes de sauvegarde",
3510
+ "tutorial.backupTagEditor.intro.content": "Étiquetez cette sauvegarde pour la retrouver facilement : saisissez un libellé et choisissez une couleur, ou ajoutez l’une des étiquettes suggérées ; les étiquettes générées automatiquement sont protégées.",
3511
+ "tutorial.dataMergeBuilder.intro.title": "Fusion de données",
3512
+ "tutorial.dataMergeBuilder.intro.content": "Suivez les étapes : choisissez les branches source et cible, prévisualisez les modifications, résolvez les conflits, définissez les options, puis confirmez la fusion.",
3513
+ "tutorial.invoiceLineEditor.intro.title": "Lignes de facture",
3514
+ "tutorial.invoiceLineEditor.intro.content": "Ajoutez des lignes avec quantité, prix unitaire, TVA et remise — le net, le brut et le détail de la TVA sont calculés automatiquement.",
3515
+ "tutorial.keyValueEditor.intro.title": "Éditeur clé/valeur",
3516
+ "tutorial.keyValueEditor.intro.content": "Ajoutez des lignes clé/valeur pour les en-têtes, paramètres, variables d’environnement ou configuration ; masquez les valeurs secrètes, activez/désactivez les lignes et surveillez les clés en double.",
3517
+ "tutorial.imageEditor.intro.title": "Éditeur d’images",
3518
+ "tutorial.imageEditor.intro.content": "Utilisez la barre d’outils pour recadrer, pivoter, retourner, ajuster la luminosité/le contraste et annoter ; annulez/rétablissez vos modifications, puis enregistrez le résultat.",
3519
+ "tutorial.cropEditor.intro.title": "Éditeur de recadrage",
3520
+ "tutorial.cropEditor.intro.content": "Faites glisser le cadre de recadrage sur l’image, choisissez un format, pivotez, retournez ou zoomez, puis utilisez le résultat.",
3521
+ "tutorial.pdfAnnotationEditor.intro.title": "Annotations PDF",
3522
+ "tutorial.pdfAnnotationEditor.intro.content": "Choisissez un outil dans la barre d’outils (surligner, souligner, main levée, texte…), annotez la page, naviguez entre les pages et zoomez au besoin.",
3523
+ "tutorial.videoEditor.intro.title": "Éditeur vidéo",
3524
+ "tutorial.videoEditor.intro.content": "Ajoutez des médias aux pistes de la timeline, découpez et organisez les clips, modifiez leurs propriétés, prévisualisez la lecture, puis exportez la vidéo.",
3525
+ "tutorial.viewBuilder.intro.title": "Générateur de vues",
3526
+ "tutorial.viewBuilder.intro.content": "Faites glisser des contrôles depuis la palette dans les cellules de la grille, configurez chaque cellule dans le panneau des propriétés, et importez, exportez ou enregistrez la vue.",
3527
+ "tutorial.dashboardDesigner.intro.title": "Concepteur de tableau de bord",
3528
+ "tutorial.dashboardDesigner.intro.content": "Faites glisser des widgets depuis la palette sur la grille, redimensionnez-les et organisez-les, configurez chacun dans le panneau des propriétés, puis prévisualisez ou exportez le tableau de bord.",
3529
+ "tutorial.workflowDesignerCanvas.intro.title": "Concepteur de workflow",
3530
+ "tutorial.workflowDesignerCanvas.intro.content": "Ajoutez des nœuds de déclencheur, d’action et de condition sur le canevas et reliez-les ; gérez les variables, validez le flux, puis exportez-le.",
3531
+ "tutorial.armatureEditor.intro.title": "Éditeur d’armature",
3532
+ "tutorial.armatureEditor.intro.content": "Sélectionnez des os pour modifier leurs transformations, ajoutez ou reparentez des os, configurez les chaînes IK et enregistrez ou chargez des poses.",
3533
+ "tutorial.morphTargetEditor.intro.title": "Éditeur de morph targets",
3534
+ "tutorial.morphTargetEditor.intro.content": "Mélangez les morph targets du maillage avec les curseurs d’influence par cible, créez ou supprimez des cibles et prévisualisez l’interpolation.",
3535
+ "tutorial.terrainEditor.intro.title": "Éditeur de terrain",
3536
+ "tutorial.terrainEditor.intro.content": "Sculptez la carte de hauteur avec des pinceaux (élever, abaisser, aplatir, lisser, bruit), appliquez des couches de texture, générez du terrain procédural et importez/exportez des cartes de hauteur.",
3537
+ "tutorial.materialEditor.intro.title": "Éditeur de matériaux",
3538
+ "tutorial.materialEditor.intro.content": "Construisez un shader sous forme de graphe de nœuds : faites glisser des nœuds depuis la palette, reliez leurs ports, modifiez les propriétés et prévisualisez le matériau compilé.",
3539
+ "tutorial.particleEditor.intro.title": "Éditeur de particules",
3540
+ "tutorial.particleEditor.intro.content": "Choisissez un système de particules, ajustez son émetteur et ses modules dans l’inspecteur, et lisez, mettez en pause ou arrêtez l’aperçu en direct.",
3541
+ "tutorial.uvEditor.intro.title": "Éditeur UV",
3542
+ "tutorial.uvEditor.intro.content": "Modifiez la disposition UV du maillage par-dessus la texture : sélectionnez et transformez les UV avec les outils, changez de canal UV et appliquez vos modifications.",
3543
+ "tutorial.fontEditor.intro.title": "Éditeur de police",
3544
+ "tutorial.fontEditor.intro.content": "Modifiez les glyphes sur la grille Unicode, ajustez les métriques de la police ainsi que les tracés et chasses par glyphe, puis exportez la police.",
3545
+ "tutorial.iconEditor.intro.title": "Éditeur d’icônes",
3546
+ "tutorial.iconEditor.intro.content": "Dessinez et modifiez des formes SVG sur la grille, ajustez les réglages de contour et de variante, prévisualisez sur différents arrière-plans et exportez en SVG, React ou PNG.",
3547
+ "tutorial.uiDesigner.intro.title": "Concepteur d’interface",
3548
+ "tutorial.uiDesigner.intro.content": "Faites glisser des composants depuis la palette sur le canevas, modifiez leurs props dans le panneau, prévisualisez les points de rupture responsives et exportez en React/TSX.",
3549
+ "tutorial.gameEditor.intro.title": "Éditeur de jeu",
3550
+ "tutorial.gameEditor.intro.content": "Construisez votre scène dans la fenêtre à l’aide des panneaux de hiérarchie et d’assets, ajustez les entités dans l’inspecteur et enregistrez le projet.",
3551
+ "tutorial.levelEditor.intro.title": "Éditeur de niveau",
3552
+ "tutorial.levelEditor.intro.content": "Construisez le monde du jeu : placez et alignez des objets sur plusieurs couches, peignez le terrain, disposez splines et lumières, puis précalculez les lightmaps.",
3553
+ "tutorial.gameMaterialEditor.intro.title": "Éditeur de matériaux",
3554
+ "tutorial.gameMaterialEditor.intro.content": "Créez un shader sous forme de graphe de nœuds : ajoutez et reliez des nœuds de shader, modifiez leurs propriétés et compilez le matériau.",
3555
+ "tutorial.gameParticleEditor.intro.title": "Éditeur de particules",
3556
+ "tutorial.gameParticleEditor.intro.content": "Ajustez le système de particules dans l’inspecteur — émetteur, durée de vie, courbes et rendu — et lisez, mettez en pause ou redémarrez l’aperçu en direct.",
3557
+ "tutorial.floorPlanEditor.intro.title": "Éditeur de plan",
3558
+ "tutorial.floorPlanEditor.intro.content": "Dessinez des pièces et des zones avec les outils, placez des appareils sur le plan, changez d’étage et activez les superpositions comme les cotes, la grille et l’occupation.",
3559
+ "tutorial.buildingSceneEditor.intro.title": "Éditeur de scènes",
3560
+ "tutorial.buildingSceneEditor.intro.content": "Créez des scènes qui règlent plusieurs appareils à la fois : choisissez une scène, définissez les états cibles des appareils, puis enregistrez-la ou activez-la.",
3561
+ "tutorial.buildingAutomationEditor.intro.title": "Éditeur d’automatisation",
3562
+ "tutorial.buildingAutomationEditor.intro.content": "Créez des automatisations de bâtiment : choisissez-en une dans la liste, définissez ses déclencheurs, conditions et actions, puis enregistrez-la, activez-la ou supprimez-la.",
3563
+ "tutorial.spatialEditor.intro.title": "Éditeur spatial",
3564
+ "tutorial.spatialEditor.intro.content": "Disposez des plans selon différents modes : dessinez murs, pièces et objets avec les outils, gérez les couches, alignez sur la grille, puis exportez.",
3565
+ "tutorial.decisionTreeEditor.intro.title": "Éditeur d’arbre de décision",
3566
+ "tutorial.decisionTreeEditor.intro.content": "Explorez l’arbre de décision : cliquez sur les nœuds pour examiner les conditions et les résultats, affichez métriques, probabilités et échantillons, et mettez en évidence un chemin pour une entrée.",
3567
+ "tutorial.diagramEditor.intro.title": "Éditeur de diagrammes",
3568
+ "tutorial.diagramEditor.intro.content": "Choisissez un outil pour ajouter et relier des nœuds sur le canevas, modifiez-les dans le panneau des propriétés et exportez le diagramme depuis la barre d’outils.",
3569
+ "tutorial.contractEditor.intro.title": "Éditeur de contrats",
3570
+ "tutorial.contractEditor.intro.content": "Assemblez le contrat à partir de la bibliothèque de clauses, remplissez les variables du modèle, suivez les versions et approbations, puis enregistrez ou exportez en PDF/DOCX/HTML.",
3571
+ "tutorial.invoiceDesigner.intro.title": "Concepteur de factures",
3572
+ "tutorial.invoiceDesigner.intro.content": "Faites glisser des éléments sur le canevas de la facture, liez-les à des champs de données, alignez avec la grille et les règles, puis enregistrez ou exportez en PDF.",
3573
+ "tutorial.presentationEditor.intro.title": "Éditeur de présentation",
3574
+ "tutorial.presentationEditor.intro.content": "Construisez des diapositives depuis le rail de miniatures, ajoutez et disposez des éléments sur le canevas, modifiez-les dans le panneau des propriétés, puis présentez ou exportez.",
3575
+ "tutorial.dashboardStudio.intro.title": "Studio de tableau de bord",
3576
+ "tutorial.dashboardStudio.intro.content": "Faites glisser des widgets depuis la palette sur la grille, liez-les à des sources de données, ajoutez des filtres, puis basculez entre Édition/Vue, actualisez et enregistrez.",
3577
+ "tutorial.biReportBuilder.intro.title": "Générateur de rapports",
3578
+ "tutorial.biReportBuilder.intro.content": "Faites glisser des éléments depuis la palette sur le rapport, liez-les à des sources de données, basculez entre conception/aperçu, puis exportez en PDF ou Excel.",
3579
+ "tutorial.etlBuilder.intro.title": "Générateur ETL",
3580
+ "tutorial.etlBuilder.intro.content": "Reliez sources → transformations → destinations en un pipeline, changez de vue, puis exécutez-le et enregistrez la configuration.",
3581
+ "tutorial.videoEditorPro.intro.title": "Éditeur vidéo",
3582
+ "tutorial.videoEditorPro.intro.content": "Ajoutez des médias à la timeline, organisez et découpez les clips, appliquez effets et transitions, puis configurez et lancez l’export.",
3583
+ "tutorial.mlStudio.intro.title": "Studio ML",
3584
+ "tutorial.mlStudio.intro.content": "Parcourez les onglets : préparez les jeux de données, lancez des expériences, comparez et choisissez des modèles, puis déployez le meilleur.",
3585
+ "tutorial.mathEditor.intro.title": "Éditeur mathématique",
3586
+ "tutorial.mathEditor.intro.content": "Écrivez des équations en LaTeX ou insérez des symboles depuis la palette ; passez à la saisie manuscrite et prévisualisez la formule rendue en direct.",
3587
+ "tutorial.dmxEditor.intro.title": "Éditeur DMX",
3588
+ "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.",
3589
+ "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."
3590
+ }, Se = {
2901
3591
  ok: "OK",
2902
3592
  cancel: "Cancelar",
2903
3593
  save: "Guardar",
@@ -3259,7 +3949,516 @@ const j = [
3259
3949
  "wm.closeAll": "Cerrar todo",
3260
3950
  "wm.minimizeAll": "Minimizar todo",
3261
3951
  "wm.newWindow": "Nueva ventana",
3262
- "wm.moveToFront": "Al frente"
3952
+ "wm.moveToFront": "Al frente",
3953
+ // Tutorials + UI strings (1.0.22)
3954
+ "tutorial.play": "Reproducir",
3955
+ "tutorial.pause": "Pausa",
3956
+ "tutorial.speed": "Velocidad",
3957
+ "tutorial.close": "Cerrar",
3958
+ "tutorial.start": "Tutorial",
3959
+ "tutorial.startAria": "Iniciar el tutorial",
3960
+ "tutorial.next": "Siguiente",
3961
+ "tutorial.back": "Atrás",
3962
+ "tutorial.finish": "Finalizar",
3963
+ "tutorial.skip": "Omitir",
3964
+ "tutorial.stepOf": "de",
3965
+ "tutorial.moduleEditor.browser.title": "Explorador de módulos",
3966
+ "tutorial.moduleEditor.browser.content": "Selecciona aquí un módulo para abrir su manifiesto, sus entidades y sus traducciones.",
3967
+ "tutorial.moduleEditor.validate.title": "Validar",
3968
+ "tutorial.moduleEditor.validate.content": "Comprueba el módulo con el esquema del manifiesto. Los problemas aparecen en la barra de estado y en la salida.",
3969
+ "tutorial.moduleEditor.save.title": "Guardar",
3970
+ "tutorial.moduleEditor.save.content": "Guarda tus cambios mediante el proveedor de datos configurado (p. ej. escribir los archivos de nuevo en el disco).",
3971
+ "tutorial.manifestEditor.intro.title": "Editor de manifiesto",
3972
+ "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.",
3973
+ "tutorial.schemaForm.intro.title": "Formulario de esquema",
3974
+ "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.",
3975
+ "tutorial.entityEditor.intro.title": "Editor de entidades",
3976
+ "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).",
3977
+ "tutorial.i18nEditor.intro.title": "Traducciones",
3978
+ "tutorial.i18nEditor.intro.content": "Edita las traducciones como una cuadrícula de claves × idiomas. Añade claves e idiomas; las celdas ámbar marcan las traducciones que faltan.",
3979
+ "tutorial.formBuilder.intro.title": "Generador de formularios",
3980
+ "tutorial.formBuilder.intro.content": "Arrastra campos desde la paleta al lienzo y configura cada campo en el panel de propiedades. Exporta el esquema cuando termines.",
3981
+ "tutorial.formDesigner.intro.title": "Diseñador de formularios",
3982
+ "tutorial.formDesigner.intro.content": "Diseña formularios de entrada de datos con secciones, campos de búsqueda y campos calculados; vincúlalos a tu entidad y previsualiza en vivo.",
3983
+ "tutorial.paymentProviderConfig.intro.title": "Proveedor de pagos",
3984
+ "tutorial.paymentProviderConfig.intro.content": "Elige un proveedor, rellena sus credenciales (los secretos se enmascaran), elige prueba/producción, activa métodos y copia la URL del webhook.",
3985
+ "tutorial.webhookTester.intro.title": "Probador de webhooks",
3986
+ "tutorial.webhookTester.intro.content": "Elige una carga útil guardada (o escribe una), fírmala opcionalmente, envíala al endpoint e inspecciona la respuesta.",
3987
+ "tutorial.apiDesigner.intro.title": "Diseñador de API",
3988
+ "tutorial.apiDesigner.intro.content": "Define endpoints, parámetros, esquemas de solicitud/respuesta y la seguridad de tu documento OpenAPI.",
3989
+ "tutorial.apiTester.intro.title": "Probador de API",
3990
+ "tutorial.apiTester.intro.content": "Crea solicitudes con colecciones y variables de entorno, envíalas y verifica las respuestas.",
3991
+ "tutorial.integrationBuilder.intro.title": "Generador de integraciones",
3992
+ "tutorial.integrationBuilder.intro.content": "Conecta un flujo de nodos (disparadores → acciones → gestión de errores) para construir una integración.",
3993
+ "tutorial.scriptRunner.intro.title": "Ejecutor de scripts",
3994
+ "tutorial.scriptRunner.intro.content": "Escribe un script y datos de ejemplo, haz clic en Ejecutar y revisa el resultado y los registros capturados abajo.",
3995
+ "tutorial.lifecycleHooks.intro.title": "Hooks de ciclo de vida",
3996
+ "tutorial.lifecycleHooks.intro.content": "Asocia controladores a cada disparador, define su orden y su indicador de activación, y añade una condición opcional que controle la ejecución.",
3997
+ "tutorial.revisionHistory.intro.title": "Historial de revisiones",
3998
+ "tutorial.revisionHistory.intro.content": "Elige una revisión, selecciona otra para comparar, revisa la comparación en paralelo y restaura una versión anterior si es necesario.",
3999
+ "tutorial.markdownEditor.intro.title": "Editor de Markdown",
4000
+ "tutorial.markdownEditor.intro.content": "Escribe Markdown con la barra de formato; activa la vista previa en vivo para ver el resultado y expórtalo a HTML.",
4001
+ "tutorial.htmlEditor.intro.title": "Editor de texto enriquecido",
4002
+ "tutorial.htmlEditor.intro.content": "Da formato al texto con la barra de herramientas, inserta enlaces, imágenes y tablas, y cambia al código HTML o Markdown cuando lo necesites.",
4003
+ "tutorial.documentEditor.intro.title": "Editor de documentos",
4004
+ "tutorial.documentEditor.intro.content": "Compón un documento a partir de bloques: usa la barra de herramientas o los comandos con barra para añadir títulos, listas, multimedia y más, y expórtalo a HTML.",
4005
+ "tutorial.codeEditor.intro.title": "Editor de código",
4006
+ "tutorial.codeEditor.intro.content": "Edita código con resaltado de sintaxis, IntelliSense y barra de herramientas. Ctrl+S guarda; la barra de estado muestra la posición del cursor y los problemas.",
4007
+ "tutorial.kanbanBoard.intro.title": "Tablero Kanban",
4008
+ "tutorial.kanbanBoard.intro.content": "Arrastra tarjetas entre columnas para cambiar su estado, añade tarjetas con el botón «+» y haz clic en una tarjeta para editar sus detalles.",
4009
+ "tutorial.queryBuilder.intro.title": "Generador de consultas",
4010
+ "tutorial.queryBuilder.intro.content": "Añade tablas, elige columnas y define uniones, condiciones y ordenación de forma visual: el SQL se genera por ti. Cambia a la pestaña SQL para revisarlo.",
4011
+ "tutorial.stateDesigner.intro.title": "Diseñador de estado",
4012
+ "tutorial.stateDesigner.intro.content": "Modela tu store como slices con campos y acciones, elige un destino (p. ej. Zustand) y exporta código de gestión de estado listo para usar.",
4013
+ "tutorial.componentDesigner.intro.title": "Diseñador de componentes",
4014
+ "tutorial.componentDesigner.intro.content": "Nombra tu componente, declara sus props con tipos y requisitos, y previsualiza en vivo la interfaz TypeScript generada.",
4015
+ "tutorial.pageBuilder.intro.title": "Generador de páginas",
4016
+ "tutorial.pageBuilder.intro.content": "Arrastra componentes desde la barra lateral a la cuadrícula responsiva, cambia la vista previa de escritorio/tableta/móvil y guarda el diseño.",
4017
+ "tutorial.lowCodeStudio.intro.title": "Estudio low-code",
4018
+ "tutorial.lowCodeStudio.intro.content": "Arrastra componentes desde la barra lateral al lienzo y cambia entre las pestañas Diseño, Vista previa y Código para construir y exportar tu aplicación.",
4019
+ "tutorial.testBuilder.intro.title": "Generador de pruebas",
4020
+ "tutorial.testBuilder.intro.content": "Crea suites de pruebas de forma visual: añade casos y pasos de interacción con aserciones, ejecútalos y exporta a un archivo .test.tsx listo para usar.",
4021
+ "tutorial.workflowDesigner.intro.title": "Diseñador de flujos de trabajo",
4022
+ "tutorial.workflowDesigner.intro.content": "Añade estados y transiciones en el lienzo, valida el flujo, simúlalo y luego prueba o publica tu flujo de trabajo.",
4023
+ "tutorial.themeBuilder.intro.title": "Generador de temas",
4024
+ "tutorial.themeBuilder.intro.content": "Parte de un preajuste, ajusta colores, tipografía y otros tokens por sección, previsualiza en vivo y luego aplica o exporta el tema.",
4025
+ "tutorial.filterBuilder.intro.title": "Generador de filtros",
4026
+ "tutorial.filterBuilder.intro.content": "Construye árboles de filtros Y/O complejos: añade condiciones y grupos anidados, elige campos y operadores y guarda preajustes reutilizables.",
4027
+ "tutorial.diagramDesigner.intro.title": "Diseñador de diagramas",
4028
+ "tutorial.diagramDesigner.intro.content": "Arrastra formas desde la paleta al lienzo, conéctalas con conectores, edita las propiedades a la derecha y exporta a SVG, PNG o JSON.",
4029
+ "tutorial.reportBuilder.intro.title": "Generador de informes",
4030
+ "tutorial.reportBuilder.intro.content": "Arrastra secciones al informe, vincúlalas a fuentes de datos, organiza el diseño y exporta a PDF, HTML o XLSX.",
4031
+ "tutorial.erpReportDesigner.intro.title": "Diseñador de informes",
4032
+ "tutorial.erpReportDesigner.intro.content": "Diseña informes por bandas: coloca elementos (campos, expresiones, gráficos) en las bandas, vincula conexiones de datos, edita propiedades y luego previsualiza y exporta.",
4033
+ "tutorial.recipeEditor.intro.title": "Editor de recetas",
4034
+ "tutorial.recipeEditor.intro.content": "Edita los detalles de la receta, añade y reordena ingredientes y pasos, adjunta fotos e importa o exporta la receta como JSON.",
4035
+ "tutorial.pipelineEditor.intro.title": "Editor de pipeline",
4036
+ "tutorial.pipelineEditor.intro.content": "Construye un pipeline CI/CD a partir de etapas, trabajos y pasos; define disparadores, variables y secretos; y luego valídalo, guárdalo y ejecútalo.",
4037
+ "tutorial.mergeRequestBuilder.intro.title": "Generador de merge request",
4038
+ "tutorial.mergeRequestBuilder.intro.content": "Elige las ramas de origen y destino, escribe el título y la descripción, añade revisores, etiquetas e incidencias vinculadas, y luego previsualiza y envía.",
4039
+ "tutorial.automationRuleEditor.intro.title": "Editor de reglas de automatización",
4040
+ "tutorial.automationRuleEditor.intro.content": "Define el disparador, añade condiciones opcionales y luego enumera las acciones a ejecutar: cambia entre las tres secciones con las pestañas.",
4041
+ "tutorial.sceneActionBuilder.intro.title": "Generador de acciones de escena",
4042
+ "tutorial.sceneActionBuilder.intro.content": "Añade una acción por dispositivo, define su estado objetivo y un retardo opcional, reordénalas y previsualiza la secuencia de la escena.",
4043
+ "tutorial.backupTagEditor.intro.title": "Etiquetas de copia de seguridad",
4044
+ "tutorial.backupTagEditor.intro.content": "Etiqueta esta copia de seguridad para encontrarla fácilmente: escribe una etiqueta y elige un color, o añade una de las etiquetas sugeridas; las etiquetas generadas automáticamente están protegidas.",
4045
+ "tutorial.dataMergeBuilder.intro.title": "Combinación de datos",
4046
+ "tutorial.dataMergeBuilder.intro.content": "Sigue los pasos: elige las ramas de origen y destino, previsualiza los cambios, resuelve los conflictos, define las opciones y luego confirma la combinación.",
4047
+ "tutorial.invoiceLineEditor.intro.title": "Líneas de factura",
4048
+ "tutorial.invoiceLineEditor.intro.content": "Añade líneas con cantidad, precio unitario, IVA y descuento: el neto, el bruto y el desglose del IVA se calculan automáticamente.",
4049
+ "tutorial.keyValueEditor.intro.title": "Editor de clave/valor",
4050
+ "tutorial.keyValueEditor.intro.content": "Añade filas de clave/valor para cabeceras, parámetros, variables de entorno o configuración; enmascara los valores secretos, activa/desactiva filas y vigila las claves duplicadas.",
4051
+ "tutorial.imageEditor.intro.title": "Editor de imágenes",
4052
+ "tutorial.imageEditor.intro.content": "Usa la barra de herramientas para recortar, rotar, voltear, ajustar brillo/contraste y anotar; deshaz/rehaz tus ediciones y guarda el resultado.",
4053
+ "tutorial.cropEditor.intro.title": "Editor de recorte",
4054
+ "tutorial.cropEditor.intro.content": "Arrastra el marco de recorte sobre la imagen, elige una relación de aspecto, rota, voltea o haz zoom y luego usa el resultado.",
4055
+ "tutorial.pdfAnnotationEditor.intro.title": "Anotaciones de PDF",
4056
+ "tutorial.pdfAnnotationEditor.intro.content": "Elige una herramienta de la barra (resaltar, subrayar, mano alzada, texto…), anota la página y navega y haz zoom según necesites.",
4057
+ "tutorial.videoEditor.intro.title": "Editor de vídeo",
4058
+ "tutorial.videoEditor.intro.content": "Añade medios a las pistas de la línea de tiempo, recorta y organiza clips, edita sus propiedades, previsualiza la reproducción y luego exporta el vídeo.",
4059
+ "tutorial.viewBuilder.intro.title": "Generador de vistas",
4060
+ "tutorial.viewBuilder.intro.content": "Arrastra controles desde la paleta a las celdas de la cuadrícula, configura cada celda en el panel de propiedades e importa, exporta o guarda la vista.",
4061
+ "tutorial.dashboardDesigner.intro.title": "Diseñador de paneles",
4062
+ "tutorial.dashboardDesigner.intro.content": "Arrastra widgets desde la paleta a la cuadrícula, cambia su tamaño y organízalos, configura cada uno en el panel de propiedades y luego previsualiza o exporta el panel.",
4063
+ "tutorial.workflowDesignerCanvas.intro.title": "Diseñador de flujos de trabajo",
4064
+ "tutorial.workflowDesignerCanvas.intro.content": "Añade nodos de disparador, acción y condición al lienzo y conéctalos; gestiona las variables, valida el flujo y luego expórtalo.",
4065
+ "tutorial.armatureEditor.intro.title": "Editor de esqueleto",
4066
+ "tutorial.armatureEditor.intro.content": "Selecciona huesos para editar sus transformaciones, añade o reasigna huesos, configura cadenas IK y guarda o carga poses.",
4067
+ "tutorial.morphTargetEditor.intro.title": "Editor de morph targets",
4068
+ "tutorial.morphTargetEditor.intro.content": "Mezcla los morph targets de la malla con los deslizadores de influencia por objetivo, crea o elimina objetivos y previsualiza la interpolación.",
4069
+ "tutorial.terrainEditor.intro.title": "Editor de terreno",
4070
+ "tutorial.terrainEditor.intro.content": "Esculpe el mapa de altura con pinceles (elevar, bajar, aplanar, suavizar, ruido), aplica capas de textura, genera terreno procedural e importa/exporta mapas de altura.",
4071
+ "tutorial.materialEditor.intro.title": "Editor de materiales",
4072
+ "tutorial.materialEditor.intro.content": "Construye un shader como un grafo de nodos: arrastra nodos desde la paleta, conecta sus puertos, edita propiedades y previsualiza el material compilado.",
4073
+ "tutorial.particleEditor.intro.title": "Editor de partículas",
4074
+ "tutorial.particleEditor.intro.content": "Elige un sistema de partículas, ajusta su emisor y sus módulos en el inspector y reproduce, pausa o detén la vista previa en vivo.",
4075
+ "tutorial.uvEditor.intro.title": "Editor de UV",
4076
+ "tutorial.uvEditor.intro.content": "Edita la disposición UV de la malla sobre la textura: selecciona y transforma UVs con las herramientas, cambia de canal UV y aplica tus cambios.",
4077
+ "tutorial.fontEditor.intro.title": "Editor de fuentes",
4078
+ "tutorial.fontEditor.intro.content": "Edita glifos en la cuadrícula Unicode, ajusta las métricas de la fuente y los trazados y espaciados por glifo, y luego exporta la fuente.",
4079
+ "tutorial.iconEditor.intro.title": "Editor de iconos",
4080
+ "tutorial.iconEditor.intro.content": "Dibuja y edita formas SVG en la cuadrícula, ajusta los parámetros de trazo y variante, previsualiza sobre distintos fondos y exporta a SVG, React o PNG.",
4081
+ "tutorial.uiDesigner.intro.title": "Diseñador de interfaz",
4082
+ "tutorial.uiDesigner.intro.content": "Arrastra componentes desde la paleta al lienzo, edita sus props en el panel, previsualiza los breakpoints responsivos y exporta a React/TSX.",
4083
+ "tutorial.gameEditor.intro.title": "Editor de juego",
4084
+ "tutorial.gameEditor.intro.content": "Construye tu escena en el viewport con los paneles de jerarquía y de recursos, ajusta las entidades en el inspector y guarda el proyecto.",
4085
+ "tutorial.levelEditor.intro.title": "Editor de niveles",
4086
+ "tutorial.levelEditor.intro.content": "Construye el mundo del juego: coloca y ajusta objetos por capas, pinta el terreno, dispón splines y luces y luego hornea los lightmaps.",
4087
+ "tutorial.gameMaterialEditor.intro.title": "Editor de materiales",
4088
+ "tutorial.gameMaterialEditor.intro.content": "Crea un shader como un grafo de nodos: añade y conecta nodos de shader, edita sus propiedades y compila el material.",
4089
+ "tutorial.gameParticleEditor.intro.title": "Editor de partículas",
4090
+ "tutorial.gameParticleEditor.intro.content": "Ajusta el sistema de partículas en el inspector (emisor, vida útil, curvas y renderizado) y reproduce, pausa o reinicia la vista previa en vivo.",
4091
+ "tutorial.floorPlanEditor.intro.title": "Editor de planos",
4092
+ "tutorial.floorPlanEditor.intro.content": "Dibuja habitaciones y zonas con las herramientas, coloca dispositivos en el plano, cambia de planta y activa superposiciones como cotas, cuadrícula y ocupación.",
4093
+ "tutorial.buildingSceneEditor.intro.title": "Editor de escenas",
4094
+ "tutorial.buildingSceneEditor.intro.content": "Crea escenas que configuran varios dispositivos a la vez: elige una escena, define los estados objetivo de los dispositivos y luego guárdala o actívala.",
4095
+ "tutorial.buildingAutomationEditor.intro.title": "Editor de automatización",
4096
+ "tutorial.buildingAutomationEditor.intro.content": "Crea automatizaciones del edificio: elige una de la lista, define sus disparadores, condiciones y acciones, y luego guárdala, actívala o elimínala.",
4097
+ "tutorial.spatialEditor.intro.title": "Editor espacial",
4098
+ "tutorial.spatialEditor.intro.content": "Diseña planos en varios modos: dibuja paredes, habitaciones y objetos con las herramientas, gestiona capas, ajusta a la cuadrícula y luego exporta.",
4099
+ "tutorial.decisionTreeEditor.intro.title": "Editor de árbol de decisión",
4100
+ "tutorial.decisionTreeEditor.intro.content": "Explora el árbol de decisión: haz clic en los nodos para revisar condiciones y resultados, muestra métricas, probabilidades y muestras, y resalta una ruta para una entrada.",
4101
+ "tutorial.diagramEditor.intro.title": "Editor de diagramas",
4102
+ "tutorial.diagramEditor.intro.content": "Elige una herramienta para añadir y conectar nodos en el lienzo, edítalos en el panel de propiedades y exporta el diagrama desde la barra de herramientas.",
4103
+ "tutorial.contractEditor.intro.title": "Editor de contratos",
4104
+ "tutorial.contractEditor.intro.content": "Ensambla el contrato a partir de la biblioteca de cláusulas, rellena las variables de la plantilla, controla versiones y aprobaciones, y luego guárdalo o expórtalo a PDF/DOCX/HTML.",
4105
+ "tutorial.invoiceDesigner.intro.title": "Diseñador de facturas",
4106
+ "tutorial.invoiceDesigner.intro.content": "Arrastra elementos al lienzo de la factura, vincúlalos a campos de datos, alinéalos con la cuadrícula y las reglas, y luego guárdala o expórtala a PDF.",
4107
+ "tutorial.presentationEditor.intro.title": "Editor de presentaciones",
4108
+ "tutorial.presentationEditor.intro.content": "Construye diapositivas desde la tira de miniaturas, añade y organiza elementos en el lienzo, edítalos en el panel de propiedades y luego presenta o exporta.",
4109
+ "tutorial.dashboardStudio.intro.title": "Estudio de paneles",
4110
+ "tutorial.dashboardStudio.intro.content": "Arrastra widgets desde la paleta a la cuadrícula, vincúlalos a fuentes de datos, añade filtros y luego cambia entre Editar/Ver, actualiza y guarda.",
4111
+ "tutorial.biReportBuilder.intro.title": "Generador de informes",
4112
+ "tutorial.biReportBuilder.intro.content": "Arrastra elementos desde la paleta al informe, vincúlalos a fuentes de datos, cambia entre diseño/vista previa y exporta a PDF o Excel.",
4113
+ "tutorial.etlBuilder.intro.title": "Generador de ETL",
4114
+ "tutorial.etlBuilder.intro.content": "Conecta orígenes → transformaciones → destinos en un pipeline, cambia las vistas y luego ejecútalo y guarda la configuración.",
4115
+ "tutorial.videoEditorPro.intro.title": "Editor de vídeo",
4116
+ "tutorial.videoEditorPro.intro.content": "Añade medios a la línea de tiempo, organiza y recorta clips, aplica efectos y transiciones, y luego configura y ejecuta la exportación.",
4117
+ "tutorial.mlStudio.intro.title": "Estudio de ML",
4118
+ "tutorial.mlStudio.intro.content": "Avanza por las pestañas: prepara conjuntos de datos, ejecuta experimentos, compara y elige modelos y luego despliega el mejor.",
4119
+ "tutorial.mathEditor.intro.title": "Editor de matemáticas",
4120
+ "tutorial.mathEditor.intro.content": "Escribe ecuaciones en LaTeX o inserta símbolos desde la paleta; cambia a la entrada manuscrita y previsualiza la fórmula renderizada en vivo.",
4121
+ "tutorial.dmxEditor.intro.title": "Editor DMX",
4122
+ "tutorial.dmxEditor.intro.content": "Elige el dispositivo FTDI y el puerto, y luego ajusta el valor de cada canal DMX con los deslizadores para controlar tus luminarias en vivo.",
4123
+ "nav.help": "Ayuda",
4124
+ "navShell.home.title": "Inicio",
4125
+ "navShell.help.next": "Siguiente",
4126
+ "navShell.help.back": "Atrás",
4127
+ "navShell.help.finish": "Finalizar",
4128
+ "navShell.help.skip": "Omitir",
4129
+ "navShell.help.stepOf": "de",
4130
+ "navShell.help.topNav.title": "Navegación superior",
4131
+ "navShell.help.topNav.body": "Usa la barra superior para cambiar de espacio de trabajo, buscar, cambiar el tema o el idioma y abrir las notificaciones.",
4132
+ "navShell.help.sidebar.title": "Barra lateral",
4133
+ "navShell.help.sidebar.body": "Explora las vistas disponibles agrupadas por sección. Elige una vista para abrirla en una pestaña nueva.",
4134
+ "navShell.help.tabs.title": "Pestañas",
4135
+ "navShell.help.tabs.body": "Cada vista abierta vive en su propia pestaña. Fija las que más uses y haz clic derecho para más acciones.",
4136
+ "navShell.help.content.title": "Espacio de trabajo",
4137
+ "navShell.help.content.body": "El área principal muestra la vista activa. Cambiar de pestaña o de entrada de la barra lateral cambia el contenido aquí.",
4138
+ "navShell.home.subtitle": "Retoma donde lo dejaste.",
4139
+ "navShell.home.empty": "Abre una vista desde la barra lateral o las pestañas de arriba para llenar tu espacio de trabajo.",
4140
+ "navShell.home.greeting.morning": "Buenos días",
4141
+ "navShell.home.greeting.afternoon": "Buenas tardes",
4142
+ "navShell.home.greeting.evening": "Buenas noches",
4143
+ "navShell.home.greeting.night": "Hola",
4144
+ "navShell.home.sections.openTabs": "Abiertas ahora",
4145
+ "navShell.home.sections.shortcuts": "Tus accesos directos",
4146
+ "navShell.home.sections.allViews": "Todas las vistas",
4147
+ "sidebar.menu.open": "Abrir",
4148
+ "sidebar.menu.openNewTab": "Abrir en una pestaña nueva",
4149
+ "sidebar.menu.openBrowserTab": "Abrir en una pestaña nueva del navegador",
4150
+ "sidebar.menu.pinFavorite": "Añadir a favoritos",
4151
+ "sidebar.menu.unpinFavorite": "Quitar de favoritos",
4152
+ "sidebar.menu.hide": "Ocultar",
4153
+ "sidebar.menu.copyLink": "Copiar enlace",
4154
+ "sidebar.menu.pinSource": "Fijar origen",
4155
+ "sidebar.menu.unpinSource": "Dejar de fijar origen",
4156
+ "sidebar.menu.hideSource": "Ocultar origen",
4157
+ "sidebar.prefs.general": "General",
4158
+ "sidebar.prefs.display": "Visualización",
4159
+ "sidebar.prefs.order": "Orden",
4160
+ "sidebar.prefs.hidden": "Elementos ocultos",
4161
+ "sidebar.prefs.reset": "Restablecer",
4162
+ "sidebar.prefs.general.title": "General",
4163
+ "sidebar.prefs.general.desc": "Comportamiento del árbol de la barra lateral y qué hace un clic izquierdo.",
4164
+ "sidebar.prefs.general.autoExpand": "Expandir automáticamente todas las ramas",
4165
+ "sidebar.prefs.general.autoExpandHint": "Cuando está desactivado, las ramas empiezan contraídas y recuerdan el último estado por sesión.",
4166
+ "sidebar.prefs.general.leftClickBehavior": "Comportamiento del clic izquierdo",
4167
+ "sidebar.prefs.general.focusExisting": "Enfocar la pestaña existente",
4168
+ "sidebar.prefs.general.openNew": "Abrir siempre en una pestaña nueva",
4169
+ "sidebar.prefs.general.leftClickHint": "Clic derecho → «Abrir en una pestaña nueva» está siempre disponible, independientemente de este ajuste.",
4170
+ "sidebar.prefs.display.title": "Visualización",
4171
+ "sidebar.prefs.display.desc": "Qué modos aparecen en la tira y hasta qué profundidad llega el árbol en cada modo.",
4172
+ "sidebar.prefs.display.enableModeIcons": "Mostrar los iconos del selector de modos",
4173
+ "sidebar.prefs.display.enabledModes": "Modos visibles",
4174
+ "sidebar.prefs.display.preferencesAlwaysOn": "Preferencias se muestra siempre.",
4175
+ "sidebar.prefs.display.maxDepth": "Profundidad del árbol por modo",
4176
+ "sidebar.prefs.order.title": "Ordenar elementos",
4177
+ "sidebar.prefs.order.desc": "Arrastra los elementos para reordenar cómo aparecen en el modo seleccionado.",
4178
+ "sidebar.prefs.order.pickMode": "Modo",
4179
+ "sidebar.prefs.order.visibilityHint": "El orden se aplica a los elementos de nivel superior dentro de cada grupo de origen. Contrae una cabecera de origen para ver solo las entradas de nivel superior al verificar el cambio.",
4180
+ "sidebar.prefs.order.empty": "No hay elementos reordenables en este modo.",
4181
+ "sidebar.prefs.order.resetMode": "Restablecer al orden predeterminado",
4182
+ "sidebar.prefs.hidden.title": "Elementos ocultos",
4183
+ "sidebar.prefs.hidden.desc": "Elementos que ocultaste del árbol. Restáuralos para recuperarlos.",
4184
+ "sidebar.prefs.hidden.empty": "Nada oculto todavía.",
4185
+ "sidebar.prefs.hidden.restore": "Restaurar",
4186
+ "sidebar.prefs.reset.title": "Restablecer",
4187
+ "sidebar.prefs.reset.desc": "Borra todas las personalizaciones y restaura el diseño original de la barra lateral.",
4188
+ "sidebar.prefs.reset.button": "Restablecer todas las preferencias",
4189
+ "sidebar.prefs.reset.confirm": "Esto borrará tus favoritos, los elementos ocultos, el orden personalizado y todas las demás preferencias de la barra lateral. No se puede deshacer.",
4190
+ "sidebar.prefs.reset.confirmYes": "Sí, restablecer todo",
4191
+ "sidebar.prefs.reset.cancel": "Cancelar",
4192
+ "noCode.title": "Estudio No-Code",
4193
+ "noCode.description": "Crea aplicaciones visualmente",
4194
+ "noCode.newProject": "Nuevo proyecto",
4195
+ "noCode.openProject": "Abrir proyecto",
4196
+ "noCode.saveProject": "Guardar proyecto",
4197
+ "noCode.exportProject": "Exportar proyecto",
4198
+ "noCode.importProject": "Importar proyecto",
4199
+ "noCode.projectName": "Nombre del proyecto",
4200
+ "noCode.projectSettings": "Configuración del proyecto",
4201
+ "noCode.recentProjects": "Proyectos recientes",
4202
+ "noCode.templates": "Plantillas",
4203
+ "noCode.preview": "Vista previa",
4204
+ "noCode.codeView": "Vista de código",
4205
+ "noCode.splitView": "Vista dividida",
4206
+ "noCode.visualView": "Vista visual",
4207
+ "noCode.generate": "Generar código",
4208
+ "noCode.deploy": "Desplegar",
4209
+ "noCode.componentDesigner.title": "Diseñador de componentes",
4210
+ "noCode.componentDesigner.newComponent": "Nuevo componente",
4211
+ "noCode.componentDesigner.componentName": "Nombre del componente",
4212
+ "noCode.componentDesigner.addProp": "Añadir prop",
4213
+ "noCode.componentDesigner.editProp": "Editar prop",
4214
+ "noCode.componentDesigner.deleteProp": "Eliminar prop",
4215
+ "noCode.componentDesigner.propName": "Nombre de la prop",
4216
+ "noCode.componentDesigner.propType": "Tipo de prop",
4217
+ "noCode.componentDesigner.propRequired": "Obligatoria",
4218
+ "noCode.componentDesigner.propDefault": "Valor por defecto",
4219
+ "noCode.componentDesigner.addState": "Añadir estado",
4220
+ "noCode.componentDesigner.stateName": "Nombre del estado",
4221
+ "noCode.componentDesigner.stateType": "Tipo de estado",
4222
+ "noCode.componentDesigner.stateDefault": "Valor inicial",
4223
+ "noCode.componentDesigner.addHook": "Añadir hook",
4224
+ "noCode.componentDesigner.hooks": "Hooks",
4225
+ "noCode.componentDesigner.template": "Plantilla",
4226
+ "noCode.componentDesigner.styles": "Estilos",
4227
+ "noCode.componentDesigner.events": "Eventos",
4228
+ "noCode.componentDesigner.palette": "Paleta de componentes",
4229
+ "noCode.componentDesigner.dragDrop": "Arrastra componentes aquí",
4230
+ "noCode.pageBuilder.title": "Generador de páginas",
4231
+ "noCode.pageBuilder.newPage": "Nueva página",
4232
+ "noCode.pageBuilder.pageName": "Nombre de la página",
4233
+ "noCode.pageBuilder.pageRoute": "Ruta",
4234
+ "noCode.pageBuilder.addSection": "Añadir sección",
4235
+ "noCode.pageBuilder.editSection": "Editar sección",
4236
+ "noCode.pageBuilder.deleteSection": "Eliminar sección",
4237
+ "noCode.pageBuilder.sectionLayout": "Diseño de la sección",
4238
+ "noCode.pageBuilder.columns": "Columnas",
4239
+ "noCode.pageBuilder.responsive": "Responsivo",
4240
+ "noCode.pageBuilder.mobile": "Móvil",
4241
+ "noCode.pageBuilder.tablet": "Tableta",
4242
+ "noCode.pageBuilder.desktop": "Escritorio",
4243
+ "noCode.pageBuilder.showGrid": "Mostrar cuadrícula",
4244
+ "noCode.pageBuilder.hideGrid": "Ocultar cuadrícula",
4245
+ "noCode.pageBuilder.metadata": "Metadatos de la página",
4246
+ "noCode.pageBuilder.seo": "Configuración SEO",
4247
+ "noCode.stateDesigner.title": "Diseñador de estado",
4248
+ "noCode.stateDesigner.newStore": "Nuevo store",
4249
+ "noCode.stateDesigner.storeName": "Nombre del store",
4250
+ "noCode.stateDesigner.storeType": "Tipo de store",
4251
+ "noCode.stateDesigner.addState": "Añadir campo de estado",
4252
+ "noCode.stateDesigner.addAction": "Añadir acción",
4253
+ "noCode.stateDesigner.editAction": "Editar acción",
4254
+ "noCode.stateDesigner.deleteAction": "Eliminar acción",
4255
+ "noCode.stateDesigner.actionName": "Nombre de la acción",
4256
+ "noCode.stateDesigner.actionParams": "Parámetros",
4257
+ "noCode.stateDesigner.actionBody": "Cuerpo de la acción",
4258
+ "noCode.stateDesigner.asyncAction": "Acción asíncrona",
4259
+ "noCode.stateDesigner.addSelector": "Añadir selector",
4260
+ "noCode.stateDesigner.selectorName": "Nombre del selector",
4261
+ "noCode.stateDesigner.selectorBody": "Lógica del selector",
4262
+ "noCode.stateDesigner.persistence": "Persistencia",
4263
+ "noCode.stateDesigner.devtools": "DevTools",
4264
+ "noCode.apiFlow.title": "Diseñador de flujos de API",
4265
+ "noCode.apiFlow.newEndpoint": "Nuevo endpoint",
4266
+ "noCode.apiFlow.endpointUrl": "URL del endpoint",
4267
+ "noCode.apiFlow.method": "Método HTTP",
4268
+ "noCode.apiFlow.headers": "Cabeceras",
4269
+ "noCode.apiFlow.body": "Cuerpo de la solicitud",
4270
+ "noCode.apiFlow.response": "Respuesta",
4271
+ "noCode.apiFlow.auth": "Autenticación",
4272
+ "noCode.apiFlow.authType": "Tipo de autenticación",
4273
+ "noCode.apiFlow.bearerToken": "Token Bearer",
4274
+ "noCode.apiFlow.apiKey": "Clave de API",
4275
+ "noCode.apiFlow.testEndpoint": "Probar endpoint",
4276
+ "noCode.apiFlow.mockResponse": "Respuesta simulada",
4277
+ "noCode.apiFlow.errorHandling": "Gestión de errores",
4278
+ "noCode.apiFlow.retry": "Política de reintentos",
4279
+ "noCode.apiFlow.cache": "Almacenamiento en caché",
4280
+ "noCode.dataMapper.title": "Mapeador de datos",
4281
+ "noCode.dataMapper.sourceSchema": "Esquema de origen",
4282
+ "noCode.dataMapper.targetSchema": "Esquema de destino",
4283
+ "noCode.dataMapper.addMapping": "Añadir mapeo",
4284
+ "noCode.dataMapper.editMapping": "Editar mapeo",
4285
+ "noCode.dataMapper.deleteMapping": "Eliminar mapeo",
4286
+ "noCode.dataMapper.sourceField": "Campo de origen",
4287
+ "noCode.dataMapper.targetField": "Campo de destino",
4288
+ "noCode.dataMapper.transform": "Transformar",
4289
+ "noCode.dataMapper.validation": "Validación",
4290
+ "noCode.dataMapper.testData": "Datos de prueba",
4291
+ "noCode.dataMapper.preview": "Previsualizar resultado",
4292
+ "noCode.dataMapper.autoMap": "Mapeo automático",
4293
+ "noCode.eventOrchestrator.title": "Orquestador de eventos",
4294
+ "noCode.eventOrchestrator.newFlow": "Nuevo flujo de eventos",
4295
+ "noCode.eventOrchestrator.flowName": "Nombre del flujo",
4296
+ "noCode.eventOrchestrator.trigger": "Disparador",
4297
+ "noCode.eventOrchestrator.triggerType": "Tipo de disparador",
4298
+ "noCode.eventOrchestrator.addHandler": "Añadir controlador",
4299
+ "noCode.eventOrchestrator.editHandler": "Editar controlador",
4300
+ "noCode.eventOrchestrator.deleteHandler": "Eliminar controlador",
4301
+ "noCode.eventOrchestrator.handlerName": "Nombre del controlador",
4302
+ "noCode.eventOrchestrator.debounce": "Debounce",
4303
+ "noCode.eventOrchestrator.throttle": "Throttle",
4304
+ "noCode.eventOrchestrator.delay": "Retardo",
4305
+ "noCode.eventOrchestrator.condition": "Condición",
4306
+ "noCode.eventOrchestrator.chain": "Encadenar eventos",
4307
+ "noCode.testBuilder.title": "Generador de pruebas",
4308
+ "noCode.testBuilder.newTest": "Nueva prueba",
4309
+ "noCode.testBuilder.testName": "Nombre de la prueba",
4310
+ "noCode.testBuilder.testDescription": "Descripción",
4311
+ "noCode.testBuilder.addScenario": "Añadir escenario",
4312
+ "noCode.testBuilder.editScenario": "Editar escenario",
4313
+ "noCode.testBuilder.deleteScenario": "Eliminar escenario",
4314
+ "noCode.testBuilder.addAssertion": "Añadir aserción",
4315
+ "noCode.testBuilder.assertionType": "Tipo de aserción",
4316
+ "noCode.testBuilder.expected": "Valor esperado",
4317
+ "noCode.testBuilder.actual": "Valor real",
4318
+ "noCode.testBuilder.mock": "Configuración de mock",
4319
+ "noCode.testBuilder.runTests": "Ejecutar pruebas",
4320
+ "noCode.testBuilder.testsPassed": "Pruebas superadas",
4321
+ "noCode.testBuilder.testsFailed": "Pruebas fallidas",
4322
+ "noCode.testBuilder.coverage": "Cobertura",
4323
+ "noCode.testBuilder.accessibility": "Comprobación de accesibilidad",
4324
+ "noCode.codeTemplate.title": "Plantillas de código",
4325
+ "noCode.codeTemplate.newTemplate": "Nueva plantilla",
4326
+ "noCode.codeTemplate.templateName": "Nombre de la plantilla",
4327
+ "noCode.codeTemplate.templateEngine": "Motor de plantillas",
4328
+ "noCode.codeTemplate.variables": "Variables",
4329
+ "noCode.codeTemplate.addVariable": "Añadir variable",
4330
+ "noCode.codeTemplate.variableName": "Nombre de la variable",
4331
+ "noCode.codeTemplate.variableType": "Tipo de variable",
4332
+ "noCode.codeTemplate.variableDefault": "Valor por defecto",
4333
+ "noCode.codeTemplate.generateFiles": "Generar archivos",
4334
+ "noCode.codeTemplate.outputPath": "Ruta de salida",
4335
+ "noCode.codeTemplate.presets": "Preajustes",
4336
+ "noCode.codeTemplate.presetReact": "Componente React",
4337
+ "noCode.codeTemplate.presetNextPage": "Página de Next.js",
4338
+ "noCode.codeTemplate.presetHook": "Hook personalizado",
4339
+ "noCode.codeTemplate.presetStore": "Módulo de store",
4340
+ "noCode.codePreview.title": "Vista previa del código",
4341
+ "noCode.codePreview.showDiff": "Mostrar diferencias",
4342
+ "noCode.codePreview.hideDiff": "Ocultar diferencias",
4343
+ "noCode.codePreview.copyCode": "Copiar código",
4344
+ "noCode.codePreview.downloadCode": "Descargar código",
4345
+ "noCode.codePreview.importCode": "Importar código",
4346
+ "noCode.codePreview.language": "Lenguaje",
4347
+ "noCode.codePreview.format": "Formatear código",
4348
+ "noCode.codePreview.linesChanged": "Líneas cambiadas",
4349
+ "noCode.codePreview.noChanges": "Sin cambios",
4350
+ "vectorEditor.menu.file": "Archivo",
4351
+ "vectorEditor.menu.edit": "Editar",
4352
+ "vectorEditor.menu.object": "Objeto",
4353
+ "vectorEditor.menu.path": "Trazado",
4354
+ "vectorEditor.menu.view": "Ver",
4355
+ "vectorEditor.menu.newCanvas": "Nuevo lienzo",
4356
+ "vectorEditor.menu.openSvg": "Abrir SVG…",
4357
+ "vectorEditor.menu.pasteSvg": "Pegar SVG…",
4358
+ "vectorEditor.menu.exportSvg": "Exportar SVG",
4359
+ "vectorEditor.menu.exportPng": "Exportar PNG",
4360
+ "vectorEditor.menu.exportJpg": "Exportar JPG",
4361
+ "vectorEditor.menu.exportWebp": "Exportar WebP",
4362
+ "vectorEditor.menu.exportBmp": "Exportar BMP",
4363
+ "vectorEditor.menu.saveToLibrary": "📦 Guardar en la biblioteca",
4364
+ "vectorEditor.menu.exportIconSnippet": "📋 Exportar fragmento de icono",
4365
+ "vectorEditor.menu.exportIcon": "📋 Exportar icono",
4366
+ "vectorEditor.menu.undo": "Deshacer (Ctrl+Z)",
4367
+ "vectorEditor.menu.redo": "Rehacer (Ctrl+Y)",
4368
+ "vectorEditor.menu.copy": "Copiar (Ctrl+C)",
4369
+ "vectorEditor.menu.paste": "Pegar (Ctrl+V)",
4370
+ "vectorEditor.menu.duplicate": "Duplicar (Ctrl+D)",
4371
+ "vectorEditor.menu.delete": "Eliminar (Supr)",
4372
+ "vectorEditor.menu.bringToFront": "Traer al frente",
4373
+ "vectorEditor.menu.sendToBack": "Enviar al fondo",
4374
+ "vectorEditor.menu.flipH": "Voltear horizontal",
4375
+ "vectorEditor.menu.flipV": "Voltear vertical",
4376
+ "vectorEditor.menu.alignLeft": "Alinear a la izquierda",
4377
+ "vectorEditor.menu.alignCenter": "Centrar",
4378
+ "vectorEditor.menu.alignRight": "Alinear a la derecha",
4379
+ "vectorEditor.menu.union": "Unión (∪)",
4380
+ "vectorEditor.menu.subtract": "Restar (−)",
4381
+ "vectorEditor.menu.intersect": "Intersecar (∩)",
4382
+ "vectorEditor.menu.exclude": "Excluir (⊕)",
4383
+ "vectorEditor.menu.outlineStroke": "Contornear trazo",
4384
+ "vectorEditor.menu.snapToGrid": "Ajustar a la cuadrícula",
4385
+ "vectorEditor.menu.snap": "Ajustar",
4386
+ "vectorEditor.menu.secondShape": "2.ª forma",
4387
+ "vectorEditor.tabs.properties": "Propiedades",
4388
+ "vectorEditor.tabs.layers": "Capas",
4389
+ "vectorEditor.tabs.library": "Biblioteca",
4390
+ "vectorEditor.tabs.timeline": "Línea de tiempo",
4391
+ "vectorEditor.timeline.preset": "Preajuste",
4392
+ "vectorEditor.timeline.duration": "Duración (ms)",
4393
+ "vectorEditor.timeline.repeat": "Repetir",
4394
+ "vectorEditor.timeline.direction": "Dirección",
4395
+ "vectorEditor.timeline.remove": "Eliminar animación",
4396
+ "vectorEditor.timeline.play": "Reproducir",
4397
+ "vectorEditor.timeline.pause": "Pausa",
4398
+ "vectorEditor.timeline.stop": "Detener",
4399
+ "vectorEditor.timeline.copyCss": "Copiar CSS",
4400
+ "vectorEditor.timeline.keyframes": "Fotogramas clave",
4401
+ "vectorEditor.timeline.addKeyframe": "+ Añadir fotograma clave",
4402
+ "vectorEditor.timeline.noSelection": "Selecciona una forma para animarla.",
4403
+ "vectorEditor.timeline.animationTitle": "Animación",
4404
+ "vectorEditor.timeline.playbackTitle": "Reproducción",
4405
+ "vectorEditor.timeline.attachHint": "Selecciona una forma para adjuntar una animación.",
4406
+ "vectorEditor.timeline.playLabel": "▶ Reproducir",
4407
+ "vectorEditor.timeline.pauseLabel": "⏸ Pausa",
4408
+ "vectorEditor.timeline.stopLabel": "⏹ Detener",
4409
+ "vectorEditor.timeline.copyCssKeyframes": "📋 Copiar fotogramas clave CSS",
4410
+ "vectorEditor.timeline.tLabel": "t",
4411
+ "vectorEditor.layers.empty": "Aún no hay capas. Usa las herramientas para dibujar o inserta desde la pestaña Biblioteca.",
4412
+ "vectorEditor.layers.moveUp": "Subir",
4413
+ "vectorEditor.layers.moveDown": "Bajar",
4414
+ "vectorEditor.library.passProp": "Pasa una prop library a NiceVectorEditor para llenar esta pestaña con iconos insertables.",
4415
+ "vectorEditor.statusBar.zoom": "Zoom",
4416
+ "vectorEditor.statusBar.shapes": "forma(s)",
4417
+ "vectorEditor.statusBar.selected": "Seleccionado",
4418
+ "vectorEditor.statusBar.snap": "Ajuste",
4419
+ "vectorEditor.library.empty": "No hay iconos en la biblioteca.",
4420
+ "vectorEditor.snippet.title": "✅ Fragmento de icono copiado al portapapeles",
4421
+ "vectorEditor.snippet.pasteHint": "Pegar en",
4422
+ "vectorEditor.snippet.copyAgain": "Copiar de nuevo",
4423
+ "vectorEditor.snippet.close": "Cerrar",
4424
+ "vectorEditor.properties.appearance": "Apariencia",
4425
+ "vectorEditor.properties.fill": "Relleno",
4426
+ "vectorEditor.properties.solid": "Sólido",
4427
+ "vectorEditor.properties.gradient": "Degradado",
4428
+ "vectorEditor.properties.hideEditor": "▼ Ocultar editor",
4429
+ "vectorEditor.properties.editGradient": "► Editar degradado",
4430
+ "vectorEditor.properties.type": "Tipo",
4431
+ "vectorEditor.properties.linear": "Lineal",
4432
+ "vectorEditor.properties.radial": "Radial",
4433
+ "vectorEditor.properties.angle": "Ángulo",
4434
+ "vectorEditor.properties.cx": "CX",
4435
+ "vectorEditor.properties.cy": "CY",
4436
+ "vectorEditor.properties.r": "R",
4437
+ "vectorEditor.properties.colorStops": "Paradas de color:",
4438
+ "vectorEditor.properties.addStop": "+ Añadir parada",
4439
+ "vectorEditor.properties.removeStop": "- Eliminar",
4440
+ "vectorEditor.properties.stroke": "Trazo",
4441
+ "vectorEditor.properties.width": "Ancho",
4442
+ "vectorEditor.properties.opacity": "Opacidad",
4443
+ "vectorEditor.properties.rotation": "Rotación",
4444
+ "vectorEditor.properties.toolOptions": "Opciones de la herramienta",
4445
+ "vectorEditor.properties.radius": "Radio",
4446
+ "vectorEditor.properties.sides": "Lados",
4447
+ "vectorEditor.properties.points": "Puntos",
4448
+ "vectorEditor.properties.innerR": "R interior",
4449
+ "vectorEditor.properties.size": "Tamaño",
4450
+ "vectorEditor.properties.font": "Fuente",
4451
+ "vectorEditor.properties.grid": "Cuadrícula",
4452
+ "vectorEditor.properties.transform": "Transformar",
4453
+ "vectorEditor.properties.x": "X",
4454
+ "vectorEditor.properties.y": "Y",
4455
+ "vectorEditor.properties.w": "An",
4456
+ "vectorEditor.properties.h": "Al",
4457
+ "vectorEditor.layers.title": "Capas",
4458
+ "vectorEditor.layers.show": "Mostrar",
4459
+ "vectorEditor.layers.hide": "Ocultar",
4460
+ "vectorEditor.layers.lock": "Bloquear",
4461
+ "vectorEditor.layers.unlock": "Desbloquear"
3263
4462
  }, De = {
3264
4463
  ok: "OK",
3265
4464
  cancel: "Annulla",
@@ -3374,7 +4573,7 @@ const j = [
3374
4573
  "lang.ko": "Coreano",
3375
4574
  "lang.zh": "Cinese",
3376
4575
  "lang.ar": "Arabo"
3377
- }, Ae = {
4576
+ }, je = {
3378
4577
  ok: "OK",
3379
4578
  cancel: "Cancelar",
3380
4579
  save: "Salvar",
@@ -3737,7 +4936,7 @@ const j = [
3737
4936
  "wm.minimizeAll": "Minimizar todos",
3738
4937
  "wm.newWindow": "Nova janela",
3739
4938
  "wm.moveToFront": "Trazer para frente"
3740
- }, xe = {
4939
+ }, Ae = {
3741
4940
  ok: "OK",
3742
4941
  cancel: "Annuleren",
3743
4942
  save: "Opslaan",
@@ -3822,7 +5021,7 @@ const j = [
3822
5021
  "lang.ko": "Koreaans",
3823
5022
  "lang.zh": "Chinees",
3824
5023
  "lang.ar": "Arabisch"
3825
- }, Te = {
5024
+ }, Pe = {
3826
5025
  ok: "OK",
3827
5026
  cancel: "Avbryt",
3828
5027
  save: "Spara",
@@ -3892,7 +5091,7 @@ const j = [
3892
5091
  "lang.ko": "Koreanska",
3893
5092
  "lang.zh": "Kinesiska",
3894
5093
  "lang.ar": "Arabiska"
3895
- }, Pe = {
5094
+ }, xe = {
3896
5095
  ok: "OK",
3897
5096
  cancel: "Avbryt",
3898
5097
  save: "Lagre",
@@ -3955,7 +5154,7 @@ const j = [
3955
5154
  "lang.ko": "Koreansk",
3956
5155
  "lang.zh": "Kinesisk",
3957
5156
  "lang.ar": "Arabisk"
3958
- }, je = {
5157
+ }, Te = {
3959
5158
  ok: "OK",
3960
5159
  cancel: "Annuller",
3961
5160
  save: "Gem",
@@ -4018,7 +5217,7 @@ const j = [
4018
5217
  "lang.ko": "Koreansk",
4019
5218
  "lang.zh": "Kinesisk",
4020
5219
  "lang.ar": "Arabisk"
4021
- }, Ne = {
5220
+ }, Be = {
4022
5221
  ok: "OK",
4023
5222
  cancel: "Peruuta",
4024
5223
  save: "Tallenna",
@@ -4507,7 +5706,7 @@ const j = [
4507
5706
  "lang.ko": "Kórejčina",
4508
5707
  "lang.zh": "Čínština",
4509
5708
  "lang.ar": "Arabčina"
4510
- }, Oe = {
5709
+ }, Ne = {
4511
5710
  ok: "OK",
4512
5711
  cancel: "Mégse",
4513
5712
  save: "Mentés",
@@ -4680,7 +5879,7 @@ const j = [
4680
5879
  "lang.ko": "Корейски",
4681
5880
  "lang.zh": "Китайски",
4682
5881
  "lang.ar": "Арабски"
4683
- }, Be = {
5882
+ }, Oe = {
4684
5883
  ok: "OK",
4685
5884
  cancel: "Скасувати",
4686
5885
  save: "Зберегти",
@@ -5042,7 +6241,516 @@ const j = [
5042
6241
  "wm.closeAll": "Закрити всі",
5043
6242
  "wm.minimizeAll": "Згорнути всі",
5044
6243
  "wm.newWindow": "Нове вікно",
5045
- "wm.moveToFront": "На передній план"
6244
+ "wm.moveToFront": "На передній план",
6245
+ // Tutorials + UI strings (1.0.22)
6246
+ "tutorial.play": "Відтворити",
6247
+ "tutorial.pause": "Пауза",
6248
+ "tutorial.speed": "Швидкість",
6249
+ "tutorial.close": "Закрити",
6250
+ "tutorial.start": "Посібник",
6251
+ "tutorial.startAria": "Запустити посібник",
6252
+ "tutorial.next": "Далі",
6253
+ "tutorial.back": "Назад",
6254
+ "tutorial.finish": "Завершити",
6255
+ "tutorial.skip": "Пропустити",
6256
+ "tutorial.stepOf": "з",
6257
+ "tutorial.moduleEditor.browser.title": "Браузер модулів",
6258
+ "tutorial.moduleEditor.browser.content": "Виберіть тут модуль, щоб відкрити його маніфест, сутності та переклади.",
6259
+ "tutorial.moduleEditor.validate.title": "Перевірити",
6260
+ "tutorial.moduleEditor.validate.content": "Перевірте модуль за схемою маніфесту. Проблеми з’являються в рядку стану та у виводі.",
6261
+ "tutorial.moduleEditor.save.title": "Зберегти",
6262
+ "tutorial.moduleEditor.save.content": "Збережіть зміни через налаштований постачальник даних (напр., запис файлів назад на диск).",
6263
+ "tutorial.manifestEditor.intro.title": "Редактор маніфесту",
6264
+ "tutorial.manifestEditor.intro.content": "Редагуйте маніфест у розділах на основі схеми. Перемикайте Форма ⇄ JSON для кожного розділу; перевірка з’являється в рядку стану.",
6265
+ "tutorial.schemaForm.intro.title": "Форма за схемою",
6266
+ "tutorial.schemaForm.intro.content": "Ця форма генерується зі схеми. Обов’язкові поля та помилки перевірки підсвічуються; використовуйте перемикач JSON для прямого редагування.",
6267
+ "tutorial.entityEditor.intro.title": "Редактор сутностей",
6268
+ "tutorial.entityEditor.intro.content": "Додавайте сутності ліворуч, а праворуч редагуйте метадані кожної сутності та її поля (тип, ключі, обмеження).",
6269
+ "tutorial.i18nEditor.intro.title": "Переклади",
6270
+ "tutorial.i18nEditor.intro.content": "Редагуйте переклади як таблицю ключі × мови. Додавайте ключі та мови; бурштинові клітинки позначають відсутні переклади.",
6271
+ "tutorial.formBuilder.intro.title": "Конструктор форм",
6272
+ "tutorial.formBuilder.intro.content": "Перетягуйте поля з палітри на полотно та налаштовуйте кожне поле на панелі властивостей. Експортуйте схему, коли завершите.",
6273
+ "tutorial.formDesigner.intro.title": "Дизайнер форм",
6274
+ "tutorial.formDesigner.intro.content": "Проєктуйте форми введення даних із розділами, полями пошуку та обчислюваними полями; прив’яжіть їх до сутності та переглядайте наживо.",
6275
+ "tutorial.paymentProviderConfig.intro.title": "Платіжний провайдер",
6276
+ "tutorial.paymentProviderConfig.intro.content": "Виберіть провайдера, заповніть облікові дані (секрети приховуються), виберіть тест/робочий режим, увімкніть методи та скопіюйте URL вебхука.",
6277
+ "tutorial.webhookTester.intro.title": "Тестер вебхуків",
6278
+ "tutorial.webhookTester.intro.content": "Виберіть збережене корисне навантаження (або напишіть своє), за потреби підпишіть його, надішліть на endpoint і перегляньте відповідь.",
6279
+ "tutorial.apiDesigner.intro.title": "Дизайнер API",
6280
+ "tutorial.apiDesigner.intro.content": "Визначте endpoint-и, параметри, схеми запиту/відповіді та безпеку вашого документа OpenAPI.",
6281
+ "tutorial.apiTester.intro.title": "Тестер API",
6282
+ "tutorial.apiTester.intro.content": "Створюйте запити з колекціями та змінними середовища, надсилайте їх і перевіряйте відповіді.",
6283
+ "tutorial.integrationBuilder.intro.title": "Конструктор інтеграцій",
6284
+ "tutorial.integrationBuilder.intro.content": "З’єднайте потік вузлів (тригери → дії → обробка помилок), щоб побудувати інтеграцію.",
6285
+ "tutorial.scriptRunner.intro.title": "Запуск скриптів",
6286
+ "tutorial.scriptRunner.intro.content": "Напишіть скрипт і приклад вхідних даних, натисніть «Виконати» та перегляньте результат і зібрані журнали нижче.",
6287
+ "tutorial.lifecycleHooks.intro.title": "Хуки життєвого циклу",
6288
+ "tutorial.lifecycleHooks.intro.content": "Прив’яжіть обробники до кожного тригера, задайте їхній порядок і прапорець активації та додайте необов’язкову умову, що керує виконанням.",
6289
+ "tutorial.revisionHistory.intro.title": "Історія версій",
6290
+ "tutorial.revisionHistory.intro.content": "Виберіть версію, виберіть іншу для порівняння, перегляньте відмінності поряд і за потреби відновіть попередню версію.",
6291
+ "tutorial.markdownEditor.intro.title": "Редактор Markdown",
6292
+ "tutorial.markdownEditor.intro.content": "Пишіть Markdown за допомогою панелі форматування; увімкніть попередній перегляд наживо, щоб бачити результат, і експортуйте у HTML.",
6293
+ "tutorial.htmlEditor.intro.title": "Редактор форматованого тексту",
6294
+ "tutorial.htmlEditor.intro.content": "Форматуйте текст за допомогою панелі інструментів, вставляйте посилання, зображення й таблиці та за потреби переходьте до коду HTML або Markdown.",
6295
+ "tutorial.documentEditor.intro.title": "Редактор документів",
6296
+ "tutorial.documentEditor.intro.content": "Складайте документ із блоків: використовуйте панель інструментів або slash-команди, щоб додавати заголовки, списки, медіа тощо, і експортуйте у HTML.",
6297
+ "tutorial.codeEditor.intro.title": "Редактор коду",
6298
+ "tutorial.codeEditor.intro.content": "Редагуйте код із підсвічуванням синтаксису, IntelliSense та панеллю інструментів. Ctrl+S зберігає; рядок стану показує позицію курсора та проблеми.",
6299
+ "tutorial.kanbanBoard.intro.title": "Дошка Kanban",
6300
+ "tutorial.kanbanBoard.intro.content": "Перетягуйте картки між колонками, щоб змінити їхній статус, додавайте картки кнопкою «+» та клацніть картку, щоб редагувати її деталі.",
6301
+ "tutorial.queryBuilder.intro.title": "Конструктор запитів",
6302
+ "tutorial.queryBuilder.intro.content": "Додавайте таблиці, обирайте стовпці та візуально визначайте з’єднання, умови й сортування — SQL генерується автоматично. Перейдіть на вкладку SQL, щоб переглянути його.",
6303
+ "tutorial.stateDesigner.intro.title": "Дизайнер стану",
6304
+ "tutorial.stateDesigner.intro.content": "Змоделюйте сховище як зрізи з полями та діями, виберіть ціль (напр., Zustand) і експортуйте готовий код керування станом.",
6305
+ "tutorial.componentDesigner.intro.title": "Дизайнер компонентів",
6306
+ "tutorial.componentDesigner.intro.content": "Назвіть компонент, оголосіть його props із типами та вимогами й переглядайте згенерований інтерфейс TypeScript наживо.",
6307
+ "tutorial.pageBuilder.intro.title": "Конструктор сторінок",
6308
+ "tutorial.pageBuilder.intro.content": "Перетягуйте компоненти з бічної панелі на адаптивну сітку, перемикайте перегляд для комп’ютера/планшета/мобільного та зберігайте макет.",
6309
+ "tutorial.lowCodeStudio.intro.title": "Студія low-code",
6310
+ "tutorial.lowCodeStudio.intro.content": "Перетягуйте компоненти з бічної панелі на полотно та перемикайтеся між вкладками «Дизайн», «Перегляд» і «Код», щоб створити та експортувати застосунок.",
6311
+ "tutorial.testBuilder.intro.title": "Конструктор тестів",
6312
+ "tutorial.testBuilder.intro.content": "Створюйте набори тестів візуально: додавайте випадки та кроки взаємодії з перевірками, запускайте їх і експортуйте у готовий файл .test.tsx.",
6313
+ "tutorial.workflowDesigner.intro.title": "Дизайнер робочих процесів",
6314
+ "tutorial.workflowDesigner.intro.content": "Додавайте стани й переходи на полотні, перевіряйте потік, симулюйте його, а потім тестуйте або публікуйте робочий процес.",
6315
+ "tutorial.themeBuilder.intro.title": "Конструктор тем",
6316
+ "tutorial.themeBuilder.intro.content": "Почніть із пресету, налаштовуйте кольори, типографіку та інші токени за розділами, переглядайте наживо, а потім застосуйте або експортуйте тему.",
6317
+ "tutorial.filterBuilder.intro.title": "Конструктор фільтрів",
6318
+ "tutorial.filterBuilder.intro.content": "Будуйте складні дерева фільтрів І/АБО: додавайте умови та вкладені групи, обирайте поля й оператори та зберігайте багаторазові пресети.",
6319
+ "tutorial.diagramDesigner.intro.title": "Дизайнер діаграм",
6320
+ "tutorial.diagramDesigner.intro.content": "Перетягуйте фігури з палітри на полотно, з’єднуйте їх конекторами, редагуйте властивості праворуч і експортуйте у SVG, PNG або JSON.",
6321
+ "tutorial.reportBuilder.intro.title": "Конструктор звітів",
6322
+ "tutorial.reportBuilder.intro.content": "Перетягуйте розділи у звіт, прив’язуйте їх до джерел даних, упорядковуйте макет і експортуйте у PDF, HTML або XLSX.",
6323
+ "tutorial.erpReportDesigner.intro.title": "Дизайнер звітів",
6324
+ "tutorial.erpReportDesigner.intro.content": "Проєктуйте стрічкові звіти: розміщуйте елементи (поля, вирази, діаграми) у стрічках, прив’язуйте з’єднання даних, редагуйте властивості, а потім переглядайте та експортуйте.",
6325
+ "tutorial.recipeEditor.intro.title": "Редактор рецептів",
6326
+ "tutorial.recipeEditor.intro.content": "Редагуйте деталі рецепта, додавайте та змінюйте порядок інгредієнтів і кроків, прикріплюйте фото та імпортуйте чи експортуйте рецепт як JSON.",
6327
+ "tutorial.pipelineEditor.intro.title": "Редактор конвеєра",
6328
+ "tutorial.pipelineEditor.intro.content": "Будуйте конвеєр CI/CD зі стадій, завдань і кроків; задавайте тригери, змінні та секрети; а потім перевіряйте, зберігайте та запускайте його.",
6329
+ "tutorial.mergeRequestBuilder.intro.title": "Конструктор merge request",
6330
+ "tutorial.mergeRequestBuilder.intro.content": "Виберіть гілки джерела й призначення, напишіть заголовок і опис, додайте рецензентів, мітки та пов’язані задачі, а потім перегляньте та надішліть.",
6331
+ "tutorial.automationRuleEditor.intro.title": "Редактор правил автоматизації",
6332
+ "tutorial.automationRuleEditor.intro.content": "Визначте тригер, додайте необов’язкові умови, а потім перелічіть дії для виконання — перемикайтеся між трьома розділами за допомогою вкладок.",
6333
+ "tutorial.sceneActionBuilder.intro.title": "Конструктор дій сцени",
6334
+ "tutorial.sceneActionBuilder.intro.content": "Додайте дію для кожного пристрою, задайте її цільовий стан і необов’язкову затримку, змініть порядок і перегляньте послідовність сцени.",
6335
+ "tutorial.backupTagEditor.intro.title": "Теги резервної копії",
6336
+ "tutorial.backupTagEditor.intro.content": "Позначте цю резервну копію тегами для зручного пошуку: введіть підпис і виберіть колір або додайте один із запропонованих тегів; автоматично створені теги захищені.",
6337
+ "tutorial.dataMergeBuilder.intro.title": "Об’єднання даних",
6338
+ "tutorial.dataMergeBuilder.intro.content": "Пройдіть кроки: виберіть гілки джерела й призначення, перегляньте зміни, вирішіть конфлікти, задайте параметри, а потім підтвердьте об’єднання.",
6339
+ "tutorial.invoiceLineEditor.intro.title": "Рядки рахунка",
6340
+ "tutorial.invoiceLineEditor.intro.content": "Додавайте позиції з кількістю, ціною за одиницю, ПДВ і знижкою — нетто, брутто та розбивку ПДВ обчислюються автоматично.",
6341
+ "tutorial.keyValueEditor.intro.title": "Редактор ключ/значення",
6342
+ "tutorial.keyValueEditor.intro.content": "Додавайте рядки ключ/значення для заголовків, параметрів, змінних середовища чи конфігурації; приховуйте секретні значення, вмикайте/вимикайте рядки та стежте за дублікатами ключів.",
6343
+ "tutorial.imageEditor.intro.title": "Редактор зображень",
6344
+ "tutorial.imageEditor.intro.content": "Використовуйте панель інструментів, щоб обрізати, обертати, віддзеркалювати, налаштовувати яскравість/контраст та робити позначки; скасовуйте/повторюйте зміни та зберігайте результат.",
6345
+ "tutorial.cropEditor.intro.title": "Редактор обрізання",
6346
+ "tutorial.cropEditor.intro.content": "Перетягніть рамку обрізання на зображення, виберіть співвідношення сторін, обертайте, віддзеркалюйте або масштабуйте, а потім використайте результат.",
6347
+ "tutorial.pdfAnnotationEditor.intro.title": "Анотації PDF",
6348
+ "tutorial.pdfAnnotationEditor.intro.content": "Виберіть інструмент на панелі (виділення, підкреслення, від руки, текст…), робіть позначки на сторінці, гортайте сторінки та масштабуйте за потреби.",
6349
+ "tutorial.videoEditor.intro.title": "Відеоредактор",
6350
+ "tutorial.videoEditor.intro.content": "Додавайте медіа на доріжки таймлайну, обрізайте та впорядковуйте кліпи, редагуйте їхні властивості, переглядайте відтворення, а потім експортуйте відео.",
6351
+ "tutorial.viewBuilder.intro.title": "Конструктор подань",
6352
+ "tutorial.viewBuilder.intro.content": "Перетягуйте елементи керування з палітри в клітинки сітки, налаштовуйте кожну клітинку на панелі властивостей та імпортуйте, експортуйте чи зберігайте подання.",
6353
+ "tutorial.dashboardDesigner.intro.title": "Дизайнер дашбордів",
6354
+ "tutorial.dashboardDesigner.intro.content": "Перетягуйте віджети з палітри на сітку, змінюйте їхній розмір і впорядковуйте, налаштовуйте кожен на панелі властивостей, а потім переглядайте або експортуйте дашборд.",
6355
+ "tutorial.workflowDesignerCanvas.intro.title": "Дизайнер робочих процесів",
6356
+ "tutorial.workflowDesignerCanvas.intro.content": "Додавайте на полотно вузли тригерів, дій та умов і з’єднуйте їх; керуйте змінними, перевіряйте потік, а потім експортуйте його.",
6357
+ "tutorial.armatureEditor.intro.title": "Редактор скелета",
6358
+ "tutorial.armatureEditor.intro.content": "Виберіть кістки, щоб редагувати їхні трансформації, додавайте або змінюйте батьківські кістки, налаштовуйте IK-ланцюги та зберігайте чи завантажуйте пози.",
6359
+ "tutorial.morphTargetEditor.intro.title": "Редактор морф-цілей",
6360
+ "tutorial.morphTargetEditor.intro.content": "Змішуйте морф-цілі сітки повзунками впливу для кожної цілі, створюйте чи видаляйте цілі та переглядайте інтерполяцію.",
6361
+ "tutorial.terrainEditor.intro.title": "Редактор ландшафту",
6362
+ "tutorial.terrainEditor.intro.content": "Скульптуруйте карту висот пензлями (підняти, опустити, вирівняти, згладити, шум), накладайте текстурні шари, генеруйте процедурний ландшафт та імпортуйте/експортуйте карти висот.",
6363
+ "tutorial.materialEditor.intro.title": "Редактор матеріалів",
6364
+ "tutorial.materialEditor.intro.content": "Будуйте шейдер як граф вузлів: перетягуйте вузли з палітри, з’єднуйте їхні порти, редагуйте властивості та переглядайте скомпільований матеріал.",
6365
+ "tutorial.particleEditor.intro.title": "Редактор частинок",
6366
+ "tutorial.particleEditor.intro.content": "Виберіть систему частинок, налаштуйте її емітер і модулі в інспекторі та відтворюйте, призупиняйте чи зупиняйте перегляд наживо.",
6367
+ "tutorial.uvEditor.intro.title": "Редактор UV",
6368
+ "tutorial.uvEditor.intro.content": "Редагуйте UV-розгортку сітки поверх текстури: виділяйте та трансформуйте UV інструментами, перемикайте UV-канали та застосовуйте зміни.",
6369
+ "tutorial.fontEditor.intro.title": "Редактор шрифтів",
6370
+ "tutorial.fontEditor.intro.content": "Редагуйте гліфи на сітці Unicode, налаштовуйте метрики шрифту, контури та відступи для кожного гліфа, а потім експортуйте шрифт.",
6371
+ "tutorial.iconEditor.intro.title": "Редактор іконок",
6372
+ "tutorial.iconEditor.intro.content": "Малюйте та редагуйте SVG-фігури на сітці, налаштовуйте параметри обведення та варіанта, переглядайте на різних фонах та експортуйте у SVG, React або PNG.",
6373
+ "tutorial.uiDesigner.intro.title": "Дизайнер інтерфейсу",
6374
+ "tutorial.uiDesigner.intro.content": "Перетягуйте компоненти з палітри на полотно, редагуйте їхні props на панелі, переглядайте адаптивні breakpoint-и та експортуйте у React/TSX.",
6375
+ "tutorial.gameEditor.intro.title": "Редактор гри",
6376
+ "tutorial.gameEditor.intro.content": "Будуйте сцену у вікні перегляду за допомогою панелей ієрархії та ресурсів, налаштовуйте сутності в інспекторі та зберігайте проєкт.",
6377
+ "tutorial.levelEditor.intro.title": "Редактор рівнів",
6378
+ "tutorial.levelEditor.intro.content": "Будуйте ігровий світ: розміщуйте та прив’язуйте об’єкти за шарами, малюйте ландшафт, розставляйте сплайни й світло, а потім запікайте карти освітлення.",
6379
+ "tutorial.gameMaterialEditor.intro.title": "Редактор матеріалів",
6380
+ "tutorial.gameMaterialEditor.intro.content": "Створіть шейдер як граф вузлів: додавайте та з’єднуйте вузли шейдера, редагуйте їхні властивості та компілюйте матеріал.",
6381
+ "tutorial.gameParticleEditor.intro.title": "Редактор частинок",
6382
+ "tutorial.gameParticleEditor.intro.content": "Налаштуйте систему частинок в інспекторі — емітер, час життя, криві та рендеринг — і відтворюйте, призупиняйте чи перезапускайте перегляд наживо.",
6383
+ "tutorial.floorPlanEditor.intro.title": "Редактор планів приміщень",
6384
+ "tutorial.floorPlanEditor.intro.content": "Малюйте кімнати та зони інструментами, розміщуйте пристрої на плані, перемикайте поверхи та вмикайте накладки, як-от розміри, сітку й заповненість.",
6385
+ "tutorial.buildingSceneEditor.intro.title": "Редактор сцен",
6386
+ "tutorial.buildingSceneEditor.intro.content": "Створюйте сцени, що налаштовують кілька пристроїв одночасно: виберіть сцену, задайте цільові стани пристроїв, а потім збережіть чи активуйте її.",
6387
+ "tutorial.buildingAutomationEditor.intro.title": "Редактор автоматизації",
6388
+ "tutorial.buildingAutomationEditor.intro.content": "Створюйте автоматизації будівлі: виберіть одну зі списку, визначте її тригери, умови та дії, а потім збережіть, увімкніть чи видаліть її.",
6389
+ "tutorial.spatialEditor.intro.title": "Просторовий редактор",
6390
+ "tutorial.spatialEditor.intro.content": "Проєктуйте плани в різних режимах: малюйте стіни, кімнати й об’єкти інструментами, керуйте шарами, прив’язуйте до сітки, а потім експортуйте.",
6391
+ "tutorial.decisionTreeEditor.intro.title": "Редактор дерева рішень",
6392
+ "tutorial.decisionTreeEditor.intro.content": "Досліджуйте дерево рішень: клацайте вузли, щоб переглянути умови й результати, вмикайте метрики, ймовірності та вибірки й підсвічуйте шлях для заданого входу.",
6393
+ "tutorial.diagramEditor.intro.title": "Редактор діаграм",
6394
+ "tutorial.diagramEditor.intro.content": "Виберіть інструмент, щоб додавати та з’єднувати вузли на полотні, редагуйте їх на панелі властивостей та експортуйте діаграму з панелі інструментів.",
6395
+ "tutorial.contractEditor.intro.title": "Редактор договорів",
6396
+ "tutorial.contractEditor.intro.content": "Складайте договір із бібліотеки пунктів, заповнюйте змінні шаблону, відстежуйте версії та погодження, а потім зберігайте чи експортуйте у PDF/DOCX/HTML.",
6397
+ "tutorial.invoiceDesigner.intro.title": "Дизайнер рахунків",
6398
+ "tutorial.invoiceDesigner.intro.content": "Перетягуйте елементи на полотно рахунка, прив’язуйте їх до полів даних, вирівнюйте за сіткою та лінійками, а потім зберігайте чи експортуйте у PDF.",
6399
+ "tutorial.presentationEditor.intro.title": "Редактор презентацій",
6400
+ "tutorial.presentationEditor.intro.content": "Створюйте слайди зі стрічки мініатюр, додавайте та впорядковуйте елементи на полотні, редагуйте їх на панелі властивостей, а потім демонструйте чи експортуйте.",
6401
+ "tutorial.dashboardStudio.intro.title": "Студія дашбордів",
6402
+ "tutorial.dashboardStudio.intro.content": "Перетягуйте віджети з палітри на сітку, прив’язуйте їх до джерел даних, додавайте фільтри, а потім перемикайте «Редагування/Перегляд», оновлюйте та зберігайте.",
6403
+ "tutorial.biReportBuilder.intro.title": "Конструктор звітів",
6404
+ "tutorial.biReportBuilder.intro.content": "Перетягуйте елементи з палітри у звіт, прив’язуйте їх до джерел даних, перемикайтеся між дизайном/переглядом та експортуйте у PDF або Excel.",
6405
+ "tutorial.etlBuilder.intro.title": "Конструктор ETL",
6406
+ "tutorial.etlBuilder.intro.content": "З’єднайте джерела → перетворення → призначення в конвеєр, перемикайте подання, а потім запустіть його та збережіть конфігурацію.",
6407
+ "tutorial.videoEditorPro.intro.title": "Відеоредактор",
6408
+ "tutorial.videoEditorPro.intro.content": "Додавайте медіа на таймлайн, упорядковуйте та обрізайте кліпи, застосовуйте ефекти й переходи, а потім налаштуйте та запустіть експорт.",
6409
+ "tutorial.mlStudio.intro.title": "Студія ML",
6410
+ "tutorial.mlStudio.intro.content": "Проходьте по вкладках: готуйте набори даних, запускайте експерименти, порівнюйте та обирайте моделі, а потім розгортайте найкращу.",
6411
+ "tutorial.mathEditor.intro.title": "Математичний редактор",
6412
+ "tutorial.mathEditor.intro.content": "Пишіть рівняння у LaTeX або вставляйте символи з палітри; перемикайтеся на рукописне введення та переглядайте відрендерену формулу наживо.",
6413
+ "tutorial.dmxEditor.intro.title": "Редактор DMX",
6414
+ "tutorial.dmxEditor.intro.content": "Виберіть пристрій FTDI та порт, а потім задавайте значення кожного каналу DMX повзунками, щоб керувати освітлювальними приладами наживо.",
6415
+ "nav.help": "Довідка",
6416
+ "navShell.home.title": "Головна",
6417
+ "navShell.help.next": "Далі",
6418
+ "navShell.help.back": "Назад",
6419
+ "navShell.help.finish": "Завершити",
6420
+ "navShell.help.skip": "Пропустити",
6421
+ "navShell.help.stepOf": "з",
6422
+ "navShell.help.topNav.title": "Верхня навігація",
6423
+ "navShell.help.topNav.body": "Використовуйте верхню панель, щоб перемикати робочі простори, шукати, змінювати тему чи мову та відкривати сповіщення.",
6424
+ "navShell.help.sidebar.title": "Бічна панель",
6425
+ "navShell.help.sidebar.body": "Переглядайте доступні подання, згруповані за розділами. Виберіть подання, щоб відкрити його в новій вкладці.",
6426
+ "navShell.help.tabs.title": "Вкладки",
6427
+ "navShell.help.tabs.body": "Кожне відкрите подання живе в окремій вкладці. Закріплюйте часто використовувані та клацайте правою кнопкою для додаткових дій.",
6428
+ "navShell.help.content.title": "Робочий простір",
6429
+ "navShell.help.content.body": "Головна область показує активне подання. Перемикання вкладок або записів бічної панелі змінює вміст тут.",
6430
+ "navShell.home.subtitle": "Продовжте з того місця, де зупинилися.",
6431
+ "navShell.home.empty": "Відкрийте подання з бічної панелі або вкладок угорі, щоб заповнити робочий простір.",
6432
+ "navShell.home.greeting.morning": "Доброго ранку",
6433
+ "navShell.home.greeting.afternoon": "Доброго дня",
6434
+ "navShell.home.greeting.evening": "Доброго вечора",
6435
+ "navShell.home.greeting.night": "Вітаємо",
6436
+ "navShell.home.sections.openTabs": "Зараз відкрито",
6437
+ "navShell.home.sections.shortcuts": "Ваші ярлики",
6438
+ "navShell.home.sections.allViews": "Усі подання",
6439
+ "sidebar.menu.open": "Відкрити",
6440
+ "sidebar.menu.openNewTab": "Відкрити в новій вкладці",
6441
+ "sidebar.menu.openBrowserTab": "Відкрити в новій вкладці браузера",
6442
+ "sidebar.menu.pinFavorite": "Додати до обраного",
6443
+ "sidebar.menu.unpinFavorite": "Прибрати з обраного",
6444
+ "sidebar.menu.hide": "Сховати",
6445
+ "sidebar.menu.copyLink": "Скопіювати посилання",
6446
+ "sidebar.menu.pinSource": "Закріпити джерело",
6447
+ "sidebar.menu.unpinSource": "Відкріпити джерело",
6448
+ "sidebar.menu.hideSource": "Сховати джерело",
6449
+ "sidebar.prefs.general": "Загальні",
6450
+ "sidebar.prefs.display": "Відображення",
6451
+ "sidebar.prefs.order": "Порядок",
6452
+ "sidebar.prefs.hidden": "Приховані елементи",
6453
+ "sidebar.prefs.reset": "Скинути",
6454
+ "sidebar.prefs.general.title": "Загальні",
6455
+ "sidebar.prefs.general.desc": "Поведінка дерева бічної панелі та що робить лівий клік.",
6456
+ "sidebar.prefs.general.autoExpand": "Автоматично розгортати всі гілки",
6457
+ "sidebar.prefs.general.autoExpandHint": "Коли вимкнено, гілки спочатку згорнуті та запам’ятовують останній стан для сеансу.",
6458
+ "sidebar.prefs.general.leftClickBehavior": "Поведінка лівого кліку",
6459
+ "sidebar.prefs.general.focusExisting": "Перейти до наявної вкладки",
6460
+ "sidebar.prefs.general.openNew": "Завжди відкривати в новій вкладці",
6461
+ "sidebar.prefs.general.leftClickHint": "Правий клік → «Відкрити в новій вкладці» завжди доступний, незалежно від цього налаштування.",
6462
+ "sidebar.prefs.display.title": "Відображення",
6463
+ "sidebar.prefs.display.desc": "Які режими з’являються в смузі та наскільки глибоко сягає дерево в кожному режимі.",
6464
+ "sidebar.prefs.display.enableModeIcons": "Показувати іконки перемикача режимів",
6465
+ "sidebar.prefs.display.enabledModes": "Видимі режими",
6466
+ "sidebar.prefs.display.preferencesAlwaysOn": "«Налаштування» показуються завжди.",
6467
+ "sidebar.prefs.display.maxDepth": "Глибина дерева для кожного режиму",
6468
+ "sidebar.prefs.order.title": "Упорядкувати елементи",
6469
+ "sidebar.prefs.order.desc": "Перетягуйте елементи, щоб змінити порядок їх відображення у вибраному режимі.",
6470
+ "sidebar.prefs.order.pickMode": "Режим",
6471
+ "sidebar.prefs.order.visibilityHint": "Порядок застосовується до елементів верхнього рівня в кожній групі джерела. Згорніть заголовок джерела, щоб під час перевірки зміни бачити лише елементи верхнього рівня.",
6472
+ "sidebar.prefs.order.empty": "У цьому режимі немає елементів для впорядкування.",
6473
+ "sidebar.prefs.order.resetMode": "Скинути до типового порядку",
6474
+ "sidebar.prefs.hidden.title": "Приховані елементи",
6475
+ "sidebar.prefs.hidden.desc": "Елементи, які ви сховали з дерева. Відновіть їх, щоб повернути.",
6476
+ "sidebar.prefs.hidden.empty": "Поки нічого не приховано.",
6477
+ "sidebar.prefs.hidden.restore": "Відновити",
6478
+ "sidebar.prefs.reset.title": "Скинути",
6479
+ "sidebar.prefs.reset.desc": "Очистити всі налаштування та відновити початковий вигляд бічної панелі.",
6480
+ "sidebar.prefs.reset.button": "Скинути всі налаштування",
6481
+ "sidebar.prefs.reset.confirm": "Це зітре ваше обране, приховані елементи, власний порядок та всі інші налаштування бічної панелі. Цю дію не можна скасувати.",
6482
+ "sidebar.prefs.reset.confirmYes": "Так, скинути все",
6483
+ "sidebar.prefs.reset.cancel": "Скасувати",
6484
+ "noCode.title": "Студія No-Code",
6485
+ "noCode.description": "Створюйте застосунки візуально",
6486
+ "noCode.newProject": "Новий проєкт",
6487
+ "noCode.openProject": "Відкрити проєкт",
6488
+ "noCode.saveProject": "Зберегти проєкт",
6489
+ "noCode.exportProject": "Експортувати проєкт",
6490
+ "noCode.importProject": "Імпортувати проєкт",
6491
+ "noCode.projectName": "Назва проєкту",
6492
+ "noCode.projectSettings": "Налаштування проєкту",
6493
+ "noCode.recentProjects": "Останні проєкти",
6494
+ "noCode.templates": "Шаблони",
6495
+ "noCode.preview": "Перегляд",
6496
+ "noCode.codeView": "Перегляд коду",
6497
+ "noCode.splitView": "Розділений перегляд",
6498
+ "noCode.visualView": "Візуальний перегляд",
6499
+ "noCode.generate": "Згенерувати код",
6500
+ "noCode.deploy": "Розгорнути",
6501
+ "noCode.componentDesigner.title": "Дизайнер компонентів",
6502
+ "noCode.componentDesigner.newComponent": "Новий компонент",
6503
+ "noCode.componentDesigner.componentName": "Назва компонента",
6504
+ "noCode.componentDesigner.addProp": "Додати prop",
6505
+ "noCode.componentDesigner.editProp": "Редагувати prop",
6506
+ "noCode.componentDesigner.deleteProp": "Видалити prop",
6507
+ "noCode.componentDesigner.propName": "Назва prop",
6508
+ "noCode.componentDesigner.propType": "Тип prop",
6509
+ "noCode.componentDesigner.propRequired": "Обов’язкова",
6510
+ "noCode.componentDesigner.propDefault": "Значення за замовчуванням",
6511
+ "noCode.componentDesigner.addState": "Додати стан",
6512
+ "noCode.componentDesigner.stateName": "Назва стану",
6513
+ "noCode.componentDesigner.stateType": "Тип стану",
6514
+ "noCode.componentDesigner.stateDefault": "Початкове значення",
6515
+ "noCode.componentDesigner.addHook": "Додати hook",
6516
+ "noCode.componentDesigner.hooks": "Hooks",
6517
+ "noCode.componentDesigner.template": "Шаблон",
6518
+ "noCode.componentDesigner.styles": "Стилі",
6519
+ "noCode.componentDesigner.events": "Події",
6520
+ "noCode.componentDesigner.palette": "Палітра компонентів",
6521
+ "noCode.componentDesigner.dragDrop": "Перетягніть компоненти сюди",
6522
+ "noCode.pageBuilder.title": "Конструктор сторінок",
6523
+ "noCode.pageBuilder.newPage": "Нова сторінка",
6524
+ "noCode.pageBuilder.pageName": "Назва сторінки",
6525
+ "noCode.pageBuilder.pageRoute": "Шлях маршруту",
6526
+ "noCode.pageBuilder.addSection": "Додати розділ",
6527
+ "noCode.pageBuilder.editSection": "Редагувати розділ",
6528
+ "noCode.pageBuilder.deleteSection": "Видалити розділ",
6529
+ "noCode.pageBuilder.sectionLayout": "Макет розділу",
6530
+ "noCode.pageBuilder.columns": "Стовпці",
6531
+ "noCode.pageBuilder.responsive": "Адаптивний",
6532
+ "noCode.pageBuilder.mobile": "Мобільний",
6533
+ "noCode.pageBuilder.tablet": "Планшет",
6534
+ "noCode.pageBuilder.desktop": "Комп’ютер",
6535
+ "noCode.pageBuilder.showGrid": "Показати сітку",
6536
+ "noCode.pageBuilder.hideGrid": "Сховати сітку",
6537
+ "noCode.pageBuilder.metadata": "Метадані сторінки",
6538
+ "noCode.pageBuilder.seo": "Налаштування SEO",
6539
+ "noCode.stateDesigner.title": "Дизайнер стану",
6540
+ "noCode.stateDesigner.newStore": "Нове сховище",
6541
+ "noCode.stateDesigner.storeName": "Назва сховища",
6542
+ "noCode.stateDesigner.storeType": "Тип сховища",
6543
+ "noCode.stateDesigner.addState": "Додати поле стану",
6544
+ "noCode.stateDesigner.addAction": "Додати дію",
6545
+ "noCode.stateDesigner.editAction": "Редагувати дію",
6546
+ "noCode.stateDesigner.deleteAction": "Видалити дію",
6547
+ "noCode.stateDesigner.actionName": "Назва дії",
6548
+ "noCode.stateDesigner.actionParams": "Параметри",
6549
+ "noCode.stateDesigner.actionBody": "Тіло дії",
6550
+ "noCode.stateDesigner.asyncAction": "Асинхронна дія",
6551
+ "noCode.stateDesigner.addSelector": "Додати селектор",
6552
+ "noCode.stateDesigner.selectorName": "Назва селектора",
6553
+ "noCode.stateDesigner.selectorBody": "Логіка селектора",
6554
+ "noCode.stateDesigner.persistence": "Збереження",
6555
+ "noCode.stateDesigner.devtools": "DevTools",
6556
+ "noCode.apiFlow.title": "Дизайнер потоків API",
6557
+ "noCode.apiFlow.newEndpoint": "Новий endpoint",
6558
+ "noCode.apiFlow.endpointUrl": "URL endpoint-а",
6559
+ "noCode.apiFlow.method": "HTTP-метод",
6560
+ "noCode.apiFlow.headers": "Заголовки",
6561
+ "noCode.apiFlow.body": "Тіло запиту",
6562
+ "noCode.apiFlow.response": "Відповідь",
6563
+ "noCode.apiFlow.auth": "Автентифікація",
6564
+ "noCode.apiFlow.authType": "Тип автентифікації",
6565
+ "noCode.apiFlow.bearerToken": "Bearer-токен",
6566
+ "noCode.apiFlow.apiKey": "Ключ API",
6567
+ "noCode.apiFlow.testEndpoint": "Тестувати endpoint",
6568
+ "noCode.apiFlow.mockResponse": "Імітована відповідь",
6569
+ "noCode.apiFlow.errorHandling": "Обробка помилок",
6570
+ "noCode.apiFlow.retry": "Політика повторів",
6571
+ "noCode.apiFlow.cache": "Кешування",
6572
+ "noCode.dataMapper.title": "Маппер даних",
6573
+ "noCode.dataMapper.sourceSchema": "Схема джерела",
6574
+ "noCode.dataMapper.targetSchema": "Схема призначення",
6575
+ "noCode.dataMapper.addMapping": "Додати зіставлення",
6576
+ "noCode.dataMapper.editMapping": "Редагувати зіставлення",
6577
+ "noCode.dataMapper.deleteMapping": "Видалити зіставлення",
6578
+ "noCode.dataMapper.sourceField": "Поле джерела",
6579
+ "noCode.dataMapper.targetField": "Поле призначення",
6580
+ "noCode.dataMapper.transform": "Перетворення",
6581
+ "noCode.dataMapper.validation": "Перевірка",
6582
+ "noCode.dataMapper.testData": "Тестові дані",
6583
+ "noCode.dataMapper.preview": "Переглянути результат",
6584
+ "noCode.dataMapper.autoMap": "Автозіставлення",
6585
+ "noCode.eventOrchestrator.title": "Оркестратор подій",
6586
+ "noCode.eventOrchestrator.newFlow": "Новий потік подій",
6587
+ "noCode.eventOrchestrator.flowName": "Назва потоку",
6588
+ "noCode.eventOrchestrator.trigger": "Тригер",
6589
+ "noCode.eventOrchestrator.triggerType": "Тип тригера",
6590
+ "noCode.eventOrchestrator.addHandler": "Додати обробник",
6591
+ "noCode.eventOrchestrator.editHandler": "Редагувати обробник",
6592
+ "noCode.eventOrchestrator.deleteHandler": "Видалити обробник",
6593
+ "noCode.eventOrchestrator.handlerName": "Назва обробника",
6594
+ "noCode.eventOrchestrator.debounce": "Debounce",
6595
+ "noCode.eventOrchestrator.throttle": "Throttle",
6596
+ "noCode.eventOrchestrator.delay": "Затримка",
6597
+ "noCode.eventOrchestrator.condition": "Умова",
6598
+ "noCode.eventOrchestrator.chain": "Ланцюжок подій",
6599
+ "noCode.testBuilder.title": "Конструктор тестів",
6600
+ "noCode.testBuilder.newTest": "Новий тест",
6601
+ "noCode.testBuilder.testName": "Назва тесту",
6602
+ "noCode.testBuilder.testDescription": "Опис",
6603
+ "noCode.testBuilder.addScenario": "Додати сценарій",
6604
+ "noCode.testBuilder.editScenario": "Редагувати сценарій",
6605
+ "noCode.testBuilder.deleteScenario": "Видалити сценарій",
6606
+ "noCode.testBuilder.addAssertion": "Додати перевірку",
6607
+ "noCode.testBuilder.assertionType": "Тип перевірки",
6608
+ "noCode.testBuilder.expected": "Очікуване значення",
6609
+ "noCode.testBuilder.actual": "Фактичне значення",
6610
+ "noCode.testBuilder.mock": "Налаштування mock",
6611
+ "noCode.testBuilder.runTests": "Запустити тести",
6612
+ "noCode.testBuilder.testsPassed": "Тести пройдено",
6613
+ "noCode.testBuilder.testsFailed": "Тести не пройдено",
6614
+ "noCode.testBuilder.coverage": "Покриття",
6615
+ "noCode.testBuilder.accessibility": "Перевірка доступності",
6616
+ "noCode.codeTemplate.title": "Шаблони коду",
6617
+ "noCode.codeTemplate.newTemplate": "Новий шаблон",
6618
+ "noCode.codeTemplate.templateName": "Назва шаблону",
6619
+ "noCode.codeTemplate.templateEngine": "Рушій шаблонів",
6620
+ "noCode.codeTemplate.variables": "Змінні",
6621
+ "noCode.codeTemplate.addVariable": "Додати змінну",
6622
+ "noCode.codeTemplate.variableName": "Назва змінної",
6623
+ "noCode.codeTemplate.variableType": "Тип змінної",
6624
+ "noCode.codeTemplate.variableDefault": "Значення за замовчуванням",
6625
+ "noCode.codeTemplate.generateFiles": "Згенерувати файли",
6626
+ "noCode.codeTemplate.outputPath": "Шлях виводу",
6627
+ "noCode.codeTemplate.presets": "Пресети",
6628
+ "noCode.codeTemplate.presetReact": "Компонент React",
6629
+ "noCode.codeTemplate.presetNextPage": "Сторінка Next.js",
6630
+ "noCode.codeTemplate.presetHook": "Власний hook",
6631
+ "noCode.codeTemplate.presetStore": "Модуль сховища",
6632
+ "noCode.codePreview.title": "Перегляд коду",
6633
+ "noCode.codePreview.showDiff": "Показати відмінності",
6634
+ "noCode.codePreview.hideDiff": "Сховати відмінності",
6635
+ "noCode.codePreview.copyCode": "Скопіювати код",
6636
+ "noCode.codePreview.downloadCode": "Завантажити код",
6637
+ "noCode.codePreview.importCode": "Імпортувати код",
6638
+ "noCode.codePreview.language": "Мова",
6639
+ "noCode.codePreview.format": "Форматувати код",
6640
+ "noCode.codePreview.linesChanged": "Змінені рядки",
6641
+ "noCode.codePreview.noChanges": "Без змін",
6642
+ "vectorEditor.menu.file": "Файл",
6643
+ "vectorEditor.menu.edit": "Редагувати",
6644
+ "vectorEditor.menu.object": "Об’єкт",
6645
+ "vectorEditor.menu.path": "Контур",
6646
+ "vectorEditor.menu.view": "Вигляд",
6647
+ "vectorEditor.menu.newCanvas": "Нове полотно",
6648
+ "vectorEditor.menu.openSvg": "Відкрити SVG…",
6649
+ "vectorEditor.menu.pasteSvg": "Вставити SVG…",
6650
+ "vectorEditor.menu.exportSvg": "Експортувати SVG",
6651
+ "vectorEditor.menu.exportPng": "Експортувати PNG",
6652
+ "vectorEditor.menu.exportJpg": "Експортувати JPG",
6653
+ "vectorEditor.menu.exportWebp": "Експортувати WebP",
6654
+ "vectorEditor.menu.exportBmp": "Експортувати BMP",
6655
+ "vectorEditor.menu.saveToLibrary": "📦 Зберегти в бібліотеку",
6656
+ "vectorEditor.menu.exportIconSnippet": "📋 Експортувати фрагмент іконки",
6657
+ "vectorEditor.menu.exportIcon": "📋 Експортувати іконку",
6658
+ "vectorEditor.menu.undo": "Скасувати (Ctrl+Z)",
6659
+ "vectorEditor.menu.redo": "Повторити (Ctrl+Y)",
6660
+ "vectorEditor.menu.copy": "Копіювати (Ctrl+C)",
6661
+ "vectorEditor.menu.paste": "Вставити (Ctrl+V)",
6662
+ "vectorEditor.menu.duplicate": "Дублювати (Ctrl+D)",
6663
+ "vectorEditor.menu.delete": "Видалити (Del)",
6664
+ "vectorEditor.menu.bringToFront": "На передній план",
6665
+ "vectorEditor.menu.sendToBack": "На задній план",
6666
+ "vectorEditor.menu.flipH": "Віддзеркалити горизонтально",
6667
+ "vectorEditor.menu.flipV": "Віддзеркалити вертикально",
6668
+ "vectorEditor.menu.alignLeft": "Вирівняти ліворуч",
6669
+ "vectorEditor.menu.alignCenter": "Вирівняти по центру",
6670
+ "vectorEditor.menu.alignRight": "Вирівняти праворуч",
6671
+ "vectorEditor.menu.union": "Об’єднання (∪)",
6672
+ "vectorEditor.menu.subtract": "Віднімання (−)",
6673
+ "vectorEditor.menu.intersect": "Перетин (∩)",
6674
+ "vectorEditor.menu.exclude": "Виключення (⊕)",
6675
+ "vectorEditor.menu.outlineStroke": "Контур обведення",
6676
+ "vectorEditor.menu.snapToGrid": "Прив’язати до сітки",
6677
+ "vectorEditor.menu.snap": "Прив’язка",
6678
+ "vectorEditor.menu.secondShape": "2-га фігура",
6679
+ "vectorEditor.tabs.properties": "Властивості",
6680
+ "vectorEditor.tabs.layers": "Шари",
6681
+ "vectorEditor.tabs.library": "Бібліотека",
6682
+ "vectorEditor.tabs.timeline": "Таймлайн",
6683
+ "vectorEditor.timeline.preset": "Пресет",
6684
+ "vectorEditor.timeline.duration": "Тривалість (мс)",
6685
+ "vectorEditor.timeline.repeat": "Повтор",
6686
+ "vectorEditor.timeline.direction": "Напрямок",
6687
+ "vectorEditor.timeline.remove": "Видалити анімацію",
6688
+ "vectorEditor.timeline.play": "Відтворити",
6689
+ "vectorEditor.timeline.pause": "Пауза",
6690
+ "vectorEditor.timeline.stop": "Зупинити",
6691
+ "vectorEditor.timeline.copyCss": "Скопіювати CSS",
6692
+ "vectorEditor.timeline.keyframes": "Ключові кадри",
6693
+ "vectorEditor.timeline.addKeyframe": "+ Додати ключовий кадр",
6694
+ "vectorEditor.timeline.noSelection": "Виберіть фігуру для анімації.",
6695
+ "vectorEditor.timeline.animationTitle": "Анімація",
6696
+ "vectorEditor.timeline.playbackTitle": "Відтворення",
6697
+ "vectorEditor.timeline.attachHint": "Виберіть фігуру, щоб додати анімацію.",
6698
+ "vectorEditor.timeline.playLabel": "▶ Відтворити",
6699
+ "vectorEditor.timeline.pauseLabel": "⏸ Пауза",
6700
+ "vectorEditor.timeline.stopLabel": "⏹ Зупинити",
6701
+ "vectorEditor.timeline.copyCssKeyframes": "📋 Скопіювати CSS keyframes",
6702
+ "vectorEditor.timeline.tLabel": "t",
6703
+ "vectorEditor.layers.empty": "Поки немає шарів. Використовуйте інструменти для малювання або вставте з вкладки «Бібліотека».",
6704
+ "vectorEditor.layers.moveUp": "Підняти",
6705
+ "vectorEditor.layers.moveDown": "Опустити",
6706
+ "vectorEditor.library.passProp": "Передайте prop library у NiceVectorEditor, щоб заповнити цю вкладку іконками для вставлення.",
6707
+ "vectorEditor.statusBar.zoom": "Масштаб",
6708
+ "vectorEditor.statusBar.shapes": "фігур(и)",
6709
+ "vectorEditor.statusBar.selected": "Вибрано",
6710
+ "vectorEditor.statusBar.snap": "Прив’язка",
6711
+ "vectorEditor.library.empty": "У бібліотеці немає іконок.",
6712
+ "vectorEditor.snippet.title": "✅ Фрагмент іконки скопійовано в буфер обміну",
6713
+ "vectorEditor.snippet.pasteHint": "Вставити в",
6714
+ "vectorEditor.snippet.copyAgain": "Скопіювати ще раз",
6715
+ "vectorEditor.snippet.close": "Закрити",
6716
+ "vectorEditor.properties.appearance": "Вигляд",
6717
+ "vectorEditor.properties.fill": "Заливка",
6718
+ "vectorEditor.properties.solid": "Суцільний",
6719
+ "vectorEditor.properties.gradient": "Градієнт",
6720
+ "vectorEditor.properties.hideEditor": "▼ Сховати редактор",
6721
+ "vectorEditor.properties.editGradient": "► Редагувати градієнт",
6722
+ "vectorEditor.properties.type": "Тип",
6723
+ "vectorEditor.properties.linear": "Лінійний",
6724
+ "vectorEditor.properties.radial": "Радіальний",
6725
+ "vectorEditor.properties.angle": "Кут",
6726
+ "vectorEditor.properties.cx": "CX",
6727
+ "vectorEditor.properties.cy": "CY",
6728
+ "vectorEditor.properties.r": "R",
6729
+ "vectorEditor.properties.colorStops": "Точки кольору:",
6730
+ "vectorEditor.properties.addStop": "+ Додати точку",
6731
+ "vectorEditor.properties.removeStop": "- Видалити",
6732
+ "vectorEditor.properties.stroke": "Обведення",
6733
+ "vectorEditor.properties.width": "Товщина",
6734
+ "vectorEditor.properties.opacity": "Прозорість",
6735
+ "vectorEditor.properties.rotation": "Обертання",
6736
+ "vectorEditor.properties.toolOptions": "Параметри інструмента",
6737
+ "vectorEditor.properties.radius": "Радіус",
6738
+ "vectorEditor.properties.sides": "Сторони",
6739
+ "vectorEditor.properties.points": "Точки",
6740
+ "vectorEditor.properties.innerR": "Внутрішній R",
6741
+ "vectorEditor.properties.size": "Розмір",
6742
+ "vectorEditor.properties.font": "Шрифт",
6743
+ "vectorEditor.properties.grid": "Сітка",
6744
+ "vectorEditor.properties.transform": "Перетворення",
6745
+ "vectorEditor.properties.x": "X",
6746
+ "vectorEditor.properties.y": "Y",
6747
+ "vectorEditor.properties.w": "Ш",
6748
+ "vectorEditor.properties.h": "В",
6749
+ "vectorEditor.layers.title": "Шари",
6750
+ "vectorEditor.layers.show": "Показати",
6751
+ "vectorEditor.layers.hide": "Сховати",
6752
+ "vectorEditor.layers.lock": "Заблокувати",
6753
+ "vectorEditor.layers.unlock": "Розблокувати"
5046
6754
  }, Ie = {
5047
6755
  ok: "OK",
5048
6756
  cancel: "キャンセル",
@@ -5406,7 +7114,7 @@ const j = [
5406
7114
  "wm.minimizeAll": "すべて最小化",
5407
7115
  "wm.newWindow": "新しいウィンドウ",
5408
7116
  "wm.moveToFront": "最前面に移動"
5409
- }, We = {
7117
+ }, Ve = {
5410
7118
  ok: "확인",
5411
7119
  cancel: "취소",
5412
7120
  save: "저장",
@@ -5769,7 +7477,7 @@ const j = [
5769
7477
  "wm.minimizeAll": "모두 최소화",
5770
7478
  "wm.newWindow": "새 창",
5771
7479
  "wm.moveToFront": "맨 앞으로"
5772
- }, Ve = {
7480
+ }, He = {
5773
7481
  ok: "确定",
5774
7482
  cancel: "取消",
5775
7483
  save: "保存",
@@ -6132,7 +7840,7 @@ const j = [
6132
7840
  "wm.minimizeAll": "最小化全部",
6133
7841
  "wm.newWindow": "新建窗口",
6134
7842
  "wm.moveToFront": "置于最前"
6135
- }, Ue = {
7843
+ }, We = {
6136
7844
  ok: "حسناً",
6137
7845
  cancel: "إلغاء",
6138
7846
  save: "حفظ",
@@ -6495,7 +8203,7 @@ const j = [
6495
8203
  "wm.minimizeAll": "تصغير الكل",
6496
8204
  "wm.newWindow": "نافذة جديدة",
6497
8205
  "wm.moveToFront": "نقل إلى الأمام"
6498
- }, He = {
8206
+ }, qe = {
6499
8207
  ok: "ठीक है",
6500
8208
  cancel: "रद्द करें",
6501
8209
  save: "सहेजें",
@@ -6506,7 +8214,7 @@ const j = [
6506
8214
  error: "त्रुटि",
6507
8215
  success: "सफलता",
6508
8216
  search: "खोजें"
6509
- }, Ke = {
8217
+ }, Ue = {
6510
8218
  ok: "ঠিক আছে",
6511
8219
  cancel: "বাতিল",
6512
8220
  save: "সংরক্ষণ",
@@ -6517,7 +8225,7 @@ const j = [
6517
8225
  error: "ত্রুটি",
6518
8226
  success: "সফল",
6519
8227
  search: "অনুসন্ধান"
6520
- }, Ze = {
8228
+ }, Ke = {
6521
8229
  ok: "ตกลง",
6522
8230
  cancel: "ยกเลิก",
6523
8231
  save: "บันทึก",
@@ -6528,7 +8236,7 @@ const j = [
6528
8236
  error: "ข้อผิดพลาด",
6529
8237
  success: "สำเร็จ",
6530
8238
  search: "ค้นหา"
6531
- }, qe = {
8239
+ }, Ge = {
6532
8240
  ok: "OK",
6533
8241
  cancel: "Hủy",
6534
8242
  save: "Lưu",
@@ -6539,7 +8247,7 @@ const j = [
6539
8247
  error: "Lỗi",
6540
8248
  success: "Thành công",
6541
8249
  search: "Tìm kiếm"
6542
- }, Ge = {
8250
+ }, Ze = {
6543
8251
  ok: "OK",
6544
8252
  cancel: "Batal",
6545
8253
  save: "Simpan",
@@ -6572,7 +8280,7 @@ const j = [
6572
8280
  error: "Error",
6573
8281
  success: "Tagumpay",
6574
8282
  search: "Maghanap"
6575
- }, $e = {
8283
+ }, Xe = {
6576
8284
  ok: "OK",
6577
8285
  cancel: "Batal",
6578
8286
  save: "Simpan",
@@ -6583,37 +8291,37 @@ const j = [
6583
8291
  error: "Ralat",
6584
8292
  success: "Berjaya",
6585
8293
  search: "Cari"
6586
- }, k = {
6587
- en: ye,
6588
- pl: Ee,
6589
- de: Ce,
6590
- fr: Se,
6591
- es: ze,
8294
+ }, w = {
8295
+ en: Ee,
8296
+ pl: ye,
8297
+ de: ze,
8298
+ fr: Ce,
8299
+ es: Se,
6592
8300
  it: De,
6593
- pt: Ae,
6594
- nl: xe,
6595
- sv: Te,
6596
- no: Pe,
6597
- da: je,
6598
- fi: Ne,
8301
+ pt: je,
8302
+ nl: Ae,
8303
+ sv: Pe,
8304
+ no: xe,
8305
+ da: Te,
8306
+ fi: Be,
6599
8307
  cs: Fe,
6600
8308
  sk: Me,
6601
- hu: Oe,
8309
+ hu: Ne,
6602
8310
  ro: Re,
6603
8311
  bg: Le,
6604
- uk: Be,
8312
+ uk: Oe,
6605
8313
  ja: Ie,
6606
- ko: We,
6607
- zh: Ve,
6608
- ar: Ue,
6609
- hi: He,
6610
- bn: Ke,
6611
- th: Ze,
6612
- vi: qe,
6613
- id: Ge,
8314
+ ko: Ve,
8315
+ zh: He,
8316
+ ar: We,
8317
+ hi: qe,
8318
+ bn: Ue,
8319
+ th: Ke,
8320
+ vi: Ge,
8321
+ id: Ze,
6614
8322
  sw: Je,
6615
8323
  fil: Ye,
6616
- ms: $e
8324
+ ms: Xe
6617
8325
  }, Y = {
6618
8326
  save: "Zapisz",
6619
8327
  cancel: "Anuluj",
@@ -6638,7 +8346,7 @@ const j = [
6638
8346
  "form.invalidValue": "Proszę podać prawidłową wartość.",
6639
8347
  "auth.signIn": "Proszę się zalogować",
6640
8348
  "auth.signOut": "Proszę się wylogować"
6641
- }, $ = {
8349
+ }, X = {
6642
8350
  save: "Zapisz",
6643
8351
  cancel: "Anuluj",
6644
8352
  ok: "OK",
@@ -6662,62 +8370,62 @@ const j = [
6662
8370
  "form.invalidValue": "Wpisz prawidłową wartość.",
6663
8371
  "auth.signIn": "Zaloguj się",
6664
8372
  "auth.signOut": "Wyloguj się"
6665
- }, _e = {
6666
- "pl-PL": { formal: Y, informal: $ },
6667
- pl: { formal: Y, informal: $ }
8373
+ }, $e = {
8374
+ "pl-PL": { formal: Y, informal: X },
8375
+ pl: { formal: Y, informal: X }
6668
8376
  };
6669
- function qo(e) {
6670
- var o;
6671
- return { ...k.pl, ...((o = _e.pl) == null ? void 0 : o[e]) ?? {} };
8377
+ function Kt(e) {
8378
+ var t;
8379
+ return { ...w.pl, ...((t = $e.pl) == null ? void 0 : t[e]) ?? {} };
6672
8380
  }
6673
- const Qe = (e, o) => o, oe = I(Qe), Go = ({
8381
+ const _e = (e, t) => t, te = I(_e), Gt = ({
6674
8382
  t: e,
6675
- lang: o = "en",
8383
+ lang: t = "en",
6676
8384
  overrides: r,
6677
- children: t
8385
+ children: o
6678
8386
  }) => {
6679
- const a = b(() => {
8387
+ const i = b(() => {
6680
8388
  if (e)
6681
8389
  return e;
6682
- const n = k[o] ?? k.en, i = r ? { ...n, ...r } : n;
6683
- return (s, d) => i[s] ?? d;
6684
- }, [e, o, r]);
6685
- return /* @__PURE__ */ B(oe.Provider, { value: a, children: t });
8390
+ const a = w[t] ?? w.en, n = r ? { ...a, ...r } : a;
8391
+ return (s, l) => n[s] ?? l;
8392
+ }, [e, t, r]);
8393
+ return /* @__PURE__ */ O(te.Provider, { value: i, children: o });
6686
8394
  };
6687
- function Jo() {
6688
- return { t: N(oe) };
8395
+ function Zt() {
8396
+ return { t: B(te) };
6689
8397
  }
6690
- function Yo(e = "en", o) {
6691
- const r = k[e] ?? k.en, t = o ? { ...r, ...o } : r;
6692
- return (a, n) => t[a] ?? n;
8398
+ function Jt(e = "en", t) {
8399
+ const r = w[e] ?? w.en, o = t ? { ...r, ...t } : r;
8400
+ return (i, a) => o[i] ?? a;
6693
8401
  }
6694
- function $o(e, o = {}) {
6695
- let r = e.replace(/\{(\w+)\}/g, (t, a) => {
6696
- const n = o[a];
6697
- return n !== void 0 ? String(n) : t;
8402
+ function Yt(e, t = {}) {
8403
+ let r = e.replace(/\{(\w+)\}/g, (o, i) => {
8404
+ const a = t[i];
8405
+ return a !== void 0 ? String(a) : o;
6698
8406
  });
6699
8407
  return r = r.replace(
6700
8408
  /\{(\w+),\s*plural,\s*one\{([^}]+)\}\s*other\{([^}]+)\}\}/g,
6701
- (t, a, n, i) => {
6702
- const s = o[a];
6703
- return typeof s != "number" ? t : (s === 1 ? n : i).replace(/#/g, String(s));
8409
+ (o, i, a, n) => {
8410
+ const s = t[i];
8411
+ return typeof s != "number" ? o : (s === 1 ? a : n).replace(/#/g, String(s));
6704
8412
  }
6705
8413
  ), r;
6706
8414
  }
6707
- function Xe(e) {
6708
- return j.includes(e);
8415
+ function Qe(e) {
8416
+ return T.includes(e);
6709
8417
  }
6710
- function _o() {
6711
- var o;
8418
+ function Xt() {
8419
+ var t;
6712
8420
  if (typeof navigator > "u")
6713
8421
  return "en";
6714
- const e = (o = navigator.language) == null ? void 0 : o.split("-")[0];
6715
- return Xe(e) ? e : "en";
8422
+ const e = (t = navigator.language) == null ? void 0 : t.split("-")[0];
8423
+ return Qe(e) ? e : "en";
6716
8424
  }
6717
- function te(e, o) {
6718
- var n;
6719
- const r = Math.abs(e), t = Math.floor(r), a = e.toString().includes(".") && ((n = e.toString().split(".")[1]) == null ? void 0 : n.length) || 0;
6720
- switch (a > 0 && parseInt(e.toString().split(".")[1] || "0", 10), o) {
8425
+ function oe(e, t) {
8426
+ var a;
8427
+ const r = Math.abs(e), o = Math.floor(r), i = e.toString().includes(".") && ((a = e.toString().split(".")[1]) == null ? void 0 : a.length) || 0;
8428
+ switch (i > 0 && parseInt(e.toString().split(".")[1] || "0", 10), t) {
6721
8429
  // ── English-like (one/other) ───────────────────────────
6722
8430
  case "en":
6723
8431
  case "de":
@@ -6729,29 +8437,29 @@ function te(e, o) {
6729
8437
  case "it":
6730
8438
  case "es":
6731
8439
  case "pt":
6732
- return t === 1 && a === 0 ? "one" : "other";
8440
+ return o === 1 && i === 0 ? "one" : "other";
6733
8441
  // ── French (one/many/other) ────────────────────────────
6734
8442
  case "fr":
6735
- return t === 0 || t === 1 ? "one" : r >= 1e6 ? "many" : "other";
8443
+ return o === 0 || o === 1 ? "one" : r >= 1e6 ? "many" : "other";
6736
8444
  // ── Polish (Slavic: one/few/many/other) ────────────────
6737
8445
  case "pl":
6738
- return t === 1 && a === 0 ? "one" : a === 0 && t % 10 >= 2 && t % 10 <= 4 && !(t % 100 >= 12 && t % 100 <= 14) ? "few" : a === 0 && t !== 1 && (t % 10 === 0 || t % 10 === 1) || a === 0 && t % 10 >= 5 && t % 10 <= 9 || a === 0 && t % 100 >= 12 && t % 100 <= 14 ? "many" : "other";
8446
+ return o === 1 && i === 0 ? "one" : i === 0 && o % 10 >= 2 && o % 10 <= 4 && !(o % 100 >= 12 && o % 100 <= 14) ? "few" : i === 0 && o !== 1 && (o % 10 === 0 || o % 10 === 1) || i === 0 && o % 10 >= 5 && o % 10 <= 9 || i === 0 && o % 100 >= 12 && o % 100 <= 14 ? "many" : "other";
6739
8447
  // ── Ukrainian (Slavic: one/few/many/other) ─────────────
6740
8448
  case "uk":
6741
- return a === 0 && t % 10 === 1 && t % 100 !== 11 ? "one" : a === 0 && t % 10 >= 2 && t % 10 <= 4 && !(t % 100 >= 12 && t % 100 <= 14) ? "few" : a === 0 && t % 10 === 0 || a === 0 && t % 10 >= 5 && t % 10 <= 9 || a === 0 && t % 100 >= 11 && t % 100 <= 14 ? "many" : "other";
8449
+ return i === 0 && o % 10 === 1 && o % 100 !== 11 ? "one" : i === 0 && o % 10 >= 2 && o % 10 <= 4 && !(o % 100 >= 12 && o % 100 <= 14) ? "few" : i === 0 && o % 10 === 0 || i === 0 && o % 10 >= 5 && o % 10 <= 9 || i === 0 && o % 100 >= 11 && o % 100 <= 14 ? "many" : "other";
6742
8450
  // ── Bulgarian (one/other) ──────────────────────────────
6743
8451
  case "bg":
6744
8452
  return e === 1 ? "one" : "other";
6745
8453
  // ── Czech/Slovak (Slavic: one/few/many/other) ──────────
6746
8454
  case "cs":
6747
8455
  case "sk":
6748
- return t === 1 && a === 0 ? "one" : t >= 2 && t <= 4 && a === 0 ? "few" : a !== 0 ? "many" : "other";
8456
+ return o === 1 && i === 0 ? "one" : o >= 2 && o <= 4 && i === 0 ? "few" : i !== 0 ? "many" : "other";
6749
8457
  // ── Hungarian (one/other) ──────────────────────────────
6750
8458
  case "hu":
6751
8459
  return e === 1 ? "one" : "other";
6752
8460
  // ── Romanian (one/few/other) ───────────────────────────
6753
8461
  case "ro":
6754
- return t === 1 && a === 0 ? "one" : a !== 0 || e === 0 || e % 100 >= 2 && e % 100 <= 19 ? "few" : "other";
8462
+ return o === 1 && i === 0 ? "one" : i !== 0 || e === 0 || e % 100 >= 2 && e % 100 <= 19 ? "few" : "other";
6755
8463
  // ── Japanese/Korean/Chinese (other only) ─────────────────
6756
8464
  case "ja":
6757
8465
  case "ko":
@@ -6765,20 +8473,20 @@ function te(e, o) {
6765
8473
  return "one";
6766
8474
  if (e === 2)
6767
8475
  return "two";
6768
- const i = e % 100;
6769
- return i >= 3 && i <= 10 ? "few" : i >= 11 && i <= 99 ? "many" : "other";
8476
+ const n = e % 100;
8477
+ return n >= 3 && n <= 10 ? "few" : n >= 11 && n <= 99 ? "many" : "other";
6770
8478
  }
6771
8479
  default:
6772
8480
  if (typeof Intl < "u" && typeof Intl.PluralRules == "function")
6773
8481
  try {
6774
- return new Intl.PluralRules(o).select(e);
8482
+ return new Intl.PluralRules(t).select(e);
6775
8483
  } catch {
6776
8484
  }
6777
- return t === 1 && a === 0 ? "one" : "other";
8485
+ return o === 1 && i === 0 ? "one" : "other";
6778
8486
  }
6779
8487
  }
6780
- function re(e, o) {
6781
- switch (o) {
8488
+ function re(e, t) {
8489
+ switch (t) {
6782
8490
  // ── English ────────────────────────────────────────────
6783
8491
  case "en":
6784
8492
  return e % 10 === 1 && e % 100 !== 11 ? "one" : e % 10 === 2 && e % 100 !== 12 ? "two" : e % 10 === 3 && e % 100 !== 13 ? "few" : "other";
@@ -6805,149 +8513,149 @@ function re(e, o) {
6805
8513
  default:
6806
8514
  if (typeof Intl < "u" && typeof Intl.PluralRules == "function")
6807
8515
  try {
6808
- return new Intl.PluralRules(o, { type: "ordinal" }).select(e);
8516
+ return new Intl.PluralRules(t, { type: "ordinal" }).select(e);
6809
8517
  } catch {
6810
8518
  }
6811
8519
  return "other";
6812
8520
  }
6813
8521
  }
6814
- function eo(e) {
6815
- var a;
8522
+ function et(e) {
8523
+ var i;
6816
8524
  if (e = e.trim(), !e.includes(","))
6817
8525
  return { type: "simple", name: e };
6818
- const o = e.split(",").map((n) => n.trim()), r = o[0], t = (a = o[1]) == null ? void 0 : a.toLowerCase();
6819
- if (!t || !r)
8526
+ const t = e.split(",").map((a) => a.trim()), r = t[0], o = (i = t[1]) == null ? void 0 : i.toLowerCase();
8527
+ if (!o || !r)
6820
8528
  return null;
6821
- if (t === "number")
6822
- return { type: "number", name: r, style: o[2] };
6823
- if (t === "date" || t === "time")
6824
- return { type: t, name: r, style: o[2] || "medium" };
6825
- if (t === "plural" || t === "select" || t === "selectordinal") {
6826
- const n = o.slice(2).join(",").trim(), i = {}, s = /(=?\w+)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
6827
- let d;
6828
- for (; (d = s.exec(n)) !== null; )
6829
- i[d[1]] = d[2];
6830
- return { type: t, name: r, options: i };
8529
+ if (o === "number")
8530
+ return { type: "number", name: r, style: t[2] };
8531
+ if (o === "date" || o === "time")
8532
+ return { type: o, name: r, style: t[2] || "medium" };
8533
+ if (o === "plural" || o === "select" || o === "selectordinal") {
8534
+ const a = t.slice(2).join(",").trim(), n = {}, s = /(=?\w+)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
8535
+ let l;
8536
+ for (; (l = s.exec(a)) !== null; )
8537
+ n[l[1]] = l[2];
8538
+ return { type: o, name: r, options: n };
6831
8539
  }
6832
8540
  return { type: "simple", name: r };
6833
8541
  }
6834
- function oo(e, o, r) {
6835
- const t = {};
8542
+ function tt(e, t, r) {
8543
+ const o = {};
6836
8544
  switch (r) {
6837
8545
  case "currency":
6838
- t.style = "currency", t.currency = "USD";
8546
+ o.style = "currency", o.currency = "USD";
6839
8547
  break;
6840
8548
  case "percent":
6841
- t.style = "percent";
8549
+ o.style = "percent";
6842
8550
  break;
6843
8551
  case "integer":
6844
- t.maximumFractionDigits = 0;
8552
+ o.maximumFractionDigits = 0;
6845
8553
  break;
6846
8554
  }
6847
- return new Intl.NumberFormat(o, t).format(e);
8555
+ return new Intl.NumberFormat(t, o).format(e);
6848
8556
  }
6849
- function to(e, o, r) {
6850
- const t = e instanceof Date ? e : new Date(e);
6851
- let a;
8557
+ function ot(e, t, r) {
8558
+ const o = e instanceof Date ? e : new Date(e);
8559
+ let i;
6852
8560
  switch (r) {
6853
8561
  case "short":
6854
- a = { dateStyle: "short" };
8562
+ i = { dateStyle: "short" };
6855
8563
  break;
6856
8564
  case "long":
6857
- a = { dateStyle: "long" };
8565
+ i = { dateStyle: "long" };
6858
8566
  break;
6859
8567
  case "full":
6860
- a = { dateStyle: "full" };
8568
+ i = { dateStyle: "full" };
6861
8569
  break;
6862
8570
  case "medium":
6863
8571
  default:
6864
- a = { dateStyle: "medium" };
8572
+ i = { dateStyle: "medium" };
6865
8573
  break;
6866
8574
  }
6867
- return new Intl.DateTimeFormat(o, a).format(t);
8575
+ return new Intl.DateTimeFormat(t, i).format(o);
6868
8576
  }
6869
- function ro(e, o, r) {
6870
- const t = e instanceof Date ? e : new Date(e);
6871
- let a;
8577
+ function rt(e, t, r) {
8578
+ const o = e instanceof Date ? e : new Date(e);
8579
+ let i;
6872
8580
  switch (r) {
6873
8581
  case "short":
6874
- a = { timeStyle: "short" };
8582
+ i = { timeStyle: "short" };
6875
8583
  break;
6876
8584
  case "long":
6877
- a = { timeStyle: "long" };
8585
+ i = { timeStyle: "long" };
6878
8586
  break;
6879
8587
  case "full":
6880
- a = { timeStyle: "full" };
8588
+ i = { timeStyle: "full" };
6881
8589
  break;
6882
8590
  case "medium":
6883
8591
  default:
6884
- a = { timeStyle: "medium" };
8592
+ i = { timeStyle: "medium" };
6885
8593
  break;
6886
8594
  }
6887
- return new Intl.DateTimeFormat(o, a).format(t);
8595
+ return new Intl.DateTimeFormat(t, i).format(o);
6888
8596
  }
6889
- function V(e, o, r) {
8597
+ function H(e, t, r) {
6890
8598
  return e.replace(/#/g, String(r));
6891
8599
  }
6892
- function ao(e, o = {}, r = {}) {
6893
- const t = r.lang || "en", a = r.locale || t, n = /\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
6894
- return e.replace(n, (i, s) => {
6895
- const d = eo(s);
6896
- if (!d)
6897
- return i;
6898
- const l = o[d.name];
6899
- if (l === void 0)
6900
- return i;
6901
- switch (d.type) {
8600
+ function it(e, t = {}, r = {}) {
8601
+ const o = r.lang || "en", i = r.locale || o, a = /\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
8602
+ return e.replace(a, (n, s) => {
8603
+ const l = et(s);
8604
+ if (!l)
8605
+ return n;
8606
+ const d = t[l.name];
8607
+ if (d === void 0)
8608
+ return n;
8609
+ switch (l.type) {
6902
8610
  case "simple":
6903
- return String(l);
8611
+ return String(d);
6904
8612
  case "number":
6905
- return typeof l != "number" ? i : oo(l, a, d.style);
8613
+ return typeof d != "number" ? n : tt(d, i, l.style);
6906
8614
  case "date":
6907
- return to(l, a, d.style);
8615
+ return ot(d, i, l.style);
6908
8616
  case "time":
6909
- return ro(l, a, d.style);
8617
+ return rt(d, i, l.style);
6910
8618
  case "plural": {
6911
- if (typeof l != "number" || !d.options)
6912
- return i;
6913
- const p = te(l, t), f = `=${l}`, u = d.options[f] ?? d.options[p] ?? d.options.other ?? "";
6914
- return V(u, d.name, l);
8619
+ if (typeof d != "number" || !l.options)
8620
+ return n;
8621
+ const u = oe(d, o), v = `=${d}`, p = l.options[v] ?? l.options[u] ?? l.options.other ?? "";
8622
+ return H(p, l.name, d);
6915
8623
  }
6916
8624
  case "selectordinal": {
6917
- if (typeof l != "number" || !d.options)
6918
- return i;
6919
- const p = re(l, t), f = d.options[p] ?? d.options.other ?? "";
6920
- return V(f, d.name, l);
8625
+ if (typeof d != "number" || !l.options)
8626
+ return n;
8627
+ const u = re(d, o), v = l.options[u] ?? l.options.other ?? "";
8628
+ return H(v, l.name, d);
6921
8629
  }
6922
8630
  case "select": {
6923
- if (!d.options)
6924
- return i;
6925
- const p = d.options[String(l)] ?? d.options.other ?? "";
6926
- return V(p, d.name, l);
8631
+ if (!l.options)
8632
+ return n;
8633
+ const u = l.options[String(d)] ?? l.options.other ?? "";
8634
+ return H(u, l.name, d);
6927
8635
  }
6928
8636
  default:
6929
- return i;
8637
+ return n;
6930
8638
  }
6931
8639
  });
6932
8640
  }
6933
- function Qo(e, o = "en") {
6934
- return function(t, a, n) {
6935
- const i = e[t] ?? a;
6936
- return n ? ao(i, n, { lang: o }) : i;
8641
+ function $t(e, t = "en") {
8642
+ return function(o, i, a) {
8643
+ const n = e[o] ?? i;
8644
+ return a ? it(n, a, { lang: t }) : n;
6937
8645
  };
6938
8646
  }
6939
- function Xo(e, o, r = "en") {
6940
- const t = te(e, r);
6941
- return (o[t] ?? o.other).replace(/#/g, String(e));
8647
+ function _t(e, t, r = "en") {
8648
+ const o = oe(e, r);
8649
+ return (t[o] ?? t.other).replace(/#/g, String(e));
6942
8650
  }
6943
- function et(e, o, r = "en") {
6944
- const t = re(e, r);
6945
- return (o[t] ?? o.other).replace(/#/g, String(e));
8651
+ function Qt(e, t, r = "en") {
8652
+ const o = re(e, r);
8653
+ return (t[o] ?? t.other).replace(/#/g, String(e));
6946
8654
  }
6947
- function ot(e, o) {
6948
- return o[e] ?? o.other;
8655
+ function eo(e, t) {
8656
+ return t[e] ?? t.other;
6949
8657
  }
6950
- const no = [
8658
+ const at = [
6951
8659
  "ar",
6952
8660
  // Arabic
6953
8661
  "he",
@@ -6961,29 +8669,29 @@ const no = [
6961
8669
  "ps"
6962
8670
  // Pashto
6963
8671
  ];
6964
- function ae(e) {
6965
- return no.includes(e);
8672
+ function ie(e) {
8673
+ return at.includes(e);
6966
8674
  }
6967
- function io(e) {
6968
- return ae(e) ? "rtl" : "ltr";
8675
+ function nt(e) {
8676
+ return ie(e) ? "rtl" : "ltr";
6969
8677
  }
6970
- function so(e) {
8678
+ function st(e) {
6971
8679
  if (typeof document > "u")
6972
8680
  return;
6973
- const o = io(e);
6974
- document.documentElement.setAttribute("dir", o), document.documentElement.setAttribute("lang", e);
8681
+ const t = nt(e);
8682
+ document.documentElement.setAttribute("dir", t), document.documentElement.setAttribute("lang", e);
6975
8683
  }
6976
- function tt() {
8684
+ function to() {
6977
8685
  return typeof document > "u" ? "ltr" : document.documentElement.getAttribute("dir") || "ltr";
6978
8686
  }
6979
- function lo(e, o) {
6980
- return o ? e.rtl : e.ltr;
8687
+ function lt(e, t) {
8688
+ return t ? e.rtl : e.ltr;
6981
8689
  }
6982
- function rt(e) {
8690
+ function oo(e) {
6983
8691
  return e === "left" ? "right" : "left";
6984
8692
  }
6985
- function co(e, o) {
6986
- return o && {
8693
+ function dt(e, t) {
8694
+ return t && {
6987
8695
  left: "right",
6988
8696
  right: "left",
6989
8697
  start: "end",
@@ -6992,7 +8700,7 @@ function co(e, o) {
6992
8700
  "flex-end": "flex-start"
6993
8701
  }[e] || e;
6994
8702
  }
6995
- function po(e) {
8703
+ function ct(e) {
6996
8704
  return {
6997
8705
  // Margins
6998
8706
  "margin-left": "margin-inline-start",
@@ -7022,39 +8730,39 @@ function po(e) {
7022
8730
  "text-align: right": "text-align: end"
7023
8731
  }[e] || e;
7024
8732
  }
7025
- const q = I({
8733
+ const G = I({
7026
8734
  dir: "ltr",
7027
8735
  isRTL: !1,
7028
8736
  flip: (e) => e,
7029
8737
  value: (e) => e.ltr
7030
- }), at = ({
8738
+ }), ro = ({
7031
8739
  lang: e,
7032
- autoSetDocument: o = !0,
8740
+ autoSetDocument: t = !0,
7033
8741
  children: r
7034
8742
  }) => {
7035
- const t = ae(e), a = t ? "rtl" : "ltr";
8743
+ const o = ie(e), i = o ? "rtl" : "ltr";
7036
8744
  L(() => {
7037
- o && so(e);
7038
- }, [e, o]);
7039
- const n = b(
8745
+ t && st(e);
8746
+ }, [e, t]);
8747
+ const a = b(
7040
8748
  () => ({
7041
- dir: a,
7042
- isRTL: t,
7043
- flip: (i) => co(i, t),
7044
- value: (i) => lo(i, t)
8749
+ dir: i,
8750
+ isRTL: o,
8751
+ flip: (n) => dt(n, o),
8752
+ value: (n) => lt(n, o)
7045
8753
  }),
7046
- [a, t]
8754
+ [i, o]
7047
8755
  );
7048
- return /* @__PURE__ */ B(q.Provider, { value: n, children: r });
8756
+ return /* @__PURE__ */ O(G.Provider, { value: a, children: r });
7049
8757
  };
7050
- function nt() {
7051
- return N(q);
8758
+ function io() {
8759
+ return B(G);
7052
8760
  }
7053
- function it() {
7054
- return N(q).isRTL;
8761
+ function ao() {
8762
+ return B(G).isRTL;
7055
8763
  }
7056
- function st(e) {
7057
- const o = [], r = [
8764
+ function no(e) {
8765
+ const t = [], r = [
7058
8766
  "left",
7059
8767
  "right",
7060
8768
  "margin-left",
@@ -7064,11 +8772,11 @@ function st(e) {
7064
8772
  "border-left",
7065
8773
  "border-right"
7066
8774
  ];
7067
- for (const [t, a] of Object.entries(e))
7068
- r.includes(t) && o.push(`Use logical property instead of '${t}' → '${po(t)}'`), t === "text-align" && (a === "left" || a === "right") && o.push(`Use 'text-align: start/end' instead of 'text-align: ${a}'`), t === "float" && (a === "left" || a === "right") && o.push(`Use flexbox or grid instead of 'float: ${a}' for RTL support`);
7069
- return o;
8775
+ for (const [o, i] of Object.entries(e))
8776
+ r.includes(o) && t.push(`Use logical property instead of '${o}' → '${ct(o)}'`), o === "text-align" && (i === "left" || i === "right") && t.push(`Use 'text-align: start/end' instead of 'text-align: ${i}'`), o === "float" && (i === "left" || i === "right") && t.push(`Use flexbox or grid instead of 'float: ${i}' for RTL support`);
8777
+ return t;
7070
8778
  }
7071
- const U = {
8779
+ const W = {
7072
8780
  // Direction multiplier: 1 for LTR, -1 for RTL
7073
8781
  dirMultiplier: "--nice-dir-multiplier",
7074
8782
  // Inline start (left in LTR, right in RTL)
@@ -7076,41 +8784,41 @@ const U = {
7076
8784
  // Inline end (right in LTR, left in RTL)
7077
8785
  inlineEnd: "--nice-inline-end"
7078
8786
  };
7079
- function dt(e) {
8787
+ function so(e) {
7080
8788
  return {
7081
- [U.dirMultiplier]: e ? "-1" : "1",
7082
- [U.inlineStart]: e ? "right" : "left",
7083
- [U.inlineEnd]: e ? "left" : "right"
8789
+ [W.dirMultiplier]: e ? "-1" : "1",
8790
+ [W.inlineStart]: e ? "right" : "left",
8791
+ [W.inlineEnd]: e ? "left" : "right"
7084
8792
  };
7085
8793
  }
7086
- function lt() {
7087
- return Object.keys(k.en);
8794
+ function lo() {
8795
+ return Object.keys(w.en);
7088
8796
  }
7089
- function uo(e) {
8797
+ function ut(e) {
7090
8798
  if (e === "en")
7091
8799
  return [];
7092
- const o = k.en, r = k[e], t = [];
7093
- for (const [a, n] of Object.entries(o))
7094
- r[a] || t.push({ key: a, englishValue: n });
7095
- return t;
8800
+ const t = w.en, r = w[e], o = [];
8801
+ for (const [i, a] of Object.entries(t))
8802
+ r[i] || o.push({ key: i, englishValue: a });
8803
+ return o;
7096
8804
  }
7097
- function mo(e) {
7098
- const o = Object.keys(k.en).length, r = Object.keys(k[e]).length, t = o - r, a = Math.round(r / o * 100);
8805
+ function pt(e) {
8806
+ const t = Object.keys(w.en).length, r = Object.keys(w[e]).length, o = t - r, i = Math.round(r / t * 100);
7099
8807
  return {
7100
8808
  lang: e,
7101
- totalKeys: o,
8809
+ totalKeys: t,
7102
8810
  translatedKeys: r,
7103
- missingKeys: t,
7104
- coverage: a
8811
+ missingKeys: o,
8812
+ coverage: i
7105
8813
  };
7106
8814
  }
7107
- function go() {
7108
- return j.map((e) => mo(e));
8815
+ function mt() {
8816
+ return T.map((e) => pt(e));
7109
8817
  }
7110
- function ct(e, o) {
7111
- const r = o.map((t) => {
7112
- const a = t.translated.replace(/'/g, "\\'");
7113
- return ` '${t.key}': '${a}',`;
8818
+ function co(e, t) {
8819
+ const r = t.map((o) => {
8820
+ const i = o.translated.replace(/'/g, "\\'");
8821
+ return ` '${o.key}': '${i}',`;
7114
8822
  });
7115
8823
  return `// Auto-translated additions for ${e} (review before merging)
7116
8824
  // Generated on ${(/* @__PURE__ */ new Date()).toISOString()}
@@ -7119,9 +8827,9 @@ ${r.join(`
7119
8827
  `)}
7120
8828
  }`;
7121
8829
  }
7122
- function pt() {
7123
- const e = go();
7124
- let o = `# Translation Coverage Report
8830
+ function uo() {
8831
+ const e = mt();
8832
+ let t = `# Translation Coverage Report
7125
8833
 
7126
8834
  Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
7127
8835
 
@@ -7131,28 +8839,28 @@ Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
7131
8839
  |----------|------------|---------|----------|
7132
8840
  `;
7133
8841
  for (const r of e) {
7134
- const t = "█".repeat(Math.floor(r.coverage / 10)) + "░".repeat(10 - Math.floor(r.coverage / 10));
7135
- o += `| ${r.lang} | ${r.translatedKeys} | ${r.missingKeys} | ${t} ${r.coverage}% |
8842
+ const o = "█".repeat(Math.floor(r.coverage / 10)) + "░".repeat(10 - Math.floor(r.coverage / 10));
8843
+ t += `| ${r.lang} | ${r.translatedKeys} | ${r.missingKeys} | ${o} ${r.coverage}% |
7136
8844
  `;
7137
8845
  }
7138
- o += `
8846
+ t += `
7139
8847
  ## Languages with Missing Translations
7140
8848
 
7141
8849
  `;
7142
- for (const r of e.filter((t) => t.missingKeys > 0)) {
7143
- o += `### ${r.lang.toUpperCase()} (${r.coverage}% complete)
8850
+ for (const r of e.filter((o) => o.missingKeys > 0)) {
8851
+ t += `### ${r.lang.toUpperCase()} (${r.coverage}% complete)
7144
8852
 
7145
8853
  `;
7146
- const t = uo(r.lang);
7147
- o += `Missing ${t.length} keys:
8854
+ const o = ut(r.lang);
8855
+ t += `Missing ${o.length} keys:
7148
8856
 
7149
- `, o += "```\n", o += t.slice(0, 10).map((a) => a.key).join(`
7150
- `), t.length > 10 && (o += `
7151
- ... and ${t.length - 10} more`), o += "\n```\n\n";
8857
+ `, t += "```\n", t += o.slice(0, 10).map((i) => i.key).join(`
8858
+ `), o.length > 10 && (t += `
8859
+ ... and ${o.length - 10} more`), t += "\n```\n\n";
7152
8860
  }
7153
- return o;
8861
+ return t;
7154
8862
  }
7155
- const ho = {
8863
+ const gt = {
7156
8864
  en: "en-US",
7157
8865
  pl: "pl-PL",
7158
8866
  de: "de-DE",
@@ -7185,56 +8893,56 @@ const ho = {
7185
8893
  ms: "ms-MY"
7186
8894
  };
7187
8895
  function D(e) {
7188
- return ho[e] ?? "en-US";
8896
+ return gt[e] ?? "en-US";
7189
8897
  }
7190
- function fo(e, o = "medium") {
7191
- const r = D(e), t = new Intl.DateTimeFormat(r, { dateStyle: o });
8898
+ function ht(e, t = "medium") {
8899
+ const r = D(e), o = new Intl.DateTimeFormat(r, { dateStyle: t });
7192
8900
  return {
7193
- format: (a) => t.format(a instanceof Date ? a : new Date(a)),
7194
- formatRange: (a, n) => {
7195
- const i = a instanceof Date ? a : new Date(a), s = n instanceof Date ? n : new Date(n);
7196
- return t.formatRange(i, s);
8901
+ format: (i) => o.format(i instanceof Date ? i : new Date(i)),
8902
+ formatRange: (i, a) => {
8903
+ const n = i instanceof Date ? i : new Date(i), s = a instanceof Date ? a : new Date(a);
8904
+ return o.formatRange(n, s);
7197
8905
  },
7198
- formatRelative: (a) => wo(a instanceof Date ? a : new Date(a), r)
8906
+ formatRelative: (i) => wt(i instanceof Date ? i : new Date(i), r)
7199
8907
  };
7200
8908
  }
7201
- function ut(e, o = "medium") {
7202
- return b(() => fo(e, o), [e, o]);
8909
+ function po(e, t = "medium") {
8910
+ return b(() => ht(e, t), [e, t]);
7203
8911
  }
7204
- function vo(e, o = "short") {
7205
- const r = D(e), t = new Intl.DateTimeFormat(r, { timeStyle: o });
8912
+ function vt(e, t = "short") {
8913
+ const r = D(e), o = new Intl.DateTimeFormat(r, { timeStyle: t });
7206
8914
  return {
7207
- format: (a) => t.format(a instanceof Date ? a : new Date(a))
8915
+ format: (i) => o.format(i instanceof Date ? i : new Date(i))
7208
8916
  };
7209
8917
  }
7210
- function mt(e, o = "short") {
7211
- return b(() => vo(e, o), [e, o]);
8918
+ function mo(e, t = "short") {
8919
+ return b(() => vt(e, t), [e, t]);
7212
8920
  }
7213
- function bo(e) {
7214
- const o = D(e);
8921
+ function ft(e) {
8922
+ const t = D(e);
7215
8923
  return {
7216
- format: (r) => new Intl.NumberFormat(o).format(r),
7217
- formatCompact: (r) => new Intl.NumberFormat(o, { notation: "compact" }).format(r),
7218
- formatPercent: (r) => new Intl.NumberFormat(o, { style: "percent", maximumFractionDigits: 1 }).format(r)
8924
+ format: (r) => new Intl.NumberFormat(t).format(r),
8925
+ formatCompact: (r) => new Intl.NumberFormat(t, { notation: "compact" }).format(r),
8926
+ formatPercent: (r) => new Intl.NumberFormat(t, { style: "percent", maximumFractionDigits: 1 }).format(r)
7219
8927
  };
7220
8928
  }
7221
- function gt(e) {
7222
- return b(() => bo(e), [e]);
8929
+ function go(e) {
8930
+ return b(() => ft(e), [e]);
7223
8931
  }
7224
- function ko(e, o = "USD") {
7225
- const r = D(e), t = new Intl.NumberFormat(r, { style: "currency", currency: o });
8932
+ function bt(e, t = "USD") {
8933
+ const r = D(e), o = new Intl.NumberFormat(r, { style: "currency", currency: t });
7226
8934
  return {
7227
- format: (a) => t.format(a)
8935
+ format: (i) => o.format(i)
7228
8936
  };
7229
8937
  }
7230
- function ht(e, o = "USD") {
7231
- return b(() => ko(e, o), [e, o]);
8938
+ function ho(e, t = "USD") {
8939
+ return b(() => bt(e, t), [e, t]);
7232
8940
  }
7233
- function wo(e, o) {
7234
- const r = Date.now(), t = e.getTime() - r, a = Math.abs(t), n = new Intl.RelativeTimeFormat(o, { numeric: "auto" });
7235
- return a < 6e4 ? n.format(Math.round(t / 1e3), "second") : a < 36e5 ? n.format(Math.round(t / 6e4), "minute") : a < 864e5 ? n.format(Math.round(t / 36e5), "hour") : a < 2592e6 ? n.format(Math.round(t / 864e5), "day") : a < 31536e6 ? n.format(Math.round(t / 2592e6), "month") : n.format(Math.round(t / 31536e6), "year");
8941
+ function wt(e, t) {
8942
+ const r = Date.now(), o = e.getTime() - r, i = Math.abs(o), a = new Intl.RelativeTimeFormat(t, { numeric: "auto" });
8943
+ return i < 6e4 ? a.format(Math.round(o / 1e3), "second") : i < 36e5 ? a.format(Math.round(o / 6e4), "minute") : i < 864e5 ? a.format(Math.round(o / 36e5), "hour") : i < 2592e6 ? a.format(Math.round(o / 864e5), "day") : i < 31536e6 ? a.format(Math.round(o / 2592e6), "month") : a.format(Math.round(o / 31536e6), "year");
7236
8944
  }
7237
- const ne = [
8945
+ const ae = [
7238
8946
  {
7239
8947
  en: "Save",
7240
8948
  translations: {
@@ -7386,54 +9094,54 @@ const ne = [
7386
9094
  }
7387
9095
  }
7388
9096
  ];
7389
- function yo(e, o) {
7390
- const r = ne.find((t) => t.en.toLowerCase() === e.toLowerCase());
7391
- return r == null ? void 0 : r.translations[o];
9097
+ function kt(e, t) {
9098
+ const r = ae.find((o) => o.en.toLowerCase() === e.toLowerCase());
9099
+ return r == null ? void 0 : r.translations[t];
7392
9100
  }
7393
- function ft(e, o, r = 0.8) {
7394
- const t = k.en, a = k[o], n = e.toLowerCase().trim();
7395
- let i;
7396
- for (const [s, d] of Object.entries(t)) {
7397
- const l = a[s];
7398
- if (!l)
9101
+ function vo(e, t, r = 0.8) {
9102
+ const o = w.en, i = w[t], a = e.toLowerCase().trim();
9103
+ let n;
9104
+ for (const [s, l] of Object.entries(o)) {
9105
+ const d = i[s];
9106
+ if (!d)
7399
9107
  continue;
7400
- const p = Eo(n, d.toLowerCase().trim());
7401
- p >= r && (!i || p > i.similarity) && (i = { key: s, english: d, translated: l, similarity: p });
9108
+ const u = Et(a, l.toLowerCase().trim());
9109
+ u >= r && (!n || u > n.similarity) && (n = { key: s, english: l, translated: d, similarity: u });
7402
9110
  }
7403
- return i;
9111
+ return n;
7404
9112
  }
7405
- function vt(e) {
7406
- return ne.filter((o) => o.translations[e] != null).map((o) => ({
7407
- en: o.en,
7408
- translation: o.translations[e]
9113
+ function fo(e) {
9114
+ return ae.filter((t) => t.translations[e] != null).map((t) => ({
9115
+ en: t.en,
9116
+ translation: t.translations[e]
7409
9117
  }));
7410
9118
  }
7411
- function bt(e) {
7412
- const o = k[e], r = k.en, t = [];
7413
- for (const [a, n] of Object.entries(r)) {
7414
- const i = yo(n, e), s = o[a];
7415
- i && s && s !== i && t.push({ key: a, currentTranslation: s, glossaryTranslation: i });
9119
+ function bo(e) {
9120
+ const t = w[e], r = w.en, o = [];
9121
+ for (const [i, a] of Object.entries(r)) {
9122
+ const n = kt(a, e), s = t[i];
9123
+ n && s && s !== n && o.push({ key: i, currentTranslation: s, glossaryTranslation: n });
7416
9124
  }
7417
- return t;
9125
+ return o;
7418
9126
  }
7419
- function _(e) {
7420
- const o = /* @__PURE__ */ new Set();
9127
+ function $(e) {
9128
+ const t = /* @__PURE__ */ new Set();
7421
9129
  for (let r = 0; r < e.length - 1; r++)
7422
- o.add(e.substring(r, r + 2));
7423
- return o;
9130
+ t.add(e.substring(r, r + 2));
9131
+ return t;
7424
9132
  }
7425
- function Eo(e, o) {
7426
- if (e === o)
9133
+ function Et(e, t) {
9134
+ if (e === t)
7427
9135
  return 1;
7428
- if (e.length < 2 || o.length < 2)
9136
+ if (e.length < 2 || t.length < 2)
7429
9137
  return 0;
7430
- const r = _(e), t = _(o);
7431
- let a = 0;
7432
- for (const n of r)
7433
- t.has(n) && a++;
7434
- return 2 * a / (r.size + t.size);
9138
+ const r = $(e), o = $(t);
9139
+ let i = 0;
9140
+ for (const a of r)
9141
+ o.has(a) && i++;
9142
+ return 2 * i / (r.size + o.size);
7435
9143
  }
7436
- const ie = {
9144
+ const ne = {
7437
9145
  UTC: ["UTC", "Etc/UTC", "Etc/GMT"],
7438
9146
  NorthAmerica: [
7439
9147
  "America/New_York",
@@ -7494,124 +9202,124 @@ const ie = {
7494
9202
  "Pacific/Fiji"
7495
9203
  ]
7496
9204
  };
7497
- function G() {
9205
+ function Z() {
7498
9206
  try {
7499
9207
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
7500
9208
  } catch {
7501
9209
  return "UTC";
7502
9210
  }
7503
9211
  }
7504
- function kt(e) {
9212
+ function wo(e) {
7505
9213
  try {
7506
9214
  return new Intl.DateTimeFormat("en", { timeZone: e }), !0;
7507
9215
  } catch {
7508
9216
  return !1;
7509
9217
  }
7510
9218
  }
7511
- function F(e, o = "en", r = /* @__PURE__ */ new Date()) {
7512
- var w, M;
7513
- const t = D(o), a = new Intl.DateTimeFormat(t, {
9219
+ function F(e, t = "en", r = /* @__PURE__ */ new Date()) {
9220
+ var k, M;
9221
+ const o = D(t), i = new Intl.DateTimeFormat(o, {
7514
9222
  timeZone: e,
7515
9223
  timeZoneName: "long"
7516
- }), n = new Intl.DateTimeFormat(t, {
9224
+ }), a = new Intl.DateTimeFormat(o, {
7517
9225
  timeZone: e,
7518
9226
  timeZoneName: "short"
7519
- }), i = a.formatToParts(r), s = n.formatToParts(r), d = ((w = i.find((x) => x.type === "timeZoneName")) == null ? void 0 : w.value) || e, l = ((M = s.find((x) => x.type === "timeZoneName")) == null ? void 0 : M.value) || e, p = new Date(r.toLocaleString("en-US", { timeZone: "UTC" })), f = new Date(r.toLocaleString("en-US", { timeZone: e })), u = Math.round((f.getTime() - p.getTime()) / 6e4), m = new Date(r.getFullYear(), 0, 1), v = new Date(r.getFullYear(), 6, 1), g = K(e, m), E = K(e, v), C = K(e, r), y = Math.min(g, E), A = C !== y && g !== E;
9227
+ }), n = i.formatToParts(r), s = a.formatToParts(r), l = ((k = n.find((A) => A.type === "timeZoneName")) == null ? void 0 : k.value) || e, d = ((M = s.find((A) => A.type === "timeZoneName")) == null ? void 0 : M.value) || e, u = new Date(r.toLocaleString("en-US", { timeZone: "UTC" })), v = new Date(r.toLocaleString("en-US", { timeZone: e })), p = Math.round((v.getTime() - u.getTime()) / 6e4), m = new Date(r.getFullYear(), 0, 1), f = new Date(r.getFullYear(), 6, 1), g = U(e, m), y = U(e, f), z = U(e, r), E = Math.min(g, y), j = z !== E && g !== y;
7520
9228
  return {
7521
9229
  id: e,
7522
- displayName: d,
7523
- shortName: l,
7524
- offsetMinutes: u,
7525
- offsetString: Do(u),
7526
- isDST: A
9230
+ displayName: l,
9231
+ shortName: d,
9232
+ offsetMinutes: p,
9233
+ offsetString: St(p),
9234
+ isDST: j
7527
9235
  };
7528
9236
  }
7529
- function wt(e = "en", o = /* @__PURE__ */ new Date()) {
7530
- return Object.values(ie).flat().map((t) => F(t, e, o));
9237
+ function ko(e = "en", t = /* @__PURE__ */ new Date()) {
9238
+ return Object.values(ne).flat().map((o) => F(o, e, t));
7531
9239
  }
7532
- function yt(e = "en", o = /* @__PURE__ */ new Date()) {
9240
+ function Eo(e = "en", t = /* @__PURE__ */ new Date()) {
7533
9241
  const r = {};
7534
- for (const [t, a] of Object.entries(ie))
7535
- r[t] = a.map((n) => F(n, e, o));
9242
+ for (const [o, i] of Object.entries(ne))
9243
+ r[o] = i.map((a) => F(a, e, t));
7536
9244
  return r;
7537
9245
  }
7538
- function se(e, o, r) {
7539
- const t = e.toLocaleString("en-US", { timeZone: o }), a = new Date(t), n = e.toLocaleString("en-US", { timeZone: r }), i = new Date(n), s = a.getTime() - i.getTime();
9246
+ function se(e, t, r) {
9247
+ const o = e.toLocaleString("en-US", { timeZone: t }), i = new Date(o), a = e.toLocaleString("en-US", { timeZone: r }), n = new Date(a), s = i.getTime() - n.getTime();
7540
9248
  return new Date(e.getTime() + s);
7541
9249
  }
7542
- function Co(e, o) {
7543
- const r = o || G();
9250
+ function yt(e, t) {
9251
+ const r = t || Z();
7544
9252
  return se(e, r, "UTC");
7545
9253
  }
7546
- function So(e, o) {
7547
- const r = o || G();
9254
+ function zt(e, t) {
9255
+ const r = t || Z();
7548
9256
  return se(e, "UTC", r);
7549
9257
  }
7550
- function zo(e, o, r = {}) {
7551
- const t = D(e), { dateStyle: a = "medium", timeStyle: n = "short", nameStyle: i = "short" } = r, s = new Intl.DateTimeFormat(t, {
7552
- timeZone: o,
7553
- dateStyle: a,
7554
- timeStyle: n
7555
- }), d = new Intl.DateTimeFormat(t, {
7556
- timeZone: o,
7557
- dateStyle: a,
7558
- timeStyle: n,
7559
- timeZoneName: i
7560
- }), l = new Intl.DateTimeFormat(t, {
7561
- timeZone: o,
9258
+ function Ct(e, t, r = {}) {
9259
+ const o = D(e), { dateStyle: i = "medium", timeStyle: a = "short", nameStyle: n = "short" } = r, s = new Intl.DateTimeFormat(o, {
9260
+ timeZone: t,
9261
+ dateStyle: i,
9262
+ timeStyle: a
9263
+ }), l = new Intl.DateTimeFormat(o, {
9264
+ timeZone: t,
9265
+ dateStyle: i,
9266
+ timeStyle: a,
9267
+ timeZoneName: n
9268
+ }), d = new Intl.DateTimeFormat(o, {
9269
+ timeZone: t,
7562
9270
  timeZoneName: "short"
7563
9271
  });
7564
9272
  return {
7565
- format: (p) => s.format(p),
7566
- formatWithZone: (p) => d.format(p),
7567
- getOffset: (p) => F(o, e, p).offsetString,
7568
- getAbbreviation: (p) => {
7569
- var u;
7570
- return ((u = l.formatToParts(p).find((m) => m.type === "timeZoneName")) == null ? void 0 : u.value) || "";
9273
+ format: (u) => s.format(u),
9274
+ formatWithZone: (u) => l.format(u),
9275
+ getOffset: (u) => F(t, e, u).offsetString,
9276
+ getAbbreviation: (u) => {
9277
+ var p;
9278
+ return ((p = d.formatToParts(u).find((m) => m.type === "timeZoneName")) == null ? void 0 : p.value) || "";
7571
9279
  }
7572
9280
  };
7573
9281
  }
7574
- function H(e, o = /* @__PURE__ */ new Date()) {
7575
- return F(e, "en", o).isDST;
9282
+ function q(e, t = /* @__PURE__ */ new Date()) {
9283
+ return F(e, "en", t).isDST;
7576
9284
  }
7577
- function Et(e, o = /* @__PURE__ */ new Date()) {
7578
- const r = H(e, o), t = new Date(o), a = new Date(o);
7579
- for (a.setFullYear(a.getFullYear() + 1); t < a; )
7580
- if (t.setDate(t.getDate() + 1), H(e, t) !== r) {
7581
- t.setDate(t.getDate() - 1);
7582
- const n = new Date(t);
7583
- n.setHours(0, 0, 0, 0);
7584
- const i = new Date(t);
7585
- for (i.setDate(i.getDate() + 2); i.getTime() - n.getTime() > 6e4; ) {
7586
- const s = new Date((n.getTime() + i.getTime()) / 2);
7587
- H(e, s) === r ? n.setTime(s.getTime()) : i.setTime(s.getTime());
9285
+ function yo(e, t = /* @__PURE__ */ new Date()) {
9286
+ const r = q(e, t), o = new Date(t), i = new Date(t);
9287
+ for (i.setFullYear(i.getFullYear() + 1); o < i; )
9288
+ if (o.setDate(o.getDate() + 1), q(e, o) !== r) {
9289
+ o.setDate(o.getDate() - 1);
9290
+ const a = new Date(o);
9291
+ a.setHours(0, 0, 0, 0);
9292
+ const n = new Date(o);
9293
+ for (n.setDate(n.getDate() + 2); n.getTime() - a.getTime() > 6e4; ) {
9294
+ const s = new Date((a.getTime() + n.getTime()) / 2);
9295
+ q(e, s) === r ? a.setTime(s.getTime()) : n.setTime(s.getTime());
7588
9296
  }
7589
- return i;
9297
+ return n;
7590
9298
  }
7591
9299
  return null;
7592
9300
  }
7593
- function Ct(e, o, r) {
7594
- const [t] = P(() => G()), a = o || t, n = b(() => zo(e, a, r), [e, a, r]), i = b(() => F(a, e), [a, e]);
9301
+ function zo(e, t, r) {
9302
+ const [o] = x(() => Z()), i = t || o, a = b(() => Ct(e, i, r), [e, i, r]), n = b(() => F(i, e), [i, e]);
7595
9303
  return {
7596
- timezone: a,
7597
- info: i,
7598
- format: n.format,
7599
- formatWithZone: n.formatWithZone,
7600
- getOffset: n.getOffset,
7601
- getAbbreviation: n.getAbbreviation,
7602
- toUTC: (s) => Co(s, a),
7603
- fromUTC: (s) => So(s, a)
9304
+ timezone: i,
9305
+ info: n,
9306
+ format: a.format,
9307
+ formatWithZone: a.formatWithZone,
9308
+ getOffset: a.getOffset,
9309
+ getAbbreviation: a.getAbbreviation,
9310
+ toUTC: (s) => yt(s, i),
9311
+ fromUTC: (s) => zt(s, i)
7604
9312
  };
7605
9313
  }
7606
- function K(e, o) {
7607
- const r = o.toLocaleString("en-US", { timeZone: "UTC" }), t = o.toLocaleString("en-US", { timeZone: e }), a = new Date(r), n = new Date(t);
7608
- return Math.round((n.getTime() - a.getTime()) / 6e4);
9314
+ function U(e, t) {
9315
+ const r = t.toLocaleString("en-US", { timeZone: "UTC" }), o = t.toLocaleString("en-US", { timeZone: e }), i = new Date(r), a = new Date(o);
9316
+ return Math.round((a.getTime() - i.getTime()) / 6e4);
7609
9317
  }
7610
- function Do(e) {
7611
- const o = e >= 0 ? "+" : "-", r = Math.abs(e), t = Math.floor(r / 60), a = r % 60;
7612
- return `${o}${t.toString().padStart(2, "0")}:${a.toString().padStart(2, "0")}`;
9318
+ function St(e) {
9319
+ const t = e >= 0 ? "+" : "-", r = Math.abs(e), o = Math.floor(r / 60), i = r % 60;
9320
+ return `${t}${o.toString().padStart(2, "0")}:${i.toString().padStart(2, "0")}`;
7613
9321
  }
7614
- const W = {
9322
+ const V = {
7615
9323
  gregory: {
7616
9324
  id: "gregory",
7617
9325
  displayName: "Gregorian",
@@ -7745,7 +9453,7 @@ const W = {
7745
9453
  isLunar: !1,
7746
9454
  associatedLanguages: ["zh"]
7747
9455
  }
7748
- }, de = {
9456
+ }, le = {
7749
9457
  en: "gregory",
7750
9458
  pl: "gregory",
7751
9459
  de: "gregory",
@@ -7777,70 +9485,70 @@ const W = {
7777
9485
  fil: "gregory",
7778
9486
  ms: "gregory"
7779
9487
  };
7780
- function le(e, o = "gregory", r = {}) {
7781
- const t = D(e), { dateStyle: a = "medium", showEra: n = !1, showWeekday: i = !1 } = r, s = {
7782
- calendar: o,
7783
- dateStyle: a
9488
+ function de(e, t = "gregory", r = {}) {
9489
+ const o = D(e), { dateStyle: i = "medium", showEra: a = !1, showWeekday: n = !1 } = r, s = {
9490
+ calendar: t,
9491
+ dateStyle: i
7784
9492
  };
7785
- i && (delete s.dateStyle, s.weekday = "long", s.year = "numeric", s.month = "long", s.day = "numeric");
7786
- const d = new Intl.DateTimeFormat(t, s), l = {
7787
- calendar: o,
9493
+ n && (delete s.dateStyle, s.weekday = "long", s.year = "numeric", s.month = "long", s.day = "numeric");
9494
+ const l = new Intl.DateTimeFormat(o, s), d = {
9495
+ calendar: t,
7788
9496
  year: "numeric",
7789
9497
  month: "long",
7790
9498
  day: "numeric",
7791
9499
  era: "long"
7792
- }, p = new Intl.DateTimeFormat(t, l), f = new Intl.DateTimeFormat(t, { calendar: o, month: "long" }), u = new Intl.DateTimeFormat(t, { calendar: o, weekday: "long" });
9500
+ }, u = new Intl.DateTimeFormat(o, d), v = new Intl.DateTimeFormat(o, { calendar: t, month: "long" }), p = new Intl.DateTimeFormat(o, { calendar: t, weekday: "long" });
7793
9501
  return {
7794
- format: (m) => d.format(m),
7795
- formatWithEra: (m) => p.format(m),
7796
- getMonthName: (m) => f.format(m),
9502
+ format: (m) => l.format(m),
9503
+ formatWithEra: (m) => u.format(m),
9504
+ getMonthName: (m) => v.format(m),
7797
9505
  getMonthNames: () => {
7798
- const m = [], v = new Date(2024, 0, 15);
9506
+ const m = [], f = new Date(2024, 0, 15);
7799
9507
  for (let g = 0; g < 12; g++)
7800
- v.setMonth(g), m.push(f.format(v));
9508
+ f.setMonth(g), m.push(v.format(f));
7801
9509
  return m;
7802
9510
  },
7803
- getWeekdayName: (m) => u.format(m),
9511
+ getWeekdayName: (m) => p.format(m),
7804
9512
  getWeekdayNames: () => {
7805
- const m = [], v = new Date(2024, 0, 7);
9513
+ const m = [], f = new Date(2024, 0, 7);
7806
9514
  for (let g = 0; g < 7; g++)
7807
- v.setDate(7 + g), m.push(u.format(v));
9515
+ f.setDate(7 + g), m.push(p.format(f));
7808
9516
  return m;
7809
9517
  },
7810
9518
  parseParts: (m) => {
7811
- var E, C, y, A;
7812
- const g = new Intl.DateTimeFormat(t, {
7813
- calendar: o,
9519
+ var y, z, E, j;
9520
+ const g = new Intl.DateTimeFormat(o, {
9521
+ calendar: t,
7814
9522
  year: "numeric",
7815
9523
  month: "numeric",
7816
9524
  day: "numeric",
7817
9525
  era: "short"
7818
9526
  }).formatToParts(m);
7819
9527
  return {
7820
- calendar: o,
7821
- year: parseInt(((E = g.find((w) => w.type === "year")) == null ? void 0 : E.value) || "0", 10),
7822
- month: parseInt(((C = g.find((w) => w.type === "month")) == null ? void 0 : C.value) || "0", 10),
7823
- day: parseInt(((y = g.find((w) => w.type === "day")) == null ? void 0 : y.value) || "0", 10),
7824
- era: (A = g.find((w) => w.type === "era")) == null ? void 0 : A.value,
9528
+ calendar: t,
9529
+ year: parseInt(((y = g.find((k) => k.type === "year")) == null ? void 0 : y.value) || "0", 10),
9530
+ month: parseInt(((z = g.find((k) => k.type === "month")) == null ? void 0 : z.value) || "0", 10),
9531
+ day: parseInt(((E = g.find((k) => k.type === "day")) == null ? void 0 : E.value) || "0", 10),
9532
+ era: (j = g.find((k) => k.type === "era")) == null ? void 0 : j.value,
7825
9533
  gregorianDate: m
7826
9534
  };
7827
9535
  },
7828
9536
  getEraName: (m) => {
7829
- var E;
7830
- return (E = new Intl.DateTimeFormat(t, {
7831
- calendar: o,
9537
+ var y;
9538
+ return (y = new Intl.DateTimeFormat(o, {
9539
+ calendar: t,
7832
9540
  era: "long"
7833
- }).formatToParts(m).find((C) => C.type === "era")) == null ? void 0 : E.value;
9541
+ }).formatToParts(m).find((z) => z.type === "era")) == null ? void 0 : y.value;
7834
9542
  }
7835
9543
  };
7836
9544
  }
7837
- function ce(e, o, r = "en") {
7838
- return le(r, o).parseParts(e);
9545
+ function ce(e, t, r = "en") {
9546
+ return de(r, t).parseParts(e);
7839
9547
  }
7840
- function Ao(e, o = "en") {
7841
- return ce(/* @__PURE__ */ new Date(), e, o);
9548
+ function Dt(e, t = "en") {
9549
+ return ce(/* @__PURE__ */ new Date(), e, t);
7842
9550
  }
7843
- const St = [
9551
+ const Co = [
7844
9552
  "Muharram",
7845
9553
  "Safar",
7846
9554
  "Rabi' al-Awwal",
@@ -7854,13 +9562,13 @@ const St = [
7854
9562
  "Dhu al-Qi'dah",
7855
9563
  "Dhu al-Hijjah"
7856
9564
  ];
7857
- function xo(e) {
9565
+ function jt(e) {
7858
9566
  return (11 * e + 14) % 30 < 11;
7859
9567
  }
7860
- function zt(e, o) {
7861
- return o === 12 ? xo(e) ? 30 : 29 : o % 2 === 1 ? 30 : 29;
9568
+ function So(e, t) {
9569
+ return t === 12 ? jt(e) ? 30 : 29 : t % 2 === 1 ? 30 : 29;
7862
9570
  }
7863
- const Dt = [
9571
+ const Do = [
7864
9572
  "Tishrei",
7865
9573
  "Cheshvan",
7866
9574
  "Kislev",
@@ -7873,7 +9581,7 @@ const Dt = [
7873
9581
  "Tammuz",
7874
9582
  "Av",
7875
9583
  "Elul"
7876
- ], At = [
9584
+ ], jo = [
7877
9585
  "Tishrei",
7878
9586
  "Cheshvan",
7879
9587
  "Kislev",
@@ -7888,27 +9596,27 @@ const Dt = [
7888
9596
  "Av",
7889
9597
  "Elul"
7890
9598
  ];
7891
- function xt(e) {
9599
+ function Ao(e) {
7892
9600
  return (7 * e + 1) % 19 < 7;
7893
9601
  }
7894
- const Z = [
9602
+ const K = [
7895
9603
  { name: "Meiji", kanji: "明治", startDate: new Date(1868, 9, 23) },
7896
9604
  { name: "Taisho", kanji: "大正", startDate: new Date(1912, 6, 30) },
7897
9605
  { name: "Showa", kanji: "昭和", startDate: new Date(1926, 11, 25) },
7898
9606
  { name: "Heisei", kanji: "平成", startDate: new Date(1989, 0, 8) },
7899
9607
  { name: "Reiwa", kanji: "令和", startDate: new Date(2019, 4, 1) }
7900
9608
  ];
7901
- function To(e) {
7902
- for (let o = Z.length - 1; o >= 0; o--)
7903
- if (e >= Z[o].startDate)
7904
- return Z[o];
9609
+ function At(e) {
9610
+ for (let t = K.length - 1; t >= 0; t--)
9611
+ if (e >= K[t].startDate)
9612
+ return K[t];
7905
9613
  return null;
7906
9614
  }
7907
- function Tt(e) {
7908
- const o = To(e);
7909
- return o ? e.getFullYear() - o.startDate.getFullYear() + 1 : null;
9615
+ function Po(e) {
9616
+ const t = At(e);
9617
+ return t ? e.getFullYear() - t.startDate.getFullYear() + 1 : null;
7910
9618
  }
7911
- const Pt = [
9619
+ const xo = [
7912
9620
  "Farvardin",
7913
9621
  "Ordibehesht",
7914
9622
  "Khordad",
@@ -7922,10 +9630,10 @@ const Pt = [
7922
9630
  "Bahman",
7923
9631
  "Esfand"
7924
9632
  ];
7925
- function jt(e) {
9633
+ function To(e) {
7926
9634
  return ((e - 474) % 2820 + 2820) % 2820 * 682 % 2816 < 682;
7927
9635
  }
7928
- const Po = [
9636
+ const Pt = [
7929
9637
  "Rat",
7930
9638
  "Ox",
7931
9639
  "Tiger",
@@ -7939,10 +9647,10 @@ const Po = [
7939
9647
  "Dog",
7940
9648
  "Pig"
7941
9649
  ];
7942
- function Nt(e) {
7943
- return Po[(e - 4) % 12];
9650
+ function Bo(e) {
9651
+ return Pt[(e - 4) % 12];
7944
9652
  }
7945
- const jo = [
9653
+ const xt = [
7946
9654
  "Jia",
7947
9655
  "Yi",
7948
9656
  "Bing",
@@ -7954,45 +9662,45 @@ const jo = [
7954
9662
  "Ren",
7955
9663
  "Gui"
7956
9664
  ];
7957
- function Ft(e) {
7958
- return jo[(e - 4) % 10];
9665
+ function Fo(e) {
9666
+ return xt[(e - 4) % 10];
7959
9667
  }
7960
- function Mt(e, o, r) {
7961
- const t = o || de[e], a = b(
7962
- () => le(e, t, r),
7963
- [e, t, r]
7964
- ), n = b(() => W[t], [t]), i = b(() => Ao(t, e), [t, e]);
9668
+ function Mo(e, t, r) {
9669
+ const o = t || le[e], i = b(
9670
+ () => de(e, o, r),
9671
+ [e, o, r]
9672
+ ), a = b(() => V[o], [o]), n = b(() => Dt(o, e), [o, e]);
7965
9673
  return {
7966
- calendar: t,
7967
- info: n,
7968
- current: i,
7969
- format: a.format,
7970
- formatWithEra: a.formatWithEra,
7971
- getMonthName: a.getMonthName,
7972
- getMonthNames: a.getMonthNames,
7973
- getWeekdayName: a.getWeekdayName,
7974
- getWeekdayNames: a.getWeekdayNames,
7975
- parseParts: a.parseParts,
7976
- getEraName: a.getEraName,
7977
- toCalendar: (s) => ce(s, t, e)
9674
+ calendar: o,
9675
+ info: a,
9676
+ current: n,
9677
+ format: i.format,
9678
+ formatWithEra: i.formatWithEra,
9679
+ getMonthName: i.getMonthName,
9680
+ getMonthNames: i.getMonthNames,
9681
+ getWeekdayName: i.getWeekdayName,
9682
+ getWeekdayNames: i.getWeekdayNames,
9683
+ parseParts: i.parseParts,
9684
+ getEraName: i.getEraName,
9685
+ toCalendar: (s) => ce(s, o, e)
7978
9686
  };
7979
9687
  }
7980
- function Ot() {
7981
- return Object.keys(W);
9688
+ function No() {
9689
+ return Object.keys(V);
7982
9690
  }
7983
- function Rt(e, o = "en") {
7984
- const r = { ...W[e] };
9691
+ function Ro(e, t = "en") {
9692
+ const r = { ...V[e] };
7985
9693
  try {
7986
- const t = D(o), n = new Intl.DisplayNames([t], { type: "calendar" }).of(e);
7987
- n && (r.displayName = n);
9694
+ const o = D(t), a = new Intl.DisplayNames([o], { type: "calendar" }).of(e);
9695
+ a && (r.displayName = a);
7988
9696
  } catch {
7989
9697
  }
7990
9698
  return r;
7991
9699
  }
7992
- function Lt(e) {
7993
- const o = de[e], r = /* @__PURE__ */ new Set([o]);
7994
- for (const [t, a] of Object.entries(W))
7995
- a.associatedLanguages.includes(e) && r.add(t);
9700
+ function Lo(e) {
9701
+ const t = le[e], r = /* @__PURE__ */ new Set([t]);
9702
+ for (const [o, i] of Object.entries(V))
9703
+ i.associatedLanguages.includes(e) && r.add(o);
7996
9704
  return r.add("gregory"), Array.from(r);
7997
9705
  }
7998
9706
  const J = {
@@ -8050,7 +9758,7 @@ const J = {
8050
9758
  X: "Χ",
8051
9759
  Y: "Ÿ",
8052
9760
  Z: "Ž"
8053
- }, No = {
9761
+ }, Tt = {
8054
9762
  ...J,
8055
9763
  // Additional mappings
8056
9764
  a: "ặ",
@@ -8065,64 +9773,64 @@ const J = {
8065
9773
  O: "Ộ",
8066
9774
  U: "Ụ",
8067
9775
  Y: "Ỵ"
8068
- }, Fo = "‪", Mo = "‫", Q = "‬", Oo = "~∼~≈";
8069
- function Bt(e, o = !1) {
8070
- const r = o ? No : J;
8071
- return e.split("").map((t) => r[t] || t).join("");
9776
+ }, Bt = "‪", Ft = "‫", _ = "‬", Mt = "~∼~≈";
9777
+ function Oo(e, t = !1) {
9778
+ const r = t ? Tt : J;
9779
+ return e.split("").map((o) => r[o] || o).join("");
8072
9780
  }
8073
- function It(e, o = "[", r = "]") {
8074
- return `${o}${e}${r}`;
9781
+ function Io(e, t = "[", r = "]") {
9782
+ return `${t}${e}${r}`;
8075
9783
  }
8076
- function Ro(e, o = 0.3, r = !1) {
9784
+ function Nt(e, t = 0.3, r = !1) {
8077
9785
  if (r)
8078
- return Lo(e);
8079
- const a = Math.ceil(e.length * (1 + o)) - e.length;
8080
- if (a <= 0)
9786
+ return Rt(e);
9787
+ const i = Math.ceil(e.length * (1 + t)) - e.length;
9788
+ if (i <= 0)
8081
9789
  return e;
8082
- const n = Oo[0].repeat(a);
8083
- return e + n;
9790
+ const a = Mt[0].repeat(i);
9791
+ return e + a;
8084
9792
  }
8085
- function Lo(e) {
8086
- const o = /* @__PURE__ */ new Set(["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]);
8087
- return e.split("").map((r) => o.has(r) ? r + r : r).join("");
9793
+ function Rt(e) {
9794
+ const t = /* @__PURE__ */ new Set(["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]);
9795
+ return e.split("").map((r) => t.has(r) ? r + r : r).join("");
8088
9796
  }
8089
- function Bo(e, o = !1) {
8090
- return o ? `${Mo}${e}${Q}` : `${Fo}${e}${Q}`;
9797
+ function Lt(e, t = !1) {
9798
+ return t ? `${Ft}${e}${_}` : `${Bt}${e}${_}`;
8091
9799
  }
8092
- function pe(e, o = {}) {
9800
+ function ue(e, t = {}) {
8093
9801
  const {
8094
9802
  addBrackets: r = !0,
8095
- expansionFactor: t = 0.3,
8096
- addAccents: a = !0,
8097
- addBidiMarkers: n = !1,
8098
- useVowelDoubling: i = !1,
9803
+ expansionFactor: o = 0.3,
9804
+ addAccents: i = !0,
9805
+ addBidiMarkers: a = !1,
9806
+ useVowelDoubling: n = !1,
8099
9807
  preservePlaceholders: s = !0,
8100
- preserveHtml: d = !0,
8101
- prefix: l = "[",
8102
- suffix: p = "]"
8103
- } = o, f = /* @__PURE__ */ new Map();
8104
- let u = e, m = 0;
8105
- s && (u = u.replace(/\{[^}]+\}/g, (v) => {
9808
+ preserveHtml: l = !0,
9809
+ prefix: d = "[",
9810
+ suffix: u = "]"
9811
+ } = t, v = /* @__PURE__ */ new Map();
9812
+ let p = e, m = 0;
9813
+ s && (p = p.replace(/\{[^}]+\}/g, (f) => {
8106
9814
  const g = `__PH${m++}__`;
8107
- return f.set(g, v), g;
8108
- })), d && (u = u.replace(/<[^>]+>/g, (v) => {
9815
+ return v.set(g, f), g;
9816
+ })), l && (p = p.replace(/<[^>]+>/g, (f) => {
8109
9817
  const g = `__PH${m++}__`;
8110
- return f.set(g, v), g;
8111
- })), a && (u = Io(u, f)), t > 0 && (u = Ro(u, t, i)), n && (u = Bo(u)), r && (u = `${l}${u}${p}`);
8112
- for (const [v, g] of f.entries())
8113
- u = u.replace(v, g);
8114
- return u;
9818
+ return v.set(g, f), g;
9819
+ })), i && (p = Ot(p, v)), o > 0 && (p = Nt(p, o, n)), a && (p = Lt(p)), r && (p = `${d}${p}${u}`);
9820
+ for (const [f, g] of v.entries())
9821
+ p = p.replace(f, g);
9822
+ return p;
8115
9823
  }
8116
- function Io(e, o) {
8117
- const r = new Set(o.keys());
8118
- return e.split("").map((t) => {
8119
- for (const a of r)
8120
- if (e.includes(a) && a.includes(t))
8121
- return t;
8122
- return J[t] || t;
9824
+ function Ot(e, t) {
9825
+ const r = new Set(t.keys());
9826
+ return e.split("").map((o) => {
9827
+ for (const i of r)
9828
+ if (e.includes(i) && i.includes(o))
9829
+ return o;
9830
+ return J[o] || o;
8123
9831
  }).join("");
8124
9832
  }
8125
- function T(e) {
9833
+ function P(e) {
8126
9834
  switch (e) {
8127
9835
  case "accented":
8128
9836
  return {
@@ -8156,22 +9864,22 @@ function T(e) {
8156
9864
  };
8157
9865
  }
8158
9866
  }
8159
- function Wt(e, o) {
9867
+ function Vo(e, t) {
8160
9868
  const r = {};
8161
- for (const [t, a] of Object.entries(e))
8162
- r[t] = pe(a, o);
9869
+ for (const [o, i] of Object.entries(e))
9870
+ r[o] = ue(i, t);
8163
9871
  return r;
8164
9872
  }
8165
- function Wo(e) {
9873
+ function It(e) {
8166
9874
  return /[^\x00-\x7F]/.test(e);
8167
9875
  }
8168
- function Vo(e) {
9876
+ function Vt(e) {
8169
9877
  if (!e || /^[\d.,-]+$/.test(e) || e.startsWith("["))
8170
9878
  return !1;
8171
- const o = /[a-zA-Z]{2,}/.test(e), r = Wo(e);
8172
- return o && !r;
9879
+ const t = /[a-zA-Z]{2,}/.test(e), r = It(e);
9880
+ return t && !r;
8173
9881
  }
8174
- function Vt(e, o) {
9882
+ function Ho(e, t) {
8175
9883
  const r = {
8176
9884
  totalKeys: Object.keys(e).length,
8177
9885
  hardcodedStrings: [],
@@ -8179,70 +9887,70 @@ function Vt(e, o) {
8179
9887
  placeholderMismatches: [],
8180
9888
  potentialIssues: 0
8181
9889
  };
8182
- for (const [t, a] of Object.entries(e)) {
8183
- if (!a || a.trim() === "") {
8184
- r.emptyValues.push(t), r.potentialIssues++;
9890
+ for (const [o, i] of Object.entries(e)) {
9891
+ if (!i || i.trim() === "") {
9892
+ r.emptyValues.push(o), r.potentialIssues++;
8185
9893
  continue;
8186
9894
  }
8187
- if (Vo(a) && r.hardcodedStrings.push(t), o && o[t]) {
8188
- const n = X(a), i = X(o[t]), s = n.filter((l) => !i.includes(l)), d = i.filter((l) => !n.includes(l));
8189
- (s.length > 0 || d.length > 0) && (r.placeholderMismatches.push({
8190
- key: t,
9895
+ if (Vt(i) && r.hardcodedStrings.push(o), t && t[o]) {
9896
+ const a = Q(i), n = Q(t[o]), s = a.filter((d) => !n.includes(d)), l = n.filter((d) => !a.includes(d));
9897
+ (s.length > 0 || l.length > 0) && (r.placeholderMismatches.push({
9898
+ key: o,
8191
9899
  placeholders: [
8192
- ...s.map((l) => `-${l}`),
8193
- ...d.map((l) => `+${l}`)
9900
+ ...s.map((d) => `-${d}`),
9901
+ ...l.map((d) => `+${d}`)
8194
9902
  ]
8195
9903
  }), r.potentialIssues++);
8196
9904
  }
8197
9905
  }
8198
9906
  return r;
8199
9907
  }
8200
- function X(e) {
9908
+ function Q(e) {
8201
9909
  return (e.match(/\{([^}]+)\}/g) || []).map((r) => r.replace(/[{}]/g, "").split(",")[0].trim());
8202
9910
  }
8203
- const ue = I(null);
8204
- function Ut({
9911
+ const pe = I(null);
9912
+ function Wo({
8205
9913
  children: e,
8206
- initialEnabled: o = !1,
9914
+ initialEnabled: t = !1,
8207
9915
  initialMode: r = "full"
8208
9916
  }) {
8209
- const [t, a] = P(o), [n, i] = P(r), s = b(() => T(n), [n]), d = b(() => (p) => t ? pe(p, s) : p, [t, s]), l = b(
9917
+ const [o, i] = x(t), [a, n] = x(r), s = b(() => P(a), [a]), l = b(() => (u) => o ? ue(u, s) : u, [o, s]), d = b(
8210
9918
  () => ({
8211
- enabled: t,
8212
- mode: n,
9919
+ enabled: o,
9920
+ mode: a,
8213
9921
  options: s,
8214
- toggle: () => a((p) => !p),
8215
- setMode: i,
8216
- transform: d
9922
+ toggle: () => i((u) => !u),
9923
+ setMode: n,
9924
+ transform: l
8217
9925
  }),
8218
- [t, n, s, d]
9926
+ [o, a, s, l]
8219
9927
  );
8220
- return /* @__PURE__ */ B(ue.Provider, { value: l, children: e });
9928
+ return /* @__PURE__ */ O(pe.Provider, { value: d, children: e });
8221
9929
  }
8222
- function Ht() {
8223
- const e = N(ue);
9930
+ function qo() {
9931
+ const e = B(pe);
8224
9932
  return e || {
8225
9933
  enabled: !1,
8226
9934
  mode: "full",
8227
- options: T("full"),
9935
+ options: P("full"),
8228
9936
  toggle: () => {
8229
9937
  },
8230
9938
  setMode: () => {
8231
9939
  },
8232
- transform: (o) => o
9940
+ transform: (t) => t
8233
9941
  };
8234
9942
  }
8235
- const Kt = {
9943
+ const Uo = {
8236
9944
  /** Minimal: brackets only */
8237
9945
  MINIMAL: { addBrackets: !0, addAccents: !1, expansionFactor: 0 },
8238
9946
  /** Accented: brackets + accents */
8239
- ACCENTED: T("accented"),
9947
+ ACCENTED: P("accented"),
8240
9948
  /** Expanded: brackets + 30% expansion */
8241
- EXPANDED: T("expansion"),
9949
+ EXPANDED: P("expansion"),
8242
9950
  /** Bidi: brackets + RTL markers */
8243
- BIDI: T("bidi"),
9951
+ BIDI: P("bidi"),
8244
9952
  /** Full: brackets + accents + expansion */
8245
- FULL: T("full"),
9953
+ FULL: P("full"),
8246
9954
  /** Finnish: 40% expansion (Finnish is very long) */
8247
9955
  FINNISH: { addBrackets: !0, addAccents: !0, expansionFactor: 0.4 },
8248
9956
  /** German: 35% expansion */
@@ -8250,376 +9958,376 @@ const Kt = {
8250
9958
  /** CJK: Short expansion, no accents (CJK often shorter) */
8251
9959
  CJK: { addBrackets: !0, addAccents: !1, expansionFactor: -0.1 }
8252
9960
  };
8253
- class Uo {
8254
- constructor(o = 0) {
8255
- this.cache = /* @__PURE__ */ new Map(), this.ttl = o;
9961
+ class Ht {
9962
+ constructor(t = 0) {
9963
+ this.cache = /* @__PURE__ */ new Map(), this.ttl = t;
8256
9964
  }
8257
- getCacheKey(o, r) {
8258
- return r ? `${o}:${r}` : o;
9965
+ getCacheKey(t, r) {
9966
+ return r ? `${t}:${r}` : t;
8259
9967
  }
8260
- get(o, r) {
8261
- const t = this.getCacheKey(o, r), a = this.cache.get(t);
8262
- return a ? this.ttl > 0 && Date.now() > a.expiresAt ? (this.cache.delete(t), null) : a.data : null;
9968
+ get(t, r) {
9969
+ const o = this.getCacheKey(t, r), i = this.cache.get(o);
9970
+ return i ? this.ttl > 0 && Date.now() > i.expiresAt ? (this.cache.delete(o), null) : i.data : null;
8263
9971
  }
8264
- set(o, r, t) {
8265
- const a = this.getCacheKey(o, t), n = Date.now();
8266
- this.cache.set(a, {
9972
+ set(t, r, o) {
9973
+ const i = this.getCacheKey(t, o), a = Date.now();
9974
+ this.cache.set(i, {
8267
9975
  data: r,
8268
- loadedAt: n,
8269
- expiresAt: this.ttl > 0 ? n + this.ttl : 1 / 0
9976
+ loadedAt: a,
9977
+ expiresAt: this.ttl > 0 ? a + this.ttl : 1 / 0
8270
9978
  });
8271
9979
  }
8272
- has(o, r) {
8273
- return this.get(o, r) !== null;
9980
+ has(t, r) {
9981
+ return this.get(t, r) !== null;
8274
9982
  }
8275
- delete(o, r) {
9983
+ delete(t, r) {
8276
9984
  if (r)
8277
- this.cache.delete(this.getCacheKey(o, r));
9985
+ this.cache.delete(this.getCacheKey(t, r));
8278
9986
  else
8279
- for (const t of this.cache.keys())
8280
- (t === o || t.startsWith(`${o}:`)) && this.cache.delete(t);
9987
+ for (const o of this.cache.keys())
9988
+ (o === t || o.startsWith(`${t}:`)) && this.cache.delete(o);
8281
9989
  }
8282
9990
  clear() {
8283
9991
  this.cache.clear();
8284
9992
  }
8285
9993
  getStats() {
8286
- const o = /* @__PURE__ */ new Set();
9994
+ const t = /* @__PURE__ */ new Set();
8287
9995
  for (const r of this.cache.keys())
8288
- o.add(r.split(":")[0]);
9996
+ t.add(r.split(":")[0]);
8289
9997
  return {
8290
9998
  size: this.cache.size,
8291
- languages: Array.from(o)
9999
+ languages: Array.from(t)
8292
10000
  };
8293
10001
  }
8294
10002
  }
8295
10003
  function me(e) {
8296
10004
  const {
8297
- loadFn: o,
10005
+ loadFn: t,
8298
10006
  fallbackLang: r = "en",
8299
- cacheTtl: t = 0,
8300
- preloadLanguages: a = [],
8301
- namespaces: n = [],
8302
- defaultNamespace: i,
10007
+ cacheTtl: o = 0,
10008
+ preloadLanguages: i = [],
10009
+ namespaces: a = [],
10010
+ defaultNamespace: n,
8303
10011
  onLoadStart: s,
8304
- onLoadComplete: d,
8305
- onLoadError: l
8306
- } = e, p = new Uo(t), f = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Map();
10012
+ onLoadComplete: l,
10013
+ onLoadError: d
10014
+ } = e, u = new Ht(o), v = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Map();
8307
10015
  let m = r;
8308
- const v = /* @__PURE__ */ new Set();
10016
+ const f = /* @__PURE__ */ new Set();
8309
10017
  function g() {
8310
- const c = C();
8311
- v.forEach((h) => h(c));
10018
+ const c = z();
10019
+ f.forEach((h) => h(c));
8312
10020
  }
8313
- function E(c, h) {
10021
+ function y(c, h) {
8314
10022
  return h ? `${c}:${h}` : c;
8315
10023
  }
8316
- function C() {
10024
+ function z() {
8317
10025
  const c = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Set();
8318
- for (const S of j)
8319
- p.has(S) && c.add(S);
8320
- for (const S of f) {
8321
- const O = S.split(":")[0];
8322
- h.add(O);
10026
+ for (const C of T)
10027
+ u.has(C) && c.add(C);
10028
+ for (const C of v) {
10029
+ const N = C.split(":")[0];
10030
+ h.add(N);
8323
10031
  }
8324
10032
  return {
8325
10033
  loadedLanguages: c,
8326
10034
  loadingLanguages: h,
8327
- failedLanguages: new Map(u),
10035
+ failedLanguages: new Map(p),
8328
10036
  currentLanguage: m
8329
10037
  };
8330
10038
  }
8331
- async function y(c, h) {
8332
- const S = E(c, h), O = p.get(c, h);
8333
- if (O)
8334
- return O;
8335
- if (f.has(S))
8336
- return new Promise((z) => {
10039
+ async function E(c, h) {
10040
+ const C = y(c, h), N = u.get(c, h);
10041
+ if (N)
10042
+ return N;
10043
+ if (v.has(C))
10044
+ return new Promise((S) => {
8337
10045
  const R = setInterval(() => {
8338
- f.has(S) || (clearInterval(R), z(p.get(c, h)));
10046
+ v.has(C) || (clearInterval(R), S(u.get(c, h)));
8339
10047
  }, 50);
8340
10048
  });
8341
- f.add(S), u.delete(c), s == null || s(c, h), g();
10049
+ v.add(C), p.delete(c), s == null || s(c, h), g();
8342
10050
  try {
8343
- const z = await o(c, h);
8344
- return p.set(c, z, h), d == null || d(c, h), z;
8345
- } catch (z) {
8346
- const R = z instanceof Error ? z : new Error(String(z));
8347
- return u.set(c, R), l == null || l(c, R, h), c !== r && !h ? (console.warn(`Failed to load ${c}, falling back to ${r}`), y(r, h)) : null;
10051
+ const S = await t(c, h);
10052
+ return u.set(c, S, h), l == null || l(c, h), S;
10053
+ } catch (S) {
10054
+ const R = S instanceof Error ? S : new Error(String(S));
10055
+ return p.set(c, R), d == null || d(c, R, h), c !== r && !h ? (console.warn(`Failed to load ${c}, falling back to ${r}`), E(r, h)) : null;
8348
10056
  } finally {
8349
- f.delete(S), g();
10057
+ v.delete(C), g();
8350
10058
  }
8351
10059
  }
8352
- async function A(c) {
8353
- await Promise.all(c.map((h) => y(h)));
10060
+ async function j(c) {
10061
+ await Promise.all(c.map((h) => E(h)));
8354
10062
  }
8355
- async function w() {
8356
- a.length !== 0 && await Promise.allSettled(
8357
- a.map((c) => n.length > 0 ? Promise.all(n.map((h) => y(c, h))) : y(c))
10063
+ async function k() {
10064
+ i.length !== 0 && await Promise.allSettled(
10065
+ i.map((c) => a.length > 0 ? Promise.all(a.map((h) => E(c, h))) : E(c))
8358
10066
  );
8359
10067
  }
8360
10068
  function M(c, h) {
8361
- return p.get(c, h);
10069
+ return u.get(c, h);
8362
10070
  }
8363
- function x(c, h) {
8364
- return p.has(c, h);
10071
+ function A(c, h) {
10072
+ return u.has(c, h);
8365
10073
  }
8366
10074
  function he(c) {
8367
- for (const h of f)
10075
+ for (const h of v)
8368
10076
  if (h === c || h.startsWith(`${c}:`))
8369
10077
  return !0;
8370
10078
  return !1;
8371
10079
  }
8372
- function fe() {
8373
- return p.getStats().languages;
10080
+ function ve() {
10081
+ return u.getStats().languages;
8374
10082
  }
8375
- function ve(c) {
8376
- c ? p.delete(c) : p.clear(), g();
10083
+ function fe(c) {
10084
+ c ? u.delete(c) : u.clear(), g();
8377
10085
  }
8378
10086
  async function be(c) {
8379
- x(c) || await y(c), m = c, g();
10087
+ A(c) || await E(c), m = c, g();
8380
10088
  }
8381
- function ke() {
10089
+ function we() {
8382
10090
  return m;
8383
10091
  }
8384
- function we(c) {
8385
- return v.add(c), () => v.delete(c);
10092
+ function ke(c) {
10093
+ return f.add(c), () => f.delete(c);
8386
10094
  }
8387
10095
  return {
8388
- loadLanguage: y,
8389
- loadLanguages: A,
8390
- preloadLanguages: w,
10096
+ loadLanguage: E,
10097
+ loadLanguages: j,
10098
+ preloadLanguages: k,
8391
10099
  getTranslations: M,
8392
- isLoaded: x,
10100
+ isLoaded: A,
8393
10101
  isLoading: he,
8394
- getLoadedLanguages: fe,
8395
- clearCache: ve,
8396
- getState: C,
10102
+ getLoadedLanguages: ve,
10103
+ clearCache: fe,
10104
+ getState: z,
8397
10105
  setLanguage: be,
8398
- getCurrentLanguage: ke,
8399
- subscribe: we
10106
+ getCurrentLanguage: we,
10107
+ subscribe: ke
8400
10108
  };
8401
10109
  }
8402
- function Zt(e, o) {
10110
+ function Ko(e, t) {
8403
10111
  return me({
8404
- ...o,
8405
- loadFn: async (r, t) => {
8406
- const a = t ? `${e}/${r}/${t}.json` : `${e}/${r}.json`, n = await fetch(a);
8407
- if (!n.ok)
8408
- throw new Error(`Failed to load translations: ${n.status}`);
8409
- return n.json();
10112
+ ...t,
10113
+ loadFn: async (r, o) => {
10114
+ const i = o ? `${e}/${r}/${o}.json` : `${e}/${r}.json`, a = await fetch(i);
10115
+ if (!a.ok)
10116
+ throw new Error(`Failed to load translations: ${a.status}`);
10117
+ return a.json();
8410
10118
  }
8411
10119
  });
8412
10120
  }
8413
- function qt(e, o) {
10121
+ function Go(e, t) {
8414
10122
  return me({
8415
- ...o,
8416
- loadFn: async (r, t) => (await e(r, t)).default
10123
+ ...t,
10124
+ loadFn: async (r, o) => (await e(r, o)).default
8417
10125
  });
8418
10126
  }
8419
10127
  const ge = I(null);
8420
- function Gt({
10128
+ function Zo({
8421
10129
  children: e,
8422
- loader: o,
10130
+ loader: t,
8423
10131
  initialLanguage: r,
8424
- namespace: t
10132
+ namespace: o
8425
10133
  }) {
8426
- const [a, n] = P(() => o.getState()), [i, s] = P(null);
8427
- L(() => o.subscribe(n), [o]), L(() => {
8428
- r && !o.isLoaded(r, t) && o.loadLanguage(r, t).catch(s);
8429
- }, [o, r, t]);
8430
- const d = b(() => o.getTranslations(a.currentLanguage, t) || {}, [o, a.currentLanguage, t]), l = ee(
8431
- async (f) => {
10134
+ const [i, a] = x(() => t.getState()), [n, s] = x(null);
10135
+ L(() => t.subscribe(a), [t]), L(() => {
10136
+ r && !t.isLoaded(r, o) && t.loadLanguage(r, o).catch(s);
10137
+ }, [t, r, o]);
10138
+ const l = b(() => t.getTranslations(i.currentLanguage, o) || {}, [t, i.currentLanguage, o]), d = ee(
10139
+ async (v) => {
8432
10140
  s(null);
8433
10141
  try {
8434
- await o.setLanguage(f);
8435
- } catch (u) {
8436
- s(u instanceof Error ? u : new Error(String(u)));
10142
+ await t.setLanguage(v);
10143
+ } catch (p) {
10144
+ s(p instanceof Error ? p : new Error(String(p)));
8437
10145
  }
8438
10146
  },
8439
- [o]
8440
- ), p = b(
10147
+ [t]
10148
+ ), u = b(
8441
10149
  () => ({
8442
- loader: o,
8443
- translations: d,
8444
- isLoading: a.loadingLanguages.size > 0,
8445
- error: i,
8446
- setLanguage: l,
8447
- currentLanguage: a.currentLanguage,
8448
- loadedLanguages: Array.from(a.loadedLanguages)
10150
+ loader: t,
10151
+ translations: l,
10152
+ isLoading: i.loadingLanguages.size > 0,
10153
+ error: n,
10154
+ setLanguage: d,
10155
+ currentLanguage: i.currentLanguage,
10156
+ loadedLanguages: Array.from(i.loadedLanguages)
8449
10157
  }),
8450
- [o, d, a, i, l]
10158
+ [t, l, i, n, d]
8451
10159
  );
8452
- return /* @__PURE__ */ B(ge.Provider, { value: p, children: e });
10160
+ return /* @__PURE__ */ O(ge.Provider, { value: u, children: e });
8453
10161
  }
8454
- function Ho() {
8455
- const e = N(ge);
10162
+ function Wt() {
10163
+ const e = B(ge);
8456
10164
  if (!e)
8457
10165
  throw new Error("useDynamicI18n must be used within DynamicI18nProvider");
8458
10166
  return e;
8459
10167
  }
8460
- function Jt(e) {
8461
- const { translations: o, currentLanguage: r, loader: t, isLoading: a } = Ho();
10168
+ function Jo(e) {
10169
+ const { translations: t, currentLanguage: r, loader: o, isLoading: i } = Wt();
8462
10170
  return L(() => {
8463
- e && !t.isLoaded(r, e) && t.loadLanguage(r, e);
8464
- }, [t, r, e]), { t: ee(
8465
- (i, s) => {
8466
- let d = o[i] || i;
10171
+ e && !o.isLoaded(r, e) && o.loadLanguage(r, e);
10172
+ }, [o, r, e]), { t: ee(
10173
+ (n, s) => {
10174
+ let l = t[n] || n;
8467
10175
  if (s)
8468
- for (const [l, p] of Object.entries(s))
8469
- d = d.replace(new RegExp(`\\{${l}\\}`, "g"), String(p));
8470
- return d;
10176
+ for (const [d, u] of Object.entries(s))
10177
+ l = l.replace(new RegExp(`\\{${d}\\}`, "g"), String(u));
10178
+ return l;
8471
10179
  },
8472
- [o]
8473
- ), isLoading: a, currentLanguage: r };
10180
+ [t]
10181
+ ), isLoading: i, currentLanguage: r };
8474
10182
  }
8475
- function Yt(e, o, r) {
10183
+ function Yo(e, t, r) {
8476
10184
  switch (r) {
8477
10185
  case "immediate":
8478
- e.loadLanguages(o);
10186
+ e.loadLanguages(t);
8479
10187
  break;
8480
10188
  case "idle":
8481
10189
  "requestIdleCallback" in window ? window.requestIdleCallback(() => {
8482
- e.loadLanguages(o);
8483
- }) : setTimeout(() => e.loadLanguages(o), 1e3);
10190
+ e.loadLanguages(t);
10191
+ }) : setTimeout(() => e.loadLanguages(t), 1e3);
8484
10192
  break;
8485
10193
  case "visible":
8486
10194
  if ("IntersectionObserver" in window) {
8487
- const t = new IntersectionObserver(
10195
+ const o = new IntersectionObserver(
8488
10196
  () => {
8489
- e.loadLanguages(o), t.disconnect();
10197
+ e.loadLanguages(t), o.disconnect();
8490
10198
  },
8491
10199
  { threshold: 0.1 }
8492
10200
  );
8493
- t.observe(document.body);
10201
+ o.observe(document.body);
8494
10202
  } else
8495
- e.loadLanguages(o);
10203
+ e.loadLanguages(t);
8496
10204
  break;
8497
10205
  case "interaction": {
8498
- const t = () => {
8499
- e.loadLanguages(o), window.removeEventListener("click", t), window.removeEventListener("keydown", t), window.removeEventListener("touchstart", t);
10206
+ const o = () => {
10207
+ e.loadLanguages(t), window.removeEventListener("click", o), window.removeEventListener("keydown", o), window.removeEventListener("touchstart", o);
8500
10208
  };
8501
- window.addEventListener("click", t, { once: !0 }), window.addEventListener("keydown", t, { once: !0 }), window.addEventListener("touchstart", t, { once: !0 });
10209
+ window.addEventListener("click", o, { once: !0 }), window.addEventListener("keydown", o, { once: !0 }), window.addEventListener("touchstart", o, { once: !0 });
8502
10210
  break;
8503
10211
  }
8504
10212
  }
8505
10213
  }
8506
- async function $t(e, o) {
8507
- const { fallback: r = "en", preferredLanguages: t = [] } = o || {};
8508
- for (const n of t)
8509
- if (j.includes(n))
8510
- return await e.setLanguage(n), n;
8511
- const a = navigator.language.split("-")[0].toLowerCase();
8512
- return j.includes(a) ? (await e.setLanguage(a), a) : (await e.setLanguage(r), r);
10214
+ async function Xo(e, t) {
10215
+ const { fallback: r = "en", preferredLanguages: o = [] } = t || {};
10216
+ for (const a of o)
10217
+ if (T.includes(a))
10218
+ return await e.setLanguage(a), a;
10219
+ const i = navigator.language.split("-")[0].toLowerCase();
10220
+ return T.includes(i) ? (await e.setLanguage(i), i) : (await e.setLanguage(r), r);
8513
10221
  }
8514
10222
  export {
8515
- W as CALENDAR_INFO,
8516
- jo as CELESTIAL_STEMS,
8517
- Po as CHINESE_ZODIAC,
8518
- de as DEFAULT_CALENDAR,
8519
- Gt as DynamicI18nProvider,
8520
- Dt as HEBREW_MONTHS,
8521
- At as HEBREW_MONTHS_LEAP,
8522
- St as HIJRI_MONTHS,
8523
- Z as JAPANESE_ERAS,
8524
- ne as NICE_GLOSSARY,
8525
- k as NICE_I18N_DICTIONARIES,
8526
- _e as NICE_I18N_VARIANTS,
8527
- j as NICE_SUPPORTED_LANGS,
8528
- Go as NiceI18nProvider,
8529
- Pt as PERSIAN_MONTHS,
8530
- Kt as PSEUDO_PRESETS,
8531
- Ut as PseudoLocalizationProvider,
8532
- at as RTLProvider,
8533
- U as RTL_CSS_VARS,
8534
- no as RTL_LANGUAGES,
8535
- ie as TIMEZONE_GROUPS,
8536
- Bt as addAccents,
8537
- Bo as addBidiMarkers,
8538
- It as addBrackets,
8539
- Vt as analyzeDictionary,
8540
- st as analyzeStylesForRTL,
8541
- Wo as containsNonAscii,
10223
+ V as CALENDAR_INFO,
10224
+ xt as CELESTIAL_STEMS,
10225
+ Pt as CHINESE_ZODIAC,
10226
+ le as DEFAULT_CALENDAR,
10227
+ Zo as DynamicI18nProvider,
10228
+ Do as HEBREW_MONTHS,
10229
+ jo as HEBREW_MONTHS_LEAP,
10230
+ Co as HIJRI_MONTHS,
10231
+ K as JAPANESE_ERAS,
10232
+ ae as NICE_GLOSSARY,
10233
+ w as NICE_I18N_DICTIONARIES,
10234
+ $e as NICE_I18N_VARIANTS,
10235
+ T as NICE_SUPPORTED_LANGS,
10236
+ Gt as NiceI18nProvider,
10237
+ xo as PERSIAN_MONTHS,
10238
+ Uo as PSEUDO_PRESETS,
10239
+ Wo as PseudoLocalizationProvider,
10240
+ ro as RTLProvider,
10241
+ W as RTL_CSS_VARS,
10242
+ at as RTL_LANGUAGES,
10243
+ ne as TIMEZONE_GROUPS,
10244
+ Oo as addAccents,
10245
+ Lt as addBidiMarkers,
10246
+ Io as addBrackets,
10247
+ Ho as analyzeDictionary,
10248
+ no as analyzeStylesForRTL,
10249
+ It as containsNonAscii,
8542
10250
  se as convertTimezone,
8543
- le as createCalendarFormatter,
8544
- ko as createCurrencyFormatter,
8545
- fo as createDateFormatter,
10251
+ de as createCalendarFormatter,
10252
+ bt as createCurrencyFormatter,
10253
+ ht as createDateFormatter,
8546
10254
  me as createDynamicLoader,
8547
- Zt as createFetchLoader,
8548
- Qo as createICUTranslator,
8549
- qt as createImportLoader,
8550
- bo as createNumberFormatter,
8551
- vo as createTimeFormatter,
8552
- zo as createTimezoneFormatter,
8553
- Yo as createTranslator,
8554
- $t as detectAndLoad,
8555
- _o as detectBrowserLanguage,
8556
- Vo as detectHardcodedText,
8557
- G as detectTimezone,
8558
- Ro as expandText,
8559
- ft as findSimilarTranslation,
8560
- co as flipAlignment,
8561
- rt as flipHorizontal,
8562
- ao as formatICU,
8563
- $o as formatMessage,
8564
- So as fromUTC,
8565
- pt as generateCoverageReport,
8566
- ct as generateTranslationCode,
8567
- wt as getAllTimezones,
8568
- go as getAllTranslationStats,
8569
- Ot as getAvailableCalendars,
8570
- Rt as getCalendarInfo,
8571
- Ft as getCelestialStem,
8572
- Nt as getChineseZodiac,
8573
- Ao as getCurrentCalendarDate,
8574
- tt as getDocumentDirection,
8575
- vt as getGlossaryForLanguage,
8576
- zt as getHijriMonthDays,
8577
- To as getJapaneseEra,
8578
- Tt as getJapaneseYear,
10255
+ Ko as createFetchLoader,
10256
+ $t as createICUTranslator,
10257
+ Go as createImportLoader,
10258
+ ft as createNumberFormatter,
10259
+ vt as createTimeFormatter,
10260
+ Ct as createTimezoneFormatter,
10261
+ Jt as createTranslator,
10262
+ Xo as detectAndLoad,
10263
+ Xt as detectBrowserLanguage,
10264
+ Vt as detectHardcodedText,
10265
+ Z as detectTimezone,
10266
+ Nt as expandText,
10267
+ vo as findSimilarTranslation,
10268
+ dt as flipAlignment,
10269
+ oo as flipHorizontal,
10270
+ it as formatICU,
10271
+ Yt as formatMessage,
10272
+ zt as fromUTC,
10273
+ uo as generateCoverageReport,
10274
+ co as generateTranslationCode,
10275
+ ko as getAllTimezones,
10276
+ mt as getAllTranslationStats,
10277
+ No as getAvailableCalendars,
10278
+ Ro as getCalendarInfo,
10279
+ Fo as getCelestialStem,
10280
+ Bo as getChineseZodiac,
10281
+ Dt as getCurrentCalendarDate,
10282
+ to as getDocumentDirection,
10283
+ fo as getGlossaryForLanguage,
10284
+ So as getHijriMonthDays,
10285
+ At as getJapaneseEra,
10286
+ Po as getJapaneseYear,
8579
10287
  D as getLocaleTag,
8580
- po as getLogicalProperty,
8581
- uo as getMissingTranslations,
8582
- Et as getNextDSTTransition,
10288
+ ct as getLogicalProperty,
10289
+ ut as getMissingTranslations,
10290
+ yo as getNextDSTTransition,
8583
10291
  re as getOrdinalCategory,
8584
- te as getPluralCategory,
8585
- T as getPseudoLocalizationPreset,
8586
- dt as getRTLCSSVars,
8587
- Lt as getRecommendedCalendars,
8588
- lt as getSourceKeys,
8589
- io as getTextDirection,
10292
+ oe as getPluralCategory,
10293
+ P as getPseudoLocalizationPreset,
10294
+ so as getRTLCSSVars,
10295
+ Lo as getRecommendedCalendars,
10296
+ lo as getSourceKeys,
10297
+ nt as getTextDirection,
8590
10298
  F as getTimezoneInfo,
8591
- yt as getTimezonesGrouped,
8592
- mo as getTranslationStats,
8593
- H as isDSTActive,
8594
- xt as isHebrewLeapYear,
8595
- xo as isHijriLeapYear,
8596
- jt as isPersianLeapYear,
8597
- ae as isRTLLanguage,
8598
- Xe as isSupported,
8599
- kt as isValidTimezone,
8600
- yo as lookupGlossary,
8601
- et as ordinal,
8602
- Xo as plural,
8603
- Yt as preloadWithStrategy,
8604
- pe as pseudoLocalize,
8605
- Wt as pseudoLocalizeDictionary,
8606
- qo as resolvePlVariant,
8607
- lo as rtlValue,
8608
- ot as select,
8609
- so as setDocumentDirection,
10299
+ Eo as getTimezonesGrouped,
10300
+ pt as getTranslationStats,
10301
+ q as isDSTActive,
10302
+ Ao as isHebrewLeapYear,
10303
+ jt as isHijriLeapYear,
10304
+ To as isPersianLeapYear,
10305
+ ie as isRTLLanguage,
10306
+ Qe as isSupported,
10307
+ wo as isValidTimezone,
10308
+ kt as lookupGlossary,
10309
+ Qt as ordinal,
10310
+ _t as plural,
10311
+ Yo as preloadWithStrategy,
10312
+ ue as pseudoLocalize,
10313
+ Vo as pseudoLocalizeDictionary,
10314
+ Kt as resolvePlVariant,
10315
+ lt as rtlValue,
10316
+ eo as select,
10317
+ st as setDocumentDirection,
8610
10318
  ce as toCalendar,
8611
- Co as toUTC,
8612
- Mt as useCalendar,
8613
- Ho as useDynamicI18n,
8614
- Jt as useDynamicTranslation,
8615
- it as useIsRTL,
8616
- ht as useNiceCurrencyFormat,
8617
- ut as useNiceDateFormat,
8618
- gt as useNiceNumberFormat,
8619
- mt as useNiceTimeFormat,
8620
- Jo as useNiceTranslation,
8621
- Ht as usePseudoLocalization,
8622
- nt as useRTL,
8623
- Ct as useTimezone,
8624
- bt as validateAgainstGlossary
10319
+ yt as toUTC,
10320
+ Mo as useCalendar,
10321
+ Wt as useDynamicI18n,
10322
+ Jo as useDynamicTranslation,
10323
+ ao as useIsRTL,
10324
+ ho as useNiceCurrencyFormat,
10325
+ po as useNiceDateFormat,
10326
+ go as useNiceNumberFormat,
10327
+ mo as useNiceTimeFormat,
10328
+ Zt as useNiceTranslation,
10329
+ qo as usePseudoLocalization,
10330
+ io as useRTL,
10331
+ zo as useTimezone,
10332
+ bo as validateAgainstGlossary
8625
10333
  };