docker-client-mx 1.45.0 → 1.47.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 (110) hide show
  1. package/dist/docker-desktop-mx/browser/{chunk-COdMLD3H.js → chunk--8mGUJAn.js} +1 -1
  2. package/dist/docker-desktop-mx/browser/chunk-5_sGKQni.js +1 -0
  3. package/dist/docker-desktop-mx/browser/{chunk-Dy_g3RHY.js → chunk-B-o5hXOb.js} +1 -1
  4. package/dist/docker-desktop-mx/browser/{chunk-CHa6bNlc.js → chunk-B-wG1P-32.js} +4 -4
  5. package/dist/docker-desktop-mx/browser/chunk-B2EShQtx.js +6 -0
  6. package/dist/docker-desktop-mx/browser/{chunk-B13W1gEu.js → chunk-BYVhZ88_.js} +1 -1
  7. package/dist/docker-desktop-mx/browser/{chunk-Bd5-MqqR.js → chunk-B_y5IYob2.js} +2 -2
  8. package/dist/docker-desktop-mx/browser/chunk-BdM_u7-N.js +1 -0
  9. package/dist/docker-desktop-mx/browser/chunk-BkMeriAO2.js +1 -0
  10. package/dist/docker-desktop-mx/browser/chunk-BzctO2pl.js +1 -0
  11. package/dist/docker-desktop-mx/browser/{chunk-BZwYBA7Z.js → chunk-C0zZrY7Q.js} +1 -1
  12. package/dist/docker-desktop-mx/browser/chunk-CAFP1xPu.js +1 -0
  13. package/dist/docker-desktop-mx/browser/chunk-CI4m0buS.js +1 -0
  14. package/dist/docker-desktop-mx/browser/chunk-CQWK0K-u.js +1 -0
  15. package/dist/docker-desktop-mx/browser/chunk-Ci_V0cow.js +1 -0
  16. package/dist/docker-desktop-mx/browser/chunk-CsXiAvQZ.js +1 -0
  17. package/dist/docker-desktop-mx/browser/chunk-Cva1WgC9.js +1 -0
  18. package/dist/docker-desktop-mx/browser/chunk-CyIYmLAx2.js +1 -0
  19. package/dist/docker-desktop-mx/browser/chunk-D9wKjS-4.js +4 -0
  20. package/dist/docker-desktop-mx/browser/chunk-DDXVa5ug.js +1 -0
  21. package/dist/docker-desktop-mx/browser/chunk-DGowKW_R2.js +3 -0
  22. package/dist/docker-desktop-mx/browser/chunk-DJ_YTqcg.js +1 -0
  23. package/dist/docker-desktop-mx/browser/chunk-DLduIDn8.js +1 -0
  24. package/dist/docker-desktop-mx/browser/chunk-DM-ZJf6i2.js +1 -0
  25. package/dist/docker-desktop-mx/browser/{chunk-eVHlLrxe.js → chunk-DRSLMQv0.js} +2 -2
  26. package/dist/docker-desktop-mx/browser/chunk-DUEEE1of.js +1 -0
  27. package/dist/docker-desktop-mx/browser/chunk-DVNubhu5.js +1 -0
  28. package/dist/docker-desktop-mx/browser/chunk-DaLHmamd.js +1 -0
  29. package/dist/docker-desktop-mx/browser/chunk-DgQfvcw6.js +1 -0
  30. package/dist/docker-desktop-mx/browser/chunk-DhhlIffD.js +1 -0
  31. package/dist/docker-desktop-mx/browser/chunk-DnoDi7LZ.js +1 -0
  32. package/dist/docker-desktop-mx/browser/chunk-DpQe-4PA.js +1 -0
  33. package/dist/docker-desktop-mx/browser/chunk-Dx6pB9SS.js +1 -0
  34. package/dist/docker-desktop-mx/browser/{chunk-B3n-2UOi.js → chunk-F6eWZMl2.js} +1 -1
  35. package/dist/docker-desktop-mx/browser/{chunk-Bcx5WMyJ.js → chunk-KPCWgafs.js} +1 -1
  36. package/dist/docker-desktop-mx/browser/chunk-MHnhOupE2.js +1 -0
  37. package/dist/docker-desktop-mx/browser/{chunk-_wm6hEEA.js → chunk-N02t_L0r.js} +1 -1
  38. package/dist/docker-desktop-mx/browser/chunk-RW2CuHOJ.js +1 -0
  39. package/dist/docker-desktop-mx/browser/chunk-TwB2JZ5F2.js +1 -0
  40. package/dist/docker-desktop-mx/browser/chunk-YcHxGDGY.js +1 -0
  41. package/dist/docker-desktop-mx/browser/{chunk-BUtOgCv_.js → chunk-_SDm3Kr6.js} +1 -1
  42. package/dist/docker-desktop-mx/browser/chunk-aZvSgdSQ.js +1 -0
  43. package/dist/docker-desktop-mx/browser/chunk-t2gYzsd3.js +1 -0
  44. package/dist/docker-desktop-mx/browser/chunk-x4B-Z7Ml.js +1 -0
  45. package/dist/docker-desktop-mx/browser/index.html +2 -2
  46. package/dist/docker-desktop-mx/browser/main-H3S3O6WP.js +1 -0
  47. package/dist/docker-desktop-mx/browser/styles-GSAQVAJP.css +1 -0
  48. package/dist-electron/attention.js +14 -1
  49. package/dist-electron/attention.js.map +1 -1
  50. package/dist-electron/channels.js +18 -0
  51. package/dist-electron/channels.js.map +1 -1
  52. package/dist-electron/container-adjust.js +138 -10
  53. package/dist-electron/container-adjust.js.map +1 -1
  54. package/dist-electron/file-ops.js +315 -0
  55. package/dist-electron/file-ops.js.map +1 -0
  56. package/dist-electron/files.js +19 -10
  57. package/dist-electron/files.js.map +1 -1
  58. package/dist-electron/ipc.js +113 -5
  59. package/dist-electron/ipc.js.map +1 -1
  60. package/dist-electron/main.js +93 -3
  61. package/dist-electron/main.js.map +1 -1
  62. package/dist-electron/memory-watch.js +87 -0
  63. package/dist-electron/memory-watch.js.map +1 -0
  64. package/dist-electron/preload.js +40 -4
  65. package/dist-electron/preload.js.map +1 -1
  66. package/dist-electron/settings.js +32 -1
  67. package/dist-electron/settings.js.map +1 -1
  68. package/dist-electron/stats.js +25 -0
  69. package/dist-electron/stats.js.map +1 -1
  70. package/dist-electron/volume-files.js +1 -0
  71. package/dist-electron/volume-files.js.map +1 -1
  72. package/dist-electron/volume-restore.js +40 -0
  73. package/dist-electron/volume-restore.js.map +1 -0
  74. package/dist-electron/volume-schedules.js +343 -0
  75. package/dist-electron/volume-schedules.js.map +1 -0
  76. package/package.json +1 -1
  77. package/dist/docker-desktop-mx/browser/chunk-Af1e1d8G.js +0 -1
  78. package/dist/docker-desktop-mx/browser/chunk-B2NHI2Ew.js +0 -1
  79. package/dist/docker-desktop-mx/browser/chunk-BIIdmzaV2.js +0 -1
  80. package/dist/docker-desktop-mx/browser/chunk-BJACElSf2.js +0 -1
  81. package/dist/docker-desktop-mx/browser/chunk-BPNQPsl2.js +0 -1
  82. package/dist/docker-desktop-mx/browser/chunk-BxKOYZan.js +0 -1
  83. package/dist/docker-desktop-mx/browser/chunk-BxU6JdzU.js +0 -1
  84. package/dist/docker-desktop-mx/browser/chunk-C3u9Hm0s.js +0 -1
  85. package/dist/docker-desktop-mx/browser/chunk-CGft6wQH2.js +0 -6
  86. package/dist/docker-desktop-mx/browser/chunk-COBWzwhz.js +0 -1
  87. package/dist/docker-desktop-mx/browser/chunk-CXpIB_qc.js +0 -1
  88. package/dist/docker-desktop-mx/browser/chunk-ClGJowQ7.js +0 -1
  89. package/dist/docker-desktop-mx/browser/chunk-Clfbc1-d.js +0 -1
  90. package/dist/docker-desktop-mx/browser/chunk-CoprhnOm.js +0 -1
  91. package/dist/docker-desktop-mx/browser/chunk-CsQ_euXP.js +0 -1
  92. package/dist/docker-desktop-mx/browser/chunk-D3bHzook.js +0 -3
  93. package/dist/docker-desktop-mx/browser/chunk-DEXem6rk.js +0 -1
  94. package/dist/docker-desktop-mx/browser/chunk-DPn8Rpg4.js +0 -1
  95. package/dist/docker-desktop-mx/browser/chunk-DVXm8E_S.js +0 -1
  96. package/dist/docker-desktop-mx/browser/chunk-DX-Zo-hw.js +0 -1
  97. package/dist/docker-desktop-mx/browser/chunk-DZ-f89Uu.js +0 -1
  98. package/dist/docker-desktop-mx/browser/chunk-DZXhuKXm.js +0 -1
  99. package/dist/docker-desktop-mx/browser/chunk-DctinxSO.js +0 -1
  100. package/dist/docker-desktop-mx/browser/chunk-DeXGJ-vD2.js +0 -1
  101. package/dist/docker-desktop-mx/browser/chunk-EFAsN7J4.js +0 -1
  102. package/dist/docker-desktop-mx/browser/chunk-FqKVK_Os2.js +0 -1
  103. package/dist/docker-desktop-mx/browser/chunk-IMRsZUv82.js +0 -1
  104. package/dist/docker-desktop-mx/browser/chunk-U7tL4XEw2.js +0 -1
  105. package/dist/docker-desktop-mx/browser/chunk-YQkNtrRq.js +0 -1
  106. package/dist/docker-desktop-mx/browser/chunk-jpKpwesj.js +0 -1
  107. package/dist/docker-desktop-mx/browser/chunk-m112xmv9.js +0 -1
  108. package/dist/docker-desktop-mx/browser/chunk-u0OAgv4f.js +0 -4
  109. package/dist/docker-desktop-mx/browser/main-INZSNGJM.js +0 -1
  110. package/dist/docker-desktop-mx/browser/styles-BGYQU5CU.css +0 -1
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StatsWatcher = void 0;
4
4
  exports.toCpuPercent = toCpuPercent;
5
5
  exports.toMemoryBytes = toMemoryBytes;
6
+ exports.sampleLimitedMemory = sampleLimitedMemory;
6
7
  exports.toNetworkCounters = toNetworkCounters;
7
8
  exports.toNetworkRate = toNetworkRate;
8
9
  exports.toContainerStats = toContainerStats;
@@ -46,6 +47,30 @@ function toMemoryBytes(raw) {
46
47
  const cache = memory?.stats?.['inactive_file'] ?? memory?.stats?.['cache'] ?? 0;
47
48
  return { used: Math.max(0, usage - cache), limit: memory?.limit ?? 0 };
48
49
  }
50
+ /**
51
+ * Eén geheugenmeting van elke draaiende container met een geheugengrens (fase 89). Zonder grens geeft
52
+ * Docker het geheugen van de machine als `limit`; daaraan is een container zonder grens te herkennen.
53
+ * `one-shot`: niet wachten op een tweede meting, die is alleen voor het processorgebruik nodig.
54
+ */
55
+ async function sampleLimitedMemory() {
56
+ const { docker } = (0, docker_client_1.getConnection)();
57
+ const [info, running] = await Promise.all([docker.info(), docker.listContainers()]);
58
+ const machine = info.MemTotal ?? 0;
59
+ const samples = await Promise.all(running.map(async (container) => {
60
+ try {
61
+ const raw = (await docker.getContainer(container.Id).stats({ stream: false, 'one-shot': true }));
62
+ const { used, limit } = toMemoryBytes(raw);
63
+ return limit > 0 && (machine === 0 || limit < machine)
64
+ ? { id: container.Id, name: (container.Names[0] ?? container.Id).replace(/^\//, ''), usedBytes: used, limitBytes: limit }
65
+ : null;
66
+ }
67
+ catch {
68
+ // Net gestopt: dan telt hij deze ronde niet mee.
69
+ return null;
70
+ }
71
+ }));
72
+ return samples.filter((sample) => sample !== null);
73
+ }
49
74
  const NO_TRAFFIC = { rxBytesPerSec: 0, txBytesPerSec: 0 };
50
75
  /**
51
76
  * De tellers uit een meting, opgeteld over alle interfaces, of `null` als er geen zijn.
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../electron/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../electron/stats.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MOUNT = void 0;
4
4
  exports.mountedPath = mountedPath;
5
5
  exports.volumePath = volumePath;
6
+ exports.ensureImage = ensureImage;
6
7
  exports.helperFor = helperFor;
7
8
  exports.listVolumeDirectory = listVolumeDirectory;
8
9
  exports.closeVolumeBrowser = closeVolumeBrowser;
@@ -1 +1 @@
1
- {"version":3,"file":"volume-files.js","sourceRoot":"","sources":["../electron/volume-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"volume-files.js","sourceRoot":"","sources":["../electron/volume-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.restoreWithUsers = restoreWithUsers;
4
+ const docker_client_1 = require("./docker-client");
5
+ const volume_backup_1 = require("./volume-backup");
6
+ const volume_copy_1 = require("./volume-copy");
7
+ const docker = () => ({
8
+ runningUsers: async (volume) => (await (0, volume_copy_1.listVolumeUsers)(volume)).filter((user) => user.running).map((user) => user.name),
9
+ stop: async (container) => {
10
+ await (0, docker_client_1.getConnection)().docker.getContainer(container).stop();
11
+ },
12
+ start: async (container) => {
13
+ await (0, docker_client_1.getConnection)().docker.getContainer(container).start();
14
+ },
15
+ restore: volume_backup_1.restoreVolume,
16
+ });
17
+ /** Zet `file` terug in `volume`; met `stopUsers` staan de containers die het gebruiken zolang stil. */
18
+ async function restoreWithUsers(volume, file, stopUsers, deps = docker()) {
19
+ if (file === null || !stopUsers) {
20
+ return deps.restore(volume, file);
21
+ }
22
+ const stopped = [];
23
+ let result;
24
+ try {
25
+ for (const user of await deps.runningUsers(volume)) {
26
+ await deps.stop(user);
27
+ stopped.push(user);
28
+ }
29
+ result = await deps.restore(volume, file);
30
+ }
31
+ catch (err) {
32
+ result = { ok: false, problem: err instanceof Error ? err.message : String(err) };
33
+ }
34
+ const notRestarted = [];
35
+ for (const user of stopped) {
36
+ await deps.start(user).catch(() => notRestarted.push(user));
37
+ }
38
+ return notRestarted.length > 0 && result.ok ? { ...result, notRestarted } : result;
39
+ }
40
+ //# sourceMappingURL=volume-restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volume-restore.js","sourceRoot":"","sources":["../electron/volume-restore.ts"],"names":[],"mappings":";;AA+BA,4CAgCC;AA9DD,mDAAgD;AAChD,mDAAgD;AAChD,+CAAgD;AAgBhD,MAAM,MAAM,GAAG,GAAgB,EAAE,CAAC,CAAC;IACjC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAA,6BAAe,EAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;IACvH,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,IAAA,6BAAa,GAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IACD,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACzB,MAAM,IAAA,6BAAa,GAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,6BAAa;CACvB,CAAC,CAAC;AAEH,uGAAuG;AAChG,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,IAAmB,EACnB,SAAkB,EAClB,OAAoB,MAAM,EAAE;IAG5B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAqB,CAAC;IAE1B,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrF,CAAC"}
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VolumeSchedules = exports.MAX_KEEP = void 0;
37
+ exports.intervalOf = intervalOf;
38
+ exports.isScheduleDue = isScheduleDue;
39
+ exports.backupTime = backupTime;
40
+ exports.backupsToRemove = backupsToRemove;
41
+ exports.parseSchedules = parseSchedules;
42
+ exports.configureVolumeSchedules = configureVolumeSchedules;
43
+ exports.volumeSchedules = volumeSchedules;
44
+ const path = __importStar(require("node:path"));
45
+ const i18n_1 = require("./i18n");
46
+ const volume_backup_1 = require("./volume-backup");
47
+ /**
48
+ * Vanzelf een back-up van een volume (fase 85): per volume elke dag of elke week, naar een map,
49
+ * met een vast aantal dat blijft.
50
+ *
51
+ * De back-up zelf is die van fase 18, zonder dialoog. Het schema rekent vanaf de laatste back-up
52
+ * die lukte: een app die een week dicht was, maakt er één, niet zeven. Wat er weg mag, zijn alleen
53
+ * de bestanden met de naam die de app zelf geeft (`<volume>-<datum>-<tijd>.tar`); wat er verder in
54
+ * de map staat, blijft staan.
55
+ *
56
+ * Gebruikt een draaiende container het volume, dan overslaan (en het elk uur opnieuw proberen), of,
57
+ * als je dat koos, die containers zolang pauzeren. Een database die tijdens de back-up schrijft,
58
+ * levert een `.tar` die hij misschien zelf niet meer leest; gepauzeerd schrijft hij niets.
59
+ *
60
+ * Zonder Electron en zonder Docker: alles komt als functies binnen, zodat het met een klok te testen is.
61
+ */
62
+ const HOUR_MS = 60 * 60 * 1000;
63
+ const DAY_MS = 24 * HOUR_MS;
64
+ /** Hoeveel back-ups er hooguit blijven; meer is vast een tikfout. */
65
+ exports.MAX_KEEP = 100;
66
+ /** Hoe lang het tussen twee back-ups hoort te zijn. */
67
+ function intervalOf(every) {
68
+ return every === 'day' ? DAY_MS : 7 * DAY_MS;
69
+ }
70
+ /**
71
+ * Of een volume aan de beurt is. Een uur speling, omdat main elk uur kijkt: anders schuift een
72
+ * dagelijkse back-up elke dag een uur op. Na een mislukte of overgeslagen poging pas een uur later
73
+ * opnieuw, zodat een lege schijf niet bij elke tik een poging kost.
74
+ */
75
+ function isScheduleDue(schedule, now) {
76
+ if (schedule.lastOutcome !== null && schedule.lastOutcome.kind !== 'ok' && now - schedule.lastOutcome.at < HOUR_MS - 5 * 60 * 1000) {
77
+ return false;
78
+ }
79
+ return schedule.lastSuccess === null || now - schedule.lastSuccess >= intervalOf(schedule.every) - HOUR_MS;
80
+ }
81
+ function escapeRegExp(text) {
82
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
83
+ }
84
+ /** Wanneer een eigen back-up gemaakt is, uit zijn naam (`<volume>-<jjjjmmdd>-<uumm>.tar`); `null` als hij niet van de app is. */
85
+ function backupTime(volume, name) {
86
+ const match = new RegExp(`^${escapeRegExp(volume)}-(\\d{4})(\\d{2})(\\d{2})-(\\d{2})(\\d{2})\\.tar$`).exec(name);
87
+ if (match === null) {
88
+ return null;
89
+ }
90
+ const [year, month, day, hour, minute] = match.slice(1).map(Number);
91
+ return new Date(year, month - 1, day, hour, minute).getTime();
92
+ }
93
+ /**
94
+ * Welke bestanden in de map weg mogen: alleen back-ups van dit volume met de naam die de app geeft,
95
+ * en daarvan alles behalve de nieuwste `keep`. De datum staat in de naam, dus sorteren op naam is
96
+ * sorteren op tijd.
97
+ */
98
+ function backupsToRemove(volume, names, keep) {
99
+ return names
100
+ .filter((name) => backupTime(volume, name) !== null)
101
+ .sort()
102
+ .reverse()
103
+ .slice(Math.max(1, keep));
104
+ }
105
+ const EVERY = ['day', 'week'];
106
+ const WHEN_IN_USE = ['skip', 'pause'];
107
+ function parseOutcome(raw) {
108
+ const value = raw;
109
+ if (value === null || typeof value !== 'object' || typeof value['at'] !== 'number') {
110
+ return null;
111
+ }
112
+ const at = value['at'];
113
+ if (value['kind'] === 'ok' && typeof value['file'] === 'string') {
114
+ return { kind: 'ok', at, file: value['file'] };
115
+ }
116
+ if (value['kind'] === 'failed' && typeof value['problem'] === 'string') {
117
+ return { kind: 'failed', at, problem: value['problem'] };
118
+ }
119
+ if (value['kind'] === 'skipped' && Array.isArray(value['users'])) {
120
+ return { kind: 'skipped', at, users: value['users'].filter((user) => typeof user === 'string') };
121
+ }
122
+ return null;
123
+ }
124
+ /** Leest het bewaarde bestand; een schema dat niet klopt, valt weg in plaats van alles mee te nemen. */
125
+ function parseSchedules(text) {
126
+ if (text === null) {
127
+ return [];
128
+ }
129
+ try {
130
+ const raw = JSON.parse(text);
131
+ const list = Array.isArray(raw.schedules) ? raw.schedules : [];
132
+ const result = [];
133
+ for (const item of list) {
134
+ const { volume, every, folder, keep, whenInUse, lastSuccess } = item;
135
+ if (typeof volume !== 'string' ||
136
+ volume === '' ||
137
+ !EVERY.includes(every) ||
138
+ typeof folder !== 'string' ||
139
+ folder === '' ||
140
+ typeof keep !== 'number' ||
141
+ !Number.isInteger(keep) ||
142
+ keep < 1 ||
143
+ keep > exports.MAX_KEEP ||
144
+ !WHEN_IN_USE.includes(whenInUse) ||
145
+ result.some((existing) => existing.volume === volume)) {
146
+ continue;
147
+ }
148
+ result.push({
149
+ volume,
150
+ every: every,
151
+ folder,
152
+ keep,
153
+ whenInUse: whenInUse,
154
+ lastSuccess: typeof lastSuccess === 'number' ? lastSuccess : null,
155
+ lastOutcome: parseOutcome(item.lastOutcome),
156
+ });
157
+ }
158
+ return result;
159
+ }
160
+ catch {
161
+ return [];
162
+ }
163
+ }
164
+ class VolumeSchedules {
165
+ deps;
166
+ schedules;
167
+ /** Of er al een tik loopt of wacht; een tweede tik tegelijk heeft geen zin. */
168
+ ticking = false;
169
+ /** Back-ups na elkaar, ook "Nu een back-up" tijdens een tik: twee tegelijk in dezelfde minuut geven dezelfde naam. */
170
+ queue = Promise.resolve();
171
+ constructor(deps) {
172
+ this.deps = deps;
173
+ this.schedules = parseSchedules(deps.read());
174
+ }
175
+ list() {
176
+ return this.schedules;
177
+ }
178
+ /** Zet of vervangt het schema; wat er al gebeurde (de laatste back-up) blijft. */
179
+ set(input) {
180
+ const previous = this.schedules.find((schedule) => schedule.volume === input.volume);
181
+ const next = {
182
+ volume: input.volume,
183
+ every: input.every,
184
+ folder: input.folder,
185
+ keep: Math.min(exports.MAX_KEEP, Math.max(1, Math.round(input.keep))),
186
+ whenInUse: input.whenInUse,
187
+ lastSuccess: previous?.lastSuccess ?? null,
188
+ // Een ander doel of een andere keus: een eerdere mislukking zegt daar niets meer over.
189
+ lastOutcome: previous?.lastOutcome?.kind === 'ok' ? previous.lastOutcome : null,
190
+ };
191
+ this.store([...this.schedules.filter((schedule) => schedule.volume !== input.volume), next].sort((a, b) => a.volume.localeCompare(b.volume)));
192
+ return this.schedules;
193
+ }
194
+ remove(volume) {
195
+ this.store(this.schedules.filter((schedule) => schedule.volume !== volume));
196
+ return this.schedules;
197
+ }
198
+ /** Maakt de back-ups die aan de beurt zijn, na elkaar. Aan te roepen zo vaak als je wilt. */
199
+ async tick() {
200
+ if (this.ticking) {
201
+ return;
202
+ }
203
+ this.ticking = true;
204
+ try {
205
+ await this.serial(async () => {
206
+ for (const schedule of this.schedules) {
207
+ if (isScheduleDue(schedule, this.deps.now())) {
208
+ await this.run(schedule, true);
209
+ }
210
+ }
211
+ });
212
+ }
213
+ finally {
214
+ this.ticking = false;
215
+ }
216
+ }
217
+ /**
218
+ * Nu een back-up (fase 88), met de regels van het schema: dezelfde map, overslaan of pauzeren, en
219
+ * het aantal dat blijft. Zonder melding: wie erom vroeg, ziet de uitkomst in de dialoog.
220
+ */
221
+ backupNow(volume) {
222
+ return this.serial(async () => {
223
+ const schedule = this.schedules.find((candidate) => candidate.volume === volume);
224
+ return schedule === undefined ? null : this.run(schedule, false);
225
+ });
226
+ }
227
+ /** De back-ups die de app voor dit volume in de map van het schema zette, nieuwste eerst. */
228
+ backups(volume) {
229
+ const schedule = this.schedules.find((candidate) => candidate.volume === volume);
230
+ if (schedule === undefined || !this.deps.folderExists(schedule.folder)) {
231
+ return [];
232
+ }
233
+ return this.deps
234
+ .listFolder(schedule.folder)
235
+ .flatMap((name) => {
236
+ const at = backupTime(volume, name);
237
+ if (at === null) {
238
+ return [];
239
+ }
240
+ try {
241
+ return [{ name, at, sizeBytes: this.deps.fileSize(path.join(schedule.folder, name)) }];
242
+ }
243
+ catch {
244
+ // Net weggehaald, of geen rechten: dan staat hij er niet in.
245
+ return [];
246
+ }
247
+ })
248
+ .sort((a, b) => b.at - a.at);
249
+ }
250
+ /** Het volledige pad van een eigen back-up; `null` als die naam er niet (meer) bij hoort. */
251
+ backupPath(volume, name) {
252
+ const schedule = this.schedules.find((candidate) => candidate.volume === volume);
253
+ return schedule !== undefined && this.backups(volume).some((backup) => backup.name === name) ? path.join(schedule.folder, name) : null;
254
+ }
255
+ serial(work) {
256
+ const next = this.queue.then(work, work);
257
+ this.queue = next.catch(() => undefined);
258
+ return next;
259
+ }
260
+ async run(schedule, notify) {
261
+ const outcome = await this.attempt(schedule);
262
+ const current = this.schedules.find((candidate) => candidate.volume === schedule.volume);
263
+ // Intussen weggehaald: dan niets terugzetten.
264
+ if (current === undefined) {
265
+ return outcome;
266
+ }
267
+ if (notify && outcome.kind === 'failed' && current.lastOutcome?.kind !== 'failed') {
268
+ this.deps.notifyFailure(schedule.volume, outcome.problem);
269
+ }
270
+ this.store(this.schedules.map((candidate) => candidate.volume === schedule.volume
271
+ ? { ...candidate, lastOutcome: outcome, lastSuccess: outcome.kind === 'ok' ? outcome.at : candidate.lastSuccess }
272
+ : candidate));
273
+ return outcome;
274
+ }
275
+ async attempt(schedule) {
276
+ const started = this.deps.now();
277
+ const failed = (problem) => ({ kind: 'failed', at: started, problem });
278
+ if (!this.deps.folderExists(schedule.folder)) {
279
+ return failed((0, i18n_1.t)({
280
+ en: `The folder ${schedule.folder} is not there (anymore).`,
281
+ nl: `De map ${schedule.folder} is er niet (meer).`,
282
+ de: `Der Ordner ${schedule.folder} ist nicht (mehr) da.`,
283
+ fr: `Le dossier ${schedule.folder} n’existe pas (ou plus).`,
284
+ es: `La carpeta ${schedule.folder} no está (ya).`,
285
+ }));
286
+ }
287
+ const paused = [];
288
+ try {
289
+ const users = await this.deps.runningUsers(schedule.volume);
290
+ if (users.length > 0 && schedule.whenInUse === 'skip') {
291
+ return { kind: 'skipped', at: started, users };
292
+ }
293
+ for (const user of users) {
294
+ await this.deps.pause(user);
295
+ paused.push(user);
296
+ }
297
+ const target = path.join(schedule.folder, (0, volume_backup_1.backupFileName)(schedule.volume, new Date(started)));
298
+ const result = await this.deps.backup(schedule.volume, target);
299
+ if (!result.ok) {
300
+ return failed(result.problem);
301
+ }
302
+ this.prune(schedule);
303
+ return { kind: 'ok', at: started, file: target };
304
+ }
305
+ catch (err) {
306
+ return failed(err instanceof Error ? err.message : String(err));
307
+ }
308
+ finally {
309
+ // Altijd weer los, ook als de back-up mislukte: een gepauzeerde database is erger dan geen back-up.
310
+ for (const user of paused) {
311
+ await this.deps.unpause(user).catch(() => undefined);
312
+ }
313
+ }
314
+ }
315
+ /** Haalt de oudste back-ups weg; lukt dat niet, dan blijven ze staan, en is de back-up nog steeds gelukt. */
316
+ prune(schedule) {
317
+ try {
318
+ for (const name of backupsToRemove(schedule.volume, this.deps.listFolder(schedule.folder), schedule.keep)) {
319
+ this.deps.removeFile(path.join(schedule.folder, name));
320
+ }
321
+ }
322
+ catch {
323
+ // Een bestand dat in gebruik is, of een map zonder rechten: de volgende keer opnieuw.
324
+ }
325
+ }
326
+ store(schedules) {
327
+ this.schedules = schedules;
328
+ this.deps.write(`${JSON.stringify({ schedules }, null, 2)}\n`);
329
+ this.deps.changed(schedules);
330
+ }
331
+ }
332
+ exports.VolumeSchedules = VolumeSchedules;
333
+ let instance = null;
334
+ /** Eén keer, vanuit main.ts, dat de paden en Docker kent. */
335
+ function configureVolumeSchedules(deps) {
336
+ instance = new VolumeSchedules(deps);
337
+ return instance;
338
+ }
339
+ /** `null` zonder `configureVolumeSchedules` (de smoke test): dan zijn er geen schema's. */
340
+ function volumeSchedules() {
341
+ return instance;
342
+ }
343
+ //# sourceMappingURL=volume-schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volume-schedules.js","sourceRoot":"","sources":["../electron/volume-schedules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docker-client-mx",
3
- "version": "1.45.0",
3
+ "version": "1.47.0",
4
4
  "description": "A desktop client for Docker in WSL, without Docker Desktop: containers, images, volumes, networks, compose and logs.",
5
5
  "keywords": [
6
6
  "docker",
@@ -1 +0,0 @@
1
- import{$n as sS,B as Kr,Hn as p$1,Rn as oS,Rt as X,_r as wt,f as C}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";var p;var g=p$1(()=>{Kr();sS();f();Kr();p=class i{toast=C(u);cliStatus=wt(null);running=wt(new Set);remembered=wt([]);openingFile=wt(!1);status=this.cliStatus.asReadonly();known=this.remembered.asReadonly();opening=this.openingFile.asReadonly();pending=this.running.asReadonly();async loadStatus(){this.cliStatus.set(await window.electron.compose.status())}async loadKnown(){try{this.remembered.set(await window.electron.compose.known())}catch{}}async openFile(){this.openingFile.set(!0);try{let e=await window.electron.compose.openFile();e.ok?e.project!==null&&this.toast.success(oS().compose.upDone(e.project)):this.toast.error(e.problem)}finally{this.openingFile.set(!1),this.loadKnown()}}async forget(e){await window.electron.compose.forget(e),this.toast.success(oS().compose.forgotten(e)),await this.loadKnown()}async up(e){await this.run(e,`up`)}async down(e){await this.run(e,`down`)}async recreate(e,t){this.running.update(o=>new Set(o).add(e));try{let o=await window.electron.compose.recreate(e,t);return o.ok?this.toast.success(oS().compose.recreateDone(t)):this.toast.error(o.problem),o.ok}finally{this.release(e)}}async run(e,t){this.running.update(o=>new Set(o).add(e));try{let o=await(t===`up`?window.electron.compose.up(e):window.electron.compose.down(e));if(o.ok){let r=oS().compose;this.toast.success(t===`up`?r.upDone(e):r.downDone(e))}else this.toast.error(o.problem)}finally{this.release(e),this.loadKnown()}}release(e){this.running.update(t=>{let o=new Set(t);return o.delete(e),o})}static ɵfac=function(t){return new(t||i)};static ɵprov=X({token:i,factory:i.ɵfac,providedIn:`root`})}});export{p as n,g as t};
@@ -1 +0,0 @@
1
- import{$n as sS,An as lS,B as Kr,Hn as p,Nt as W,Rn as oS,Rt as X,_r as wt,cr as ve,f as C,rt as Ot,sn as eH,w as G}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";import{i as h,r as d}from"./chunk-BZwYBA7Z.js";var w;var B=p(()=>{Kr();h();lS();f();sS();Kr();w=class l{toast=C(u);items=wt([]);sizeByName=wt({});busy=wt(!1);sizesBusy=wt(!1);loadProblem=wt(null);running=wt(new Set);loading=this.busy.asReadonly();loadingSizes=this.sizesBusy.asReadonly();problem=this.loadProblem.asReadonly();pending=this.running.asReadonly();volumes=Ot(()=>{let s=this.sizeByName();return this.items().map(e=>G(W({},e),{sizeBytes:s[e.name]??null}))});totalBytes=Ot(()=>this.volumes().reduce((s,e)=>s+(e.sizeBytes??0),0));unusedCount=Ot(()=>this.items().filter(s=>s.inUseBy===0).length);constructor(){C(ve).onDestroy(window.electron.events.subscribe(s=>{s.includes(`volume`)&&this.refresh()}))}async refresh(){this.busy.set(!0);try{this.items.set(await window.electron.volumes.list()),this.loadProblem.set(null)}catch(s){this.loadProblem.set(eH(s))}finally{this.busy.set(!1)}this.loadSizes()}async loadSizes(){this.sizesBusy.set(!0);try{this.sizeByName.set(await window.electron.volumes.sizes())}catch{}finally{this.sizesBusy.set(!1)}}async create(s){let e;try{let t=await window.electron.volumes.create(s);e=t.ok?null:t.problem}catch(t){e=eH(t)}return e===null&&(this.toast.success(oS().volumes.created(s.name)),await this.refresh()),e}async remove(s,e){this.running.update(t=>new Set(t).add(s));try{let t=await window.electron.volumes.remove(s,e);t.ok||this.toast.error(t.problem)}finally{this.running.update(t=>{let i=new Set(t);return i.delete(s),i})}await this.refresh()}async removeMany(s,e){await Promise.all(s.map(t=>this.remove(t,e)))}async prune(s){this.busy.set(!0);try{let e=await window.electron.volumes.prune(s);e.ok?this.toast.success(e.removed===0?oS().common.nothingToPrune:oS().volumes.pruned(e.removed,d(e.reclaimedBytes))):this.toast.error(e.problem)}finally{this.busy.set(!1)}await this.refresh()}async backup(s){await this.whilePending(s,async()=>{let e=await window.electron.volumes.backup(s);e.ok?e.savedTo!==null&&this.toast.success(oS().volumes.backedUp(s,e.savedTo)):this.toast.error(e.problem)})}async restore(s){await this.whilePending(s,async()=>{let e=await window.electron.volumes.restore(s);e.ok?e.restoredFrom!==null&&this.toast.success(oS().volumes.restored(e.restoredFrom,s)):this.toast.error(e.problem)}),await this.loadSizes()}async whilePending(s,e){this.running.update(t=>new Set(t).add(s));try{await e()}catch(t){this.toast.error(eH(t))}finally{this.running.update(t=>{let i=new Set(t);return i.delete(s),i})}}static ɵfac=function(e){return new(e||l)};static ɵprov=X({token:l,factory:l.ɵfac,providedIn:`root`})}});export{w as n,B as t};
@@ -1 +0,0 @@
1
- import{$n as sS,A as HE,An as lS,B as Kr,D as Gm,En as kE,Fn as nk,Gt as _m,H as Ld,Hn as p,K as My,Kn as pk,Nn as mj,Nt as W,Pt as Wm,Qn as rp,R as Jm,Rn as oS,Rt as X,St as Tg,_r as wt,bn as hg,cn as ec,dr as vk,et as Od,f as C,hr as wc,ht as Sc,in as dS,lr as vg,mt as SE,o as Ac,q as Nc,rt as Ot,sn as eH,t as $E,tt as Oi,u as Br,un as fg,w as G,wn as jc,xt as Tc}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";import{_ as pn,d as dn,f as fn,g as ln,l as an,m as ie,r as Je,u as cn,v as un}from"./chunk-EFAsN7J4.js";import{n as p$1,t as M}from"./chunk-DZXhuKXm.js";import{n as v,t as u$1}from"./chunk-BUtOgCv_.js";import{s as fe,u as ra}from"./chunk-jpKpwesj.js";var be;var J;var ue=p(()=>{Kr();M();Kr();be=`containers.groups`,J=class i{assignments=C(p$1).entries(be);names=Ot(()=>[...new Set(this.assignments().values())].sort((e,t)=>e.localeCompare(t)));groupOf(n){return this.assignments().get(n)??null}assign(n,e){let t=e.trim();if(t===``)return;let o=new Map(this.assignments());for(let d of n)o.set(d,t);this.assignments.set(o)}release(n){let e=new Map(this.assignments());for(let t of n)e.delete(t);this.assignments.set(e)}rename(n,e){let t=e.trim();if(t===``||t===n)return;let o=new Map(this.assignments());for(let[d,M]of o)M===n&&o.set(d,t);this.assignments.set(o)}moveContainer(n,e){let t=this.assignments().get(n);if(t===void 0||n===e)return;let o=new Map(this.assignments());o.delete(n),o.set(e,t),this.assignments.set(o)}dissolve(n){let e=new Map([...this.assignments()].filter(([,t])=>t!==n));this.assignments.set(e)}static ɵfac=function(e){return new(e||i)};static ɵprov=X({token:i,factory:i.ɵfac,providedIn:`root`})}});function he(i,n){if(i&1&&(Oi(0,`p`,11),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().taken)}}function Ce(i,n){if(i&1&&(Oi(0,`p`,12),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().invalid)}}function we(i,n){if(i&1&&(Oi(0,`p`,13),pk(1),Nc()),i&2){let e=HE(2);ec(),Ac(` `,e.t().compose,` `)}}function ke(i,n){i&1&&(Oi(0,`p`,14),pk(1),Nc()),i&2&&(ec(),fg(n))}function Se(i,n){if(i&1){let e=$E();Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`h2`,5),pk(4),Nc(),Oi(5,`p`,6),pk(6),Nc(),Oi(7,`form`,7),Jm(`submit`,function(o){Ld(e);return Od(HE().submit(o))}),Oi(8,`label`,8)(9,`span`,9),pk(10),Nc(),Oi(11,`input`,10),Jm(`input`,function(o){Ld(e);return Od(HE().target.set(o.target.value))}),Nc()(),kE(12,he,2,1,`p`,11)(13,Ce,2,1,`p`,12),kE(14,we,2,1,`p`,13),kE(15,ke,2,1,`p`,14),Oi(16,`div`,15)(17,`button`,16),Gm(18,`app-icon`,17),pk(19),Nc(),Oi(20,`button`,18),Gm(21,`app-icon`,19),pk(22),Nc()()()()()}if(i&2){let e,t=HE();ec(4),fg(t.t().title),ec(2),fg(t.t().description(t.name())),ec(4),fg(t.t().label),ec(),nk(t.field+` mt-1.5`),Wm(`value`,t.target()),ec(),SE(t.taken()?12:t.invalid()?13:-1),ec(2),SE(t.compose()?14:-1),ec(),SE((e=t.problem())?15:-1,e),ec(3),Wm(`size`,14),ec(),Ac(` `,t.common().close,` `),ec(),Wm(`disabled`,!t.canSave()),ec(),Wm(`size`,14),ec(),Ac(` `,t.saving()?t.t().saving:t.t().save,` `)}}var Ie;var ge;var xe;var Me=p(()=>{Kr();Je();v();lS();ue();sS();dS();f();Kr();Ie=`mx-focus w-full rounded-md border border-ink-700 bg-ink-800 px-2.5 py-1.5 font-mono text-[13px] text-ink-100 placeholder:text-ink-500`,ge=/^[a-zA-Z0-9][a-zA-Z0-9_.-]+$/,xe=class i{open=mj(!1);containerId=jc.required();name=jc.required();compose=jc(!1);store=C(u$1);groups=C(J);toast=C(u);t=Ot(()=>oS().containers.rename);common=Ot(()=>oS().common);field=Ie;target=wt(``);saving=wt(!1);problem=wt(null);wanted=Ot(()=>this.target().trim());invalid=Ot(()=>this.wanted()!==``&&!ge.test(this.wanted()));taken=Ot(()=>this.store.containers().some(n=>n.name===this.wanted()&&n.id!==this.containerId()));canSave=Ot(()=>!this.saving()&&ge.test(this.wanted())&&!this.taken()&&this.wanted()!==this.name());constructor(){rp(()=>{if(!this.open())return;let n=this.name();Tg(()=>{this.target.set(n),this.problem.set(null)})})}async submit(n){if(n.preventDefault(),!this.canSave())return;let e=this.name(),t=this.wanted();this.saving.set(!0),this.problem.set(null);try{let o=await window.electron.containers.rename(this.containerId(),t);o.ok?(this.groups.moveContainer(e,t),this.toast.success(this.t().saved(e,t)),this.open.set(!1)):this.problem.set(o.problem)}catch(o){this.problem.set(eH(o))}finally{this.saving.set(!1)}}static ɵfac=function(e){return new(e||i)};static ɵcmp=wc({type:i,selectors:[[`app-rename-dialog`]],inputs:{open:[1,`open`],containerId:[1,`containerId`],name:[1,`name`],compose:[1,`compose`]},outputs:{open:`openChange`},decls:2,vars:1,consts:[[`rdxDialogRoot`,``,3,`openChange`,`open`],[`rdxDialogPortal`,``],[`rdxDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxDialogPopup`,``,`data-testid`,`rename-dialog`,1,`w-full`,`max-w-md`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[`rdxDialogTitle`,``,1,`text-[15px]`,`font-semibold`,`text-ink-100`],[`rdxDialogDescription`,``,1,`mt-1`,`text-[13px]`,`text-ink-400`],[1,`mt-4`,3,`submit`],[1,`block`],[1,`text-[13px]`,`font-medium`,`text-ink-200`],[`type`,`text`,`spellcheck`,`false`,`autocomplete`,`off`,`data-testid`,`rename-name`,3,`input`,`value`],[`data-testid`,`rename-taken`,1,`mt-2`,`text-[12px]`,`text-danger`],[`data-testid`,`rename-invalid`,1,`mt-2`,`text-[12px]`,`text-danger`],[`data-testid`,`rename-compose`,1,`mt-3`,`rounded-md`,`border`,`border-warn/40`,`bg-warn/10`,`px-3`,`py-2`,`text-[12px]`,`text-ink-200`],[`role`,`alert`,1,`mt-3`,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`mt-5`,`flex`,`items-center`,`justify-end`,`gap-2`],[`type`,`button`,`rdxDialogClose`,``,1,`mx-btn`,`mx-focus`],[`name`,`close`,3,`size`],[`type`,`submit`,`data-testid`,`rename-save`,1,`mx-btn`,`mx-focus`,`border-accent`,`text-accent`,3,`disabled`],[`name`,`pencil`,3,`size`]],template:function(e,t){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(d){return vk(t.open,d)||(t.open=d),d}),_m(1,Se,23,14,`ng-template`,1),Nc()),e&2&&hg(`open`,t.open)},dependencies:[ie,ln,an,pn,cn,fn,dn,un,My],encapsulation:2})}});function Te(i,n){if(i&1&&(Oi(0,`span`,14),pk(1),Nc()),i&2){let e=HE(3);ec(),fg(e.t().taken)}}function Re(i,n){if(i&1&&(Oi(0,`span`,15),pk(1),Nc()),i&2){let e=HE(3);ec(),fg(e.t().invalid)}}function Pe(i,n){if(i&1){let e=$E();Oi(0,`div`,24)(1,`input`,26),Jm(`input`,function(o){let d=Ld(e).$index;return Od(HE(4).setPort(d,o.target.value))}),Nc(),Oi(2,`span`,27),pk(3,`→`),Nc(),Oi(4,`span`,28),pk(5),Nc()()}if(i&2){let e=n.$implicit,t=n.$index,o=HE(4);ec(),nk(o.field+` w-24`),Wm(`value`,o.hostPorts()[t]??``),Br(`aria-label`,o.t().hostPort(o.label(e)))(`data-testid`,`duplicate-port-`+e.containerPort),ec(4),fg(o.label(e))}}function Ve(i,n){if(i&1&&(Oi(0,`div`)(1,`p`,12),pk(2),Nc(),Oi(3,`div`,23),Sc(4,Pe,6,6,`div`,24,Ee),Nc(),Oi(6,`p`,25),pk(7),Nc()()),i&2){let e=HE(),t=HE(2);ec(2),fg(t.t().ports),ec(2),Tc(e.ports),ec(3),fg(t.t().portHint)}}function ze(i,n){if(i&1){let e=$E();Oi(0,`div`,29)(1,`span`,30),pk(2),Oi(3,`span`,27),pk(4),Nc()(),Oi(5,`div`,31)(6,`button`,32),Jm(`click`,function(){let o=Ld(e).$implicit;return Od(HE(4).setCopy(o.name,!0))}),pk(7),Nc(),Oi(8,`button`,32),Jm(`click`,function(){let o=Ld(e).$implicit;return Od(HE(4).setCopy(o.name,!1))}),pk(9),Nc()()()}if(i&2){let e=n.$implicit,t=HE(4);ec(),Wm(`title`,e.name+` → `+e.target),ec(),Ac(` `,e.name,` `),ec(2),Ac(`→ `,e.target),ec(),Br(`aria-label`,e.name),ec(),nk(t.copied().has(e.name)?`bg-accent/15 text-accent`:`text-ink-400`),Br(`aria-checked`,t.copied().has(e.name))(`data-testid`,`duplicate-copy-`+e.name),ec(),Ac(` `,t.t().copy,` `),ec(),nk(t.copied().has(e.name)?`text-ink-400`:`bg-warn/15 text-warn`),Br(`aria-checked`,!t.copied().has(e.name))(`data-testid`,`duplicate-share-`+e.name),ec(),Ac(` `,t.t().share,` `)}}function Fe(i,n){if(i&1&&(Oi(0,`div`)(1,`p`,12),pk(2),Nc(),Oi(3,`div`,23),Sc(4,ze,10,14,`div`,29,Ne),Nc(),Oi(6,`p`,25),pk(7),Nc()()),i&2){let e=HE(),t=HE(2);ec(2),fg(t.t().volumes),ec(2),Tc(e.volumes),ec(3),fg(t.t().volumesHint)}}function $e(i,n){if(i&1&&(Oi(0,`p`,16),pk(1),Nc()),i&2){let e=HE(3);ec(),fg(e.t().compose)}}function Ae(i,n){i&1&&(Oi(0,`p`,17),pk(1),Nc()),i&2&&(ec(),fg(n))}function je(i,n){if(i&1){let e=$E();Oi(0,`form`,10),Jm(`submit`,function(o){Ld(e);return Od(HE(2).submit(o))}),Oi(1,`label`,11)(2,`span`,12),pk(3),Nc(),Oi(4,`input`,13),Jm(`input`,function(o){Ld(e);return Od(HE(2).target.set(o.target.value))}),Nc(),kE(5,Te,2,1,`span`,14)(6,Re,2,1,`span`,15),Nc(),kE(7,Ve,8,2,`div`),kE(8,Fe,8,2,`div`),kE(9,$e,2,1,`p`,16),kE(10,Ae,2,1,`p`,17),Oi(11,`div`,18)(12,`button`,19),Gm(13,`app-icon`,20),pk(14),Nc(),Oi(15,`button`,21),Gm(16,`app-icon`,22),pk(17),Nc()()()}if(i&2){let e,t=n,o=HE(2);ec(3),fg(o.t().name),ec(),nk(o.field+` mt-1.5 w-full`),Wm(`value`,o.target()),ec(),SE(o.taken()?5:o.invalid()?6:-1),ec(2),SE(t.ports.length>0?7:-1),ec(),SE(t.volumes.length>0?8:-1),ec(),SE(t.compose?9:-1),ec(),SE((e=o.problem())?10:-1,e),ec(3),Wm(`size`,14),ec(),Ac(` `,o.common().close,` `),ec(),Wm(`disabled`,!o.canSave()),ec(),Wm(`size`,14),ec(),Ac(` `,o.saving()?o.t().saving:o.t().save,` `)}}function qe(i,n){i&1&&(Oi(0,`p`,8),pk(1),Nc()),i&2&&(ec(),fg(n))}function Be(i,n){if(i&1&&(Oi(0,`p`,9),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().loading)}}function We(i,n){if(i&1&&(Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`h2`,5),pk(4),Nc(),Oi(5,`p`,6),pk(6),Nc(),kE(7,je,18,14,`form`,7)(8,qe,2,1,`p`,8)(9,Be,2,1,`p`,9),Nc()()),i&2){let e,t=HE();ec(4),fg(t.t().title(t.name())),ec(2),fg(t.t().description),ec(),SE((e=t.plan())?7:(e=t.problem())?8:9,e)}}var Ee;var Ne;var Le;var _e;var ve;var Ze=p(()=>{Kr();ra();Je();v();lS();sS();dS();f();Kr();Ee=(i,n)=>n.containerPort+n.protocol,Ne=(i,n)=>n.name;Le=`mx-focus rounded-md border border-ink-700 bg-ink-800 px-2.5 py-1.5 font-mono text-[13px] text-ink-100 placeholder:text-ink-500`,_e=/^[a-zA-Z0-9][a-zA-Z0-9_.-]+$/,ve=class i{open=mj(!1);containerId=jc.required();name=jc.required();store=C(u$1);toast=C(u);router=C(fe);t=Ot(()=>oS().containers.duplicate);common=Ot(()=>oS().common);field=Le;plan=wt(null);target=wt(``);hostPorts=wt([]);copied=wt(new Set);saving=wt(!1);problem=wt(null);wanted=Ot(()=>this.target().trim());invalid=Ot(()=>this.wanted()!==``&&!_e.test(this.wanted()));taken=Ot(()=>this.store.containers().some(n=>n.name===this.wanted()));portsValid=Ot(()=>this.hostPorts().every(n=>n.trim()===``||/^\d{1,5}$/.test(n.trim())&&Number(n)>=1&&Number(n)<=65535));canSave=Ot(()=>!this.saving()&&this.plan()!==null&&_e.test(this.wanted())&&!this.taken()&&this.portsValid());constructor(){rp(()=>{if(!this.open())return;let n=this.containerId();Tg(()=>{this.load(n)})})}label(n){return`${String(n.containerPort)}/${n.protocol}`}setPort(n,e){this.hostPorts.update(t=>t.map((o,d)=>d===n?e:o))}setCopy(n,e){let t=new Set(this.copied());e?t.add(n):t.delete(n),this.copied.set(t)}async submit(n){n.preventDefault();let e=this.plan();if(!this.canSave()||e===null)return;let t=this.wanted(),o=e.ports.map((d,M)=>{let ee=(this.hostPorts()[M]??``).trim();return G(W({},d),{hostPort:ee===``?null:Number(ee)})});this.saving.set(!0),this.problem.set(null);try{let d=await window.electron.containers.duplicate(this.containerId(),{name:t,ports:o,copyVolumes:[...this.copied()]});d.ok?(this.toast.success(this.t().done(t)),this.open.set(!1),this.router.navigate([`/containers`,d.id]).catch(()=>{})):this.problem.set(d.problem)}catch(d){this.problem.set(eH(d))}finally{this.saving.set(!1)}}async load(n){this.plan.set(null),this.problem.set(null);try{let e=await window.electron.containers.duplicatePlan(n);e.ok?(this.plan.set(e.plan),this.target.set(e.plan.suggestion),this.hostPorts.set(e.plan.ports.map(()=>``)),this.copied.set(new Set(e.plan.volumes.map(t=>t.name)))):this.problem.set(e.problem)}catch(e){this.problem.set(eH(e))}}static ɵfac=function(e){return new(e||i)};static ɵcmp=wc({type:i,selectors:[[`app-duplicate-dialog`]],inputs:{open:[1,`open`],containerId:[1,`containerId`],name:[1,`name`]},outputs:{open:`openChange`},decls:2,vars:1,consts:[[`rdxDialogRoot`,``,3,`openChange`,`open`],[`rdxDialogPortal`,``],[`rdxDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxDialogPopup`,``,`data-testid`,`duplicate-dialog`,1,`w-full`,`max-w-lg`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[`rdxDialogTitle`,``,1,`text-[15px]`,`font-semibold`,`text-ink-100`],[`rdxDialogDescription`,``,1,`mt-1`,`text-[13px]`,`text-ink-400`],[1,`mt-4`,`space-y-4`],[`role`,`alert`,1,`mt-4`,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`mt-4`,`text-[13px]`,`text-ink-400`],[1,`mt-4`,`space-y-4`,3,`submit`],[1,`block`],[1,`text-[13px]`,`font-medium`,`text-ink-200`],[`type`,`text`,`spellcheck`,`false`,`autocomplete`,`off`,`data-testid`,`duplicate-name`,3,`input`,`value`],[`data-testid`,`duplicate-taken`,1,`mt-1.5`,`block`,`text-[12px]`,`text-danger`],[1,`mt-1.5`,`block`,`text-[12px]`,`text-danger`],[`data-testid`,`duplicate-compose`,1,`rounded-md`,`border`,`border-warn/40`,`bg-warn/10`,`px-3`,`py-2`,`text-[12px]`,`text-ink-200`],[`role`,`alert`,1,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`flex`,`items-center`,`justify-end`,`gap-2`],[`type`,`button`,`rdxDialogClose`,``,1,`mx-btn`,`mx-focus`],[`name`,`close`,3,`size`],[`type`,`submit`,`data-testid`,`duplicate-save`,1,`mx-btn`,`mx-focus`,`border-accent`,`text-accent`,3,`disabled`],[`name`,`copy`,3,`size`],[1,`mt-1.5`,`space-y-1.5`],[1,`flex`,`items-center`,`gap-2`,`text-[13px]`],[1,`mt-1.5`,`text-[12px]`,`text-ink-500`],[`type`,`text`,`inputmode`,`numeric`,`autocomplete`,`off`,3,`input`,`value`],[1,`text-ink-500`],[1,`font-mono`,`text-ink-300`],[1,`flex`,`items-center`,`gap-3`,`text-[13px]`],[1,`min-w-0`,`flex-1`,`truncate`,`font-mono`,`text-ink-200`,3,`title`],[`role`,`radiogroup`,1,`flex`,`shrink-0`,`overflow-hidden`,`rounded-md`,`border`,`border-ink-700`],[`type`,`button`,`role`,`radio`,1,`mx-focus`,`px-2`,`py-0.5`,`text-[12px]`,3,`click`]],template:function(e,t){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(d){return vk(t.open,d)||(t.open=d),d}),_m(1,We,10,3,`ng-template`,1),Nc()),e&2&&hg(`open`,t.open)},dependencies:[ie,ln,an,pn,cn,fn,dn,un,My],encapsulation:2})}});export{ve as a,ue as i,Me as n,xe as o,Ze as r,J as t};
@@ -1 +0,0 @@
1
- import{$n as sS,A as HE,An as lS,B as Kr,D as Gm,En as kE,Gt as _m,H as Ld,Hn as p,K as My,Kn as pk,Mn as mg,Nn as mj,Pt as Wm,Qn as rp,R as Jm,Rn as oS,St as Tg,_r as wt,bn as hg,cn as ec,dn as fj,dr as vk,et as Od,f as C,hr as wc,in as dS,lr as vg,mt as SE,o as Ac,q as Nc,rt as Ot,sn as eH,t as $E,tt as Oi,u as Br,un as fg,wn as jc}from"./chunk-u0OAgv4f.js";import{n as u,t as f}from"./chunk-CsQ_euXP.js";import{_ as pn,d as dn,f as fn,g as ln,l as an,m as ie$1,r as Je,u as cn,v as un}from"./chunk-EFAsN7J4.js";function ie(i,o){if(i&1&&pk(0),i&2)Ac(` `,HE(2).t().inVolume,` `)}function ne(i,o){if(i&1&&pk(0),i&2){let e=HE(2);mg(` `,e.onMount()?e.t().onMount:e.t().notOnMount,` `,e.t().restart,` `)}}function oe(i,o){if(i&1&&(Oi(0,`p`,7),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().loading)}}function ae(i,o){if(i&1){let e=$E();Oi(0,`textarea`,17),Jm(`input`,function(a){Ld(e);return Od(HE(2).text.set(a.target.value))}),Nc()}if(i&2){let e=HE(2);Wm(`value`,e.text()),Br(`aria-label`,e.t().title(e.shownPath()))}}function le(i,o){if(i&1){let e=$E();Oi(0,`p`,18),pk(1),Nc(),Oi(2,`div`,19)(3,`button`,20),Jm(`click`,function(){Ld(e);return Od(HE(3).load())}),pk(4),Nc(),Oi(5,`button`,21),Jm(`click`,function(){Ld(e);return Od(HE(3).save(!0))}),pk(6),Nc()()}if(i&2){let e=HE(3);ec(),fg(e.t().conflict),ec(3),fg(e.t().reload),ec(2),Ac(` `,e.t().overwrite,` `)}}function re(i,o){if(i&1&&(Oi(0,`div`,9)(1,`p`),pk(2),Nc(),kE(3,le,7,3),Nc()),i&2){let e=HE(2);ec(2),fg(o),ec(),SE(e.conflict()?3:-1)}}function de(i,o){if(i&1&&(Oi(0,`span`,11),pk(1),Nc()),i&2){let e=HE(2);ec(),fg(e.t().unsaved)}}function se(i,o){if(i&1){let e=$E();Oi(0,`button`,22),Jm(`click`,function(){Ld(e);let a=HE(2);return a.saveAsImage.emit(),Od(a.open.set(!1))}),Gm(1,`app-icon`,23),pk(2),Nc()}if(i&2){let e=HE(2);ec(),Wm(`size`,14),ec(),Ac(` `,e.t().saveAsImage,` `)}}function ce(i,o){if(i&1){let e=$E();Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`h2`,5),pk(4),Nc(),Oi(5,`p`,6),kE(6,ie,1,1)(7,ne,1,2),Nc(),kE(8,oe,2,1,`p`,7)(9,ae,1,2,`textarea`,8),kE(10,re,4,2,`div`,9),Oi(11,`div`,10),kE(12,de,2,1,`span`,11),kE(13,se,3,2,`button`,12),Oi(14,`button`,13),Gm(15,`app-icon`,14),pk(16),Nc(),Oi(17,`button`,15),Jm(`click`,function(){Ld(e);return Od(HE().save(!1))}),Gm(18,`app-icon`,16),pk(19),Nc()()()()}if(i&2){let e,t=HE();ec(4),fg(t.t().title(t.shownPath())),ec(2),SE(t.source().kind===`volume`?6:7),ec(2),SE(t.loading()?8:t.loaded()?9:-1),ec(2),SE((e=t.problem())?10:-1,e),ec(2),SE(t.dirty()?12:-1),ec(),SE(!t.onMount()&&t.loaded()?13:-1),ec(2),Wm(`size`,14),ec(),Ac(` `,t.dirty()?t.t().closeUnsaved:t.common().close,` `),ec(),Wm(`disabled`,!t.dirty()||t.saving()),ec(),Wm(`size`,14),ec(),Ac(` `,t.saving()?t.t().saving:t.t().save,` `)}}var Q;var me=p(()=>{Kr();Je();lS();sS();dS();f();Kr();Q=class i{open=mj(!1);source=jc.required();path=jc.required();saveAsImage=fj();toast=C(u);t=Ot(()=>oS().containers.editor);common=Ot(()=>oS().common);text=wt(``);original=wt(``);version=wt(``);shownPath=wt(``);onMount=wt(!0);loading=wt(!1);loaded=wt(!1);saving=wt(!1);problem=wt(null);conflict=wt(!1);dirty=Ot(()=>this.loaded()&&this.text()!==this.original());constructor(){rp(()=>{this.open()&&(this.path(),this.source(),Tg(()=>{this.load()}))})}async load(){this.loading.set(!0),this.loaded.set(!1),this.problem.set(null),this.conflict.set(!1),this.shownPath.set(this.path());try{let o=this.source(),e=o.kind===`volume`?await window.electron.volumes.readText(o.name,this.path()):await window.electron.files.readText(o.id,this.path());e.ok?(this.shownPath.set(e.path),this.text.set(e.text),this.original.set(e.text),this.version.set(e.version),this.onMount.set(e.onMount),this.loaded.set(!0)):this.problem.set(e.problem)}catch(o){this.problem.set(eH(o))}finally{this.loading.set(!1)}}async save(o){this.saving.set(!0),this.problem.set(null),this.conflict.set(!1);try{let e=this.text(),t=this.source(),a=t.kind===`volume`?await window.electron.volumes.saveText(t.name,this.shownPath(),e,this.version(),o):await window.electron.files.saveText(t.id,this.shownPath(),e,this.version(),o);a.ok?(this.original.set(e),this.version.set(a.version),this.toast.success(this.t().saved(this.shownPath()))):(this.problem.set(a.problem),this.conflict.set(a.conflict))}catch(e){this.problem.set(eH(e))}finally{this.saving.set(!1)}}static ɵfac=function(e){return new(e||i)};static ɵcmp=wc({type:i,selectors:[[`app-edit-file-dialog`]],inputs:{open:[1,`open`],source:[1,`source`],path:[1,`path`]},outputs:{open:`openChange`,saveAsImage:`saveAsImage`},decls:2,vars:1,consts:[[`rdxDialogRoot`,``,3,`openChange`,`open`],[`rdxDialogPortal`,``],[`rdxDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxDialogPopup`,``,`data-testid`,`edit-file-dialog`,1,`flex`,`h-[80vh]`,`w-full`,`max-w-4xl`,`flex-col`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[`rdxDialogTitle`,``,1,`font-mono`,`text-[14px]`,`font-semibold`,`text-ink-100`],[`rdxDialogDescription`,``,`data-testid`,`edit-file-where`,1,`mt-1`,`text-[12px]`,`text-ink-400`],[1,`mt-4`,`text-[13px]`,`text-ink-400`],[`spellcheck`,`false`,`autocomplete`,`off`,`wrap`,`off`,`data-testid`,`edit-file-text`,1,`mx-focus`,`mt-3`,`min-h-0`,`flex-1`,`resize-none`,`rounded-md`,`border`,`border-ink-700`,`bg-ink-950`,`p-3`,`font-mono`,`text-[12px]`,`leading-[1.6]`,`text-ink-100`,3,`value`],[`role`,`alert`,1,`mt-3`,`rounded-md`,`border`,`border-danger/40`,`bg-danger/10`,`px-3`,`py-2`,`text-[13px]`,`text-danger`],[1,`mt-4`,`flex`,`items-center`,`gap-2`],[`data-testid`,`edit-file-dirty`,1,`text-[12px]`,`text-warn`],[`type`,`button`,`data-testid`,`edit-file-commit`,1,`mx-btn`,`mx-focus`],[`type`,`button`,`rdxDialogClose`,``,1,`mx-btn`,`mx-focus`,`ml-auto`],[`name`,`close`,3,`size`],[`type`,`button`,`data-testid`,`edit-file-save`,1,`mx-btn`,`mx-focus`,`border-accent`,`text-accent`,3,`click`,`disabled`],[`name`,`check`,3,`size`],[`spellcheck`,`false`,`autocomplete`,`off`,`wrap`,`off`,`data-testid`,`edit-file-text`,1,`mx-focus`,`mt-3`,`min-h-0`,`flex-1`,`resize-none`,`rounded-md`,`border`,`border-ink-700`,`bg-ink-950`,`p-3`,`font-mono`,`text-[12px]`,`leading-[1.6]`,`text-ink-100`,3,`input`,`value`],[1,`mt-1`,`text-ink-200`],[1,`mt-2`,`flex`,`gap-2`],[`type`,`button`,`data-testid`,`edit-file-reload`,1,`mx-btn`,`mx-focus`,3,`click`],[`type`,`button`,`data-testid`,`edit-file-overwrite`,1,`mx-btn`,`mx-focus`,`border-danger`,`text-danger`,3,`click`],[`type`,`button`,`data-testid`,`edit-file-commit`,1,`mx-btn`,`mx-focus`,3,`click`],[`name`,`images`,3,`size`]],template:function(e,t){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(h){return vk(t.open,h)||(t.open=h),h}),_m(1,ce,20,11,`ng-template`,1),Nc()),e&2&&hg(`open`,t.open)},dependencies:[ie$1,ln,an,pn,cn,fn,dn,un,My],encapsulation:2})}});export{me as n,Q as t};
@@ -1 +0,0 @@
1
- import{An as lS,B as Kr,Hn as p,Rt as X,_r as wt,sn as eH}from"./chunk-u0OAgv4f.js";var o;var y=p(()=>{Kr();lS();Kr();o=class a{state=wt(null);busy=wt(!1);startingWsl=wt(!1);wslFailure=wt(null);startedWsl=wt(!1);status=this.state.asReadonly();loading=this.busy.asReadonly();wslStarting=this.startingWsl.asReadonly();wslProblem=this.wslFailure.asReadonly();wslStartedBefore=this.startedWsl.asReadonly();async refresh(){this.busy.set(!0);try{this.state.set(await window.electron.engine.status())}finally{this.busy.set(!1)}}async startWsl(e){return this.start(()=>window.electron.engine.startWsl(e),!0)}async startWslDaemon(e){return this.start(()=>window.electron.engine.startWslDaemon(e),!1)}async start(e,r){this.startingWsl.set(!0),this.wslFailure.set(null);try{let s=await e();return s.ok?this.startedWsl.set(r):this.wslFailure.set(s.problem),await this.refresh(),s.ok}catch(s){return this.wslFailure.set(eH(s)),!1}finally{this.startingWsl.set(!1)}}static ɵfac=function(r){return new(r||a)};static ɵprov=X({token:a,factory:a.ɵfac,providedIn:`root`})}});export{y as n,o as t};
@@ -1 +0,0 @@
1
- import{B as Kr,Hn as p$1,Q as OD,Qn as rp,U as M}from"./chunk-u0OAgv4f.js";import{E as tn,g as en}from"./chunk-Clfbc1-d.js";function L(r){return{provide:v,useFactory:r}}var p;var N;var f;var v;var g=p$1(()=>{Kr();tn();p={mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}},N=50,f=class{constructor(e){this.host=e,this.nodes=[],this.prevAnimationNames=new WeakMap,this.pendingExits=new Set,this.removeListeners=null,this.closeTimestamp=0,this.exitVersion=0,this.waapiPending=!1,this.safetyTimer=null,this.prevPresent=e.present(),this.state=this.prevPresent?`mounted`:`unmounted`,this.prevPresent&&this.mount(),rp(()=>{let i=e.present();i!==this.prevPresent&&(this.prevPresent=i,i?this.send(`MOUNT`):e.isBrowser?(this.closeTimestamp=this.now(),OD(()=>this.evaluateExit(),{injector:e.injector})):this.send(`UNMOUNT`))},{injector:e.injector,debugName:`PresenceMachine.present`})}dispose(){this.unmount()}evaluateExit(){if(this.state!==`mounted`||this.host.present())return;this.pendingExits.clear();for(let i of this.nodes){let t=getComputedStyle(i),n=t.animationName||`none`,s=this.prevAnimationNames.get(i)??`none`;n!==`none`&&t.display!==`none`&&s!==n&&this.pendingExits.add(i)}let e=this.collectExitAnimations();if(this.pendingExits.size===0&&e.length===0){this.send(`UNMOUNT`);return}if(this.send(`ANIMATION_OUT`),e.length>0){this.waapiPending=!0;let i=this.exitVersion;Promise.all(e.map(t=>t.finished.catch(()=>{}))).then(()=>this.finishExit(i)),this.armSafetyNet(i,e)}}collectExitAnimations(){if(!this.host.isBrowser)return[];let e=[];for(let i of this.nodes)if(typeof i.getAnimations==`function`)for(let t of i.getAnimations({subtree:!0})){let n=t.startTime===null||Number(t.startTime)>=this.closeTimestamp;(t.playState===`running`||t.pending)&&n&&e.push(t)}return e}armSafetyNet(e,i){let t=new Set(this.nodes);for(let s of i){let o=s.effect?.target;o instanceof HTMLElement&&t.add(o)}let n=0;for(let s of t)n=Math.max(n,en(s));this.clearSafetyNet(),this.safetyTimer=setTimeout(()=>this.finishExit(e),n+N)}finishExit(e){e===this.exitVersion&&(this.waapiPending=!1,this.clearSafetyNet(),this.send(`ANIMATION_END`))}clearSafetyNet(){this.safetyTimer!==null&&(clearTimeout(this.safetyTimer),this.safetyTimer=null)}send(e){let i=p[this.state][e];if(!(i===void 0||i===this.state))if(this.state=i,i===`mounted`)if(this.exitVersion++,this.waapiPending=!1,this.clearSafetyNet(),this.nodes.length>0){this.pendingExits.clear();for(let t of this.nodes)this.prevAnimationNames.set(t,this.getAnimationName(t))}else this.mount();else i===`unmounted`&&(this.exitVersion++,this.unmount())}mount(){if(this.nodes=this.host.mountView(),this.host.isBrowser&&this.nodes.length>0){for(let e of this.nodes)this.prevAnimationNames.set(e,this.getAnimationName(e));this.addAnimationListeners()}}unmount(){this.removeListeners?.(),this.removeListeners=null,this.clearSafetyNet(),this.waapiPending=!1,this.host.destroyView(),this.nodes=[],this.pendingExits.clear()}addAnimationListeners(){let e=t=>{let n=t.target;this.nodes.includes(n)&&this.prevAnimationNames.set(n,this.getAnimationName(n))},i=t=>{let n=t.target;this.nodes.includes(n)&&this.getAnimationName(n).includes(t.animationName)&&(this.pendingExits.delete(n),!this.waapiPending&&this.pendingExits.size===0&&this.finishExit(this.exitVersion))};for(let t of this.nodes)t.addEventListener(`animationstart`,e),t.addEventListener(`animationcancel`,i),t.addEventListener(`animationend`,i);this.removeListeners=()=>{for(let t of this.nodes)t.removeEventListener(`animationstart`,e),t.removeEventListener(`animationcancel`,i),t.removeEventListener(`animationend`,i)}}getAnimationName(e){return(this.host.isBrowser?getComputedStyle(e).animationName:``)||`none`}now(){let e=typeof document<`u`?document.timeline?.currentTime:null;return typeof e==`number`?e:Number(e??0)}},v=new M(`RdxPresenceContext`)});export{v as i,f as n,g as r,L as t};
@@ -1 +0,0 @@
1
- import{$n as sS,A as HE,B as Kr,D as Gm,En as kE,Et as UE,Fn as nk,H as Ld,Hn as p,K as My,Kn as pk,Pt as Wm,R as Jm,Rn as oS,Zn as rg,_r as wt,cn as ec,dn as fj,et as Od,f as C,hn as gj,hr as wc,ht as Sc,in as dS,mt as SE,o as Ac,pr as wD,q as Nc,rt as Ot,st as Pr,t as $E,tt as Oi,u as Br,wn as jc,xt as Tc,y as Dj}from"./chunk-u0OAgv4f.js";function $(i,e){i&1&&Gm(0,`li`,6)}function j(i,e){if(i&1){let t=$E();kE(0,$,1,0,`li`,6),Oi(1,`li`,7)(2,`button`,8),Jm(`click`,function(){let o=Ld(t).$implicit;return Od(HE(2).pick(o))})(`keydown`,function(o){Ld(t);return Od(HE(2).onItemKey(o))}),Gm(3,`app-icon`,9),pk(4),Nc()()}if(i&2){let t=e.$implicit,n=HE(2);SE(t.separated?0:-1),ec(),Br(`title`,t.hint??null),ec(),nk(t.danger?n.dangerClass:n.normalClass),Wm(`disabled`,t.disabled===!0),Br(`data-testid`,`menu-`+t.id),ec(),Wm(`name`,t.icon)(`size`,14),ec(),Ac(` `,t.label,` `)}}function P(i,e){if(i&1&&(Oi(0,`ul`,5),Sc(1,j,5,9,null,null,U),Nc()),i&2){let t=HE();nk(t.upward()?`bottom-full mb-1.5`:`top-full mt-1.5`),Br(`aria-label`,t.shownLabel()),ec(),Tc(t.items())}}var Q;var U;var V;var G=p(()=>{Kr();sS();dS();Kr();Q=[`trigger`],U=(i,e)=>e.id;V=class i{items=jc.required();label=jc(null);compact=jc(!1,{transform:Dj});picked=fj();shownLabel=Ot(()=>this.label()??oS().shell.actionMenu.label);host=C(Pr);trigger=gj(`trigger`);open=wt(!1);upward=wt(!1);compactTriggerClass=`mx-focus cursor-pointer rounded p-1 text-ink-400 transition-colors hover:bg-ink-800 hover:text-ink-100`;normalClass=`text-ink-200 hover:bg-ink-750 hover:text-ink-100 focus-visible:bg-ink-750 focus-visible:text-ink-100`;dangerClass=`text-danger hover:bg-danger/15 focus-visible:bg-danger/15`;toggle(){let e=!this.open();e&&this.placeMenu(),this.open.set(e),e&&setTimeout(()=>this.focusItem(0))}onOutside(e){this.open()&&!this.host.nativeElement.contains(e.target)&&this.open.set(!1)}onTriggerKey(e){e.key!==`ArrowDown`&&e.key!==`ArrowUp`||(e.preventDefault(),this.placeMenu(),this.open.set(!0),setTimeout(()=>this.focusItem(e.key===`ArrowUp`?-1:0)))}onItemKey(e){if(e.key===`Escape`||e.key===`Tab`){e.key===`Escape`&&e.preventDefault(),this.close();return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;e.preventDefault();let n=this.enabledItems().indexOf(document.activeElement);this.focusItem(n===-1?0:n+(e.key===`ArrowDown`?1:-1))}pick(e){this.close(),this.picked.emit(e.id)}placeMenu(){let e=this.trigger()?.nativeElement;if(e===void 0)return;let t=e.getBoundingClientRect(),n=this.items().length*32+24,o=window.innerHeight-t.bottom;this.upward.set(o<n&&t.top>o)}close(){this.open.set(!1),this.trigger()?.nativeElement.focus()}enabledItems(){return[...this.host.nativeElement.querySelectorAll(`[role="menuitem"]:not(:disabled)`)]}focusItem(e){let t=this.enabledItems();t.length!==0&&t[(e+t.length)%t.length].focus()}static ɵfac=function(t){return new(t||i)};static ɵcmp=wc({type:i,selectors:[[`app-action-menu`]],viewQuery:function(t,n){t&1&&rg(n.trigger,Q,5),t&2&&UE()},hostBindings:function(t,n){t&1&&Jm(`pointerdown`,function(a){return n.onOutside(a)},wD)},inputs:{items:[1,`items`],label:[1,`label`],compact:[1,`compact`]},outputs:{picked:`picked`},decls:5,vars:7,consts:[[`trigger`,``],[1,`relative`],[`type`,`button`,`aria-haspopup`,`menu`,`data-testid`,`action-menu`,3,`click`,`keydown`,`title`],[`name`,`menu`,3,`size`],[`role`,`menu`,1,`absolute`,`right-0`,`z-50`,`w-56`,`rounded-md`,`border`,`border-ink-700`,`bg-panel`,`py-1`,`shadow-2xl`,3,`class`],[`role`,`menu`,1,`absolute`,`right-0`,`z-50`,`w-56`,`rounded-md`,`border`,`border-ink-700`,`bg-panel`,`py-1`,`shadow-2xl`],[`role`,`separator`,1,`my-1`,`border-t`,`border-ink-700`],[`role`,`none`],[`type`,`button`,`role`,`menuitem`,1,`mx-focus`,`flex`,`w-full`,`cursor-pointer`,`items-center`,`gap-2`,`px-3`,`py-1.5`,`text-left`,`text-[13px]`,`transition-colors`,`focus-visible:outline-none`,`disabled:cursor-not-allowed`,`disabled:opacity-40`,`disabled:hover:bg-transparent`,3,`click`,`keydown`,`disabled`],[3,`name`,`size`]],template:function(t,n){t&1&&(Oi(0,`div`,1)(1,`button`,2,0),Jm(`click`,function(){return n.toggle()})(`keydown`,function(a){return n.onTriggerKey(a)}),Gm(3,`app-icon`,3),Nc(),kE(4,P,3,3,`ul`,4),Nc()),t&2&&(ec(),nk(n.compact()?n.compactTriggerClass:`mx-btn mx-focus`),Wm(`title`,n.shownLabel()),Br(`aria-expanded`,n.open())(`aria-label`,n.shownLabel()),ec(2),Wm(`size`,n.compact()?15:16),ec(),SE(n.open()?4:-1))},dependencies:[My],encapsulation:2})}});export{V as n,G as t};