@isothrum/editor 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/PUBLISHING.md +93 -0
  4. package/README.md +106 -2
  5. package/desktop-editor/editor.css +11 -0
  6. package/desktop-editor/index.html +14 -0
  7. package/desktop-editor/main.tsx +26 -0
  8. package/dist/desktop/editor.css +1 -0
  9. package/dist/desktop/editor.js +181 -0
  10. package/dist/desktop/fonts/geist-cyrillic-ext-wght-normal-RO72NYA2.woff2 +0 -0
  11. package/dist/desktop/fonts/geist-cyrillic-wght-normal-CK2XY27K.woff2 +0 -0
  12. package/dist/desktop/fonts/geist-latin-ext-wght-normal-XEQ56JUF.woff2 +0 -0
  13. package/dist/desktop/fonts/geist-latin-wght-normal-T72VVCUW.woff2 +0 -0
  14. package/dist/desktop/fonts/geist-mono-cyrillic-ext-wght-normal-QXKVIKFD.woff2 +0 -0
  15. package/dist/desktop/fonts/geist-mono-cyrillic-wght-normal-GOIAQAGU.woff2 +0 -0
  16. package/dist/desktop/fonts/geist-mono-latin-ext-wght-normal-HU3ZAWN6.woff2 +0 -0
  17. package/dist/desktop/fonts/geist-mono-latin-wght-normal-CJNQKXUG.woff2 +0 -0
  18. package/dist/desktop/fonts/geist-mono-symbols2-wght-normal-WZJJVLQO.woff2 +0 -0
  19. package/dist/desktop/fonts/geist-mono-vietnamese-wght-normal-KW5NM6YV.woff2 +0 -0
  20. package/dist/desktop/fonts/geist-vietnamese-wght-normal-Y2R7JZKV.woff2 +0 -0
  21. package/dist/desktop/fonts/shantell-sans-cyrillic-ext-wght-normal-ILPQWRJJ.woff2 +0 -0
  22. package/dist/desktop/fonts/shantell-sans-cyrillic-wght-normal-RKC6NDPM.woff2 +0 -0
  23. package/dist/desktop/fonts/shantell-sans-latin-ext-wght-normal-SNKHG3LM.woff2 +0 -0
  24. package/dist/desktop/fonts/shantell-sans-latin-wght-normal-7CHHGC3N.woff2 +0 -0
  25. package/dist/desktop/fonts/shantell-sans-vietnamese-wght-normal-IPFAQSBA.woff2 +0 -0
  26. package/dist/desktop/index.html +14 -0
  27. package/dist/desktop/styles.css +2 -0
  28. package/dist/desktop/wasm/isothrum_wasm.d.ts +60 -0
  29. package/dist/desktop/wasm/isothrum_wasm.js +312 -0
  30. package/dist/desktop/wasm/isothrum_wasm_bg.wasm +0 -0
  31. package/dist/index.js +7059 -0
  32. package/dist/index.js.map +7 -0
  33. package/dist/model.js +745 -0
  34. package/dist/model.js.map +7 -0
  35. package/dist/types/components/tool/canvas/cable-edge.d.ts +4 -0
  36. package/dist/types/components/tool/canvas/contexts.d.ts +12 -0
  37. package/dist/types/components/tool/canvas/device-icon.d.ts +17 -0
  38. package/dist/types/components/tool/canvas/inline-text.d.ts +15 -0
  39. package/dist/types/components/tool/canvas/lan-node.d.ts +8 -0
  40. package/dist/types/components/tool/canvas/machine-addresses.d.ts +14 -0
  41. package/dist/types/components/tool/canvas/machine-node.d.ts +4 -0
  42. package/dist/types/components/tool/canvas/note-node.d.ts +7 -0
  43. package/dist/types/components/tool/canvas/port-led.d.ts +10 -0
  44. package/dist/types/components/tool/canvas/router-node.d.ts +8 -0
  45. package/dist/types/components/tool/canvas/sketch.d.ts +50 -0
  46. package/dist/types/components/tool/canvas/status-dot.d.ts +5 -0
  47. package/dist/types/components/tool/canvas/switch-node.d.ts +8 -0
  48. package/dist/types/components/tool/canvas/use-measured-ports.d.ts +7 -0
  49. package/dist/types/components/tool/context-menus.d.ts +5 -0
  50. package/dist/types/components/tool/device-block.d.ts +12 -0
  51. package/dist/types/components/tool/editor-menu.d.ts +28 -0
  52. package/dist/types/components/tool/export/copy-button.d.ts +9 -0
  53. package/dist/types/components/tool/export/export-panel.d.ts +17 -0
  54. package/dist/types/components/tool/export/target-list.d.ts +15 -0
  55. package/dist/types/components/tool/floating-window.d.ts +13 -0
  56. package/dist/types/components/tool/flow-canvas.d.ts +6 -0
  57. package/dist/types/components/tool/hooks/use-cabling.d.ts +23 -0
  58. package/dist/types/components/tool/hooks/use-captures.d.ts +9 -0
  59. package/dist/types/components/tool/hooks/use-clipboard.d.ts +12 -0
  60. package/dist/types/components/tool/hooks/use-context-menus.d.ts +25 -0
  61. package/dist/types/components/tool/hooks/use-design.d.ts +10 -0
  62. package/dist/types/components/tool/hooks/use-desktop.d.ts +50 -0
  63. package/dist/types/components/tool/hooks/use-devices.d.ts +17 -0
  64. package/dist/types/components/tool/hooks/use-downloads.d.ts +9 -0
  65. package/dist/types/components/tool/hooks/use-editor.d.ts +609 -0
  66. package/dist/types/components/tool/hooks/use-engine.d.ts +9 -0
  67. package/dist/types/components/tool/hooks/use-history.d.ts +9 -0
  68. package/dist/types/components/tool/hooks/use-lab-actions.d.ts +25 -0
  69. package/dist/types/components/tool/hooks/use-lab-run.d.ts +25 -0
  70. package/dist/types/components/tool/hooks/use-lab.d.ts +18 -0
  71. package/dist/types/components/tool/hooks/use-lan-carry.d.ts +8 -0
  72. package/dist/types/components/tool/hooks/use-machine-actions.d.ts +26 -0
  73. package/dist/types/components/tool/hooks/use-placement.d.ts +27 -0
  74. package/dist/types/components/tool/hooks/use-project.d.ts +25 -0
  75. package/dist/types/components/tool/hooks/use-projects.d.ts +34 -0
  76. package/dist/types/components/tool/hooks/use-shared-link.d.ts +23 -0
  77. package/dist/types/components/tool/hooks/use-toast.d.ts +2 -0
  78. package/dist/types/components/tool/hooks/use-tools.d.ts +17 -0
  79. package/dist/types/components/tool/lab-canvas.d.ts +18 -0
  80. package/dist/types/components/tool/overlays.d.ts +5 -0
  81. package/dist/types/components/tool/projects-list.d.ts +9 -0
  82. package/dist/types/components/tool/text.d.ts +418 -0
  83. package/dist/types/components/tool/toolbar.d.ts +5 -0
  84. package/dist/types/components/tool/top-bars.d.ts +10 -0
  85. package/dist/types/components/tool/windows/conditions-fields.d.ts +6 -0
  86. package/dist/types/components/tool/windows/editor-windows.d.ts +5 -0
  87. package/dist/types/components/tool/windows/fields.d.ts +4 -0
  88. package/dist/types/components/tool/windows/lab-status.d.ts +6 -0
  89. package/dist/types/components/tool/windows/lab-windows.d.ts +13 -0
  90. package/dist/types/components/tool/windows/link-controls.d.ts +21 -0
  91. package/dist/types/components/tool/windows/machine-controls.d.ts +16 -0
  92. package/dist/types/components/tool/windows/machine-inspector.d.ts +11 -0
  93. package/dist/types/components/tool/windows/runs-fields.d.ts +18 -0
  94. package/dist/types/components/tool/windows/selected-windows.d.ts +21 -0
  95. package/dist/types/components/ui/button.d.ts +8 -0
  96. package/dist/types/components/ui/dropdown-menu.d.ts +21 -0
  97. package/dist/types/index.d.ts +7 -0
  98. package/dist/types/lib/auth.d.ts +38 -0
  99. package/dist/types/lib/brand.d.ts +19 -0
  100. package/dist/types/lib/i18n.d.ts +19 -0
  101. package/dist/types/lib/tool/blocks.d.ts +35 -0
  102. package/dist/types/lib/tool/cables.d.ts +48 -0
  103. package/dist/types/lib/tool/clone.d.ts +12 -0
  104. package/dist/types/lib/tool/conditions.d.ts +31 -0
  105. package/dist/types/lib/tool/create.d.ts +22 -0
  106. package/dist/types/lib/tool/desktop.d.ts +63 -0
  107. package/dist/types/lib/tool/draft.d.ts +20 -0
  108. package/dist/types/lib/tool/engine.d.ts +33 -0
  109. package/dist/types/lib/tool/examples.d.ts +11 -0
  110. package/dist/types/lib/tool/export-targets.d.ts +21 -0
  111. package/dist/types/lib/tool/facing.d.ts +9 -0
  112. package/dist/types/lib/tool/geometry.d.ts +36 -0
  113. package/dist/types/lib/tool/gns3-cables.d.ts +17 -0
  114. package/dist/types/lib/tool/gns3-import.d.ts +15 -0
  115. package/dist/types/lib/tool/gns3-parts.d.ts +25 -0
  116. package/dist/types/lib/tool/issues.d.ts +12 -0
  117. package/dist/types/lib/tool/layout.d.ts +52 -0
  118. package/dist/types/lib/tool/live.d.ts +21 -0
  119. package/dist/types/lib/tool/logos.d.ts +7 -0
  120. package/dist/types/lib/tool/model.d.ts +173 -0
  121. package/dist/types/lib/tool/os.d.ts +20 -0
  122. package/dist/types/lib/tool/pins.d.ts +5 -0
  123. package/dist/types/lib/tool/placement.d.ts +21 -0
  124. package/dist/types/lib/tool/ports.d.ts +21 -0
  125. package/dist/types/lib/tool/presets.d.ts +21 -0
  126. package/dist/types/lib/tool/projects-api.d.ts +37 -0
  127. package/dist/types/lib/tool/router-ports.d.ts +22 -0
  128. package/dist/types/lib/tool/selection.d.ts +19 -0
  129. package/dist/types/lib/tool/storage.d.ts +25 -0
  130. package/dist/types/lib/tool/switch-edit.d.ts +17 -0
  131. package/dist/types/lib/tool/text/de.d.ts +2 -0
  132. package/dist/types/lib/tool/text/en.d.ts +429 -0
  133. package/dist/types/lib/tool/text/es.d.ts +2 -0
  134. package/dist/types/lib/tool/text/fr.d.ts +2 -0
  135. package/dist/types/lib/tool/text/index.d.ts +419 -0
  136. package/dist/types/lib/tool/topology.d.ts +2 -0
  137. package/dist/types/lib/tool/vlans.d.ts +24 -0
  138. package/dist/types/lib/utils.d.ts +2 -0
  139. package/dist/types/model.d.ts +13 -0
  140. package/package.json +88 -4
  141. package/scripts/build-desktop-editor.mjs +43 -0
  142. package/scripts/build-lib.mjs +38 -0
  143. package/src/components/tool/canvas/cable-edge.tsx +112 -0
  144. package/src/components/tool/canvas/contexts.ts +18 -0
  145. package/src/components/tool/canvas/device-icon.tsx +105 -0
  146. package/src/components/tool/canvas/inline-text.tsx +69 -0
  147. package/src/components/tool/canvas/lan-node.tsx +148 -0
  148. package/src/components/tool/canvas/machine-addresses.tsx +117 -0
  149. package/src/components/tool/canvas/machine-node.tsx +114 -0
  150. package/src/components/tool/canvas/note-node.tsx +109 -0
  151. package/src/components/tool/canvas/port-led.tsx +21 -0
  152. package/src/components/tool/canvas/router-node.tsx +114 -0
  153. package/src/components/tool/canvas/sketch.tsx +130 -0
  154. package/src/components/tool/canvas/status-dot.tsx +29 -0
  155. package/src/components/tool/canvas/switch-node.tsx +143 -0
  156. package/src/components/tool/canvas/use-measured-ports.ts +25 -0
  157. package/src/components/tool/context-menus.tsx +142 -0
  158. package/src/components/tool/device-block.tsx +107 -0
  159. package/src/components/tool/editor-menu.tsx +191 -0
  160. package/src/components/tool/export/copy-button.tsx +45 -0
  161. package/src/components/tool/export/export-panel.tsx +127 -0
  162. package/src/components/tool/export/target-list.tsx +87 -0
  163. package/src/components/tool/floating-window.tsx +69 -0
  164. package/src/components/tool/flow-canvas.tsx +138 -0
  165. package/src/components/tool/hooks/use-cabling.ts +66 -0
  166. package/src/components/tool/hooks/use-captures.ts +24 -0
  167. package/src/components/tool/hooks/use-clipboard.ts +54 -0
  168. package/src/components/tool/hooks/use-context-menus.ts +37 -0
  169. package/src/components/tool/hooks/use-design.ts +24 -0
  170. package/src/components/tool/hooks/use-desktop.ts +100 -0
  171. package/src/components/tool/hooks/use-devices.ts +58 -0
  172. package/src/components/tool/hooks/use-downloads.ts +42 -0
  173. package/src/components/tool/hooks/use-editor.ts +114 -0
  174. package/src/components/tool/hooks/use-engine.ts +29 -0
  175. package/src/components/tool/hooks/use-history.ts +107 -0
  176. package/src/components/tool/hooks/use-lab-actions.ts +57 -0
  177. package/src/components/tool/hooks/use-lab-run.ts +61 -0
  178. package/src/components/tool/hooks/use-lab.ts +32 -0
  179. package/src/components/tool/hooks/use-lan-carry.ts +43 -0
  180. package/src/components/tool/hooks/use-machine-actions.ts +57 -0
  181. package/src/components/tool/hooks/use-placement.ts +80 -0
  182. package/src/components/tool/hooks/use-project.ts +112 -0
  183. package/src/components/tool/hooks/use-projects.ts +85 -0
  184. package/src/components/tool/hooks/use-shared-link.ts +64 -0
  185. package/src/components/tool/hooks/use-toast.ts +16 -0
  186. package/src/components/tool/hooks/use-tools.ts +60 -0
  187. package/src/components/tool/lab-canvas.tsx +96 -0
  188. package/src/components/tool/overlays.tsx +104 -0
  189. package/src/components/tool/projects-list.tsx +96 -0
  190. package/src/components/tool/text.ts +9 -0
  191. package/src/components/tool/toolbar.tsx +106 -0
  192. package/src/components/tool/top-bars.tsx +90 -0
  193. package/src/components/tool/windows/conditions-fields.tsx +43 -0
  194. package/src/components/tool/windows/editor-windows.tsx +73 -0
  195. package/src/components/tool/windows/fields.ts +6 -0
  196. package/src/components/tool/windows/lab-status.tsx +68 -0
  197. package/src/components/tool/windows/lab-windows.tsx +130 -0
  198. package/src/components/tool/windows/link-controls.tsx +69 -0
  199. package/src/components/tool/windows/machine-controls.tsx +116 -0
  200. package/src/components/tool/windows/machine-inspector.tsx +83 -0
  201. package/src/components/tool/windows/runs-fields.tsx +127 -0
  202. package/src/components/tool/windows/selected-windows.tsx +147 -0
  203. package/src/components/ui/button.tsx +59 -0
  204. package/src/components/ui/dropdown-menu.tsx +185 -0
  205. package/src/index.ts +21 -0
  206. package/src/lib/auth.tsx +43 -0
  207. package/src/lib/brand.tsx +46 -0
  208. package/src/lib/i18n.ts +53 -0
  209. package/src/lib/tool/blocks.test.ts +64 -0
  210. package/src/lib/tool/blocks.ts +78 -0
  211. package/src/lib/tool/cable-wiring.test.ts +74 -0
  212. package/src/lib/tool/cables.test.ts +75 -0
  213. package/src/lib/tool/cables.ts +215 -0
  214. package/src/lib/tool/clone.test.ts +54 -0
  215. package/src/lib/tool/clone.ts +48 -0
  216. package/src/lib/tool/conditions.test.ts +170 -0
  217. package/src/lib/tool/conditions.ts +132 -0
  218. package/src/lib/tool/create.test.ts +67 -0
  219. package/src/lib/tool/create.ts +83 -0
  220. package/src/lib/tool/desktop.test.ts +59 -0
  221. package/src/lib/tool/desktop.ts +99 -0
  222. package/src/lib/tool/draft.test.ts +150 -0
  223. package/src/lib/tool/draft.ts +109 -0
  224. package/src/lib/tool/engine.test.ts +39 -0
  225. package/src/lib/tool/engine.ts +58 -0
  226. package/src/lib/tool/examples.test.ts +35 -0
  227. package/src/lib/tool/examples.ts +71 -0
  228. package/src/lib/tool/export-targets.test.ts +47 -0
  229. package/src/lib/tool/export-targets.ts +84 -0
  230. package/src/lib/tool/facing.test.ts +72 -0
  231. package/src/lib/tool/facing.ts +100 -0
  232. package/src/lib/tool/geometry.test.ts +80 -0
  233. package/src/lib/tool/geometry.ts +109 -0
  234. package/src/lib/tool/gns3-cables.test.ts +47 -0
  235. package/src/lib/tool/gns3-cables.ts +81 -0
  236. package/src/lib/tool/gns3-import.test.ts +102 -0
  237. package/src/lib/tool/gns3-import.ts +198 -0
  238. package/src/lib/tool/gns3-layout.test.ts +62 -0
  239. package/src/lib/tool/gns3-parts.test.ts +47 -0
  240. package/src/lib/tool/gns3-parts.ts +68 -0
  241. package/src/lib/tool/issues.test.ts +35 -0
  242. package/src/lib/tool/issues.ts +60 -0
  243. package/src/lib/tool/layout.test.ts +128 -0
  244. package/src/lib/tool/layout.ts +229 -0
  245. package/src/lib/tool/live.test.ts +46 -0
  246. package/src/lib/tool/live.ts +49 -0
  247. package/src/lib/tool/logos.test.ts +30 -0
  248. package/src/lib/tool/logos.ts +99 -0
  249. package/src/lib/tool/model.test.ts +128 -0
  250. package/src/lib/tool/model.ts +238 -0
  251. package/src/lib/tool/os.test.ts +45 -0
  252. package/src/lib/tool/os.ts +57 -0
  253. package/src/lib/tool/parity.test.ts +145 -0
  254. package/src/lib/tool/pins.test.ts +24 -0
  255. package/src/lib/tool/pins.ts +11 -0
  256. package/src/lib/tool/placement.test.ts +79 -0
  257. package/src/lib/tool/placement.ts +60 -0
  258. package/src/lib/tool/ports.test.ts +39 -0
  259. package/src/lib/tool/ports.ts +48 -0
  260. package/src/lib/tool/presets.test.ts +50 -0
  261. package/src/lib/tool/presets.ts +77 -0
  262. package/src/lib/tool/projects-api.test.ts +59 -0
  263. package/src/lib/tool/projects-api.ts +47 -0
  264. package/src/lib/tool/router-ports.test.ts +63 -0
  265. package/src/lib/tool/router-ports.ts +88 -0
  266. package/src/lib/tool/selection.test.ts +44 -0
  267. package/src/lib/tool/selection.ts +34 -0
  268. package/src/lib/tool/storage.test.ts +123 -0
  269. package/src/lib/tool/storage.ts +127 -0
  270. package/src/lib/tool/switch-edit.test.ts +49 -0
  271. package/src/lib/tool/switch-edit.ts +38 -0
  272. package/src/lib/tool/text/de.ts +358 -0
  273. package/src/lib/tool/text/en.ts +371 -0
  274. package/src/lib/tool/text/es.ts +358 -0
  275. package/src/lib/tool/text/fr.ts +358 -0
  276. package/src/lib/tool/text/index.ts +21 -0
  277. package/src/lib/tool/text/text.test.ts +33 -0
  278. package/src/lib/tool/topology.test.ts +108 -0
  279. package/src/lib/tool/topology.ts +116 -0
  280. package/src/lib/tool/vlans.test.ts +64 -0
  281. package/src/lib/tool/vlans.ts +79 -0
  282. package/src/lib/utils.ts +6 -0
  283. package/src/model.ts +13 -0
  284. package/src/test/arbitrary.ts +41 -0
  285. package/src/test/engine.ts +48 -0
  286. package/src/test/lab.ts +101 -0
  287. package/styles/globals.css +258 -0
  288. package/styles/theme.css +192 -0
  289. package/tsconfig.build.json +12 -0
  290. package/tsconfig.json +22 -0
  291. package/wasm/isothrum_wasm.d.ts +60 -0
  292. package/wasm/isothrum_wasm.js +312 -0
  293. package/wasm/isothrum_wasm_bg.wasm +0 -0
@@ -0,0 +1,358 @@
1
+ import type { EditorText } from "./en";
2
+
3
+ export const es: EditorText = {
4
+ toolbar: {
5
+ blocks: { switch: "Switch", router: "Router", firewall: "Cortafuegos", container: "Contenedor", vm: "Máquina virtual", mine: "Mis equipos" },
6
+ kindsOf: (block) => `Tipos: ${block.toLowerCase()}`,
7
+ devices: "Dispositivos",
8
+ hand: "Mano: mover el lienzo",
9
+ select: "Selección: seleccionar, mover, eliminar",
10
+ lan: "LAN",
11
+ lanTitle: "LAN / VLAN: un área; las máquinas que están dentro reciben una dirección en ella",
12
+ switch: "Switch",
13
+ switchTitle: "Switch: puertos en VLAN y un trunk",
14
+ note: "Nota",
15
+ noteTitle: "Nota: texto, un recuadro o una elipse, para explicar el laboratorio",
16
+ forget: (device) => `Olvidar ${device}`,
17
+ forgetLabel: (device) => `Olvidar el dispositivo ${device}`,
18
+ undo: "Deshacer",
19
+ undoTitle: "Deshacer · Ctrl/⌘ Z",
20
+ redo: "Rehacer",
21
+ redoTitle: "Rehacer · Ctrl/⌘ Mayús Z",
22
+ },
23
+ hints: {
24
+ lan: "Haz clic en el lienzo para colocar una LAN; las máquinas que están dentro reciben una dirección en ella. Haz doble clic en su nombre o rango para editarlo.",
25
+ note: "Haz clic en el lienzo para colocar una nota y luego doble clic para escribir. Las notas se quedan en el editor, no en isoloom.yml.",
26
+ place: (device) => `${device}: haz clic en un punto del lienzo para colocar. Esc para cancelar.`,
27
+ hand: "Arrastra para mover el lienzo. Pulsa V para volver a seleccionar.",
28
+ cable: "Arrastra desde un punto de una máquina hasta otra para conectarlas.",
29
+ select: "Arrastra en el lienzo para seleccionar varias máquinas: Supr, o Ctrl/⌘ C, V, D. Mantén Espacio para mover el lienzo.",
30
+ },
31
+ devices: {
32
+ router: { label: "Router", hint: "automático: sus redes se comunican entre sí" },
33
+ "router-frr": { label: "Router (FRR)", hint: "contenedor FRRouting que configuras tú" },
34
+ firewall: { label: "Cortafuegos", hint: "nftables en Alpine" },
35
+ container: { label: "Contenedor Linux" },
36
+ web: { label: "Servidor web", hint: "nginx, puerto 80" },
37
+ database: { label: "Base de datos", hint: "PostgreSQL, puerto 5432" },
38
+ desktop: { label: "Escritorio Linux", hint: "Xfce con VNC: clic derecho, Pantalla; contraseña vncpassword" },
39
+ "linux-vm": { label: "VM Linux" },
40
+ "ubuntu-vm": { label: "VM Ubuntu" },
41
+ "kali-vm": { label: "VM Kali" },
42
+ "windows-vm": { label: "VM Windows" },
43
+ workstation: { label: "Estación de trabajo", hint: "donde entra el usuario" },
44
+ "cisco-iol": { label: "Router Cisco IOL", hint: "IOS en Linux, tu imagen vrnetlab" },
45
+ "cisco-iol-l2": { label: "Switch Cisco IOL", hint: "IOL-L2, tu imagen vrnetlab" },
46
+ },
47
+ myDevice: (what) => `tu dispositivo: ${what}`,
48
+ myDeviceRouter: "router automático",
49
+ status: {
50
+ loading: "Cargando…",
51
+ toFix: (count) => `${String(count)} por corregir`,
52
+ valid: "Válido",
53
+ },
54
+ run: {
55
+ autoStart: "Iniciar este laboratorio al abrir la aplicación",
56
+ autoStartNote: "En este ordenador, cuando la aplicación se abre en este laboratorio y no está ya en marcha.",
57
+ statusTitle: (up, total) => `${String(up)} de ${String(total)} máquinas en marcha`,
58
+ probed: "puertos leídos de las máquinas",
59
+ inferred: "puertos según el estado de las máquinas (las VM no se sondean)",
60
+ run: "Ejecutar",
61
+ starting: "Iniciando…",
62
+ stop: "Detener",
63
+ stopping: "Deteniendo…",
64
+ vmsTitle: "Un laboratorio con VM se ejecuta con Vagrant (y VirtualBox o libvirt): instálalo desde vagrantup.com, o exporta el laboratorio",
65
+ runVmsTitle: "Ejecutar el laboratorio en esta máquina (VM con Vagrant)",
66
+ startingVmsLog: "Iniciando las VM con vagrant up (la primera vez descarga sus boxes: minutos)…",
67
+ runTitle: "Ejecutar el laboratorio en esta máquina (Docker)",
68
+ startingLog: "Iniciando el laboratorio con docker compose…",
69
+ window: "Ejecutar en esta máquina",
70
+ running: "El laboratorio está en marcha. Selecciona una LAN o un cable para capturar su tráfico.",
71
+ stopped: "El laboratorio está detenido.",
72
+ noDocker:
73
+ "Docker no responde. Instálalo e inícialo; en Linux, añádete también al grupo docker (sudo usermod -aG docker $USER y vuelve a iniciar sesión).",
74
+ noLiveCapture: (wireshark, dir) =>
75
+ `${
76
+ wireshark
77
+ ? "Wireshark no puede capturar en directo desde esta cuenta: ejecuta sudo usermod -aG wireshark $USER y vuelve a iniciar sesión. Mientras tanto, las capturas"
78
+ : "Wireshark no está instalado: las capturas"
79
+ } se guardan como archivos .pcap en ${dir}.`,
80
+ },
81
+ capture: {
82
+ capturing: (network) => `Capturando ${network}`,
83
+ writingTo: "Escribiendo en",
84
+ live: "En directo en Wireshark.",
85
+ stop: "Detener la captura",
86
+ start: "Capturar tráfico",
87
+ runFirst: "Ejecuta el laboratorio para capturar su tráfico.",
88
+ },
89
+ link: {
90
+ suspend: "Suspender el enlace",
91
+ resume: "Reanudar el enlace",
92
+ suspendAll: "Suspender todos los enlaces",
93
+ resumeAll: "Reanudar todos los enlaces",
94
+ cableSuspended: "Enlace suspendido: no pasa nada.",
95
+ lanSuspended: (ports) => (ports === 1 ? "1 enlace suspendido." : `${String(ports)} enlaces suspendidos.`),
96
+ runFirst: "Ejecuta el laboratorio para suspender sus enlaces.",
97
+ },
98
+ export: "Exportar",
99
+ engineDidntLoad: (error) => `El motor no se cargó: ${error}`,
100
+ engineFailed: (error) => `El motor falló con este laboratorio: ${error}`,
101
+ toasts: {
102
+ brokenLink: "Este enlace para compartir está dañado: no se pudo leer el laboratorio.",
103
+ openedShared: (lab) => `Se abrió el laboratorio compartido “${lab}”. Deshacer recupera el tuyo.`,
104
+ linkCopied: "Enlace copiado: quien lo abra obtendrá una copia de este laboratorio.",
105
+ copyPrompt: "Copia este enlace para compartir el laboratorio:",
106
+ savedDevice: (device) => `“${device}” guardado: está al final de la barra de herramientas.`,
107
+ gns3Opened: (lab, machines, lans) =>
108
+ `Se abrió “${lab}” desde GNS3: ${String(machines)} máquina${machines === 1 ? "" : "s"}, ${String(lans)} LAN.`,
109
+ undoBringsBack: "Deshacer recupera tu laboratorio.",
110
+ gns3Unreadable: "No se pudo leer este proyecto GNS3.",
111
+ },
112
+ windows: {
113
+ machine: "Máquina",
114
+ lan: (lan) => `LAN ${lan}`,
115
+ cable: (a, b) => `Cable ${a} ↔ ${b}`,
116
+ portOn: (machine) => `Puerto en ${machine}`,
117
+ cableNote: "Cada cable es su propia red pequeña (una /29); sus dos extremos reciben sus dos primeras direcciones.",
118
+ removeCable: "Quitar el cable",
119
+ conditions: {
120
+ title: "Condiciones del enlace",
121
+ delay: "Latencia (ms, en cada sentido)",
122
+ jitter: "Jitter (ms)",
123
+ loss: "Pérdida (%)",
124
+ rate: "Ancho de banda (Mbit/s)",
125
+ hint: "Un enlace lento o con pérdidas, aplicado con tc netem en cada extremo. Vacío: ninguna.",
126
+ onLan: "Este cable pone la máquina en la LAN: ajusta las condiciones en la LAN.",
127
+ onVlan: "Las condiciones van en un cable o una LAN normal; todavía no en la VLAN de un switch.",
128
+ },
129
+ selected: (count) => `${String(count)} seleccionados`,
130
+ selection: (items, cables) =>
131
+ `${String(items)} elemento${items === 1 ? "" : "s"}, ${String(cables)} cable${cables === 1 ? "" : "s"}. Arrastra uno de ellos para moverlos juntos.`,
132
+ deleteSelection: (count) => `Eliminar ${String(count)} (tecla Supr)`,
133
+ close: "Cerrar",
134
+ },
135
+ lab: {
136
+ title: "Laboratorio",
137
+ containers: "Contenedores",
138
+ vms: "VM",
139
+ lans: "LAN",
140
+ cables: "Cables",
141
+ toFix: "Por corregir",
142
+ valid: "El laboratorio es válido: listo para exportar.",
143
+ routing:
144
+ "Un router necesita su propia configuración de reenvío: cada cable es su propia red y nada enruta entre ellas por ti.",
145
+ },
146
+ menu: {
147
+ menu: "Menú",
148
+ example: "Cargar el laboratorio de ejemplo",
149
+ vlanExample: "Cargar el ejemplo de VLAN",
150
+ gns3: "Abrir un proyecto GNS3…",
151
+ gns3File: "Proyecto GNS3",
152
+ share: "Copiar un enlace para compartir",
153
+ fit: "Ajustar a la pantalla",
154
+ clear: "Vaciar el lienzo",
155
+ light: "Tema claro",
156
+ dark: "Tema oscuro",
157
+ style: "Estilo",
158
+ styles: { sketch: "Boceto: a mano alzada", business: "Business: limpio y sobrio" },
159
+ language: "Idioma",
160
+ about: "Acerca de Isothrum",
161
+ blog: "Blog",
162
+ },
163
+ welcome: {
164
+ menuHint: "Ejemplo, tema, idioma…",
165
+ toolbarHint: "Elige un dispositivo y haz clic en el lienzo",
166
+ pitch: "Dibuja un laboratorio de red con contenedores y máquinas virtuales. Descárgalo, listo para ejecutar con Docker, Vagrant o Terraform.",
167
+ example: "Cargar el laboratorio de ejemplo",
168
+ how: "Cómo funciona",
169
+ },
170
+ inspector: {
171
+ name: "Nombre",
172
+ runsAs: "Se ejecuta como",
173
+ automaticRouter: "Router automático",
174
+ container: "Contenedor (Docker)",
175
+ vm: "Máquina virtual",
176
+ routerNote:
177
+ "Nada que configurar: las redes a las que está conectado (sus LAN, VLAN y cables) se comunican a través del router propio de Isoloom. Para configurar el enrutamiento tú mismo, ejecútalo como contenedor (FRR) o como VM.",
178
+ image: "Imagen",
179
+ keepRunning: "Mantenerlo en marcha",
180
+ applianceNote: "Cisco IOL se ejecuta desde tu propia imagen: créala con",
181
+ ciscoOs: "SO de Cisco",
182
+ needsKvm: "Se ejecuta en QEMU: el host Docker necesita /dev/kvm.",
183
+ dynamipsFirmware: (name: string) => `Pon tu imagen IOS de 7200 en la descarga como images/${name}.bin.`,
184
+ iosConfig: "Configuración IOS",
185
+ iosConfigHint: "Se añade a la que escribe Isothrum (nombre, admin/admin por SSH, la dirección de cada interfaz). Se aplica en el primer arranque.",
186
+ keepRunningHint: "Para una imagen sin servicio propio (Alpine, Ubuntu, Kali…): una máquina desde la que trabajar.",
187
+ os: "Sistema operativo",
188
+ provision: "Pasos de aprovisionamiento (uno por línea)",
189
+ ports: "Puertos de servicio",
190
+ access: "El usuario entra en esta máquina",
191
+ cables: "Cables",
192
+ noCables: "Ninguno aún: arrastra desde uno de sus puntos hasta otra máquina.",
193
+ saveTitle: "Guardar la configuración de esta máquina como dispositivo en la barra de herramientas, para volver a colocarla",
194
+ save: "Guardar como dispositivo",
195
+ remove: "Quitar la máquina",
196
+ },
197
+ canvas: {
198
+ imageShort: "Imagen",
199
+ hosts: (n) => (n === 1 ? "1 equipo" : `${String(n)} equipos`),
200
+ roles: { router: "Router", firewall: "Cortafuegos", workstation: "Puesto de trabajo", server: "Servidor", desktop: "Escritorio", host: "Equipo" },
201
+ switchModel: (ports) => `Switch · ${String(ports)} puertos`,
202
+ live: {
203
+ up: "En marcha",
204
+ starting: "Arrancando",
205
+ unhealthy: "Con problemas",
206
+ down: "Detenida",
207
+ portUp: "Enlace activo",
208
+ portDown: "Enlace caído",
209
+ portUnknown: "Desconocido (detenida, o el puerto pertenece al SO del equipo)",
210
+ lanPorts: (up, total) => `${String(up)} de ${String(total)} puertos activos en esta LAN`,
211
+ cable: { up: "Pasa tráfico", cut: "Suspendido: no pasa nada", down: "Caído: un extremo está detenido o su puerto caído" },
212
+ cableShort: { cut: "suspendido", down: "caído" },
213
+ },
214
+ editTitle: (what) => `${what}: doble clic para editar`,
215
+ unnamed: "sin nombre",
216
+ machineName: "Nombre de la máquina",
217
+ vm: "VM",
218
+ automatic: "Automático",
219
+ container: "Contenedor",
220
+ access: "acceso",
221
+ addressTitle: (network, fixed) => `${network}: doble clic para fijar esta dirección${fixed ? " (fija)" : ""}`,
222
+ fixed: "fija",
223
+ addressOn: (network) => `Dirección en ${network}`,
224
+ lanName: "Nombre de la LAN",
225
+ addressBlock: "Bloque de direcciones",
226
+ internetOnTitle: "Llega a internet (haz clic para cortarlo)",
227
+ internetOffTitle: "Sin internet (haz clic para permitirlo)",
228
+ internetOn: "Acceso a internet: sí",
229
+ internetOff: "Acceso a internet: no",
230
+ showAreaTitle: "Mostrar el área de la LAN",
231
+ hideAreaTitle: "Ocultar el área de la LAN (la LAN se queda: solo desaparece su rectángulo)",
232
+ showArea: "Mostrar el área",
233
+ hideArea: "Ocultar el área",
234
+ switchName: "Nombre del switch",
235
+ port: (n) => `Puerto ${String(n)}`,
236
+ trunkPort: "Puerto trunk",
237
+ trunkCarries: (vlans) => `trunk, lleva ${vlans}`,
238
+ noVlan: "ninguna VLAN",
239
+ clickToChange: "(haz clic para cambiar)",
240
+ vlanNumber: "Número de VLAN",
241
+ vlanBlock: "Bloque de direcciones de la VLAN",
242
+ remove: (what) => `Quitar ${what}`,
243
+ routerName: "Nombre del router",
244
+ portFree: (port) => `${port}: libre`,
245
+ textOnly: "Solo texto",
246
+ box: "Recuadro",
247
+ ellipse: "Elipse",
248
+ colors: { yellow: "amarillo", red: "rojo", blue: "azul", green: "verde", violet: "violeta" },
249
+ color: (color) => `Color ${color}`,
250
+ write: "Doble clic para escribir",
251
+ note: "Nota",
252
+ noteName: "nota",
253
+ },
254
+ exportPanel: {
255
+ copy: "Copiar",
256
+ copied: "Copiado",
257
+ labName: "Nombre del laboratorio (el del zip)",
258
+ fixFirst: "Corrige el laboratorio antes de exportar",
259
+ download: (lab) => `Descargar ${lab}.zip`,
260
+ onlySpec: "Solo isoloom.yml",
261
+ where: "Dónde se ejecuta",
262
+ whereIntro: "El zip contiene una carpeta por destino. Descomprímelo y arranca el que te convenga.",
263
+ mixed:
264
+ "Este laboratorio mezcla contenedores y máquinas virtuales, así que funciona con Vagrant. Hazlo todo de contenedores (Docker, Kubernetes, una VM en la nube) o todo de VM (Proxmox, VM en la nube) para desbloquear más destinos.",
265
+ install: "Isoloom arranca cualquiera de ellos con un solo comando. Instálalo una vez:",
266
+ files: (count) => `${String(count)} archivo${count === 1 ? "" : "s"}`,
267
+ downloadOnly: (target) => `Descargar solo ${target} (con isoloom.yml)`,
268
+ downloadTarget: (target) => `Descargar ${target}`,
269
+ withIsoloom: "Con Isoloom (detenlo con isoloom down)",
270
+ withTool: "O directamente con la herramienta",
271
+ run: "Ejecutar",
272
+ specIntro: "El laboratorio en un único archivo legible, para guardarlo en Git o editarlo a mano.",
273
+ showSpec: "Mostrar el archivo",
274
+ hideSpec: "Ocultar el archivo",
275
+ containersAndVms: "contenedores y VM",
276
+ dockerOnOneVm: "Docker en una VM",
277
+ oneVmPerMachine: "una VM por máquina",
278
+ },
279
+ issues: {
280
+ vlanBlocks: (vlan, block, other, sw) => `${vlan} es ${block} en un switch y ${other} en ${sw}.`,
281
+ areaBlock: (lan, block, switches) => `El área ${lan} es ${block}, sus switches dicen ${switches}.`,
282
+ noName: { machine: "Una máquina no tiene nombre.", lan: "Una LAN no tiene nombre.", switch: "Un switch no tiene nombre." },
283
+ sameName: {
284
+ machine: (name) => `Dos máquinas se llaman “${name}”.`,
285
+ lan: (name) => `Dos LAN se llaman “${name}”.`,
286
+ switch: (name) => `Dos switches se llaman “${name}”.`,
287
+ },
288
+ badPort: (machine, entry) => `«${entry}» en los puertos de ${machine} no es un puerto: un número de 1 a 65535 y, si no es TCP simple, /udp, /http, /https o /tls.`,
289
+ },
290
+ gns3: {
291
+ notGns3: "Esto no es un proyecto GNS3: abre el archivo .gns3 (dentro de un .gns3project, es el que está en la raíz).",
292
+ noTopology: "Este archivo no contiene ninguna topología GNS3.",
293
+ cisco: (node, kind) =>
294
+ `${node}: un router Cisco ${kind} se convirtió en un router automático; su configuración IOS no se conserva.`,
295
+ firewall: (node) => `${node}: un cortafuegos se convirtió en un router automático (sus reglas no se conservan).`,
296
+ noEquivalent: (node, type) => `${node}: el nodo “${type}” de GNS3 no tiene equivalente; se omitió.`,
297
+ noNodes: "El proyecto no tiene nodos.",
298
+ },
299
+ account: {
300
+ signIn: "Iniciar sesión con Cyber Auth",
301
+ signOut: "Cerrar sesión",
302
+ signedInAs: (name: string) => `Sesión iniciada: ${name}`,
303
+ },
304
+ projects: {
305
+ save: "Guardar en mis proyectos",
306
+ saveAs: "Guardar como nuevo proyecto…",
307
+ openList: "Abrir un proyecto…",
308
+ saveAsPrompt: "Nombre del nuevo proyecto:",
309
+ windowTitle: "Mis proyectos",
310
+ loading: "Cargando tus proyectos…",
311
+ none: "Aún no hay proyectos: guarda este lab para crear uno.",
312
+ open: "abierto",
313
+ openButton: "Abrir",
314
+ delete: (name: string) => `Eliminar ${name}`,
315
+ confirmDelete: (name: string) => `¿Eliminar el proyecto «${name}» y su historial?`,
316
+ failed: (error: string) => `No se pudieron cargar tus proyectos: ${error}`,
317
+ history: (name: string) => `Versiones anteriores de ${name}`,
318
+ noVersions: "Aún no hay versiones anteriores.",
319
+ restore: "Abrir",
320
+ historyHint: "Abrir una versión la pone en el lienzo: Deshacer recupera la actual, y el próximo guardado la conserva.",
321
+ opened: (name: string) => `«${name}» abierto. Deshacer recupera el lab que había.`,
322
+ status: {
323
+ idle: (name: string) => `Proyecto «${name}»`,
324
+ saving: (name: string) => `Guardando «${name}»…`,
325
+ saved: (name: string) => `Guardado en «${name}»`,
326
+ error: (name: string) => `No se pudo guardar «${name}»`,
327
+ },
328
+ },
329
+ machineRun: {
330
+ display: "Pantalla (VNC)",
331
+ displayTitle: "La pantalla de la máquina: su servidor VNC, o la pantalla de la VM",
332
+ displayOpened: (what) => `Abierto: ${what}`,
333
+ consoleHint: "Doble clic en una máquina para su consola; clic derecho para su pantalla y más.",
334
+ runFirst: "Ejecuta el laboratorio para abrir sus consolas.",
335
+ running: "En marcha en el lab.",
336
+ stopped: "Detenida (el resto del lab sigue).",
337
+ unknown: "No está en el lab en marcha: vuelve a iniciar el lab para añadirla.",
338
+ console: "Consola",
339
+ restart: "Reiniciar",
340
+ stop: "Detener",
341
+ start: "Iniciar",
342
+ snapshots: "Instantáneas",
343
+ takeSnapshot: "Tomar una",
344
+ snapshotHint: "Guardar la máquina tal como está (sus archivos, la configuración guardada de un router); no sus volúmenes",
345
+ snapshotPrompt: "Nombre de la instantánea (opcional):",
346
+ noSnapshots: "Ninguna todavía.",
347
+ restore: "Restaurar",
348
+ inUse: "en uso",
349
+ ownImage: "Volver a su imagen",
350
+ deleteSnapshot: (label: string) => `Eliminar la instantánea ${label}`,
351
+ },
352
+ update: {
353
+ available: (version: string) => `Isothrum ${version} está disponible.`,
354
+ restart: "Reiniciar para actualizar",
355
+ installing: "Actualizando…",
356
+ later: "Más tarde",
357
+ },
358
+ };