@fde-desktop/fde-core 0.4.13 → 0.4.20

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 (132) hide show
  1. package/dist/{AppEmptyState-Boej96TB.js → AppEmptyState-BVfKZU-h.js} +1 -1
  2. package/dist/AppEmptyState-Z8_Cviti.cjs +1 -0
  3. package/dist/AppIcon-Czrtau6A.cjs +1 -0
  4. package/dist/{AppIcon-mtEoyzOb.js → AppIcon-aFNw89J2.js} +1 -1
  5. package/dist/AppMenuBar-38QtFTPk.cjs +1 -0
  6. package/dist/AppTempMemory-DAC62jiS.cjs +1 -0
  7. package/dist/AppTempMemory-DgUW6GaF.js +23 -0
  8. package/dist/CalendarApp-BYTyu089.js +9 -0
  9. package/dist/CalendarApp-DPOK4mqg.cjs +1 -0
  10. package/dist/{ColorPicker-WCeD3Wjf.js → ColorPicker-B76rCS2H.js} +1 -1
  11. package/dist/ColorPicker-BZqsPh3X.cjs +1 -0
  12. package/dist/CreateItemApp-B0IHL16b.cjs +1 -0
  13. package/dist/CreateItemApp-UUP2HAu2.js +149 -0
  14. package/dist/DeviceInfoApp-BPQyeVSd.js +162 -0
  15. package/dist/DeviceInfoApp-D2mS2OT-.cjs +1 -0
  16. package/dist/DownloadProgress-CpJguS8g.cjs +1 -0
  17. package/dist/FilePickerApp-ClmPw6lk.cjs +1 -0
  18. package/dist/{FilePickerApp-ClHuhm6Z.js → FilePickerApp-D7fERKbp.js} +1 -1
  19. package/dist/FilesApp-DhJbO8wg.js +191 -0
  20. package/dist/FilesApp-LbwRRR1i.cjs +1 -0
  21. package/dist/IconColorPicker-7rWNAiNQ.cjs +1 -0
  22. package/dist/IconColorPicker-DUIXSb5E.js +58 -0
  23. package/dist/ImageViewerApp-9T-V8uP5.cjs +1 -0
  24. package/dist/ImageViewerApp-ihqIwJ-L.js +68 -0
  25. package/dist/ImageViewerMenuBar-DmvZoZ03.cjs +1 -0
  26. package/dist/{ImageViewerMenuBar-BIsUokxV.js → ImageViewerMenuBar-ZeIKHdA-.js} +18 -19
  27. package/dist/MenuEditApp-DRKfmSIZ.js +361 -0
  28. package/dist/MenuEditApp-U7EqB5Rl.cjs +1 -0
  29. package/dist/MenuEditMenuBar-BE_cXaoG.cjs +1 -0
  30. package/dist/MenuEditMenuBar-Df1je7F6.js +59 -0
  31. package/dist/NotesApp-DZfNQ8mN.cjs +1 -0
  32. package/dist/NotesApp-rwAeXyJy.js +344 -0
  33. package/dist/{NotesMenuBar-DILZTjnT.js → NotesMenuBar-C503t5pu.js} +12 -13
  34. package/dist/NotesMenuBar-CwgZ9dHy.cjs +1 -0
  35. package/dist/PdfApp-DNZaSXbF.cjs +1 -0
  36. package/dist/PdfApp-K1Z612o3.js +38 -0
  37. package/dist/PdfMenuBar-BPzP_JUO.cjs +1 -0
  38. package/dist/PdfMenuBar-DEUKgKTE.js +38 -0
  39. package/dist/SettingsApp-DdWqiYFE.cjs +1 -0
  40. package/dist/SettingsApp-ghc3RaMv.js +875 -0
  41. package/dist/SettingsMenuBar-C4KAPoBs.js +41 -0
  42. package/dist/SettingsMenuBar-CgmaF9_B.cjs +1 -0
  43. package/dist/{UploaderApp-Bboc4KZ1.js → UploaderApp-D9vfOR0S.js} +28 -40
  44. package/dist/UploaderApp-omSY-NSn.cjs +1 -0
  45. package/dist/VscIcon-CeELixwP.cjs +1 -0
  46. package/dist/buildBreadcrumbs-C2c2a4R3.cjs +1 -0
  47. package/dist/desktopStore-LSQweOqZ.cjs +1 -0
  48. package/dist/{desktopStore-8cSZlj7s.js → desktopStore-xnNbYaYm.js} +263 -263
  49. package/dist/formatBytes-Bv1bQPKQ.cjs +1 -0
  50. package/dist/formatBytes-CaP80WnM.js +14 -0
  51. package/dist/i18nConstants-DgbKSBIK.cjs +1 -0
  52. package/dist/i18nConstants-Nzpf2IFp.js +611 -0
  53. package/dist/imageViewerStore-CYt4R4e4.cjs +1 -0
  54. package/dist/index.cjs +1 -1
  55. package/dist/index.css +1 -1
  56. package/dist/index.d.ts +50 -29
  57. package/dist/index.js +698 -650
  58. package/dist/menuEditStore-sU6qaF2j.cjs +1 -0
  59. package/dist/notesStore-BnMXBRaV.cjs +1 -0
  60. package/dist/settingsAppStore-CQ4JHd7Q.cjs +1 -0
  61. package/dist/useAdaptiveDimensions-BDZxP4E3.cjs +1 -0
  62. package/dist/{useAdaptiveDimensions-DxNLJ7R5.js → useAdaptiveDimensions-sv9lwqF_.js} +1 -1
  63. package/dist/useCloseInterceptor-AzfjUZgz.cjs +1 -0
  64. package/dist/{useCloseInterceptor-CIxhOZx1.js → useCloseInterceptor-Bwm4I0O8.js} +1 -1
  65. package/dist/useDeviceDetection-B9jjlate.js +37 -0
  66. package/dist/useDeviceDetection-CnxnQWIq.cjs +1 -0
  67. package/dist/useDragDrop-Bdwzk6VO.cjs +1 -0
  68. package/dist/useDragDrop-D2LtOEYC.js +139 -0
  69. package/dist/useDynamicIcon-Cg3B_Aeq.cjs +1 -0
  70. package/dist/useNotifications-CR9JLjtC.js +26 -0
  71. package/dist/useNotifications-rwLmJ7fI.cjs +1 -0
  72. package/dist/useOpenApp-BBZ_B7Pr.cjs +1 -0
  73. package/dist/{useOpenApp-uguTLkyl.js → useOpenApp-DdEbOVby.js} +3 -3
  74. package/dist/useResolvedUrl-CgqjNxzw.js +389 -0
  75. package/dist/useResolvedUrl-Dz2AhrDV.cjs +1 -0
  76. package/package.json +1 -1
  77. package/dist/AppEmptyState-CLc00OOG.cjs +0 -1
  78. package/dist/AppIcon-C8vHUVcb.cjs +0 -1
  79. package/dist/AppMenuBar-CAlkNHjj.cjs +0 -1
  80. package/dist/CalendarApp-DOmjWbpl.js +0 -10
  81. package/dist/CalendarApp-Z0bCCYsK.cjs +0 -1
  82. package/dist/ColorPicker-CQRRwY-y.cjs +0 -1
  83. package/dist/CreateItemApp-BkFFFdX1.cjs +0 -1
  84. package/dist/CreateItemApp-DR8Y4bwo.js +0 -202
  85. package/dist/DeviceInfoApp-BXQ9uOwF.cjs +0 -1
  86. package/dist/DeviceInfoApp-I63mJRWy.js +0 -195
  87. package/dist/DownloadProgress-CkTGTf0z.cjs +0 -1
  88. package/dist/FilePickerApp-By6-vbag.cjs +0 -1
  89. package/dist/FilesApp-BRK2OqkQ.cjs +0 -1
  90. package/dist/FilesApp-BuoFP_KA.js +0 -212
  91. package/dist/ImageViewerApp-B1niWF75.cjs +0 -1
  92. package/dist/ImageViewerApp-iojtyFEf.js +0 -69
  93. package/dist/ImageViewerMenuBar-BgzgSF3v.cjs +0 -1
  94. package/dist/MenuEditApp-BHptoJbz.cjs +0 -1
  95. package/dist/MenuEditApp-CJUbJaqh.js +0 -492
  96. package/dist/MenuEditMenuBar-CCOSPAUe.cjs +0 -1
  97. package/dist/MenuEditMenuBar-DnCL-kaZ.js +0 -60
  98. package/dist/NotesApp-BmQIBtJ2.cjs +0 -1
  99. package/dist/NotesApp-DJ2dGt4-.js +0 -364
  100. package/dist/NotesMenuBar-BzojwMtH.cjs +0 -1
  101. package/dist/PdfApp-IjY_GtnW.js +0 -39
  102. package/dist/PdfApp-krW8UI97.cjs +0 -1
  103. package/dist/PdfMenuBar-Bd5MTZcZ.js +0 -39
  104. package/dist/PdfMenuBar-DWD0Qa3F.cjs +0 -1
  105. package/dist/SettingsApp-BE22l5UP.cjs +0 -1
  106. package/dist/SettingsApp-BTFtTFY_.js +0 -1228
  107. package/dist/SettingsMenuBar-CZE2evG2.cjs +0 -1
  108. package/dist/SettingsMenuBar-ktC0viTd.js +0 -42
  109. package/dist/UploaderApp-Dr1mF7oj.cjs +0 -1
  110. package/dist/VscIcon-BYb_Soyy.cjs +0 -1
  111. package/dist/buildBreadcrumbs-Ccd8i11b.cjs +0 -1
  112. package/dist/desktopStore-C1jR6Fdb.cjs +0 -1
  113. package/dist/imageViewerStore-Dfylg59V.cjs +0 -1
  114. package/dist/menuEditStore-CYwtfD6H.cjs +0 -1
  115. package/dist/notesStore-CrWTO6oB.cjs +0 -1
  116. package/dist/rolldown-runtime-CAFD8bLK.js +0 -11
  117. package/dist/settingsAppStore-DuYZNeFf.cjs +0 -1
  118. package/dist/useAdaptiveDimensions-3Lz4X0Tc.cjs +0 -1
  119. package/dist/useCloseInterceptor-CdX-09Ib.cjs +0 -1
  120. package/dist/useDynamicIcon-CK6SjEv5.cjs +0 -1
  121. package/dist/useOpenApp-ChDhsL9h.cjs +0 -1
  122. package/dist/useResolvedUrl-B6x4xy0x.js +0 -29
  123. package/dist/useResolvedUrl-Bb39DpVy.cjs +0 -1
  124. /package/dist/{Colors-CuABn2W4.js → Colors-BIj4g0eH.js} +0 -0
  125. /package/dist/{Colors-CNJbU7oq.cjs → Colors-PNt4eyR6.cjs} +0 -0
  126. /package/dist/{DownloadProgress-DnVASsv5.js → DownloadProgress-DBFA58C5.js} +0 -0
  127. /package/dist/{imageViewerStore-COrD02Zu.js → imageViewerStore-C6UgceP-.js} +0 -0
  128. /package/dist/{menuEditStore-CxsgLiQu.js → menuEditStore-DPqViGva.js} +0 -0
  129. /package/dist/{notesStore-Dgah46U5.js → notesStore-KZDXN6zx.js} +0 -0
  130. /package/dist/{settingsAppStore-DHZhi6Rl.js → settingsAppStore-Y7x3r6pV.js} +0 -0
  131. /package/dist/{useMenuBarUtils-DAap0ukp.cjs → useMenuBarUtils-BOnQYtKU.cjs} +0 -0
  132. /package/dist/{useMenuBarUtils-ChAfI7OA.js → useMenuBarUtils-DTPFK0IN.js} +0 -0
@@ -1,1228 +0,0 @@
1
- import { t as e } from "./rolldown-runtime-CAFD8bLK.js";
2
- import { G as t, o as n } from "./desktopStore-8cSZlj7s.js";
3
- import { t as r } from "./AppIcon-mtEoyzOb.js";
4
- import { i } from "./useCloseInterceptor-CIxhOZx1.js";
5
- import { t as a } from "./useResolvedUrl-B6x4xy0x.js";
6
- import { n as o } from "./FilePickerApp-ClHuhm6Z.js";
7
- import { t as s } from "./Colors-CuABn2W4.js";
8
- import { t as c } from "./DownloadProgress-DnVASsv5.js";
9
- import { t as l } from "./ColorPicker-WCeD3Wjf.js";
10
- import { n as u } from "./settingsAppStore-DHZhi6Rl.js";
11
- import { useCallback as d, useDeferredValue as f, useEffect as p, useRef as m, useState as h } from "react";
12
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
13
- import { Badge as v, Box as y, Button as b, Card as x, Group as S, Paper as C, Radio as w, ScrollArea as T, SegmentedControl as E, SimpleGrid as ee, Slider as D, Stack as O, Text as k, TextInput as A, Tooltip as te, UnstyledButton as j } from "@mantine/core";
14
- import { useQuery as M, useQueryClient as N } from "@tanstack/react-query";
15
- import { create as P } from "zustand";
16
- import { createJSONStorage as ne, persist as F } from "zustand/middleware";
17
- import { useTranslation as I } from "react-i18next";
18
- //#region src/infrastructure/adapters/DefaultThemeProvider.ts
19
- var L = {
20
- mode: "light",
21
- colors: {
22
- desktop: "#f0f4f8",
23
- taskbar: "rgba(255, 255, 255, 0.9)",
24
- window: "#ffffff",
25
- accent: "#339af0"
26
- },
27
- window: {
28
- borderRadius: "8px",
29
- headerHeight: 40,
30
- minWidth: 400,
31
- minHeight: 300,
32
- defaultWidth: 800,
33
- defaultHeight: 600,
34
- shadow: "0 8px 32px rgba(0, 0, 0, 0.2)"
35
- },
36
- taskbar: {
37
- height: 48,
38
- position: "bottom",
39
- background: "rgba(0, 0, 0, 0.8)",
40
- blur: !0
41
- },
42
- desktop: {
43
- background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
44
- iconSize: 64,
45
- iconSpacing: 16
46
- }
47
- }, R = {
48
- mode: "dark",
49
- colors: {
50
- desktop: "#1a1b1e",
51
- taskbar: "rgba(26, 27, 30, 0.9)",
52
- window: "#25262b",
53
- accent: "#4dabf7"
54
- },
55
- window: {
56
- borderRadius: "8px",
57
- headerHeight: 40,
58
- minWidth: 400,
59
- minHeight: 300,
60
- defaultWidth: 800,
61
- defaultHeight: 600,
62
- shadow: "0 8px 32px rgba(0, 0, 0, 0.2)"
63
- },
64
- taskbar: {
65
- height: 48,
66
- position: "bottom",
67
- background: "rgba(0, 0, 0, 0.8)",
68
- blur: !0
69
- },
70
- desktop: {
71
- background: "linear-gradient(135deg, #1a1b1e 0%, #2d1f3d 100%)",
72
- iconSize: 64,
73
- iconSpacing: 16
74
- }
75
- }, z = class {
76
- mode;
77
- customColors = null;
78
- constructor(e = "light") {
79
- this.mode = e;
80
- }
81
- getTheme() {
82
- let e = this.mode === "light" ? L : R;
83
- return this.customColors ? {
84
- ...e,
85
- colors: {
86
- ...e.colors,
87
- taskbar: this.customColors.taskbar,
88
- window: this.customColors.window,
89
- accent: this.customColors.accent
90
- }
91
- } : e;
92
- }
93
- setMode(e) {
94
- this.mode = e;
95
- }
96
- setCustomColors(e) {
97
- this.customColors = e;
98
- }
99
- toggle() {
100
- this.mode = this.mode === "light" ? "dark" : "light";
101
- }
102
- }, B = ["en", "es"], V = "en", H = () => {
103
- try {
104
- let e = localStorage.getItem("fde-desktop:settings"), t = localStorage.getItem("fran-desktop:settings");
105
- return JSON.parse(e ?? t ?? "{}")?.state?.theme?.mode ?? null;
106
- } catch {
107
- return null;
108
- }
109
- }, U = H(), W = () => {
110
- if (typeof navigator > "u" || !navigator.language) return V;
111
- let e = navigator.language.split("-")[0];
112
- return B.includes(e) ? e : V;
113
- }, re = (() => {
114
- try {
115
- let e = localStorage.getItem("fde-desktop:settings"), t = localStorage.getItem("fran-desktop:settings"), n = JSON.parse(e ?? t ?? "{}")?.state?.language;
116
- return n && B.includes(n) ? n : W();
117
- } catch {
118
- return W();
119
- }
120
- })(), ie = typeof window < "u" && window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light", G = new z(U ?? ie), K = P()(F((e) => ({
121
- wallpaper: null,
122
- wallpaperModule: "default",
123
- launcherIcon: "FcElectronics",
124
- font: "system-ui",
125
- downloadedFonts: [],
126
- fontSize: 14,
127
- animationDuration: .3,
128
- theme: G.getTheme(),
129
- themeSetManually: U !== null,
130
- customThemeColors: null,
131
- language: re,
132
- setWallpaper: (t) => e({ wallpaper: t }),
133
- setWallpaperModule: (t) => e({ wallpaperModule: t }),
134
- setLauncherIcon: (t) => e({ launcherIcon: t }),
135
- setFont: (t) => e({ font: t }),
136
- markFontDownloaded: (t) => e((e) => ({ downloadedFonts: e.downloadedFonts.includes(t) ? e.downloadedFonts : [...e.downloadedFonts, t] })),
137
- setFontSize: (t) => e({ fontSize: t }),
138
- setAnimationDuration: (t) => e({ animationDuration: t }),
139
- setThemeMode: (t) => {
140
- G.setMode(t), e({
141
- theme: G.getTheme(),
142
- themeSetManually: !0
143
- });
144
- },
145
- toggleTheme: () => {
146
- G.toggle(), e({
147
- theme: G.getTheme(),
148
- themeSetManually: !0
149
- });
150
- },
151
- setThemeAutomatic: () => e({ themeSetManually: !1 }),
152
- applySystemTheme: (t) => {
153
- G.setMode(t), e({ theme: G.getTheme() });
154
- },
155
- setCustomThemeColors: (t) => {
156
- e({ customThemeColors: t });
157
- },
158
- setLanguage: (t) => e({ language: t })
159
- }), {
160
- name: "fde-desktop:settings",
161
- storage: ne(() => localStorage)
162
- })), q = {
163
- container: "_container_a0fjd_1",
164
- flag: "_flag_a0fjd_8"
165
- }, ae = {
166
- en: /* @__PURE__ */ _("svg", {
167
- viewBox: "0 0 60 40",
168
- className: q.flag,
169
- children: [
170
- /* @__PURE__ */ g("rect", {
171
- fill: "#012169",
172
- width: "60",
173
- height: "40"
174
- }),
175
- /* @__PURE__ */ g("path", {
176
- d: "M0,0 L60,40 M60,0 L0,40",
177
- stroke: "#fff",
178
- strokeWidth: "6"
179
- }),
180
- /* @__PURE__ */ g("path", {
181
- d: "M0,0 L60,40 M60,0 L0,40",
182
- stroke: "#C8102E",
183
- strokeWidth: "4"
184
- }),
185
- /* @__PURE__ */ g("path", {
186
- d: "M30,0 V40 M0,20 H60",
187
- stroke: "#fff",
188
- strokeWidth: "10"
189
- }),
190
- /* @__PURE__ */ g("path", {
191
- d: "M30,0 V40 M0,20 H60",
192
- stroke: "#C8102E",
193
- strokeWidth: "6"
194
- })
195
- ]
196
- }),
197
- es: /* @__PURE__ */ _("svg", {
198
- viewBox: "0 0 60 40",
199
- className: q.flag,
200
- children: [/* @__PURE__ */ g("rect", {
201
- fill: "#C60B1E",
202
- width: "60",
203
- height: "40"
204
- }), /* @__PURE__ */ g("rect", {
205
- fill: "#FFC400",
206
- y: "10",
207
- width: "60",
208
- height: "20"
209
- })]
210
- })
211
- }, oe = ({ lang: e, size: t = 20 }) => /* @__PURE__ */ g("div", {
212
- style: {
213
- width: t * 1.5,
214
- height: t
215
- },
216
- className: q.container,
217
- "aria-label": e === "en" ? "English" : "Español",
218
- "data-testid": `flag-${e}`,
219
- children: ae[e]
220
- }), J = [
221
- {
222
- value: "system-ui",
223
- label: "System Default",
224
- stack: "system-ui, Avenir, Helvetica, Arial, sans-serif"
225
- },
226
- {
227
- value: "Courier New",
228
- label: "Courier New",
229
- stack: "\"Courier New\", monospace"
230
- },
231
- {
232
- value: "Source Code Pro",
233
- label: "Source Code Pro",
234
- stack: "\"Source Code Pro\", monospace"
235
- },
236
- {
237
- value: "Open Sans",
238
- label: "Open Sans",
239
- stack: "\"Open Sans\", monospace"
240
- }
241
- ], se = Object.fromEntries(J.map((e) => [e.value, e.stack])), Y = {
242
- "Source Code Pro": "https://fonts.googleapis.com/css2?family=Source+Code+Pro&display=swap",
243
- "Open Sans": "https://fonts.googleapis.com/css2?family=Open+Sans&display=swap"
244
- }, X = [
245
- {
246
- id: "wallpaper",
247
- label: "Wallpaper",
248
- fcIcon: "FcPicture",
249
- description: "Change the desktop background image."
250
- },
251
- {
252
- id: "appearance",
253
- label: "Appearance",
254
- fcIcon: "FcBinoculars",
255
- description: "Switch between light and dark mode."
256
- },
257
- {
258
- id: "launcher",
259
- label: "Launcher",
260
- fcIcon: "FcElectronics",
261
- description: "Choose the launcher button icon."
262
- },
263
- {
264
- id: "font",
265
- label: "Font",
266
- fcIcon: "FcEditImage",
267
- description: "Select the system font family."
268
- },
269
- {
270
- id: "language",
271
- label: "Language",
272
- fcIcon: "FcGlobe",
273
- description: "Choose your preferred language."
274
- },
275
- {
276
- id: "reset",
277
- label: "Reset to Default",
278
- fcIcon: "FcDisclaimer",
279
- description: "Reset all settings and data to defaults."
280
- }
281
- ], Z = ({ title: e, description: t, children: n }) => /* @__PURE__ */ _(O, {
282
- gap: "md",
283
- p: "md",
284
- children: [
285
- /* @__PURE__ */ g(k, {
286
- fw: 600,
287
- size: "lg",
288
- children: e
289
- }),
290
- t && /* @__PURE__ */ g(k, {
291
- size: "sm",
292
- c: "dimmed",
293
- children: t
294
- }),
295
- n
296
- ]
297
- }), ce = "/Images/wallpaper.jpg", le = () => {
298
- let { t: e } = I("settings"), t = K((e) => e.wallpaper), n = K((e) => e.wallpaperModule), r = K((e) => e.setWallpaper), i = K((e) => e.setWallpaperModule), [s, c] = h(""), [l, u] = h(!1), f = m(null), p = a(t ?? void 0) ?? ce, v = d((e) => {
299
- let t = e.target.files?.[0];
300
- if (!t) return;
301
- let n = new FileReader();
302
- n.onload = (e) => {
303
- let t = e.target?.result;
304
- typeof t == "string" && r(t);
305
- }, n.readAsDataURL(t);
306
- }, [r]), y = d(() => {
307
- let e = s.trim();
308
- e && r(e);
309
- }, [s, r]), x = d(() => {
310
- r(null), c("");
311
- }, [r]), C = d((e) => {
312
- let t = e.url ? e.url.startsWith("idb://") ? e.url : `/${e.url}` : null;
313
- t && r(t), u(!1);
314
- }, [r]);
315
- return /* @__PURE__ */ _(Z, {
316
- title: e("wallpaper.title"),
317
- children: [
318
- /* @__PURE__ */ g("div", { children: /* @__PURE__ */ g(E, {
319
- value: n,
320
- onChange: i,
321
- data: [{
322
- value: "default",
323
- label: e("wallpaper.staticImage")
324
- }],
325
- fullWidth: !0
326
- }) }),
327
- /* @__PURE__ */ g("img", {
328
- src: p,
329
- alt: e("wallpaper.wallpaperPreview"),
330
- style: {
331
- width: "100%",
332
- height: 180,
333
- objectFit: "cover",
334
- borderRadius: 8
335
- }
336
- }),
337
- /* @__PURE__ */ _(S, { children: [
338
- /* @__PURE__ */ g("input", {
339
- ref: f,
340
- type: "file",
341
- accept: "image/*",
342
- style: { display: "none" },
343
- onChange: v,
344
- "aria-label": e("wallpaper.uploadAria", { defaultValue: "Upload wallpaper file" })
345
- }),
346
- /* @__PURE__ */ g(b, {
347
- variant: "light",
348
- onClick: () => u(!0),
349
- children: e("wallpaper.chooseFromImages")
350
- }),
351
- /* @__PURE__ */ g(b, {
352
- variant: "light",
353
- onClick: () => f.current?.click(),
354
- children: e("wallpaper.uploadFromDisk")
355
- }),
356
- /* @__PURE__ */ g(b, {
357
- variant: "subtle",
358
- color: "red",
359
- onClick: x,
360
- children: e("wallpaper.resetToDefault")
361
- })
362
- ] }),
363
- /* @__PURE__ */ _(S, {
364
- align: "flex-end",
365
- children: [/* @__PURE__ */ g(A, {
366
- label: e("wallpaper.orEnterUrl"),
367
- placeholder: "https://example.com/image.jpg",
368
- value: s,
369
- onChange: (e) => c(e.currentTarget.value),
370
- style: { flex: 1 }
371
- }), /* @__PURE__ */ g(b, {
372
- onClick: y,
373
- disabled: !s.trim(),
374
- children: e("common:actions.apply")
375
- })]
376
- }),
377
- /* @__PURE__ */ g(o, {
378
- opened: l,
379
- acceptedMimeTypes: ["image/*"],
380
- onConfirm: C,
381
- onCancel: () => u(!1)
382
- })
383
- ]
384
- });
385
- }, ue = () => {
386
- let { t: e } = I("settings"), t = K((e) => e.theme.mode), n = K((e) => e.themeSetManually), r = K((e) => e.customThemeColors), i = K((e) => e.animationDuration), a = K((e) => e.setThemeMode), o = K((e) => e.setThemeAutomatic), s = K((e) => e.setCustomThemeColors), c = K((e) => e.setAnimationDuration), u = r ? "custom" : n ? t : "system", f = d((e) => {
387
- e === "system" ? (o(), s(null)) : e === "custom" ? s({
388
- taskbar: "#339af0",
389
- window: "#ffffff",
390
- accent: "#339af0"
391
- }) : (a(e), s(null));
392
- }, [
393
- a,
394
- o,
395
- s
396
- ]), p = d((e) => (t) => {
397
- r && s({
398
- ...r,
399
- [e]: t
400
- });
401
- }, [r, s]), m = d((e) => {
402
- c(e);
403
- }, [c]), h = u === "custom";
404
- return /* @__PURE__ */ _(O, {
405
- gap: "md",
406
- p: "md",
407
- children: [
408
- /* @__PURE__ */ g(k, {
409
- fw: 600,
410
- size: "lg",
411
- children: e("appearance.title")
412
- }),
413
- /* @__PURE__ */ g(k, {
414
- size: "sm",
415
- c: "dimmed",
416
- children: e("appearance.description")
417
- }),
418
- /* @__PURE__ */ g(E, {
419
- value: u,
420
- onChange: f,
421
- data: [
422
- {
423
- label: e("common:theme.light"),
424
- value: "light"
425
- },
426
- {
427
- label: e("common:theme.dark"),
428
- value: "dark"
429
- },
430
- {
431
- label: e("common:theme.system"),
432
- value: "system"
433
- },
434
- {
435
- label: e("common:theme.custom"),
436
- value: "custom"
437
- }
438
- ],
439
- "aria-label": e("appearance.themeMode", { defaultValue: "Theme mode" })
440
- }),
441
- /* @__PURE__ */ _(O, {
442
- gap: "sm",
443
- mt: "md",
444
- children: [
445
- /* @__PURE__ */ _(y, { children: [/* @__PURE__ */ g(k, {
446
- size: "sm",
447
- fw: 500,
448
- mb: "xs",
449
- c: h ? "dark" : void 0,
450
- children: e("appearance.taskbar")
451
- }), /* @__PURE__ */ g(l, {
452
- value: r?.taskbar ?? "#339af0",
453
- onChange: p("taskbar"),
454
- disabled: !h
455
- })] }),
456
- /* @__PURE__ */ _(y, { children: [/* @__PURE__ */ g(k, {
457
- size: "sm",
458
- fw: 500,
459
- mb: "xs",
460
- c: h ? "dark" : void 0,
461
- children: e("appearance.window")
462
- }), /* @__PURE__ */ g(l, {
463
- value: r?.window ?? "#ffffff",
464
- onChange: p("window"),
465
- disabled: !h
466
- })] }),
467
- /* @__PURE__ */ _(y, { children: [/* @__PURE__ */ g(k, {
468
- size: "sm",
469
- fw: 500,
470
- mb: "xs",
471
- c: h ? "dark" : void 0,
472
- children: e("appearance.accent")
473
- }), /* @__PURE__ */ g(l, {
474
- value: r?.accent ?? "#339af0",
475
- onChange: p("accent"),
476
- disabled: !h
477
- })] })
478
- ]
479
- }),
480
- /* @__PURE__ */ _(y, {
481
- mt: "md",
482
- children: [
483
- /* @__PURE__ */ g(k, {
484
- size: "sm",
485
- fw: 500,
486
- mb: "xs",
487
- children: e("appearance.animationDuration")
488
- }),
489
- /* @__PURE__ */ g(k, {
490
- size: "xs",
491
- c: "dimmed",
492
- mb: "sm",
493
- children: e("appearance.animationDescription")
494
- }),
495
- /* @__PURE__ */ _(S, {
496
- align: "center",
497
- gap: "md",
498
- children: [/* @__PURE__ */ g(D, {
499
- value: i,
500
- onChange: m,
501
- min: .1,
502
- max: 1,
503
- step: .1,
504
- style: { flex: 1 },
505
- marks: [
506
- {
507
- value: .1,
508
- label: "0.1s"
509
- },
510
- {
511
- value: .5,
512
- label: "0.5s"
513
- },
514
- {
515
- value: 1,
516
- label: "1.0s"
517
- }
518
- ],
519
- "aria-label": e("appearance.animationDuration")
520
- }), /* @__PURE__ */ _(k, {
521
- size: "sm",
522
- fw: 500,
523
- style: { minWidth: 40 },
524
- children: [i.toFixed(1), "s"]
525
- })]
526
- })
527
- ]
528
- })
529
- ]
530
- });
531
- }, de = () => {
532
- let e = K((e) => e.launcherIcon), t = K((e) => e.setLauncherIcon), [n, i] = h([]), [a, o] = h(""), s = f(a);
533
- p(() => {
534
- import("react-icons/fc").then((e) => {
535
- i(Object.keys(e).filter((e) => e.startsWith("Fc")).sort());
536
- });
537
- }, []);
538
- let c = s ? n.filter((e) => e.toLowerCase().includes(s.toLowerCase())) : n, l = d((e) => {
539
- t(e);
540
- }, [t]);
541
- return /* @__PURE__ */ _(Z, {
542
- title: "Launcher Icon",
543
- description: `Selected: ${e}`,
544
- children: [/* @__PURE__ */ g(A, {
545
- placeholder: "Search icons...",
546
- value: a,
547
- onChange: (e) => o(e.currentTarget.value),
548
- "aria-label": "Search icons"
549
- }), /* @__PURE__ */ g(T, {
550
- style: {
551
- flex: 1,
552
- height: 300
553
- },
554
- children: /* @__PURE__ */ g(ee, {
555
- cols: 8,
556
- spacing: 4,
557
- children: c.map((t) => /* @__PURE__ */ g(te, {
558
- label: t,
559
- withArrow: !0,
560
- openDelay: 400,
561
- children: /* @__PURE__ */ g(j, {
562
- onClick: () => l(t),
563
- "aria-label": t,
564
- "aria-pressed": t === e,
565
- style: {
566
- padding: 6,
567
- borderRadius: 6,
568
- background: t === e ? "var(--mantine-primary-color-light)" : "transparent",
569
- display: "flex",
570
- alignItems: "center",
571
- justifyContent: "center"
572
- },
573
- children: /* @__PURE__ */ g(r, {
574
- fcIcon: t,
575
- size: 24
576
- })
577
- })
578
- }, t))
579
- })
580
- })]
581
- });
582
- }, fe = (e) => {
583
- let t = Y[e];
584
- if (!t || document.head.querySelector(`link[data-font="${e}"]`)) return;
585
- let n = document.createElement("link");
586
- n.rel = "stylesheet", n.href = t, n.setAttribute("data-font", e), document.head.appendChild(n);
587
- }, pe = async (e) => {
588
- let t = Y[e];
589
- if (!t) throw Error(`Font "${e}" not found in Google Fonts`);
590
- let n = await fetch(t);
591
- if (!n.ok) throw Error(`Failed to download font: HTTP ${n.status}`);
592
- return await n.text(), fe(e), {
593
- font: e,
594
- success: !0
595
- };
596
- }, me = (e) => {
597
- let t = N(), n = K((e) => e.markFontDownloaded), r = K((e) => e.downloadedFonts), i = e ? r.includes(e) : !1, a = e && !i && Y[e], o = M({
598
- queryKey: ["font", e ?? ""],
599
- queryFn: async ({ queryKey: e }) => {
600
- let [, t] = e;
601
- if (!t || !Y[t]) throw Error(`Font "${t}" not available`);
602
- let r = await pe(t);
603
- return r.success && n(t), r;
604
- },
605
- enabled: !!a,
606
- staleTime: Infinity,
607
- gcTime: Infinity,
608
- retry: !1
609
- }), s = o.isFetching ? {
610
- status: "downloading",
611
- loaded: 0,
612
- total: null,
613
- percent: null,
614
- error: null
615
- } : o.isError ? {
616
- status: "error",
617
- loaded: 0,
618
- total: null,
619
- percent: null,
620
- error: o.error?.message ?? "Unknown error"
621
- } : o.isSuccess ? {
622
- status: "done",
623
- loaded: 0,
624
- total: 0,
625
- percent: 100,
626
- error: null
627
- } : {
628
- status: "idle",
629
- loaded: 0,
630
- total: null,
631
- percent: null,
632
- error: null
633
- }, c = () => {
634
- e && t.removeQueries({ queryKey: ["font", e] });
635
- };
636
- return {
637
- ...o,
638
- progress: s,
639
- isDownloaded: i,
640
- reset: c
641
- };
642
- }, he = s[1], ge = ({ status: e, error: t, onDownload: n }) => {
643
- let { t: r } = I("settings");
644
- return t ? /* @__PURE__ */ g(v, {
645
- color: he,
646
- variant: "filled",
647
- size: "sm",
648
- "aria-label": `Download error: ${t}`,
649
- children: r("common:status.error")
650
- }) : /* @__PURE__ */ g(b, {
651
- size: "xs",
652
- variant: "light",
653
- onClick: n,
654
- loading: e === "downloading",
655
- "aria-label": r("font.download"),
656
- children: r("font.download")
657
- });
658
- }, _e = () => {
659
- let { t: e } = I("settings"), t = K((e) => e.font), n = K((e) => e.setFont), r = K((e) => e.fontSize), i = K((e) => e.setFontSize), a = K((e) => e.downloadedFonts), o = K((e) => e.markFontDownloaded), [s, l] = h(null), u = me(s);
660
- p(() => {
661
- u.isSuccess && u.data?.success && s && (a.includes(s) || o(s));
662
- }, [
663
- u.isSuccess,
664
- u.data,
665
- s,
666
- a,
667
- o
668
- ]);
669
- let f = d((e) => {
670
- l(e);
671
- }, []), m = (e) => a.includes(e) ? "done" : s === e ? u.progress.status : "idle", v = (e) => s === e ? u.progress.error : null, y = d((e) => {
672
- let t = e.trim();
673
- t && (Y[t] = `https://fonts.googleapis.com/css2?family=${t.replace(/\s+/g, "+")}&display=swap`, l(t));
674
- }, []), b = J.map((e) => e.value), x = a.filter((e) => !b.includes(e));
675
- return /* @__PURE__ */ _(O, {
676
- gap: "md",
677
- p: "md",
678
- children: [
679
- /* @__PURE__ */ g(k, {
680
- fw: 600,
681
- size: "lg",
682
- children: e("font.title")
683
- }),
684
- /* @__PURE__ */ g(k, {
685
- size: "sm",
686
- c: "dimmed",
687
- children: e("font.description")
688
- }),
689
- /* @__PURE__ */ g(w.Group, {
690
- value: t,
691
- onChange: n,
692
- "aria-label": e("font.selectionAria", { defaultValue: "Font selection" }),
693
- children: /* @__PURE__ */ _(O, {
694
- gap: "xs",
695
- children: [J.map((e) => {
696
- let t = !!Y[e.value], n = a.includes(e.value), r = m(e.value), i = v(e.value), o = !t || n || r === "done";
697
- return /* @__PURE__ */ g(C, {
698
- p: "sm",
699
- withBorder: !0,
700
- radius: "md",
701
- children: /* @__PURE__ */ _(O, {
702
- gap: "xs",
703
- children: [/* @__PURE__ */ _(S, {
704
- justify: "space-between",
705
- children: [/* @__PURE__ */ g(w, {
706
- value: e.value,
707
- label: e.label,
708
- "aria-label": e.label,
709
- disabled: !o
710
- }), /* @__PURE__ */ _(S, {
711
- gap: "xs",
712
- align: "center",
713
- children: [o && /* @__PURE__ */ g(k, {
714
- size: "sm",
715
- c: "dimmed",
716
- style: { fontFamily: e.stack },
717
- children: "AaBbCcDd"
718
- }), t && /* @__PURE__ */ g(ge, {
719
- fontLabel: e.label,
720
- status: r,
721
- error: i,
722
- onDownload: () => f(e.value),
723
- isDownloaded: n
724
- })]
725
- })]
726
- }), t && r === "downloading" && /* @__PURE__ */ g(c, { state: u.progress })]
727
- })
728
- }, e.value);
729
- }), x.map((e) => /* @__PURE__ */ g(C, {
730
- p: "sm",
731
- withBorder: !0,
732
- radius: "md",
733
- children: /* @__PURE__ */ _(S, {
734
- justify: "space-between",
735
- children: [/* @__PURE__ */ g(w, {
736
- value: e,
737
- label: e,
738
- "aria-label": e
739
- }), /* @__PURE__ */ g(k, {
740
- size: "sm",
741
- c: "dimmed",
742
- style: { fontFamily: `"${e}"` },
743
- children: "AaBbCcDd"
744
- })]
745
- })
746
- }, e))]
747
- })
748
- }),
749
- /* @__PURE__ */ g(C, {
750
- p: "sm",
751
- withBorder: !0,
752
- radius: "md",
753
- children: /* @__PURE__ */ _(O, {
754
- gap: "xs",
755
- children: [/* @__PURE__ */ _(S, {
756
- justify: "space-between",
757
- children: [/* @__PURE__ */ g(k, {
758
- size: "sm",
759
- fw: 500,
760
- children: e("font.fontSize")
761
- }), /* @__PURE__ */ _(k, {
762
- size: "sm",
763
- c: "dimmed",
764
- children: [r, "px"]
765
- })]
766
- }), /* @__PURE__ */ g(D, {
767
- value: r,
768
- onChange: i,
769
- min: 10,
770
- max: 24,
771
- step: 1,
772
- marks: [
773
- { value: 10 },
774
- { value: 14 },
775
- { value: 18 },
776
- { value: 20 },
777
- { value: 24 }
778
- ],
779
- "aria-label": e("font.fontSizeAria", { defaultValue: "Font size" })
780
- })]
781
- })
782
- }),
783
- /* @__PURE__ */ g(ve, {
784
- onDownload: y,
785
- activeDownload: s,
786
- fontDownload: u
787
- })
788
- ]
789
- });
790
- }, ve = ({ onDownload: e, activeDownload: t, fontDownload: n }) => {
791
- let { t: r } = I("settings"), [i, a] = h(""), o = t === i.trim(), s = o ? n.progress.status : "idle", l = o && n.progress.status === "error", u = d((e) => {
792
- a(e), l && n.reset?.();
793
- }, [l, n]), f = d(() => {
794
- e(i);
795
- }, [i, e]), p = o && s === "done";
796
- return /* @__PURE__ */ g(C, {
797
- p: "sm",
798
- withBorder: !0,
799
- radius: "md",
800
- children: /* @__PURE__ */ _(O, {
801
- gap: "xs",
802
- children: [
803
- /* @__PURE__ */ _(k, {
804
- size: "sm",
805
- fw: 500,
806
- children: [
807
- r("font.downloadByName"),
808
- " ",
809
- /* @__PURE__ */ g("a", {
810
- href: "https://fonts.google.com/",
811
- target: "_blank",
812
- rel: "noreferrer",
813
- children: r("font.fromGoogleFonts")
814
- })
815
- ]
816
- }),
817
- /* @__PURE__ */ _(S, {
818
- gap: "xs",
819
- align: "flex-start",
820
- children: [/* @__PURE__ */ g(A, {
821
- placeholder: r("font.namePlaceholder", { defaultValue: "e.g. Open Sans" }),
822
- value: i,
823
- onChange: (e) => u(e.currentTarget.value),
824
- style: { flex: 1 },
825
- "aria-label": r("font.customNameAria", { defaultValue: "Custom font name" }),
826
- error: l ? r("font.downloadError") : void 0
827
- }), /* @__PURE__ */ g(b, {
828
- onClick: f,
829
- disabled: !i.trim() || s === "downloading",
830
- loading: s === "downloading",
831
- "aria-label": r("font.downloadCustomAria", { defaultValue: "Download custom font" }),
832
- style: { marginTop: l ? 0 : void 0 },
833
- children: r("font.download")
834
- })]
835
- }),
836
- s === "downloading" && /* @__PURE__ */ g(c, { state: n.progress }),
837
- p && /* @__PURE__ */ g(k, {
838
- size: "xs",
839
- c: "dimmed",
840
- children: r("font.downloadSuccess")
841
- })
842
- ]
843
- })
844
- });
845
- }, ye = ["en", "es"], be = "en", xe = {
846
- en: "English",
847
- es: "Español"
848
- }, Se = () => {
849
- let { t: e } = I("settings"), t = K((e) => e.language), n = K((e) => e.setLanguage), r = d((e) => {
850
- n(e);
851
- }, [n]);
852
- return /* @__PURE__ */ g(Z, {
853
- title: e("language.title"),
854
- description: e("language.description"),
855
- children: /* @__PURE__ */ g(O, {
856
- gap: "xs",
857
- children: ye.map((e) => /* @__PURE__ */ g(j, {
858
- onClick: () => r(e),
859
- "aria-label": xe[e],
860
- "aria-pressed": e === t,
861
- style: {
862
- padding: "12px 16px",
863
- borderRadius: 8,
864
- width: "100%",
865
- background: e === t ? "var(--mantine-primary-color-light)" : "transparent",
866
- border: e === t ? "1px solid var(--mantine-primary-color-filled)" : "1px solid transparent",
867
- transition: "all 0.15s ease",
868
- cursor: "pointer"
869
- },
870
- children: /* @__PURE__ */ _(S, {
871
- gap: "sm",
872
- children: [/* @__PURE__ */ g(oe, {
873
- lang: e,
874
- size: 24
875
- }), /* @__PURE__ */ g(k, {
876
- fw: e === t ? 600 : 400,
877
- children: xe[e]
878
- })]
879
- })
880
- }, e))
881
- })
882
- });
883
- };
884
- //#endregion
885
- //#region src/utils/clearBrowserData.ts
886
- async function Q(e) {
887
- let t = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : void 0;
888
- if (t) {
889
- if (!e?.keepServiceWorker && "serviceWorker" in t.navigator) {
890
- let e = await t.navigator.serviceWorker.getRegistrations();
891
- for (let t of e) await t.unregister();
892
- }
893
- if ("caches" in t) {
894
- let e = await t.caches.keys();
895
- for (let n of e) await t.caches.delete(n);
896
- }
897
- if (!e?.keepIndexedDB && "indexedDB" in t) {
898
- let e = await t.indexedDB.databases();
899
- for (let n of e) n.name && t.indexedDB.deleteDatabase(n.name);
900
- }
901
- !e?.keepLocalStorage && "localStorage" in t && t.localStorage.clear(), !e?.keepSessionStorage && "sessionStorage" in t && t.sessionStorage.clear();
902
- }
903
- }
904
- //#endregion
905
- //#region src/utils/resetDockerWorkspace.ts
906
- async function Ce() {
907
- t() && (await fetch("/api/fs/reset", { method: "POST" }), await fetch("/api/fs/seed", { method: "POST" }));
908
- }
909
- //#endregion
910
- //#region src/components/Apps/SettingsApp/sections/ResetSettings.tsx
911
- var we = () => {
912
- let { t: e } = I("settings"), [t, n] = h(!1), r = d(() => {
913
- n(!0);
914
- }, []), i = d(() => {
915
- n(!1);
916
- }, []), a = d(async () => {
917
- await Ce(), await Q(), window.location.reload();
918
- }, []), o = d(async () => {
919
- await Ce(), await Q({ keepIndexedDB: !0 }), window.location.reload();
920
- }, []);
921
- return /* @__PURE__ */ _(Z, {
922
- title: e("reset.title"),
923
- description: e("reset.description"),
924
- children: [/* @__PURE__ */ g(b, {
925
- color: "red",
926
- onClick: r,
927
- style: { alignSelf: "flex-start" },
928
- children: e("reset.resetButton")
929
- }), t && /* @__PURE__ */ g(y, {
930
- style: {
931
- position: "fixed",
932
- top: 0,
933
- left: 0,
934
- right: 0,
935
- bottom: 0,
936
- background: "rgba(0,0,0,0.5)",
937
- display: "flex",
938
- alignItems: "center",
939
- justifyContent: "center",
940
- zIndex: 1e3
941
- },
942
- role: "dialog",
943
- "aria-label": "Confirm reset",
944
- children: /* @__PURE__ */ g(y, {
945
- style: {
946
- background: "var(--mantine-color-default)",
947
- borderRadius: 8,
948
- padding: 24,
949
- maxWidth: 400,
950
- width: "100%"
951
- },
952
- children: /* @__PURE__ */ _(O, {
953
- gap: "md",
954
- children: [
955
- /* @__PURE__ */ g(k, {
956
- fw: 600,
957
- size: "lg",
958
- ta: "center",
959
- children: e("reset.modalTitle")
960
- }),
961
- /* @__PURE__ */ g(k, {
962
- size: "sm",
963
- c: "dimmed",
964
- ta: "center",
965
- children: e("reset.modalDescription")
966
- }),
967
- /* @__PURE__ */ _(S, {
968
- justify: "center",
969
- gap: "xs",
970
- mt: "md",
971
- children: [
972
- /* @__PURE__ */ g(b, {
973
- variant: "default",
974
- onClick: i,
975
- children: e("reset.goBack")
976
- }),
977
- /* @__PURE__ */ g(b, {
978
- color: "blue",
979
- onClick: o,
980
- children: e("reset.keepFiles")
981
- }),
982
- /* @__PURE__ */ g(b, {
983
- color: "red",
984
- onClick: a,
985
- children: e("reset.burnEverything")
986
- })
987
- ]
988
- })
989
- ]
990
- })
991
- })
992
- })]
993
- });
994
- }, $ = {
995
- root: "_root_77epl_1",
996
- sidebar: "_sidebar_77epl_8",
997
- navItem: "_navItem_77epl_16",
998
- content: "_content_77epl_41",
999
- overviewPadding: "_overviewPadding_77epl_47",
1000
- sectionCard: "_sectionCard_77epl_51",
1001
- toolbar: "_toolbar_77epl_60",
1002
- dirtyIndicator: "_dirtyIndicator_77epl_70",
1003
- versionFooter: "_versionFooter_77epl_77"
1004
- }, Te = {
1005
- name: "Francisco Núñez Palomares",
1006
- title: "Fullstack Developer & DevOps",
1007
- email: "frannunpal@gmail.com",
1008
- phone: "+34 600 275 210",
1009
- location: "Spain",
1010
- linkedin: "https://www.linkedin.com/in/francisco-núñez-palomares-74a484171/",
1011
- github: "https://github.com/frannunpal",
1012
- cvUrls: {
1013
- en: "Desktop/CV_2026_English.pdf",
1014
- es: "Desktop/CV 2026.pdf"
1015
- }
1016
- }, Ee = /* @__PURE__ */ e({ default: () => Ae }), De = "0.4.0", Oe = () => De, ke = {
1017
- wallpaper: le,
1018
- appearance: ue,
1019
- launcher: de,
1020
- font: _e,
1021
- language: Se,
1022
- reset: we
1023
- }, Ae = ({ window: e, notifyReady: t }) => {
1024
- let { t: a } = I("settings"), [o, s] = h(null), [c, l] = h(!1), f = n((e) => e.windows), v = e?.id ?? f.find((e) => e.content === "settings")?.id, y = K((e) => e.wallpaper), S = K((e) => e.wallpaperModule), C = K((e) => e.theme), w = K((e) => e.font), T = K((e) => e.fontSize), E = K((e) => e.launcherIcon), D = K((e) => e.customThemeColors), A = K((e) => e.animationDuration), te = K((e) => e.setWallpaper), j = K((e) => e.setWallpaperModule), M = K((e) => e.setFont), N = K((e) => e.setFontSize), P = K((e) => e.setLauncherIcon), ne = K((e) => e.setThemeMode), F = K((e) => e.setCustomThemeColors), L = K((e) => e.setThemeAutomatic), R = K((e) => e.setAnimationDuration), z = m(null);
1025
- p(() => {
1026
- z.current === null && (z.current = {
1027
- wallpaper: y,
1028
- wallpaperModule: S,
1029
- themeMode: C.mode,
1030
- font: w,
1031
- fontSize: T,
1032
- launcherIcon: E,
1033
- customThemeColors: D,
1034
- animationDuration: A
1035
- });
1036
- }, [
1037
- y,
1038
- S,
1039
- C.mode,
1040
- w,
1041
- T,
1042
- E,
1043
- D,
1044
- A
1045
- ]), p(() => {
1046
- if (!z.current) return;
1047
- let e = {
1048
- wallpaper: y,
1049
- wallpaperModule: S,
1050
- themeMode: C.mode,
1051
- font: w,
1052
- fontSize: T,
1053
- launcherIcon: E,
1054
- customThemeColors: D,
1055
- animationDuration: A
1056
- };
1057
- l(JSON.stringify(e) !== JSON.stringify(z.current));
1058
- }, [
1059
- y,
1060
- S,
1061
- C.mode,
1062
- w,
1063
- T,
1064
- E,
1065
- D,
1066
- A
1067
- ]);
1068
- let B = d(() => {
1069
- let e = z.current;
1070
- e && (te(e.wallpaper), j(e.wallpaperModule), M(e.font), N(e.fontSize), P(e.launcherIcon), R(e.animationDuration), e.customThemeColors ? F(e.customThemeColors) : (F(null), L()), ne(e.themeMode), l(!1));
1071
- }, [
1072
- te,
1073
- j,
1074
- M,
1075
- N,
1076
- P,
1077
- R,
1078
- ne,
1079
- F,
1080
- L
1081
- ]);
1082
- p(() => {
1083
- v && u.getState().reset(v);
1084
- }, [v]), p(() => {
1085
- v && u.getState().setIsDirty(v, c);
1086
- }, [v, c]), p(() => {
1087
- t?.({
1088
- ...e?.contentData ?? {},
1089
- discard: B
1090
- });
1091
- }, [
1092
- e,
1093
- t,
1094
- B
1095
- ]), i({
1096
- isDirtyGetter: d(() => {
1097
- if (!z.current) return !1;
1098
- let e = {
1099
- wallpaper: K.getState().wallpaper,
1100
- wallpaperModule: K.getState().wallpaperModule,
1101
- themeMode: K.getState().theme.mode,
1102
- font: K.getState().font,
1103
- fontSize: K.getState().fontSize,
1104
- launcherIcon: K.getState().launcherIcon,
1105
- customThemeColors: K.getState().customThemeColors,
1106
- animationDuration: K.getState().animationDuration
1107
- };
1108
- return JSON.stringify(e) !== JSON.stringify(z.current);
1109
- }, []),
1110
- windowId: v,
1111
- onDiscard: B,
1112
- onSave: () => {}
1113
- });
1114
- let V = d((e) => {
1115
- s(e);
1116
- }, []), H = d(() => {
1117
- s(null);
1118
- }, []), U = d(() => {
1119
- globalThis.location.href = `mailto:${Te.email}`;
1120
- }, []), W = o ? ke[o] : null;
1121
- return /* @__PURE__ */ _("div", {
1122
- className: $.root,
1123
- children: [/* @__PURE__ */ g("aside", {
1124
- className: $.sidebar,
1125
- children: /* @__PURE__ */ _("nav", {
1126
- "aria-label": "Settings sections",
1127
- children: [/* @__PURE__ */ _("button", {
1128
- className: $.navItem,
1129
- "data-active": o === null || void 0,
1130
- onClick: H,
1131
- "aria-label": "All Settings",
1132
- "aria-current": o === null ? "page" : void 0,
1133
- children: [/* @__PURE__ */ g(r, {
1134
- fcIcon: "FcList",
1135
- size: 16
1136
- }), /* @__PURE__ */ g(k, {
1137
- size: "xs",
1138
- ml: 6,
1139
- truncate: !0,
1140
- children: a("all")
1141
- })]
1142
- }), X.map((e) => /* @__PURE__ */ _("button", {
1143
- className: $.navItem,
1144
- "data-active": o === e.id || void 0,
1145
- onClick: () => V(e.id),
1146
- "aria-label": e.label,
1147
- "aria-current": o === e.id ? "page" : void 0,
1148
- children: [/* @__PURE__ */ g(r, {
1149
- fcIcon: e.fcIcon,
1150
- size: 16
1151
- }), /* @__PURE__ */ g(k, {
1152
- size: "xs",
1153
- ml: 6,
1154
- truncate: !0,
1155
- children: a(`sections.${e.id}.label`)
1156
- })]
1157
- }, e.id))]
1158
- })
1159
- }), /* @__PURE__ */ g("main", {
1160
- className: $.content,
1161
- children: W ? /* @__PURE__ */ g(W, {}) : /* @__PURE__ */ _(O, {
1162
- className: $.overviewPadding,
1163
- h: "100%",
1164
- justify: "space-between",
1165
- gap: 0,
1166
- children: [
1167
- /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g(k, {
1168
- fw: 500,
1169
- mb: "md",
1170
- size: "sm",
1171
- c: "dimmed",
1172
- children: a("all")
1173
- }), /* @__PURE__ */ g(ee, {
1174
- cols: 2,
1175
- spacing: "sm",
1176
- children: X.map((e) => /* @__PURE__ */ g(x, {
1177
- withBorder: !0,
1178
- padding: "md",
1179
- radius: "md",
1180
- className: $.sectionCard,
1181
- onClick: () => V(e.id),
1182
- role: "button",
1183
- "aria-label": `Open ${e.label} settings`,
1184
- children: /* @__PURE__ */ _(O, {
1185
- gap: 6,
1186
- align: "flex-start",
1187
- children: [
1188
- /* @__PURE__ */ g(r, {
1189
- fcIcon: e.fcIcon,
1190
- size: 28
1191
- }),
1192
- /* @__PURE__ */ g(k, {
1193
- size: "sm",
1194
- fw: 500,
1195
- children: a(`sections.${e.id}.label`)
1196
- }),
1197
- /* @__PURE__ */ g(k, {
1198
- size: "xs",
1199
- c: "dimmed",
1200
- children: a(`sections.${e.id}.description`)
1201
- })
1202
- ]
1203
- })
1204
- }, e.id))
1205
- })] }),
1206
- /* @__PURE__ */ g(b, {
1207
- gradient: {
1208
- from: "blue",
1209
- to: "cyan",
1210
- deg: 90
1211
- },
1212
- onClick: U,
1213
- children: "FDE: Fran Desktop Environment"
1214
- }),
1215
- /* @__PURE__ */ g(k, {
1216
- size: "xs",
1217
- c: "dimmed",
1218
- ta: "center",
1219
- className: $.versionFooter,
1220
- children: Oe()
1221
- })
1222
- ]
1223
- })
1224
- })]
1225
- });
1226
- };
1227
- //#endregion
1228
- export { z as _, be as a, fe as c, J as d, se as f, K as g, H as h, Q as i, Z as l, oe as m, Ee as n, ye as o, Y as p, Te as r, me as s, Ae as t, X as u };