docker-client-mx 1.45.0 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docker-desktop-mx/browser/chunk-6Ee5XYkz.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-B-jCnQFP2.js +6 -0
- package/dist/docker-desktop-mx/browser/{chunk-Bd5-MqqR.js → chunk-B2FafzpV.js} +2 -2
- package/dist/docker-desktop-mx/browser/chunk-B6qORmpw.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-B7IRMMXz2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-B7xNIuls.js +3 -0
- package/dist/docker-desktop-mx/browser/chunk-BFq6LhBl.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-CHa6bNlc.js → chunk-BHeMRkJW.js} +4 -4
- package/dist/docker-desktop-mx/browser/{chunk-eVHlLrxe.js → chunk-BNXdbUqv.js} +2 -2
- package/dist/docker-desktop-mx/browser/chunk-BSz2tiCV.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-BZygkakw2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-Ba7ROPTT.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-BiQwXu_z.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-Bk32Rk5p.js +4 -0
- package/dist/docker-desktop-mx/browser/chunk-BsmS2zXP.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-ByAKccx1.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-C4OFwmD92.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-B3n-2UOi.js → chunk-C9w0bf2Y.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-CI-MgoDd.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CLii2-2s.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CWjMCD8T.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CaJx4ff8.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-Clfbc1-d.js → chunk-CesW8OnI.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-CgneC1Je.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-ChGlpKnY.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CnivQPHU.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-CyNh8lBK2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-D-daLnRf.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-D5pKQvyX.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-D8vF1ayp2.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DFkgt4XH.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DJfErblk.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DKpHGsCy.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DTYNCfd52.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DWYNwk_L.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-Ds9UWi20.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-DwKe2pMP.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-FM5_LSb4.js +1 -0
- package/dist/docker-desktop-mx/browser/{chunk-BZwYBA7Z.js → chunk-FuBWiPKf.js} +1 -1
- package/dist/docker-desktop-mx/browser/{chunk-_wm6hEEA.js → chunk-bj_sMiGa.js} +1 -1
- package/dist/docker-desktop-mx/browser/{chunk-Dy_g3RHY.js → chunk-dMo4BIG3.js} +1 -1
- package/dist/docker-desktop-mx/browser/chunk-gOjj4-4k.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-idasJ9ng.js +1 -0
- package/dist/docker-desktop-mx/browser/chunk-ux3iG9S52.js +1 -0
- package/dist/docker-desktop-mx/browser/index.html +2 -2
- package/dist/docker-desktop-mx/browser/main-DIJOTBZN.js +1 -0
- package/dist/docker-desktop-mx/browser/styles-3HWRDJL3.css +1 -0
- package/dist-electron/channels.js +15 -0
- package/dist-electron/channels.js.map +1 -1
- package/dist-electron/file-ops.js +315 -0
- package/dist-electron/file-ops.js.map +1 -0
- package/dist-electron/files.js +19 -10
- package/dist-electron/files.js.map +1 -1
- package/dist-electron/ipc.js +52 -0
- package/dist-electron/ipc.js.map +1 -1
- package/dist-electron/main.js +63 -2
- package/dist-electron/main.js.map +1 -1
- package/dist-electron/preload.js +33 -3
- package/dist-electron/preload.js.map +1 -1
- package/dist-electron/settings.js +24 -1
- package/dist-electron/settings.js.map +1 -1
- package/dist-electron/volume-files.js +1 -0
- package/dist-electron/volume-files.js.map +1 -1
- package/dist-electron/volume-schedules.js +285 -0
- package/dist-electron/volume-schedules.js.map +1 -0
- package/package.json +1 -1
- package/dist/docker-desktop-mx/browser/chunk-Af1e1d8G.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-B13W1gEu.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-B2NHI2Ew.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BIIdmzaV2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BJACElSf2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BPNQPsl2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BUtOgCv_.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-Bcx5WMyJ.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BxKOYZan.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-BxU6JdzU.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-C3u9Hm0s.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CGft6wQH2.js +0 -6
- package/dist/docker-desktop-mx/browser/chunk-COBWzwhz.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-COdMLD3H.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CXpIB_qc.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-ClGJowQ7.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CoprhnOm.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-CsQ_euXP.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-D3bHzook.js +0 -3
- package/dist/docker-desktop-mx/browser/chunk-DEXem6rk.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DPn8Rpg4.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DVXm8E_S.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DX-Zo-hw.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DZ-f89Uu.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DZXhuKXm.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DctinxSO.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-DeXGJ-vD2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-EFAsN7J4.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-FqKVK_Os2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-IMRsZUv82.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-U7tL4XEw2.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-YQkNtrRq.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-jpKpwesj.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-m112xmv9.js +0 -1
- package/dist/docker-desktop-mx/browser/chunk-u0OAgv4f.js +0 -4
- package/dist/docker-desktop-mx/browser/main-INZSNGJM.js +0 -1
- package/dist/docker-desktop-mx/browser/styles-BGYQU5CU.css +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_MUTED = void 0;
|
|
3
4
|
exports.setShortcutActive = setShortcutActive;
|
|
4
5
|
exports.onSettingsChanged = onSettingsChanged;
|
|
5
6
|
exports.paletteShortcutEnabled = paletteShortcutEnabled;
|
|
@@ -9,6 +10,8 @@ exports.configureSettings = configureSettings;
|
|
|
9
10
|
exports.readSettings = readSettings;
|
|
10
11
|
exports.updateSettings = updateSettings;
|
|
11
12
|
exports.notificationsEnabled = notificationsEnabled;
|
|
13
|
+
exports.muteContainer = muteContainer;
|
|
14
|
+
exports.containerMuted = containerMuted;
|
|
12
15
|
exports.wiringNotificationsEnabled = wiringNotificationsEnabled;
|
|
13
16
|
exports.autoPruneEnabled = autoPruneEnabled;
|
|
14
17
|
exports.lastAutoPrune = lastAutoPrune;
|
|
@@ -21,6 +24,7 @@ const DEFAULTS = {
|
|
|
21
24
|
notifyCrash: true,
|
|
22
25
|
notifyUnhealthy: true,
|
|
23
26
|
notifyWiring: true,
|
|
27
|
+
mutedContainers: [],
|
|
24
28
|
paletteShortcut: true,
|
|
25
29
|
autoUpdate: true,
|
|
26
30
|
autoPrune: false,
|
|
@@ -88,6 +92,13 @@ function reconcileLoginItem() {
|
|
|
88
92
|
deps.loginItem.set(true);
|
|
89
93
|
}
|
|
90
94
|
}
|
|
95
|
+
/** Het grootste aantal containers zonder meldingen dat we bewaren; meer is vast een vergissing. */
|
|
96
|
+
exports.MAX_MUTED = 500;
|
|
97
|
+
/** Namen zonder dubbele, lege of rare waarden, gesorteerd, zodat het bestand niet bij elke klik schuift. */
|
|
98
|
+
function tidyNames(names) {
|
|
99
|
+
const kept = names.filter((name) => typeof name === 'string' && name !== '' && name.length <= 256);
|
|
100
|
+
return [...new Set(kept)].sort((a, b) => a.localeCompare(b)).slice(0, exports.MAX_MUTED);
|
|
101
|
+
}
|
|
91
102
|
/**
|
|
92
103
|
* Leest het bewaarde bestand. Een kapot of onvolledig bestand valt per veld terug op de
|
|
93
104
|
* standaard: een melding die per ongeluk uit staat is erger dan een die per ongeluk aan staat.
|
|
@@ -102,6 +113,7 @@ function parseStored(text) {
|
|
|
102
113
|
notifyCrash: typeof raw.notifyCrash === 'boolean' ? raw.notifyCrash : DEFAULTS.notifyCrash,
|
|
103
114
|
notifyUnhealthy: typeof raw.notifyUnhealthy === 'boolean' ? raw.notifyUnhealthy : DEFAULTS.notifyUnhealthy,
|
|
104
115
|
notifyWiring: typeof raw.notifyWiring === 'boolean' ? raw.notifyWiring : DEFAULTS.notifyWiring,
|
|
116
|
+
mutedContainers: Array.isArray(raw.mutedContainers) ? tidyNames(raw.mutedContainers) : DEFAULTS.mutedContainers,
|
|
105
117
|
paletteShortcut: typeof raw.paletteShortcut === 'boolean' ? raw.paletteShortcut : DEFAULTS.paletteShortcut,
|
|
106
118
|
autoUpdate: typeof raw.autoUpdate === 'boolean' ? raw.autoUpdate : DEFAULTS.autoUpdate,
|
|
107
119
|
autoPrune: typeof raw.autoPrune === 'boolean' ? raw.autoPrune : DEFAULTS.autoPrune,
|
|
@@ -145,6 +157,7 @@ function updateSettings(patch) {
|
|
|
145
157
|
notifyCrash: patch.notifyCrash ?? stored.notifyCrash,
|
|
146
158
|
notifyUnhealthy: patch.notifyUnhealthy ?? stored.notifyUnhealthy,
|
|
147
159
|
notifyWiring: patch.notifyWiring ?? stored.notifyWiring,
|
|
160
|
+
mutedContainers: patch.mutedContainers === undefined ? stored.mutedContainers : tidyNames(patch.mutedContainers),
|
|
148
161
|
paletteShortcut: patch.paletteShortcut ?? stored.paletteShortcut,
|
|
149
162
|
autoUpdate: patch.autoUpdate ?? stored.autoUpdate,
|
|
150
163
|
autoPrune: patch.autoPrune ?? stored.autoPrune,
|
|
@@ -152,7 +165,8 @@ function updateSettings(patch) {
|
|
|
152
165
|
language: patch.language ?? stored.language,
|
|
153
166
|
assistantModel: patch.assistantModel ?? stored.assistantModel,
|
|
154
167
|
};
|
|
155
|
-
|
|
168
|
+
const changed = (key) => key === 'mutedContainers' ? JSON.stringify(next.mutedContainers) !== JSON.stringify(stored.mutedContainers) : next[key] !== stored[key];
|
|
169
|
+
if (loginChanged || Object.keys(next).some(changed)) {
|
|
156
170
|
stored = next;
|
|
157
171
|
persist();
|
|
158
172
|
(0, i18n_1.setLanguage)(stored.language);
|
|
@@ -164,6 +178,15 @@ function updateSettings(patch) {
|
|
|
164
178
|
function notificationsEnabled(kind) {
|
|
165
179
|
return kind === 'crash' ? stored.notifyCrash : stored.notifyUnhealthy;
|
|
166
180
|
}
|
|
181
|
+
/** Meldingen voor één container uit of weer aan (fase 84); in main, zodat twee klikken elkaar niet overschrijven. */
|
|
182
|
+
function muteContainer(name, muted) {
|
|
183
|
+
const rest = stored.mutedContainers.filter((candidate) => candidate !== name);
|
|
184
|
+
return updateSettings({ mutedContainers: muted ? [...rest, name] : rest });
|
|
185
|
+
}
|
|
186
|
+
/** Of deze container stil is: dan geen melding over crashen, unhealthy of het netwerk. */
|
|
187
|
+
function containerMuted(name) {
|
|
188
|
+
return stored.mutedContainers.includes(name.replace(/^\//, ''));
|
|
189
|
+
}
|
|
167
190
|
/** Of er een melding komt als een container zijn netwerk of zijn poorten kwijt is. */
|
|
168
191
|
function wiringNotificationsEnabled() {
|
|
169
192
|
return stored.notifyWiring;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../electron/settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../electron/settings.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":";;;AAwCA,kCAKC;AAGD,gCASC;
|
|
1
|
+
{"version":3,"file":"volume-files.js","sourceRoot":"","sources":["../electron/volume-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
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.backupsToRemove = backupsToRemove;
|
|
40
|
+
exports.parseSchedules = parseSchedules;
|
|
41
|
+
exports.configureVolumeSchedules = configureVolumeSchedules;
|
|
42
|
+
exports.volumeSchedules = volumeSchedules;
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
const i18n_1 = require("./i18n");
|
|
45
|
+
const volume_backup_1 = require("./volume-backup");
|
|
46
|
+
/**
|
|
47
|
+
* Vanzelf een back-up van een volume (fase 85): per volume elke dag of elke week, naar een map,
|
|
48
|
+
* met een vast aantal dat blijft.
|
|
49
|
+
*
|
|
50
|
+
* De back-up zelf is die van fase 18, zonder dialoog. Het schema rekent vanaf de laatste back-up
|
|
51
|
+
* die lukte: een app die een week dicht was, maakt er één, niet zeven. Wat er weg mag, zijn alleen
|
|
52
|
+
* de bestanden met de naam die de app zelf geeft (`<volume>-<datum>-<tijd>.tar`); wat er verder in
|
|
53
|
+
* de map staat, blijft staan.
|
|
54
|
+
*
|
|
55
|
+
* Gebruikt een draaiende container het volume, dan overslaan (en het elk uur opnieuw proberen), of,
|
|
56
|
+
* als je dat koos, die containers zolang pauzeren. Een database die tijdens de back-up schrijft,
|
|
57
|
+
* levert een `.tar` die hij misschien zelf niet meer leest; gepauzeerd schrijft hij niets.
|
|
58
|
+
*
|
|
59
|
+
* Zonder Electron en zonder Docker: alles komt als functies binnen, zodat het met een klok te testen is.
|
|
60
|
+
*/
|
|
61
|
+
const HOUR_MS = 60 * 60 * 1000;
|
|
62
|
+
const DAY_MS = 24 * HOUR_MS;
|
|
63
|
+
/** Hoeveel back-ups er hooguit blijven; meer is vast een tikfout. */
|
|
64
|
+
exports.MAX_KEEP = 100;
|
|
65
|
+
/** Hoe lang het tussen twee back-ups hoort te zijn. */
|
|
66
|
+
function intervalOf(every) {
|
|
67
|
+
return every === 'day' ? DAY_MS : 7 * DAY_MS;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Of een volume aan de beurt is. Een uur speling, omdat main elk uur kijkt: anders schuift een
|
|
71
|
+
* dagelijkse back-up elke dag een uur op. Na een mislukte of overgeslagen poging pas een uur later
|
|
72
|
+
* opnieuw, zodat een lege schijf niet bij elke tik een poging kost.
|
|
73
|
+
*/
|
|
74
|
+
function isScheduleDue(schedule, now) {
|
|
75
|
+
if (schedule.lastOutcome !== null && schedule.lastOutcome.kind !== 'ok' && now - schedule.lastOutcome.at < HOUR_MS - 5 * 60 * 1000) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return schedule.lastSuccess === null || now - schedule.lastSuccess >= intervalOf(schedule.every) - HOUR_MS;
|
|
79
|
+
}
|
|
80
|
+
function escapeRegExp(text) {
|
|
81
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Welke bestanden in de map weg mogen: alleen back-ups van dit volume met de naam die de app geeft,
|
|
85
|
+
* en daarvan alles behalve de nieuwste `keep`. De datum staat in de naam, dus sorteren op naam is
|
|
86
|
+
* sorteren op tijd.
|
|
87
|
+
*/
|
|
88
|
+
function backupsToRemove(volume, names, keep) {
|
|
89
|
+
const own = new RegExp(`^${escapeRegExp(volume)}-\\d{8}-\\d{4}\\.tar$`);
|
|
90
|
+
return names
|
|
91
|
+
.filter((name) => own.test(name))
|
|
92
|
+
.sort()
|
|
93
|
+
.reverse()
|
|
94
|
+
.slice(Math.max(1, keep));
|
|
95
|
+
}
|
|
96
|
+
const EVERY = ['day', 'week'];
|
|
97
|
+
const WHEN_IN_USE = ['skip', 'pause'];
|
|
98
|
+
function parseOutcome(raw) {
|
|
99
|
+
const value = raw;
|
|
100
|
+
if (value === null || typeof value !== 'object' || typeof value['at'] !== 'number') {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const at = value['at'];
|
|
104
|
+
if (value['kind'] === 'ok' && typeof value['file'] === 'string') {
|
|
105
|
+
return { kind: 'ok', at, file: value['file'] };
|
|
106
|
+
}
|
|
107
|
+
if (value['kind'] === 'failed' && typeof value['problem'] === 'string') {
|
|
108
|
+
return { kind: 'failed', at, problem: value['problem'] };
|
|
109
|
+
}
|
|
110
|
+
if (value['kind'] === 'skipped' && Array.isArray(value['users'])) {
|
|
111
|
+
return { kind: 'skipped', at, users: value['users'].filter((user) => typeof user === 'string') };
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/** Leest het bewaarde bestand; een schema dat niet klopt, valt weg in plaats van alles mee te nemen. */
|
|
116
|
+
function parseSchedules(text) {
|
|
117
|
+
if (text === null) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const raw = JSON.parse(text);
|
|
122
|
+
const list = Array.isArray(raw.schedules) ? raw.schedules : [];
|
|
123
|
+
const result = [];
|
|
124
|
+
for (const item of list) {
|
|
125
|
+
const { volume, every, folder, keep, whenInUse, lastSuccess } = item;
|
|
126
|
+
if (typeof volume !== 'string' ||
|
|
127
|
+
volume === '' ||
|
|
128
|
+
!EVERY.includes(every) ||
|
|
129
|
+
typeof folder !== 'string' ||
|
|
130
|
+
folder === '' ||
|
|
131
|
+
typeof keep !== 'number' ||
|
|
132
|
+
!Number.isInteger(keep) ||
|
|
133
|
+
keep < 1 ||
|
|
134
|
+
keep > exports.MAX_KEEP ||
|
|
135
|
+
!WHEN_IN_USE.includes(whenInUse) ||
|
|
136
|
+
result.some((existing) => existing.volume === volume)) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
result.push({
|
|
140
|
+
volume,
|
|
141
|
+
every: every,
|
|
142
|
+
folder,
|
|
143
|
+
keep,
|
|
144
|
+
whenInUse: whenInUse,
|
|
145
|
+
lastSuccess: typeof lastSuccess === 'number' ? lastSuccess : null,
|
|
146
|
+
lastOutcome: parseOutcome(item.lastOutcome),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
class VolumeSchedules {
|
|
156
|
+
deps;
|
|
157
|
+
schedules;
|
|
158
|
+
running = false;
|
|
159
|
+
constructor(deps) {
|
|
160
|
+
this.deps = deps;
|
|
161
|
+
this.schedules = parseSchedules(deps.read());
|
|
162
|
+
}
|
|
163
|
+
list() {
|
|
164
|
+
return this.schedules;
|
|
165
|
+
}
|
|
166
|
+
/** Zet of vervangt het schema; wat er al gebeurde (de laatste back-up) blijft. */
|
|
167
|
+
set(input) {
|
|
168
|
+
const previous = this.schedules.find((schedule) => schedule.volume === input.volume);
|
|
169
|
+
const next = {
|
|
170
|
+
volume: input.volume,
|
|
171
|
+
every: input.every,
|
|
172
|
+
folder: input.folder,
|
|
173
|
+
keep: Math.min(exports.MAX_KEEP, Math.max(1, Math.round(input.keep))),
|
|
174
|
+
whenInUse: input.whenInUse,
|
|
175
|
+
lastSuccess: previous?.lastSuccess ?? null,
|
|
176
|
+
// Een ander doel of een andere keus: een eerdere mislukking zegt daar niets meer over.
|
|
177
|
+
lastOutcome: previous?.lastOutcome?.kind === 'ok' ? previous.lastOutcome : null,
|
|
178
|
+
};
|
|
179
|
+
this.store([...this.schedules.filter((schedule) => schedule.volume !== input.volume), next].sort((a, b) => a.volume.localeCompare(b.volume)));
|
|
180
|
+
return this.schedules;
|
|
181
|
+
}
|
|
182
|
+
remove(volume) {
|
|
183
|
+
this.store(this.schedules.filter((schedule) => schedule.volume !== volume));
|
|
184
|
+
return this.schedules;
|
|
185
|
+
}
|
|
186
|
+
/** Maakt de back-ups die aan de beurt zijn, na elkaar. Aan te roepen zo vaak als je wilt. */
|
|
187
|
+
async tick() {
|
|
188
|
+
if (this.running) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.running = true;
|
|
192
|
+
try {
|
|
193
|
+
for (const schedule of this.schedules) {
|
|
194
|
+
if (isScheduleDue(schedule, this.deps.now())) {
|
|
195
|
+
await this.run(schedule);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
this.running = false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async run(schedule) {
|
|
204
|
+
const outcome = await this.attempt(schedule);
|
|
205
|
+
const current = this.schedules.find((candidate) => candidate.volume === schedule.volume);
|
|
206
|
+
// Intussen weggehaald: dan niets terugzetten.
|
|
207
|
+
if (current === undefined) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (outcome.kind === 'failed' && current.lastOutcome?.kind !== 'failed') {
|
|
211
|
+
this.deps.notifyFailure(schedule.volume, outcome.problem);
|
|
212
|
+
}
|
|
213
|
+
this.store(this.schedules.map((candidate) => candidate.volume === schedule.volume
|
|
214
|
+
? { ...candidate, lastOutcome: outcome, lastSuccess: outcome.kind === 'ok' ? outcome.at : candidate.lastSuccess }
|
|
215
|
+
: candidate));
|
|
216
|
+
}
|
|
217
|
+
async attempt(schedule) {
|
|
218
|
+
const started = this.deps.now();
|
|
219
|
+
const failed = (problem) => ({ kind: 'failed', at: started, problem });
|
|
220
|
+
if (!this.deps.folderExists(schedule.folder)) {
|
|
221
|
+
return failed((0, i18n_1.t)({
|
|
222
|
+
en: `The folder ${schedule.folder} is not there (anymore).`,
|
|
223
|
+
nl: `De map ${schedule.folder} is er niet (meer).`,
|
|
224
|
+
de: `Der Ordner ${schedule.folder} ist nicht (mehr) da.`,
|
|
225
|
+
fr: `Le dossier ${schedule.folder} n’existe pas (ou plus).`,
|
|
226
|
+
es: `La carpeta ${schedule.folder} no está (ya).`,
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
229
|
+
const paused = [];
|
|
230
|
+
try {
|
|
231
|
+
const users = await this.deps.runningUsers(schedule.volume);
|
|
232
|
+
if (users.length > 0 && schedule.whenInUse === 'skip') {
|
|
233
|
+
return { kind: 'skipped', at: started, users };
|
|
234
|
+
}
|
|
235
|
+
for (const user of users) {
|
|
236
|
+
await this.deps.pause(user);
|
|
237
|
+
paused.push(user);
|
|
238
|
+
}
|
|
239
|
+
const target = path.join(schedule.folder, (0, volume_backup_1.backupFileName)(schedule.volume, new Date(started)));
|
|
240
|
+
const result = await this.deps.backup(schedule.volume, target);
|
|
241
|
+
if (!result.ok) {
|
|
242
|
+
return failed(result.problem);
|
|
243
|
+
}
|
|
244
|
+
this.prune(schedule);
|
|
245
|
+
return { kind: 'ok', at: started, file: target };
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
return failed(err instanceof Error ? err.message : String(err));
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
// Altijd weer los, ook als de back-up mislukte: een gepauzeerde database is erger dan geen back-up.
|
|
252
|
+
for (const user of paused) {
|
|
253
|
+
await this.deps.unpause(user).catch(() => undefined);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/** Haalt de oudste back-ups weg; lukt dat niet, dan blijven ze staan, en is de back-up nog steeds gelukt. */
|
|
258
|
+
prune(schedule) {
|
|
259
|
+
try {
|
|
260
|
+
for (const name of backupsToRemove(schedule.volume, this.deps.listFolder(schedule.folder), schedule.keep)) {
|
|
261
|
+
this.deps.removeFile(path.join(schedule.folder, name));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
// Een bestand dat in gebruik is, of een map zonder rechten: de volgende keer opnieuw.
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
store(schedules) {
|
|
269
|
+
this.schedules = schedules;
|
|
270
|
+
this.deps.write(`${JSON.stringify({ schedules }, null, 2)}\n`);
|
|
271
|
+
this.deps.changed(schedules);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.VolumeSchedules = VolumeSchedules;
|
|
275
|
+
let instance = null;
|
|
276
|
+
/** Eén keer, vanuit main.ts, dat de paden en Docker kent. */
|
|
277
|
+
function configureVolumeSchedules(deps) {
|
|
278
|
+
instance = new VolumeSchedules(deps);
|
|
279
|
+
return instance;
|
|
280
|
+
}
|
|
281
|
+
/** `null` zonder `configureVolumeSchedules` (de smoke test): dan zijn er geen schema's. */
|
|
282
|
+
function volumeSchedules() {
|
|
283
|
+
return instance;
|
|
284
|
+
}
|
|
285
|
+
//# 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 +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,A as HE,B as Kr,D as Gm,Gt as _m,H as Ld,Hn as p,K as My,Kn as pk,Nn as mj,Pt as Wm,R as Jm,Rn as oS,bn as hg,cn as ec,dn as fj,dr as vk,et as Od,hr as wc,in as dS,lr as vg,o as Ac,q as Nc,rt as Ot,t as $E,tt as Oi,un as fg,wn as jc}from"./chunk-u0OAgv4f.js";import{a as Ni,c as Ri,h as ki,i as Mi,n as Ii,o as Oi$1,p as ho,s as Pi,t as Ai}from"./chunk-EFAsN7J4.js";function H(o,u){if(o&1){let e=$E();Gm(0,`div`,2),Oi(1,`div`,3)(2,`div`,4)(3,`div`,5)(4,`span`,6),Gm(5,`app-icon`,7),Nc(),Oi(6,`div`,8)(7,`h2`,9),pk(8),Nc(),Oi(9,`p`,10),pk(10),Nc()()(),Oi(11,`div`,11)(12,`button`,12),Gm(13,`app-icon`,13),pk(14),Nc(),Oi(15,`button`,14),Jm(`click`,function(){Ld(e);return Od(HE().accept())}),Gm(16,`app-icon`,15),pk(17),Nc()()()()}if(o&2){let e=HE();ec(5),Wm(`size`,20),ec(3),fg(e.title()),ec(2),fg(e.description()),ec(3),Wm(`size`,14),ec(),Ac(` `,e.cancelLabel(),` `),ec(2),Wm(`name`,e.confirmIcon())(`size`,14),ec(),Ac(` `,e.shownConfirmLabel(),` `)}}var W;var J=p(()=>{Kr();ho();sS();dS();Kr();W=class o{open=mj(!1);title=jc.required();description=jc.required();confirmLabel=jc(null);confirmIcon=jc(`trash`);confirmed=fj();cancelLabel=Ot(()=>oS().common.cancel);shownConfirmLabel=Ot(()=>this.confirmLabel()??oS().shell.confirmDialog.confirm);accept(){this.open.set(!1),this.confirmed.emit()}static ɵfac=function(e){return new(e||o)};static ɵcmp=wc({type:o,selectors:[[`app-confirm-dialog`]],inputs:{open:[1,`open`],title:[1,`title`],description:[1,`description`],confirmLabel:[1,`confirmLabel`],confirmIcon:[1,`confirmIcon`]},outputs:{open:`openChange`,confirmed:`confirmed`},decls:2,vars:1,consts:[[`rdxAlertDialogRoot`,``,3,`openChange`,`open`],[`rdxAlertDialogPortal`,``],[`rdxAlertDialogBackdrop`,``,1,`fixed`,`inset-0`,`z-40`,`bg-black/50`],[`rdxAlertDialogViewport`,``,`rdxDialogViewport`,``,1,`fixed`,`inset-0`,`z-50`,`grid`,`place-items-center`,`p-4`],[`rdxAlertDialogPopup`,``,1,`w-full`,`max-w-md`,`rounded-lg`,`border`,`border-ink-700`,`bg-ink-850`,`p-5`,`shadow-2xl`],[1,`flex`,`gap-3`],[1,`mt-0.5`,`text-danger`],[`name`,`warning`,3,`size`],[1,`min-w-0`],[`rdxAlertDialogTitle`,``,1,`text-[15px]`,`font-semibold`,`text-ink-100`],[`rdxAlertDialogDescription`,``,1,`mt-1.5`,`text-[13px]`,`text-ink-300`],[1,`mt-5`,`flex`,`justify-end`,`gap-2`],[`type`,`button`,`rdxAlertDialogClose`,``,1,`mx-btn`,`mx-focus`],[`name`,`close`,3,`size`],[`type`,`button`,1,`mx-btn`,`mx-focus`,`border-danger`,`bg-danger`,`text-white`,`hover:border-danger`,`hover:bg-danger`,`hover:text-white`,3,`click`],[3,`name`,`size`]],template:function(e,d){e&1&&(Oi(0,`div`,0),vg(`openChange`,function(c){return vk(d.open,c)||(d.open=c),c}),_m(1,H,18,8,`ng-template`,1),Nc()),e&2&&hg(`open`,d.open)},dependencies:[Ni,Ai,Oi$1,ki,Ii,Pi,Mi,Ri,My],encapsulation:2})}});export{W as n,J 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{An as lS,B as Kr,Hn as p,Rt as X,_r as wt,cr as ve,f as C,rt as Ot,sn as eH}from"./chunk-u0OAgv4f.js";import{n as u$1,t as f}from"./chunk-CsQ_euXP.js";function c(s,t){let e=new Set(s);return e.delete(t),e}var S;var u;var v=p(()=>{Kr();lS();f();Kr();S=4e3,u=class s{toast=C(u$1);items=wt([]);measurements=wt(new Map);busy=wt(!1);loadProblem=wt(null);running=wt(new Set);slowStops=wt(new Set);stoppedHere=wt(new Set);containers=this.items.asReadonly();stats=this.measurements.asReadonly();loading=this.busy.asReadonly();problem=this.loadProblem.asReadonly();pending=this.running.asReadonly();slow=this.slowStops.asReadonly();stoppedDeliberately=this.stoppedHere.asReadonly();runningIds=Ot(()=>this.items().filter(t=>t.state===`running`).map(t=>t.id),{equal:(t,e)=>t.length===e.length&&t.every((o,n)=>o===e[n])});constructor(){let t=C(ve);t.onDestroy(window.electron.events.subscribe(e=>{e.includes(`container`)&&this.refresh()})),t.onDestroy(window.electron.containers.onStats(e=>this.applyStats(e)))}async refresh(){this.busy.set(!0);try{this.items.set(await window.electron.containers.list()),this.loadProblem.set(null)}catch(t){this.loadProblem.set(eH(t))}finally{this.busy.set(!1)}}watchStats(t){window.electron.containers.watchStats(t)}async run(t,e){this.running.update(n=>new Set(n).add(e)),(t===`stop`||t===`restart`)&&this.stoppedHere.update(n=>new Set(n).add(e));let o=t===`stop`||t===`restart`?setTimeout(()=>this.slowStops.update(n=>new Set(n).add(e)),S):null;try{let n=await window.electron.containers.action(t,e);n.ok||this.toast.error(n.problem)}finally{o!==null&&clearTimeout(o),this.running.update(n=>c(n,e)),this.slowStops.update(n=>c(n,e))}}async kill(t){this.stoppedHere.update(e=>new Set(e).add(t));try{let e=await window.electron.containers.action(`kill`,t);e.ok||this.toast.error(e.problem)}catch(e){this.toast.error(eH(e))}}async runMany(t,e){await Promise.all(e.map(o=>this.run(t,o)))}applyStats(t){let e=new Map(this.measurements());for(let o of t)e.set(o.id,o);this.measurements.set(e)}static ɵfac=function(e){return new(e||s)};static ɵprov=X({token:s,factory:s.ɵfac,providedIn:`root`})}});export{v as n,u as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$n as sS,An as lS,B as Kr,Hn as p,Rn as oS,Rt as X,_r as wt,cr as ve,f as C,rt as Ot,sn as eH}from"./chunk-u0OAgv4f.js";import{n as u,t as f$1}from"./chunk-CsQ_euXP.js";var y;var f=p(()=>{Kr();lS();f$1();sS();Kr();y=class s{toast=C(u);items=wt([]);busy=wt(!1);loadProblem=wt(null);running=wt(new Set);networks=this.items.asReadonly();loading=this.busy.asReadonly();problem=this.loadProblem.asReadonly();pending=this.running.asReadonly();unusedCount=Ot(()=>this.items().filter(e=>!e.builtIn&&e.connected===0).length);constructor(){C(ve).onDestroy(window.electron.events.subscribe(e=>{e.includes(`network`)&&this.refresh()}))}async refresh(){this.busy.set(!0);try{this.items.set(await window.electron.networks.list()),this.loadProblem.set(null)}catch(e){this.loadProblem.set(eH(e))}finally{this.busy.set(!1)}}async create(e){let t;try{let r=await window.electron.networks.create(e);t=r.ok?null:r.problem}catch(r){t=eH(r)}return t===null&&(this.toast.success(oS().networks.created(e.name)),await this.refresh()),t}async remove(e){this.running.update(t=>new Set(t).add(e));try{let t=await window.electron.networks.remove(e);t.ok||this.toast.error(t.problem)}finally{this.running.update(t=>{let r=new Set(t);return r.delete(e),r})}await this.refresh()}async removeMany(e){await Promise.all(e.map(t=>this.remove(t)))}async prune(){this.busy.set(!0);try{let e=await window.electron.networks.prune();e.ok?this.toast.success(e.removed===0?oS().common.nothingToPrune:oS().networks.pruned(e.removed)):this.toast.error(e.problem)}finally{this.busy.set(!1)}await this.refresh()}static ɵfac=function(t){return new(t||s)};static ɵprov=X({token:s,factory:s.ɵfac,providedIn:`root`})}});export{y as n,f 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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as OE,B as Kr,E as Gi,Hn as p,I as Iw,It as Ws,Mt as Vr,On as ke,Rt as X,Tn as k,U as M,V as LI,f as C$1,ft as RI,it as PE,n as $c,nn as br,pn as ge$1,pt as Re$1}from"./chunk-u0OAgv4f.js";function T(){return te}function ge(e){te??=e}var te;var $;var O;var ne;var U=p(()=>{Kr();Kr();te=null;$=class{},O=(()=>{class e{historyGo(t){throw new Error(``)}static ɵfac=function(n){return new(n||e)};static ɵprov=X({token:e,factory:()=>C$1(ne),providedIn:`platform`})}return e})(),ne=(()=>{class e extends O{_location;_history;_doc=C$1(br);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return T().getBaseHref(this._doc)}onPopState(t){let n=T().getGlobalEventTarget(this._doc,`window`);return n.addEventListener(`popstate`,t,!1),()=>n.removeEventListener(`popstate`,t)}onHashChange(t){let n=T().getGlobalEventTarget(this._doc,`window`);return n.addEventListener(`hashchange`,t,!1),()=>n.removeEventListener(`hashchange`,t)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(t){this._location.pathname=t}pushState(t,n,r){this._history.pushState(t,n,r)}replaceState(t,n,r){this._history.replaceState(t,n,r)}forward(){this._history.forward()}back(){this._history.back()}historyGo(t=0){this._history.go(t)}getState(){return this._history.state}static ɵfac=function(n){return new(n||e)};static ɵprov=X({token:e,factory:()=>new e,providedIn:`platform`})}return e})()});function se(e,i){return e?i?e.endsWith(`/`)?i.startsWith(`/`)?e+i.slice(1):e+i:i.startsWith(`/`)?e+i:`${e}/${i}`:e:i}function ie(e){let i=e.search(/#|\?|$/);return e[i-1]===`/`?e.slice(0,i-1)+e.slice(i):e}function C(e){return e&&e[0]!==`?`?`?${e}`:e}function me(){return new oe(Re$1(R))}function Ce(e,i){if(!e||!i.startsWith(e))return i;let t=i.substring(e.length);return t===``||[`/`,`;`,`?`,`#`].includes(t[0])?t:i}function re(e){return e.replace(/\/index\.html$/,``)}function ye(e){if(new RegExp(`^(https?:)?//`).test(e)){let[,t]=e.split(/\/\/[^\/]+/);return t}return e}var R;var De;var pe;var oe;var ae=p(()=>{Kr();Kr();Ws();U();R=(()=>{class e{historyGo(t){throw new Error(``)}static ɵfac=function(n){return new(n||e)};static ɵprov=X({token:e,factory:()=>C$1(pe),providedIn:`root`})}return e})(),De=new M(``),pe=(()=>{class e extends R{_platformLocation;_baseHref;_removeListenerFns=[];constructor(t,n){super(),this._platformLocation=t,this._baseHref=n??this._platformLocation.getBaseHrefFromDOM()??C$1(br).location?.origin??``}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return se(this._baseHref,t)}path(t=!1){let n=this._platformLocation.pathname+C(this._platformLocation.search),r=this._platformLocation.hash;return r&&t?`${n}${r}`:n}pushState(t,n,r,s){let o=this.prepareExternalUrl(r+C(s));this._platformLocation.pushState(t,n,o)}replaceState(t,n,r,s){let o=this.prepareExternalUrl(r+C(s));this._platformLocation.replaceState(t,n,o)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static ɵfac=function(n){return new(n||e)(Re$1(O),Re$1(De,8))};static ɵprov=X({token:e,factory:e.ɵfac,providedIn:`root`})}return e})(),oe=(()=>{class e{_subject=new ge$1;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(t){this._locationStrategy=t;let n=this._locationStrategy.getBaseHref();this._basePath=ye(ie(re(n))),this._locationStrategy.onPopState(r=>{let s={url:this.path(!0),pop:!0,state:r.state,type:r.type};r.hasUAVisualTransition&&(s.hasUAVisualTransition=!0),this._subject.next(s)})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(t=!1){return this.normalize(this._locationStrategy.path(t))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(t,n=``){return this.path()==this.normalize(t+C(n))}normalize(t){return e.stripTrailingSlash(Ce(this._basePath,re(t)))}prepareExternalUrl(t){return t&&t[0]!==`/`&&(t=`/`+t),this._locationStrategy.prepareExternalUrl(t)}go(t,n=``,r=null){this._locationStrategy.pushState(r,``,t,n),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+C(n)),r)}replaceState(t,n=``,r=null){this._locationStrategy.replaceState(r,``,t,n),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+C(n)),r)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(t=0){this._locationStrategy.historyGo?.(t)}onUrlChange(t){return this._urlChangeListeners.push(t),this._urlChangeSubscription??=this.subscribe(n=>{this._notifyUrlChangeListeners(n.url,n.state)}),()=>{let n=this._urlChangeListeners.indexOf(t);this._urlChangeListeners.splice(n,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(t=``,n){this._urlChangeListeners.forEach(r=>r(t,n))}subscribe(t,n,r){return this._subject.subscribe({next:t,error:n??void 0,complete:r??void 0})}static normalizeQueryParams=C;static joinWithSlash=se;static stripTrailingSlash=ie;static ɵfac=function(n){return new(n||e)(Re$1(R))};static ɵprov=X({token:e,factory:()=>me(),providedIn:`root`})}return e})()});function A(e,i){let t=OE(e),n=t[PE.NumberSymbols][i];if(typeof n>`u`){if(i===h.CurrencyDecimal)return t[PE.NumberSymbols][h.Decimal];if(i===h.CurrencyGroup)return t[PE.NumberSymbols][h.Group]}return n}function ce(e,i){return OE(e)[PE.NumberFormats][i]}function Ae(e,i,t,n,r,s,o=!1){let u=``,D=!1;if(!isFinite(e))u=A(t,Number.isNaN(e)?h.NaN:h.Infinity);else{let d=ve(e);o&&(d=_e(d));let l=i.minInt,a=i.minFrac,f=i.maxFrac;if(s){let w=s.match(Fe);if(w===null)throw new k(2306,!1);let H=w[1],B=w[3],W=w[5];H!=null&&(l=z(H)),B!=null&&(a=z(B)),W!=null?f=z(W):B!=null&&a>f&&(f=a);let N=100;if(l>N||a>N||f>N)throw new k(2306,!1)}be(d,a,f);let c=d.digits,g=d.integerLen,G=d.exponent,I=[];for(D=c.every(w=>!w);g<l;g++)c.unshift(0);for(;g<0;g++)c.unshift(0);g>0?I=c.splice(g,c.length):(I=c,c=[0]);let L=[];for(c.length>=i.lgSize&&L.unshift(c.splice(-i.lgSize,c.length).join(``));c.length>i.gSize;)L.unshift(c.splice(-i.gSize,c.length).join(``));c.length&&L.unshift(c.join(``)),u=L.join(A(t,n)),I.length&&(u+=A(t,r)+I.join(``)),G&&(u+=A(t,h.Exponential)+`+`+G)}return e<0&&!D?u=i.negPre+u+i.negSuf:u=i.posPre+u+i.posSuf,u}function de(e,i,t){return Ae(e,Se(ce(i,V.Decimal),A(i,h.MinusSign)),i,h.Group,h.Decimal,t)}function Se(e,i=`-`){let t={minInt:1,minFrac:0,maxFrac:0,posPre:``,posSuf:``,negPre:``,negSuf:``,gSize:0,lgSize:0},n=e.split(Ee),r=n[0],s=n[1],o=r.indexOf(P)!==-1?r.split(P):[r.substring(0,r.lastIndexOf(b)+1),r.substring(r.lastIndexOf(b)+1)],u=o[0],D=o[1]||``;t.posPre=u.substring(0,u.indexOf(j));for(let l=0;l<D.length;l++){let a=D.charAt(l);a===b?t.minFrac=t.maxFrac=l+1:a===j?t.maxFrac=l+1:t.posSuf+=a}let d=u.split(we);if(t.gSize=d[1]?d[1].length:0,t.lgSize=d[2]||d[1]?(d[2]||d[1]).length:0,s){let l=r.length-t.posPre.length-t.posSuf.length,a=s.indexOf(j);t.negPre=s.substring(0,a).replace(/'/g,``),t.negSuf=s.slice(a+l).replace(/'/g,``)}else t.negPre=i+t.posPre,t.negSuf=t.posSuf;return t}function _e(e){if(e.digits[0]===0)return e;let i=e.digits.length-e.integerLen;return e.exponent?e.exponent+=2:(i===0?e.digits.push(0,0):i===1&&e.digits.push(0),e.integerLen+=2),e}function ve(e){let i=Math.abs(e)+``,t=0,n,r,s,o,u;for((r=i.indexOf(P))>-1&&(i=i.replace(P,``)),(s=i.search(/e/i))>0?(r<0&&(r=s),r+=+i.slice(s+1),i=i.substring(0,s)):r<0&&(r=i.length),s=0;i.charAt(s)===b;s++);if(s===(u=i.length))n=[0],r=1;else{for(u--;i.charAt(u)===b;)u--;for(r-=s,n=[],o=0;s<=u;s++,o++)n[o]=Number(i.charAt(s))}return r>ue&&(n=n.splice(0,ue-1),t=r-1,r=1),{digits:n,exponent:t,integerLen:r}}function be(e,i,t){if(i>t)throw new k(2307,!1);let n=e.digits,r=n.length-e.integerLen,s=Math.min(Math.max(i,r),t),o=s+e.integerLen,u=n[o];if(o>0){n.splice(Math.max(e.integerLen,o));for(let a=o;a<n.length;a++)n[a]=0}else{r=Math.max(0,r),e.integerLen=1,n.length=Math.max(1,o=s+1),n[0]=0;for(let a=1;a<o;a++)n[a]=0}if(u>=5)if(o-1<0){for(let a=0;a>o;a--)n.unshift(0),e.integerLen++;n.unshift(1),e.integerLen++}else n[o-1]++;for(;r<Math.max(0,s);r++)n.push(0);let D=s!==0,d=i+e.integerLen,l=n.reduceRight(function(a,f,c,g){return f=f+a,g[c]=f<10?f:f-10,D&&(g[c]===0&&c>=d?g.pop():D=!1),f>=10?1:0},0);l&&(n.unshift(l),e.integerLen++)}function z(e){let i=parseInt(e);if(isNaN(i))throw new k(2305,!1);return i}function Le(e,i){return new k(2100,!1)}function Te(e){return!(e==null||e===``||e!==e)}function Oe(e){if(typeof e==`string`&&!isNaN(Number(e)-parseFloat(e)))return Number(e);if(typeof e!=`number`)throw new k(2309,!1);return e}var V;var h;var Fe;var ue;var P;var b;var Ee;var we;var j;var Ie;var Me;var le=p(()=>{Kr();Kr();V=(function(e){return e[e.Decimal=0]=`Decimal`,e[e.Percent=1]=`Percent`,e[e.Currency=2]=`Currency`,e[e.Scientific=3]=`Scientific`,e})(V||{}),h={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};Fe=/^(\d+)?\.((\d+)(-(\d+))?)?$/,ue=22,P=`.`,b=`0`,Ee=`;`,we=`,`,j=`#`;Ie=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=C$1(ke);constructor(t){this._viewContainerRef=t}ngOnChanges(t){if(this._shouldRecreateView(t)){let n=this._viewContainerRef;if(this._viewRef&&n.remove(n.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let r=this._createContextForwardProxy();this._viewRef=n.createEmbeddedView(this.ngTemplateOutlet,r,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector===`outlet`?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(t){return!!t.ngTemplateOutlet||!!t.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(t,n,r)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,n,r):!1,get:(t,n,r)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,n,r)}})}static ɵfac=function(n){return new(n||e)(Vr(Gi))};static ɵdir=RI({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[Iw]})}return e})();Me=(()=>{class e{_locale;constructor(t){this._locale=t}transform(t,n,r){if(!Te(t))return null;r||=this._locale;try{return de(Oe(t),r,n)}catch(s){throw Le(e,s.message)}}static ɵfac=function(n){return new(n||e)(Vr($c,16))};static ɵpipe=LI({name:`number`,type:e,pure:!0})}return e})()});function Re(e,i){i=encodeURIComponent(i);for(let t of e.split(`;`)){let n=t.indexOf(`=`),[r,s]=n==-1?[t,``]:[t.slice(0,n),t.slice(n+1)];if(r.trim()!==i)continue;let o=s;try{o=decodeURIComponent(s)}catch{}return o.length>1&&o[0]===`"`&&o[o.length-1]===`"`&&(o=o.slice(1,-1)),o}return null}var fe=p(()=>{});function $n(e){return e===Be}var Be;var Ne=p(()=>{ae();le();U();Kr();fe();Be=`browser`});export{Me as a,Re as c,oe as d,Ie as i,T as l,$n as n,Ne as o,Be as r,R as s,$ as t,ge as u};
|