@fde-desktop/fde-core 0.4.11 → 0.4.19

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-CbypD538.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 +715 -658
  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-DkZLFFCH.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-BC4UPNuw.cjs +0 -1
  90. package/dist/FilesApp-D8MqvC5X.js +0 -210
  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-D_qD3O70.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-D-FOY88T.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
package/dist/index.js CHANGED
@@ -1,54 +1,46 @@
1
- import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./SettingsApp-BTFtTFY_.js";
2
- import { A as g, B as _, C as v, D as y, E as b, F as x, H as S, I as C, L as w, M as T, N as E, O as D, P as ee, R as O, S as k, T as te, U as A, V as j, _ as ne, a as re, b as ie, c as M, d as ae, f as oe, g as se, h as ce, i as le, j as ue, k as de, l as fe, m as pe, n as me, o as he, p as ge, r as _e, s as ve, t as ye, u as be, v as xe, w as Se, x as Ce, y as we, z as Te } from "./useOpenApp-DkZLFFCH.js";
3
- import { $ as Ee, A as De, B as Oe, C as ke, D as Ae, E as je, F as Me, G as Ne, H as Pe, I as Fe, J as Ie, K as Le, L as Re, M as ze, N as Be, O as Ve, P as He, Q as Ue, R as We, S as Ge, T as Ke, U as qe, V as Je, W as Ye, X as Xe, Y as Ze, Z as Qe, _ as $e, a as et, at as tt, b as nt, c as rt, ct as it, d as at, dt as ot, et as st, f as ct, ft as lt, g as ut, h as dt, i as ft, it as pt, j as mt, k as ht, l as gt, lt as _t, m as vt, mt as yt, n as N, nt as bt, o as P, ot as xt, p as St, pt as Ct, q as wt, r as Tt, rt as Et, s as Dt, st as Ot, t as kt, tt as At, u as jt, ut as Mt, v as F, w as Nt, x as Pt, y as Ft, z as It } from "./desktopStore-8cSZlj7s.js";
4
- import { a as Lt, c as Rt, i as I, n as zt, o as Bt, r as Vt, s as Ht, t as Ut } from "./useDynamicIcon-_wGeWu-b.js";
5
- import { t as Wt } from "./useAdaptiveDimensions-DxNLJ7R5.js";
6
- import { a as Gt, i as Kt, o as qt, r as Jt, s as Yt, t as Xt } from "./MenuEditApp-CJUbJaqh.js";
7
- import { t as L } from "./AppIcon-mtEoyzOb.js";
8
- import { a as Zt, i as Qt, n as $t, r as en, t as tn } from "./useCloseInterceptor-CIxhOZx1.js";
1
+ import { _ as e, a as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p, v as m } from "./i18nConstants-Nzpf2IFp.js";
2
+ import { a as h, c as g, d as _, f as v, i as y, l as b, n as x, p as S, r as C, s as w, t as T, u as E } from "./useResolvedUrl-CgqjNxzw.js";
3
+ import { A as D, B as ee, C as O, D as k, E as te, F as A, H as j, I as ne, L as re, M as ie, N as M, O as ae, P as oe, R as se, S as ce, T as le, U as ue, V as de, _ as fe, a as pe, b as me, c as he, d as ge, f as _e, g as ve, h as ye, i as be, j as xe, k as Se, l as Ce, m as we, n as Te, o as Ee, p as De, r as Oe, s as ke, t as Ae, u as je, v as Me, w as Ne, x as Pe, y as Fe, z as Ie } from "./useOpenApp-DdEbOVby.js";
4
+ import { $ as Le, A as Re, B as ze, C as Be, D as Ve, E as He, F as Ue, G as We, H as Ge, I as Ke, J as qe, K as Je, L as Ye, M as Xe, N as Ze, O as Qe, P as $e, Q as et, R as tt, S as nt, T as rt, U as it, V as at, W as ot, X as st, Y as ct, Z as lt, _ as ut, a as dt, at as ft, b as pt, c as mt, ct as ht, d as gt, dt as _t, et as vt, f as yt, ft as bt, g as xt, h as St, ht as Ct, i as wt, it as Tt, j as Et, k as Dt, l as Ot, lt as kt, m as At, mt as jt, n as N, nt as Mt, o as P, ot as Nt, p as Pt, pt as Ft, q as It, r as Lt, rt as Rt, s as zt, st as Bt, t as Vt, tt as Ht, u as Ut, ut as Wt, v as F, w as Gt, x as Kt, y as qt, z as Jt } from "./desktopStore-xnNbYaYm.js";
5
+ import { a as Yt, c as Xt, i as I, n as Zt, o as Qt, r as $t, s as en, t as tn } from "./useDynamicIcon-_wGeWu-b.js";
6
+ import { t as nn } from "./useAdaptiveDimensions-sv9lwqF_.js";
7
+ import { a as rn, i as an, o as on, r as sn, s as cn } from "./useDragDrop-D2LtOEYC.js";
8
+ import { t as L } from "./AppIcon-aFNw89J2.js";
9
+ import { a as ln, i as un, n as dn, r as fn, t as pn } from "./useCloseInterceptor-Bwm4I0O8.js";
9
10
  import { t as R } from "./VscIcon-AEENjKOE.js";
10
- import { n as nn, t as rn } from "./AppMenuBar-DmSfQRXU.js";
11
- import { r as an, t as on } from "./FilesApp-D8MqvC5X.js";
12
- import { n as sn, r as cn, t as ln } from "./buildBreadcrumbs-noWhu8os.js";
13
- import { r as un, t as dn } from "./DeviceInfoApp-I63mJRWy.js";
14
- import { t as fn } from "./useResolvedUrl-B6x4xy0x.js";
15
- import { t as pn } from "./CalendarApp-DOmjWbpl.js";
16
- import { a as mn, n as hn, t as gn } from "./FilePickerApp-ClHuhm6Z.js";
17
- import { r as _n, t as vn } from "./NotesApp-DJ2dGt4-.js";
18
- import { n as yn, t as bn } from "./AppEmptyState-Boej96TB.js";
19
- import { t as xn } from "./Colors-CuABn2W4.js";
20
- import { t as Sn } from "./ImageViewerApp-iojtyFEf.js";
21
- import { t as Cn } from "./PdfApp-IjY_GtnW.js";
22
- import { t as wn } from "./DownloadProgress-DnVASsv5.js";
23
- import { r as Tn, t as En } from "./UploaderApp-CbypD538.js";
24
- import { t as Dn } from "./ColorPicker-WCeD3Wjf.js";
25
- import { t as On } from "./useMenuBarUtils-ChAfI7OA.js";
26
- import { t as kn } from "./NotesMenuBar-DILZTjnT.js";
27
- import { t as An } from "./MenuEditMenuBar-DnCL-kaZ.js";
28
- import { t as jn } from "./SettingsMenuBar-ktC0viTd.js";
29
- import { t as Mn } from "./PdfMenuBar-Bd5MTZcZ.js";
30
- import { t as Nn } from "./ImageViewerMenuBar-BIsUokxV.js";
31
- import { i as Pn, r as Fn, t as In } from "./CreateItemApp-DR8Y4bwo.js";
11
+ import { n as mn, t as hn } from "./AppMenuBar-DmSfQRXU.js";
12
+ import { t as gn } from "./useNotifications-CR9JLjtC.js";
13
+ import { n as _n, r as vn, t as yn } from "./buildBreadcrumbs-noWhu8os.js";
14
+ import { t as bn } from "./useDeviceDetection-B9jjlate.js";
15
+ import { n as xn, t as Sn } from "./AppEmptyState-BVfKZU-h.js";
16
+ import { t as Cn } from "./Colors-BIj4g0eH.js";
17
+ import { t as wn } from "./ColorPicker-B76rCS2H.js";
18
+ import { t as Tn } from "./DownloadProgress-DBFA58C5.js";
19
+ import { a as En, n as Dn, t as On } from "./FilePickerApp-D7fERKbp.js";
20
+ import { n as kn, t as An } from "./IconColorPicker-DUIXSb5E.js";
21
+ import { t as jn } from "./AppTempMemory-DgUW6GaF.js";
22
+ import { t as Mn } from "./useMenuBarUtils-DTPFK0IN.js";
23
+ import { t as Nn } from "./formatBytes-CaP80WnM.js";
32
24
  import "@mantine/core/styles.css";
33
25
  import "@mantine/dates/styles.css";
34
- import { Suspense as Ln, createContext as Rn, createElement as zn, memo as Bn, useCallback as z, useContext as Vn, useEffect as B, useLayoutEffect as Hn, useMemo as V, useRef as H, useState as U } from "react";
26
+ import { Suspense as Pn, createContext as Fn, createElement as In, memo as Ln, useCallback as z, useContext as Rn, useEffect as B, useLayoutEffect as zn, useMemo as V, useRef as H, useState as U } from "react";
35
27
  import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
36
- import { ActionIcon as Un, Anchor as Wn, Button as q, Center as Gn, Group as Kn, Loader as qn, MantineProvider as Jn, Menu as J, Modal as Yn, Notification as Xn, Popover as Y, Progress as Zn, Stack as Qn, Text as X, TextInput as $n, UnstyledButton as er, createTheme as tr, useMantineTheme as nr } from "@mantine/core";
37
- import { QueryClient as rr, QueryClient as ir, QueryClientProvider as ar } from "@tanstack/react-query";
38
- import { create as or } from "zustand";
39
- import { AnimatePresence as sr, motion as cr, useAnimationControls as lr } from "framer-motion";
40
- import { initReactI18next as ur, useTranslation as Z } from "react-i18next";
41
- import dr from "i18next";
42
- import fr from "i18next-browser-languagedetector";
43
- import { Rnd as pr } from "react-rnd";
44
- import { useShallow as mr } from "zustand/react/shallow";
45
- import { FcDoNotInsert as hr, FcInfo as gr } from "react-icons/fc";
46
- import { Terminal as _r } from "@xterm/xterm";
47
- import { FitAddon as vr } from "@xterm/addon-fit";
48
- import { ClipboardAddon as yr } from "@xterm/addon-clipboard";
28
+ import { ActionIcon as Bn, Anchor as Vn, Button as q, Center as Hn, Group as Un, Loader as Wn, MantineProvider as Gn, Menu as J, Modal as Kn, Notification as qn, Popover as Y, Progress as Jn, Stack as Yn, Text as X, TextInput as Xn, UnstyledButton as Zn, createTheme as Qn, useMantineTheme as $n } from "@mantine/core";
29
+ import { QueryClient as er, QueryClient as tr, QueryClientProvider as nr } from "@tanstack/react-query";
30
+ import { create as rr } from "zustand";
31
+ import { AnimatePresence as ir, motion as ar, useAnimationControls as or } from "framer-motion";
32
+ import { initReactI18next as sr, useTranslation as Z } from "react-i18next";
33
+ import cr from "i18next";
34
+ import lr from "i18next-browser-languagedetector";
35
+ import { Rnd as ur } from "react-rnd";
36
+ import { useShallow as dr } from "zustand/react/shallow";
37
+ import { FcDoNotInsert as fr, FcInfo as pr } from "react-icons/fc";
38
+ import { Terminal as mr } from "@xterm/xterm";
39
+ import { FitAddon as hr } from "@xterm/addon-fit";
40
+ import { ClipboardAddon as gr } from "@xterm/addon-clipboard";
49
41
  import "@xterm/xterm/css/xterm.css";
50
42
  //#region src/components/Theme/ThemeContext.ts
51
- var br = Rn(void 0), xr = {
43
+ var _r = Fn(void 0), vr = {
52
44
  borderRadius: "8px",
53
45
  headerHeight: 40,
54
46
  minWidth: 400,
@@ -56,12 +48,12 @@ var br = Rn(void 0), xr = {
56
48
  defaultWidth: 800,
57
49
  defaultHeight: 600,
58
50
  shadow: "0 8px 32px rgba(0, 0, 0, 0.2)"
59
- }, Sr = {
51
+ }, yr = {
60
52
  height: 48,
61
53
  position: "bottom",
62
54
  background: "rgba(0, 0, 0, 0.8)",
63
55
  blur: !0
64
- }, Cr = {
56
+ }, br = {
65
57
  light: {
66
58
  mode: "light",
67
59
  colors: {
@@ -70,8 +62,8 @@ var br = Rn(void 0), xr = {
70
62
  window: "#ffffff",
71
63
  accent: "#339af0"
72
64
  },
73
- window: xr,
74
- taskbar: Sr,
65
+ window: vr,
66
+ taskbar: yr,
75
67
  desktop: {
76
68
  background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
77
69
  iconSize: 64,
@@ -86,8 +78,8 @@ var br = Rn(void 0), xr = {
86
78
  window: "#25262b",
87
79
  accent: "#4dabf7"
88
80
  },
89
- window: xr,
90
- taskbar: Sr,
81
+ window: vr,
82
+ taskbar: yr,
91
83
  desktop: {
92
84
  background: "linear-gradient(135deg, #1a1b1e 0%, #2d1f3d 100%)",
93
85
  iconSize: 64,
@@ -97,17 +89,15 @@ var br = Rn(void 0), xr = {
97
89
  };
98
90
  //#endregion
99
91
  //#region src/components/Theme/ThemeProvider.tsx
100
- function wr({ children: e, initialMode: t = "light", mode: n, theme: r }) {
101
- let [i, a] = U(n ?? t), o = H(null);
102
- B(() => {
103
- n !== void 0 && n !== i && a(n);
104
- }, [n, i]);
105
- let s = z(() => {
92
+ function xr({ children: e, initialMode: t = "light", mode: n, theme: r }) {
93
+ let [i, a] = U(t), o = H(null), s = n ?? i, c = z(() => {
106
94
  a((e) => e === "light" ? "dark" : "light");
107
- }, []), c = z((e) => {
95
+ }, []), l = z((e) => {
96
+ a(e);
97
+ }, []), u = z((e) => {
108
98
  o.current = e;
109
- }, []), l = z(() => {
110
- let e = Cr[i], t = o.current;
99
+ }, []), d = z(() => {
100
+ let e = br[s], t = o.current;
111
101
  return t ? {
112
102
  ...e,
113
103
  colors: {
@@ -149,41 +139,41 @@ function wr({ children: e, initialMode: t = "light", mode: n, theme: r }) {
149
139
  ...r.desktop
150
140
  }
151
141
  } : e;
152
- }, [i, r]);
142
+ }, [s, r]);
153
143
  B(() => {
154
- document.documentElement.style.setProperty("color-scheme", i), document.documentElement.setAttribute("data-mantine-color-scheme", i);
155
- }, [i]);
156
- let u = V(() => ({
157
- getTheme: l,
158
- setMode: a,
159
- toggle: s,
160
- setCustomColors: c
144
+ document.documentElement.style.setProperty("color-scheme", s), document.documentElement.setAttribute("data-mantine-color-scheme", s);
145
+ }, [s]);
146
+ let f = V(() => ({
147
+ getTheme: d,
148
+ setMode: l,
149
+ toggle: c,
150
+ setCustomColors: u
161
151
  }), [
152
+ d,
162
153
  l,
163
- a,
164
- s,
165
- c
154
+ c,
155
+ u
166
156
  ]);
167
- return /* @__PURE__ */ G(br.Provider, {
168
- value: u,
157
+ return /* @__PURE__ */ G(_r.Provider, {
158
+ value: f,
169
159
  children: e
170
160
  });
171
161
  }
172
162
  //#endregion
173
163
  //#region src/components/Theme/useTheme.ts
174
- function Tr() {
175
- let e = Vn(br);
164
+ function Sr() {
165
+ let e = Rn(_r);
176
166
  if (!e) throw Error("useTheme must be used within a ThemeProvider");
177
167
  return e.getTheme();
178
168
  }
179
- function Er() {
180
- let e = Vn(br);
169
+ function Cr() {
170
+ let e = Rn(_r);
181
171
  if (!e) throw Error("useThemeContext must be used within a ThemeProvider");
182
172
  return e;
183
173
  }
184
174
  //#endregion
185
175
  //#region src/components/Theme/defaultMantineTheme.ts
186
- var Dr = {
176
+ var wr = {
187
177
  primaryColor: "blue",
188
178
  other: {
189
179
  desktop: { backgroundColor: "#1a1a2e" },
@@ -198,40 +188,40 @@ var Dr = {
198
188
  },
199
189
  accent: "#339af0"
200
190
  }
201
- }, Or = Rn(void 0), kr = new ir({ defaultOptions: { queries: {
191
+ }, Tr = Fn(void 0), Er = new tr({ defaultOptions: { queries: {
202
192
  staleTime: Infinity,
203
193
  gcTime: Infinity
204
194
  } } });
205
- function Ar({ children: e, fileSystem: t, isReady: n, error: r }) {
206
- let i = Tr(), o = a((e) => e.setThemeMode), s = a((e) => e.toggleTheme), c = V(() => ({
207
- fs: n ? t : null,
208
- isReady: n,
209
- error: r,
210
- theme: i,
195
+ function Dr({ children: t, fileSystem: n, isReady: r, error: i }) {
196
+ let a = Sr(), o = e((e) => e.setThemeMode), s = e((e) => e.toggleTheme), c = V(() => ({
197
+ fs: r ? n : null,
198
+ isReady: r,
199
+ error: i,
200
+ theme: a,
211
201
  setThemeMode: o,
212
202
  toggleTheme: s
213
203
  }), [
214
- t,
215
204
  n,
216
205
  r,
217
206
  i,
207
+ a,
218
208
  o,
219
209
  s
220
210
  ]);
221
- return /* @__PURE__ */ G(Or.Provider, {
211
+ return /* @__PURE__ */ G(Tr.Provider, {
222
212
  value: c,
223
- children: e
213
+ children: t
224
214
  });
225
215
  }
226
- function jr({ children: e, fileSystem: t, initialMode: n, theme: r, mantineTheme: i, fallback: o = null, onError: s, queryClient: c = kr }) {
227
- let [l, u] = U(!1), [d, f] = U(null), p = a((e) => e.theme.mode), m = a((e) => e.setThemeMode);
216
+ function Or({ children: t, fileSystem: n, initialMode: r, theme: i, mantineTheme: a, fallback: o = null, onError: s, queryClient: c = Er }) {
217
+ let [l, u] = U(!1), [d, f] = U(null), p = e((e) => e.theme.mode), m = e((e) => e.setThemeMode);
228
218
  B(() => {
229
- n && m(n);
219
+ r && m(r);
230
220
  }, []), B(() => {
231
221
  let e = !0;
232
222
  return (async () => {
233
223
  try {
234
- await t.initialize(), e && u(!0);
224
+ await n.initialize(), e && u(!0);
235
225
  } catch (t) {
236
226
  let n = t instanceof Error ? t : Error(String(t));
237
227
  e && (f(n), s?.(n));
@@ -239,24 +229,24 @@ function jr({ children: e, fileSystem: t, initialMode: n, theme: r, mantineTheme
239
229
  })(), () => {
240
230
  e = !1;
241
231
  };
242
- }, [t, s]);
243
- let h = V(() => tr({
244
- ...Dr,
245
- ...i
246
- }), [i]);
247
- return d || !l ? /* @__PURE__ */ G(W, { children: o }) : /* @__PURE__ */ G(ar, {
232
+ }, [n, s]);
233
+ let h = V(() => Qn({
234
+ ...wr,
235
+ ...a
236
+ }), [a]);
237
+ return d || !l ? /* @__PURE__ */ G(W, { children: o }) : /* @__PURE__ */ G(nr, {
248
238
  client: c,
249
- children: /* @__PURE__ */ G(Jn, {
239
+ children: /* @__PURE__ */ G(Gn, {
250
240
  theme: h,
251
241
  forceColorScheme: p,
252
- children: /* @__PURE__ */ G(wr, {
242
+ children: /* @__PURE__ */ G(xr, {
253
243
  mode: p,
254
- theme: r,
255
- children: /* @__PURE__ */ G(Ar, {
256
- fileSystem: t,
244
+ theme: i,
245
+ children: /* @__PURE__ */ G(Dr, {
246
+ fileSystem: n,
257
247
  isReady: l,
258
248
  error: d,
259
- children: e
249
+ children: t
260
250
  })
261
251
  })
262
252
  })
@@ -264,16 +254,16 @@ function jr({ children: e, fileSystem: t, initialMode: n, theme: r, mantineTheme
264
254
  }
265
255
  //#endregion
266
256
  //#region src/components/FdeProvider/useFdeContext.ts
267
- function Mr() {
268
- let e = Vn(Or);
257
+ function kr() {
258
+ let e = Rn(Tr);
269
259
  if (!e) throw Error("useFdeContext must be used within an FdeProvider");
270
260
  return e;
271
261
  }
272
262
  //#endregion
273
263
  //#region src/hooks/useWindowButtonRegistry.tsx
274
- var Nr = Rn(null), Pr = ({ children: e }) => {
264
+ var Ar = Fn(null), jr = ({ children: e }) => {
275
265
  let t = H(/* @__PURE__ */ new Map());
276
- return /* @__PURE__ */ G(Nr.Provider, {
266
+ return /* @__PURE__ */ G(Ar.Provider, {
277
267
  value: {
278
268
  register: (e, n) => {
279
269
  t.current.set(e, n);
@@ -285,46 +275,77 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
285
275
  },
286
276
  children: e
287
277
  });
288
- }, Fr = () => {
289
- let e = Vn(Nr);
278
+ }, Mr = () => {
279
+ let e = Rn(Ar);
290
280
  if (!e) throw Error("useWindowButtonRegistry must be used within WindowButtonRegistryProvider");
291
281
  return e;
292
- }, Ir = { root: "_root_1z0nr_1" }, Lr = "linear-gradient(90deg, rgba(42, 123, 155, 1) 0%, rgba(87, 199, 133, 1) 50%, rgba(237, 221, 83, 1) 100%)", Rr = ({ children: e, onContextMenu: t, wallpaper: n, backgroundColor: r }) => {
293
- let i = P((e) => e.setViewportSize), a = H(null);
282
+ }, Nr = {
283
+ root: "_root_hze7e_1",
284
+ background: "_background_hze7e_10",
285
+ noiseOverlay: "_noiseOverlay_hze7e_19"
286
+ }, Pr = ({ children: t, onContextMenu: n, wallpaper: r, wallpaperModule: i, backgroundColor: a }) => {
287
+ let o = P((e) => e.setViewportSize), s = H(null), c = e((e) => e.wallpaperHasNoise), l = e((e) => e.wallpaperNoiseOpacity), { backgroundImage: u, noiseImageUrl: d } = V(() => {
288
+ if (i === "gradient") {
289
+ let e = r ?? "", t = e.match(/url\(data:image\/png;base64,[^)]+\)/);
290
+ return {
291
+ backgroundImage: e,
292
+ noiseImageUrl: t ? t[0].replace(/url\((.*)\)/, "$1") : ""
293
+ };
294
+ }
295
+ return {
296
+ backgroundImage: r ? `url(${r})` : "",
297
+ noiseImageUrl: ""
298
+ };
299
+ }, [r, i]), f = l / 100;
294
300
  B(() => {
295
- let e = a.current;
301
+ let e = s.current;
296
302
  if (!e) return;
297
303
  let t = new ResizeObserver((e) => {
298
304
  let { width: t, height: n } = e[0]?.contentRect ?? {};
299
- t && t > 0 && n && n > 0 && i(t, n);
305
+ t && t > 0 && n && n > 0 && o(t, n);
300
306
  });
301
307
  return t.observe(e), () => t.disconnect();
302
- }, [i]);
303
- let o = n ? `url(${n})` : Lr;
304
- return /* @__PURE__ */ G("div", {
305
- ref: a,
306
- className: Ir.root,
308
+ }, [o]);
309
+ let p = {
310
+ "--taskbar-height": "48px",
311
+ "--noise-tile-size": "128px"
312
+ };
313
+ return /* @__PURE__ */ K("div", {
314
+ ref: s,
315
+ className: Nr.root,
307
316
  "data-testid": "desktop-area",
308
- style: {
309
- "--taskbar-height": "48px",
310
- backgroundColor: r ?? "transparent",
311
- backgroundImage: o,
312
- backgroundSize: "cover",
313
- backgroundPosition: "center"
314
- },
315
- onContextMenu: t,
316
- children: e
317
+ style: p,
318
+ onContextMenu: n,
319
+ children: [
320
+ /* @__PURE__ */ G("div", {
321
+ className: Nr.background,
322
+ style: {
323
+ backgroundImage: u,
324
+ backgroundSize: "cover",
325
+ backgroundPosition: "center",
326
+ backgroundColor: a ?? "transparent"
327
+ }
328
+ }),
329
+ c && d && /* @__PURE__ */ G("div", {
330
+ className: Nr.noiseOverlay,
331
+ style: {
332
+ backgroundImage: `url(${d})`,
333
+ opacity: f
334
+ }
335
+ }),
336
+ t
337
+ ]
317
338
  });
318
- }, zr = (e) => e.toLocaleTimeString([], {
339
+ }, Fr = (e) => e.toLocaleTimeString([], {
319
340
  hour: "2-digit",
320
341
  minute: "2-digit"
321
- }), Br = () => {
322
- let [e, t] = U(() => zr(/* @__PURE__ */ new Date()));
342
+ }), Ir = () => {
343
+ let [e, t] = U(() => Fr(/* @__PURE__ */ new Date()));
323
344
  return B(() => {
324
- let e = setInterval(() => t(zr(/* @__PURE__ */ new Date())), 1e3);
345
+ let e = setInterval(() => t(Fr(/* @__PURE__ */ new Date())), 1e3);
325
346
  return () => clearInterval(e);
326
347
  }, []), e;
327
- }, Vr = -8, Hr = 0, Ur = () => {
348
+ }, Lr = -8, Rr = 0, zr = () => {
328
349
  let [e, t] = U({
329
350
  activeMenu: null,
330
351
  position: {
@@ -337,7 +358,7 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
337
358
  activeMenu: "window",
338
359
  position: {
339
360
  x: e.clientX,
340
- y: e.clientY + Vr
361
+ y: e.clientY + Lr
341
362
  },
342
363
  targetWindowId: n
343
364
  });
@@ -346,7 +367,7 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
346
367
  activeMenu: "panel",
347
368
  position: {
348
369
  x: e.clientX,
349
- y: e.clientY + Vr
370
+ y: e.clientY + Lr
350
371
  },
351
372
  targetWindowId: null
352
373
  });
@@ -355,7 +376,7 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
355
376
  activeMenu: "launcher",
356
377
  position: {
357
378
  x: e.clientX,
358
- y: e.clientY + Hr
379
+ y: e.clientY + Rr
359
380
  },
360
381
  targetWindowId: null
361
382
  });
@@ -377,17 +398,17 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
377
398
  openLauncherMenu: i,
378
399
  closeMenu: a
379
400
  };
380
- }, Wr = () => {
381
- let e = a((e) => e.animationDuration);
401
+ }, Br = () => {
402
+ let t = e((e) => e.animationDuration);
382
403
  return {
383
- duration: e,
384
- windowVariants: oe(e),
385
- panelVariants: be(e),
386
- minimizeVariant: fe(.3),
387
- restoreVariant: ae(.3),
388
- maximizeTransition: M(.25),
389
- easeIn: he(e),
390
- easeOut: ve(e)
404
+ duration: t,
405
+ windowVariants: _e(t),
406
+ panelVariants: je(t),
407
+ minimizeVariant: Ce(.3),
408
+ restoreVariant: ge(.3),
409
+ maximizeTransition: he(.25),
410
+ easeIn: Ee(t),
411
+ easeOut: ke(t)
391
412
  };
392
413
  }, Q = {
393
414
  WELCOME: "welcome",
@@ -407,14 +428,14 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
407
428
  CODE_SERVER: "code-server",
408
429
  DEVICE_INFO: "device-info",
409
430
  MENUEDIT: "menuedit"
410
- }, Gr = {
431
+ }, Vr = {
411
432
  [Q.FILES]: "filesApp",
412
433
  [Q.PDF]: "pdfViewer",
413
434
  [Q.IMAGE_VIEWER]: "imageViewer",
414
435
  [Q.DOS_EMULATOR]: "dosEmulator",
415
436
  [Q.CODE_SERVER]: "codeServer",
416
437
  [Q.DEVICE_INFO]: "deviceInfo"
417
- }, Kr = [
438
+ }, Hr = [
418
439
  Q.WELCOME,
419
440
  Q.UPLOADER,
420
441
  Q.TERMINAL,
@@ -429,13 +450,13 @@ var Nr = Rn(null), Pr = ({ children: e }) => {
429
450
  ];
430
451
  //#endregion
431
452
  //#region src/hooks/useAppName.ts
432
- function qr(e) {
453
+ function Ur(e) {
433
454
  let { t } = Z("apps");
434
- return e ? t(`names.${Gr[e] ?? e}`, e) : "";
455
+ return e ? t(`names.${Vr[e] ?? e}`, e) : "";
435
456
  }
436
457
  //#endregion
437
458
  //#region src/hooks/useSearchFilter.ts
438
- function Jr(e, t, n) {
459
+ function Wr(e, t, n) {
439
460
  return V(() => {
440
461
  if (!t.trim()) return e;
441
462
  let r = t.toLowerCase().trim();
@@ -451,7 +472,7 @@ function Jr(e, t, n) {
451
472
  }
452
473
  //#endregion
453
474
  //#region src/hooks/useCollapsible.ts
454
- function Yr(e) {
475
+ function Gr(e) {
455
476
  let [t, n] = U(e ?? /* @__PURE__ */ new Set());
456
477
  return {
457
478
  expanded: t,
@@ -485,32 +506,32 @@ function Yr(e) {
485
506
  isExpanded: z((e) => t.has(e), [t])
486
507
  };
487
508
  }
488
- var Xr = {
509
+ var Kr = {
489
510
  header: "_header_2d0oy_1",
490
511
  iconContainer: "_iconContainer_2d0oy_20",
491
512
  expandIcon: "_expandIcon_2d0oy_28",
492
513
  icon: "_icon_2d0oy_20",
493
514
  title: "_title_2d0oy_42",
494
515
  content: "_content_2d0oy_48"
495
- }, Zr = ({ title: e, fcIcon: t = "FcFolder", expanded: n, onToggle: r, children: i, className: a, "aria-label": o }) => {
496
- let s = Rt(n ? "VscRemove" : "VscAdd", {
516
+ }, qr = ({ title: e, fcIcon: t = "FcFolder", expanded: n, onToggle: r, children: i, className: a, "aria-label": o }) => {
517
+ let s = Xt(n ? "VscRemove" : "VscAdd", {
497
518
  size: 14,
498
- className: Xr.expandIcon
519
+ className: Kr.expandIcon
499
520
  });
500
521
  return /* @__PURE__ */ K("div", {
501
522
  className: a,
502
- children: [/* @__PURE__ */ K(er, {
503
- className: Xr.header,
523
+ children: [/* @__PURE__ */ K(Zn, {
524
+ className: Kr.header,
504
525
  onClick: r,
505
526
  "aria-expanded": n,
506
527
  "aria-label": o ?? e,
507
528
  children: [
508
529
  /* @__PURE__ */ G("span", {
509
- className: Xr.iconContainer,
530
+ className: Kr.iconContainer,
510
531
  children: s
511
532
  }),
512
533
  /* @__PURE__ */ G("span", {
513
- className: Xr.icon,
534
+ className: Kr.icon,
514
535
  children: /* @__PURE__ */ G(L, {
515
536
  fcIcon: t,
516
537
  size: 16
@@ -519,16 +540,16 @@ var Xr = {
519
540
  /* @__PURE__ */ G(X, {
520
541
  size: "sm",
521
542
  fw: 500,
522
- className: Xr.title,
543
+ className: Kr.title,
523
544
  children: e
524
545
  })
525
546
  ]
526
547
  }), n && /* @__PURE__ */ G("div", {
527
- className: Xr.content,
548
+ className: Kr.content,
528
549
  children: i
529
550
  })]
530
551
  });
531
- }, Qr = {
552
+ }, Jr = {
532
553
  trigger: "_trigger_4gumo_1",
533
554
  panel: "_panel_4gumo_23",
534
555
  searchContainer: "_searchContainer_4gumo_39",
@@ -540,7 +561,7 @@ var Xr = {
540
561
  };
541
562
  //#endregion
542
563
  //#region src/components/Launcher/Launcher.tsx
543
- function $r(e) {
564
+ function Yr(e) {
544
565
  let t = e.icon, n = "fcIcon" in e ? e.fcIcon : void 0, r = t?.startsWith("Fc") || t?.startsWith("Fi") || t?.startsWith("Vsc");
545
566
  return {
546
567
  id: e.id,
@@ -551,15 +572,15 @@ function $r(e) {
551
572
  iconColor: "iconColor" in e ? e.iconColor : void 0
552
573
  };
553
574
  }
554
- var ei = ({ app: e, onOpen: t }) => {
555
- let n = qr(e.id);
575
+ var Xr = ({ app: e, onOpen: t }) => {
576
+ let n = Ur(e.id);
556
577
  return /* @__PURE__ */ K("button", {
557
- className: Qr.appButton,
578
+ className: Jr.appButton,
558
579
  onClick: () => t(e.id),
559
580
  role: "menuitem",
560
581
  "aria-label": n,
561
582
  children: [/* @__PURE__ */ G("span", {
562
- className: Qr.appIcon,
583
+ className: Jr.appIcon,
563
584
  children: /* @__PURE__ */ G(L, {
564
585
  fcIcon: e.fcIcon,
565
586
  iconUrl: e.iconUrl,
@@ -571,90 +592,99 @@ var ei = ({ app: e, onOpen: t }) => {
571
592
  children: n
572
593
  })]
573
594
  }, e.id);
574
- }, ti = ({ folder: e, isExpanded: t, apps: n, onToggle: r, onOpen: i }) => /* @__PURE__ */ G(Zr, {
575
- title: Yt(e),
595
+ }, Zr = ({ folder: e, isExpanded: t, apps: n, onToggle: r, onOpen: i }) => /* @__PURE__ */ G(qr, {
596
+ title: cn(e),
576
597
  fcIcon: e.fcIcon,
577
598
  expanded: t,
578
599
  onToggle: r,
579
- children: n.map((e) => /* @__PURE__ */ G(ei, {
600
+ children: n.map((e) => /* @__PURE__ */ G(Xr, {
580
601
  app: e,
581
602
  onOpen: i
582
603
  }, e.id))
583
- }, e.id), ni = ({ fcIcon: e = "FcDebian", onContextMenu: t }) => {
584
- let n = I(e, {
604
+ }, e.id), Qr = ({ fcIcon: t = "FcDebian", onContextMenu: n }) => {
605
+ let r = I(t, {
585
606
  size: 22,
586
607
  style: { display: "block" }
587
- }), [r, i] = U(!1), [o, s] = U(""), c = ye(), l = a((e) => e.theme.colors.taskbar), u = P((e) => e.launcherFolders), d = P((e) => e.customApps), { panelVariants: f } = Wr(), p = H(null), m = H(null), { expanded: h, toggle: g, reset: _ } = Yr(/* @__PURE__ */ new Set()), v = V(() => [...it].sort((e, t) => e.name.localeCompare(t.name)), []), y = V(() => new Set(u.flatMap((e) => e.appIds)), [u]), b = Jr(V(() => v.filter((e) => !y.has(e.id)), [v, y]), o, (e) => [e.id, e.name]), x = V(() => {
588
- if (!o.trim()) return [...u].sort((e, t) => e.isPredefined === t.isPredefined ? e.name.localeCompare(t.name) : e.isPredefined ? -1 : 1);
589
- let e = o.toLowerCase();
590
- return u.map((t) => ({
591
- ...t,
592
- appIds: t.appIds.filter((t) => {
593
- let n = v.find((e) => e.id === t);
594
- return n ? n.id.toLowerCase().includes(e) || n.name.toLowerCase().includes(e) : !1;
608
+ }), [i, a] = U(!1), [o, s] = U(""), c = Ae(), l = e((e) => e.theme.colors.taskbar), u = P((e) => e.launcherFolders), d = P((e) => e.customApps), { panelVariants: f } = Br(), p = H(null), m = H(null), { expanded: h, toggle: g, reset: _ } = Gr(/* @__PURE__ */ new Set()), v = V(() => [...ht].sort((e, t) => e.name.localeCompare(t.name)), []), y = V(() => new Set(u.flatMap((e) => e.appIds)), [u]), b = Wr(V(() => v.filter((e) => !y.has(e.id)), [v, y]), o, (e) => [e.id, e.name]), x = V(() => {
609
+ let e = u.map((e) => ({
610
+ ...e,
611
+ appIds: e.appIds.filter((t) => {
612
+ if (e.id === "launcher-folder-custom-apps") return !0;
613
+ let n = v.some((e) => e.id === t), r = d.some((e) => e.id === t);
614
+ return n || r;
615
+ })
616
+ })).filter((e) => e.id === "launcher-folder-custom-apps" ? d.length > 0 : e.appIds.length > 0);
617
+ if (!o.trim()) return [...e].sort((e, t) => e.isPredefined === t.isPredefined ? e.name.localeCompare(t.name) : e.isPredefined ? -1 : 1);
618
+ let t = o.toLowerCase();
619
+ return e.map((e) => ({
620
+ ...e,
621
+ appIds: e.appIds.filter((e) => {
622
+ let n = v.find((t) => t.id === e) ?? d.find((t) => t.id === e);
623
+ return n && (n.id.toLowerCase().includes(t) || n.name.toLowerCase().includes(t));
595
624
  })
596
625
  })).filter((e) => e.appIds.length > 0).sort((e, t) => e.isPredefined === t.isPredefined ? e.name.localeCompare(t.name) : e.isPredefined ? -1 : 1);
597
626
  }, [
598
627
  u,
599
628
  o,
600
- v
629
+ v,
630
+ d
601
631
  ]), S = V(() => {
602
632
  if (!o.trim()) return d;
603
633
  let e = o.toLowerCase();
604
634
  return d.filter((t) => t.id.toLowerCase().includes(e) || t.name.toLowerCase().includes(e));
605
635
  }, [d, o]);
606
636
  B(() => {
607
- o.trim() && r && (x.map((e) => e.id).forEach((e) => {
637
+ o.trim() && i && (x.map((e) => e.id).forEach((e) => {
608
638
  h.has(e) || g(e);
609
- }), S.length > 0 && !h.has("launcher-folder-custom-apps") && g(It));
639
+ }), S.length > 0 && !h.has("launcher-folder-custom-apps") && g(Jt));
610
640
  }, [
611
641
  o,
612
642
  x,
613
643
  S,
614
- r,
644
+ i,
615
645
  h,
616
646
  g
617
647
  ]), B(() => {
618
- r || _();
619
- }, [r, _]), B(() => {
620
- if (!r) return;
648
+ i || _();
649
+ }, [i, _]), B(() => {
650
+ if (!i) return;
621
651
  let e = (e) => {
622
- p.current && !p.current.contains(e.target) && (i(!1), s(""));
652
+ p.current && !p.current.contains(e.target) && (a(!1), s(""));
623
653
  }, t = (e) => {
624
- e.key === "Escape" && (i(!1), s(""));
654
+ e.key === "Escape" && (a(!1), s(""));
625
655
  };
626
656
  return document.addEventListener("mousedown", e), document.addEventListener("keydown", t), () => {
627
657
  document.removeEventListener("mousedown", e), document.removeEventListener("keydown", t);
628
658
  };
629
- }, [r]);
659
+ }, [i]);
630
660
  let C = (e) => {
631
- if (e.preventDefault(), e.stopPropagation(), r) {
632
- i(!1), s("");
661
+ if (e.preventDefault(), e.stopPropagation(), i) {
662
+ a(!1), s("");
633
663
  return;
634
664
  }
635
- t?.(e);
665
+ n?.(e);
636
666
  };
637
667
  B(() => {
638
- r && m.current && m.current.focus();
639
- }, [r]);
668
+ i && m.current && m.current.focus();
669
+ }, [i]);
640
670
  let w = z((e) => {
641
- c(e), i(!1), s("");
671
+ c(e), a(!1), s("");
642
672
  }, [c]), T = z((e) => {
643
673
  g(e);
644
674
  }, [g]), E = I("FcSearch", { size: 16 }), D = z(() => {
645
- r ? (i(!1), s("")) : i(!0);
646
- }, [r]);
675
+ i ? (a(!1), s("")) : a(!0);
676
+ }, [i]);
647
677
  return /* @__PURE__ */ K("div", {
648
678
  ref: p,
649
679
  children: [/* @__PURE__ */ G("button", {
650
- className: Qr.trigger,
680
+ className: Jr.trigger,
651
681
  onClick: D,
652
682
  onContextMenu: C,
653
683
  "aria-label": "Launcher",
654
- "aria-expanded": r,
655
- children: n
656
- }), /* @__PURE__ */ G(sr, { children: r && /* @__PURE__ */ K(cr.div, {
657
- className: Qr.panel,
684
+ "aria-expanded": i,
685
+ children: r
686
+ }), /* @__PURE__ */ G(ir, { children: i && /* @__PURE__ */ K(ar.div, {
687
+ className: Jr.panel,
658
688
  style: { background: l },
659
689
  role: "menu",
660
690
  "aria-label": "App launcher",
@@ -662,40 +692,40 @@ var ei = ({ app: e, onOpen: t }) => {
662
692
  animate: f.animate,
663
693
  exit: f.exit,
664
694
  children: [/* @__PURE__ */ G("div", {
665
- className: Qr.searchContainer,
666
- children: /* @__PURE__ */ G($n, {
695
+ className: Jr.searchContainer,
696
+ children: /* @__PURE__ */ G(Xn, {
667
697
  ref: m,
668
698
  placeholder: "Search apps...",
669
699
  value: o,
670
700
  onChange: (e) => s(e.target.value),
671
701
  leftSection: E,
672
702
  size: "xs",
673
- classNames: { input: Qr.searchInput },
703
+ classNames: { input: Jr.searchInput },
674
704
  "aria-label": "Search apps"
675
705
  })
676
706
  }), /* @__PURE__ */ K("div", {
677
- className: Qr.scrollContainer,
707
+ className: Jr.scrollContainer,
678
708
  children: [
679
709
  x.map((e) => {
680
710
  let t = h.has(e.id);
681
- return e.id === "launcher-folder-custom-apps" ? S.length === 0 ? null : /* @__PURE__ */ G(ti, {
711
+ return e.id === "launcher-folder-custom-apps" ? S.length === 0 ? null : /* @__PURE__ */ G(Zr, {
682
712
  folder: e,
683
713
  isExpanded: t,
684
- apps: S.map($r),
714
+ apps: S.map(Yr),
685
715
  onToggle: () => T(e.id),
686
716
  onOpen: w
687
- }, e.id) : /* @__PURE__ */ G(ti, {
717
+ }, e.id) : /* @__PURE__ */ G(Zr, {
688
718
  folder: e,
689
719
  isExpanded: t,
690
- apps: e.appIds.map((e) => v.find((t) => t.id === e)).filter((e) => e !== void 0).sort((e, t) => e.name.localeCompare(t.name)).map($r),
720
+ apps: e.appIds.map((e) => v.find((t) => t.id === e)).filter((e) => e !== void 0).sort((e, t) => e.name.localeCompare(t.name)).map(Yr),
691
721
  onToggle: () => T(e.id),
692
722
  onOpen: w
693
723
  }, e.id);
694
724
  }),
695
725
  b.length > 0 && /* @__PURE__ */ G("div", {
696
- className: Qr.appsSection,
697
- children: b.map((e) => /* @__PURE__ */ G(ei, {
698
- app: $r(e),
726
+ className: Jr.appsSection,
727
+ children: b.map((e) => /* @__PURE__ */ G(Xr, {
728
+ app: Yr(e),
699
729
  onOpen: w
700
730
  }, e.id))
701
731
  }),
@@ -710,7 +740,7 @@ var ei = ({ app: e, onOpen: t }) => {
710
740
  })]
711
741
  }) })]
712
742
  });
713
- }, ri = ({ x: e, y: t }) => /* @__PURE__ */ G(J.Target, { children: /* @__PURE__ */ G("div", {
743
+ }, $r = ({ x: e, y: t }) => /* @__PURE__ */ G(J.Target, { children: /* @__PURE__ */ G("div", {
714
744
  "aria-hidden": "true",
715
745
  style: {
716
746
  position: "fixed",
@@ -720,9 +750,9 @@ var ei = ({ app: e, onOpen: t }) => {
720
750
  height: 0,
721
751
  pointerEvents: "none"
722
752
  }
723
- }) }), ii = (e) => {
753
+ }) }), ei = (e) => {
724
754
  let t = H(null), [n, r] = U(0);
725
- return Hn(() => {
755
+ return zn(() => {
726
756
  if (t.current && e) {
727
757
  let e = t.current.offsetHeight;
728
758
  r(e);
@@ -731,16 +761,16 @@ var ei = ({ app: e, onOpen: t }) => {
731
761
  menuRef: t,
732
762
  menuHeight: n
733
763
  };
734
- }, ai = { menuItem: "_menuItem_18vno_1" }, oi = 8, si = ({ windowMenuOpened: e, panelMenuOpened: t, launcherMenuOpened: n, menuPosition: r, targetWindowId: i, targetWindowState: a, onCloseWindow: o, onMinimizeWindow: s, onMaximizeWindow: c, onRestoreWindow: l, onClose: u }) => {
764
+ }, ti = { menuItem: "_menuItem_18vno_1" }, ni = 8, ri = ({ windowMenuOpened: e, panelMenuOpened: t, launcherMenuOpened: n, menuPosition: r, targetWindowId: i, targetWindowState: a, onCloseWindow: o, onMinimizeWindow: s, onMaximizeWindow: c, onRestoreWindow: l, onClose: u }) => {
735
765
  let { t: d } = Z("contextMenu"), f = {
736
766
  size: 14,
737
767
  style: { display: "block" }
738
- }, p = () => I("FcCancel", f), m = () => I("FcMinus", f), h = () => I("FcTemplate", f), g = () => I("FcUndo", f), _ = () => I("FcSettings", f), v = () => I("FcFolder", f), y = ye(), b = qr("menuedit"), x = P((e) => e.openWindow), S = a === "minimized", C = a === "maximized", { menuRef: w, menuHeight: T } = ii(e), { menuRef: E, menuHeight: D } = ii(t), { menuRef: ee, menuHeight: O } = ii(n), [k, te] = U(!1), [A, j] = U(!1), [ne, re] = U(!1);
739
- Hn(() => {
768
+ }, p = () => I("FcCancel", f), m = () => I("FcMinus", f), h = () => I("FcTemplate", f), g = () => I("FcUndo", f), _ = () => I("FcSettings", f), v = () => I("FcFolder", f), y = Ae(), b = Ur("menuedit"), x = P((e) => e.openWindow), S = a === "minimized", C = a === "maximized", { menuRef: w, menuHeight: T } = ei(e), { menuRef: E, menuHeight: D } = ei(t), { menuRef: ee, menuHeight: O } = ei(n), [k, te] = U(!1), [A, j] = U(!1), [ne, re] = U(!1);
769
+ zn(() => {
740
770
  e || te(!1), e && T > 0 && te(!0);
741
- }, [e, T]), Hn(() => {
771
+ }, [e, T]), zn(() => {
742
772
  t || j(!1), t && D > 0 && j(!0);
743
- }, [t, D]), Hn(() => {
773
+ }, [t, D]), zn(() => {
744
774
  n || re(!1), n && O > 0 && re(!0);
745
775
  }, [n, O]);
746
776
  let ie = V(() => e ? {
@@ -766,8 +796,8 @@ var ei = ({ app: e, onOpen: t }) => {
766
796
  A,
767
797
  ne
768
798
  ]), M = V(() => {
769
- let { x: e, y: t } = r, { height: n, ready: i } = ie, a = t - oi;
770
- return i && n > 0 && t > window.innerHeight - 48 - n - oi && (a = t - n + oi), {
799
+ let { x: e, y: t } = r, { height: n, ready: i } = ie, a = t - ni;
800
+ return i && n > 0 && t > window.innerHeight - 48 - n - ni && (a = t - n + ni), {
771
801
  x: e,
772
802
  y: a
773
803
  };
@@ -798,7 +828,7 @@ var ei = ({ app: e, onOpen: t }) => {
798
828
  closeOnEscape: !0,
799
829
  closeOnItemClick: !0,
800
830
  withinPortal: !0,
801
- children: [/* @__PURE__ */ G(ri, {
831
+ children: [/* @__PURE__ */ G($r, {
802
832
  x: M.x,
803
833
  y: M.y
804
834
  }), /* @__PURE__ */ K(J.Dropdown, {
@@ -810,7 +840,7 @@ var ei = ({ app: e, onOpen: t }) => {
810
840
  i && s(i);
811
841
  },
812
842
  children: /* @__PURE__ */ K("div", {
813
- className: ai.menuItem,
843
+ className: ti.menuItem,
814
844
  children: [
815
845
  /* @__PURE__ */ G(m, {}),
816
846
  " ",
@@ -823,7 +853,7 @@ var ei = ({ app: e, onOpen: t }) => {
823
853
  i && l(i);
824
854
  },
825
855
  children: /* @__PURE__ */ K("div", {
826
- className: ai.menuItem,
856
+ className: ti.menuItem,
827
857
  children: [
828
858
  /* @__PURE__ */ G(g, {}),
829
859
  " ",
@@ -835,7 +865,7 @@ var ei = ({ app: e, onOpen: t }) => {
835
865
  i && c(i);
836
866
  },
837
867
  children: /* @__PURE__ */ K("div", {
838
- className: ai.menuItem,
868
+ className: ti.menuItem,
839
869
  children: [
840
870
  /* @__PURE__ */ G(h, {}),
841
871
  " ",
@@ -849,7 +879,7 @@ var ei = ({ app: e, onOpen: t }) => {
849
879
  i && o(i);
850
880
  },
851
881
  children: /* @__PURE__ */ K("div", {
852
- className: ai.menuItem,
882
+ className: ti.menuItem,
853
883
  children: [
854
884
  /* @__PURE__ */ G(p, {}),
855
885
  " ",
@@ -867,7 +897,7 @@ var ei = ({ app: e, onOpen: t }) => {
867
897
  closeOnEscape: !0,
868
898
  closeOnItemClick: !0,
869
899
  withinPortal: !0,
870
- children: [/* @__PURE__ */ G(ri, {
900
+ children: [/* @__PURE__ */ G($r, {
871
901
  x: M.x,
872
902
  y: M.y
873
903
  }), /* @__PURE__ */ G(J.Dropdown, {
@@ -878,7 +908,7 @@ var ei = ({ app: e, onOpen: t }) => {
878
908
  y("settings");
879
909
  },
880
910
  children: /* @__PURE__ */ K("div", {
881
- className: ai.menuItem,
911
+ className: ti.menuItem,
882
912
  children: [
883
913
  /* @__PURE__ */ G(_, {}),
884
914
  " ",
@@ -895,7 +925,7 @@ var ei = ({ app: e, onOpen: t }) => {
895
925
  closeOnEscape: !0,
896
926
  closeOnItemClick: !0,
897
927
  withinPortal: !0,
898
- children: [/* @__PURE__ */ G(ri, {
928
+ children: [/* @__PURE__ */ G($r, {
899
929
  x: M.x,
900
930
  y: M.y
901
931
  }), /* @__PURE__ */ K(J.Dropdown, {
@@ -917,7 +947,7 @@ var ei = ({ app: e, onOpen: t }) => {
917
947
  })]
918
948
  })
919
949
  ] });
920
- }, ci = {
950
+ }, ii = {
921
951
  actions: {
922
952
  save: "Save",
923
953
  saveAs: "Save As",
@@ -1018,7 +1048,7 @@ var ei = ({ app: e, onOpen: t }) => {
1018
1048
  ariaLabel: "App launcher",
1019
1049
  selectedIcon: "Selected: {{icon}}"
1020
1050
  }
1021
- }, li = {
1051
+ }, ai = {
1022
1052
  names: {
1023
1053
  notepad: "Notepad",
1024
1054
  terminal: "Terminal",
@@ -1149,7 +1179,7 @@ var ei = ({ app: e, onOpen: t }) => {
1149
1179
  notAvailableMessage: "VS Code (code-server) cannot be used in browser mode.",
1150
1180
  dockerRequired: "Please run in Docker to use VS Code."
1151
1181
  }
1152
- }, ui = {
1182
+ }, oi = {
1153
1183
  sections: {
1154
1184
  wallpaper: {
1155
1185
  label: "Wallpaper",
@@ -1180,11 +1210,24 @@ var ei = ({ app: e, onOpen: t }) => {
1180
1210
  title: "Wallpaper",
1181
1211
  wallpaperType: "Wallpaper Type",
1182
1212
  staticImage: "Static Image",
1213
+ gradient: "Gradient",
1214
+ gradientType: "Gradient Type",
1215
+ gradientPreset: "Preset",
1216
+ gradientPosition: "Position {index}",
1217
+ addColor: "Add color",
1218
+ removeColor: "Remove",
1219
+ linear: "Linear",
1220
+ radial: "Radial",
1221
+ conic: "Conic",
1222
+ angle: "Angle",
1183
1223
  chooseFromImages: "Choose from Images",
1184
1224
  uploadFromDisk: "Upload from disk",
1185
1225
  resetToDefault: "Reset to default",
1186
1226
  orEnterUrl: "Or enter a URL",
1187
- wallpaperPreview: "Wallpaper preview"
1227
+ wallpaperPreview: "Wallpaper preview",
1228
+ gradientPreview: "Gradient preview",
1229
+ addNoise: "Add noise texture",
1230
+ noiseOpacity: "Noise opacity"
1188
1231
  },
1189
1232
  appearance: {
1190
1233
  title: "Appearance",
@@ -1224,7 +1267,7 @@ var ei = ({ app: e, onOpen: t }) => {
1224
1267
  spanish: "Español"
1225
1268
  },
1226
1269
  all: "All Settings"
1227
- }, di = {
1270
+ }, si = {
1228
1271
  window: {
1229
1272
  title: "Window",
1230
1273
  minimize: "Minimize",
@@ -1252,7 +1295,7 @@ var ei = ({ app: e, onOpen: t }) => {
1252
1295
  selectFolder: "Select folder",
1253
1296
  filename: "filename.md"
1254
1297
  }
1255
- }, fi = {
1298
+ }, ci = {
1256
1299
  window: {
1257
1300
  minimize: "Minimize",
1258
1301
  restore: "Restore",
@@ -1298,7 +1341,7 @@ var ei = ({ app: e, onOpen: t }) => {
1298
1341
  title: "Launcher",
1299
1342
  editLauncher: "Edit Launcher"
1300
1343
  }
1301
- }, pi = {
1344
+ }, li = {
1302
1345
  empty: {
1303
1346
  title: "There are no new notifications",
1304
1347
  message: "For now"
@@ -1308,7 +1351,7 @@ var ei = ({ app: e, onOpen: t }) => {
1308
1351
  hideNotifications: "Hide notifications",
1309
1352
  clock: "clock"
1310
1353
  }
1311
- }, mi = {
1354
+ }, ui = {
1312
1355
  toolbar: {
1313
1356
  formatting: "Text formatting",
1314
1357
  bold: "Bold",
@@ -1324,7 +1367,7 @@ var ei = ({ app: e, onOpen: t }) => {
1324
1367
  horizontalRule: "Horizontal rule"
1325
1368
  },
1326
1369
  untitled: "untitled.md"
1327
- }, hi = {
1370
+ }, di = {
1328
1371
  hero: {
1329
1372
  title: "Fullstack Developer & DevOps",
1330
1373
  downloadCV: "Download CV",
@@ -1337,7 +1380,7 @@ var ei = ({ app: e, onOpen: t }) => {
1337
1380
  experience: "Professional Experience",
1338
1381
  techStack: "Tech Stack",
1339
1382
  languages: "Languages"
1340
- }, gi = {
1383
+ }, fi = {
1341
1384
  title: "Edit Launcher",
1342
1385
  newFolder: "New Folder",
1343
1386
  predefined: "Predefined",
@@ -1350,7 +1393,7 @@ var ei = ({ app: e, onOpen: t }) => {
1350
1393
  addFolder: "Add folder",
1351
1394
  instructions: "Right-click an app in a folder to remove it. Click an available app to add it to the first custom folder.",
1352
1395
  canCreateNewFolder: "You can create new folders if needed."
1353
- }, _i = {
1396
+ }, pi = {
1354
1397
  actions: {
1355
1398
  save: "Guardar",
1356
1399
  saveAs: "Guardar como",
@@ -1451,7 +1494,7 @@ var ei = ({ app: e, onOpen: t }) => {
1451
1494
  ariaLabel: "Lanzador de aplicaciones",
1452
1495
  selectedIcon: "Seleccionado: {{icon}}"
1453
1496
  }
1454
- }, vi = {
1497
+ }, mi = {
1455
1498
  names: {
1456
1499
  notepad: "Bloc de notas",
1457
1500
  terminal: "Terminal",
@@ -1582,7 +1625,7 @@ var ei = ({ app: e, onOpen: t }) => {
1582
1625
  notAvailableMessage: "VS Code (code-server) no puede usarse en modo navegador.",
1583
1626
  dockerRequired: "Por favor, ejecuta la aplicación en Docker para usar VS Code."
1584
1627
  }
1585
- }, yi = {
1628
+ }, hi = {
1586
1629
  sections: {
1587
1630
  wallpaper: {
1588
1631
  label: "Fondo de pantalla",
@@ -1613,11 +1656,24 @@ var ei = ({ app: e, onOpen: t }) => {
1613
1656
  title: "Fondo de pantalla",
1614
1657
  wallpaperType: "Tipo de fondo",
1615
1658
  staticImage: "Imagen estática",
1659
+ gradient: "Degradado",
1660
+ gradientType: "Tipo de degradado",
1661
+ gradientPreset: "Preset",
1662
+ gradientPosition: "Posición {index}",
1663
+ addColor: "Añadir color",
1664
+ removeColor: "Quitar",
1665
+ linear: "Lineal",
1666
+ radial: "Radial",
1667
+ conic: "Cónico",
1668
+ angle: "Ángulo",
1616
1669
  chooseFromImages: "Elegir de imágenes",
1617
1670
  uploadFromDisk: "Subir desde disco",
1618
1671
  resetToDefault: "Restablecer por defecto",
1619
1672
  orEnterUrl: "O introduce una URL",
1620
- wallpaperPreview: "Vista previa del fondo"
1673
+ wallpaperPreview: "Vista previa del fondo",
1674
+ gradientPreview: "Vista previa del degradado",
1675
+ addNoise: "Añadir textura de ruido",
1676
+ noiseOpacity: "Opacidad del ruido"
1621
1677
  },
1622
1678
  appearance: {
1623
1679
  title: "Apariencia",
@@ -1657,7 +1713,7 @@ var ei = ({ app: e, onOpen: t }) => {
1657
1713
  spanish: "Español"
1658
1714
  },
1659
1715
  all: "Todos los ajustes"
1660
- }, bi = {
1716
+ }, gi = {
1661
1717
  window: {
1662
1718
  title: "Ventana",
1663
1719
  minimize: "Minimizar",
@@ -1685,7 +1741,7 @@ var ei = ({ app: e, onOpen: t }) => {
1685
1741
  selectFolder: "Seleccionar carpeta",
1686
1742
  filename: "nombre.md"
1687
1743
  }
1688
- }, xi = {
1744
+ }, _i = {
1689
1745
  window: {
1690
1746
  minimize: "Minimizar",
1691
1747
  restore: "Restaurar",
@@ -1731,7 +1787,7 @@ var ei = ({ app: e, onOpen: t }) => {
1731
1787
  title: "Launcher",
1732
1788
  editLauncher: "Editar Launcher"
1733
1789
  }
1734
- }, Si = {
1790
+ }, vi = {
1735
1791
  empty: {
1736
1792
  title: "No hay notificaciones nuevas",
1737
1793
  message: "Por ahora"
@@ -1741,7 +1797,7 @@ var ei = ({ app: e, onOpen: t }) => {
1741
1797
  hideNotifications: "Ocultar notificaciones",
1742
1798
  clock: "reloj"
1743
1799
  }
1744
- }, Ci = {
1800
+ }, yi = {
1745
1801
  toolbar: {
1746
1802
  formatting: "Formato de texto",
1747
1803
  bold: "Negrita",
@@ -1757,7 +1813,7 @@ var ei = ({ app: e, onOpen: t }) => {
1757
1813
  horizontalRule: "Línea horizontal"
1758
1814
  },
1759
1815
  untitled: "sin-titulo.md"
1760
- }, wi = {
1816
+ }, bi = {
1761
1817
  hero: {
1762
1818
  title: "Fullstack Developer & DevOps",
1763
1819
  downloadCV: "Descargar CV",
@@ -1770,7 +1826,7 @@ var ei = ({ app: e, onOpen: t }) => {
1770
1826
  experience: "Experiencia Profesional",
1771
1827
  techStack: "Stack Tecnológico",
1772
1828
  languages: "Idiomas"
1773
- }, Ti = {
1829
+ }, xi = {
1774
1830
  newFolder: "Nueva Carpeta",
1775
1831
  predefined: "Predefinida",
1776
1832
  rename: "Renombrar",
@@ -1782,34 +1838,34 @@ var ei = ({ app: e, onOpen: t }) => {
1782
1838
  addFolder: "Añadir carpeta",
1783
1839
  instructions: "Clic derecho en una app dentro de una carpeta para eliminarla. Clic en una app disponible para añadirla a la primera carpeta personalizada.",
1784
1840
  canCreateNewFolder: "Puedes crear una nueva carpeta si lo necesitas."
1785
- }, Ei = ["en", "es"];
1786
- dr.use(fr).use(ur).init({
1841
+ }, Si = ["en", "es"];
1842
+ cr.use(lr).use(sr).init({
1787
1843
  resources: {
1788
1844
  en: {
1789
- common: ci,
1790
- apps: li,
1791
- settings: ui,
1792
- window: di,
1793
- contextMenu: fi,
1794
- notifications: pi,
1795
- notes: mi,
1796
- welcome: hi,
1797
- menuedit: gi
1845
+ common: ii,
1846
+ apps: ai,
1847
+ settings: oi,
1848
+ window: si,
1849
+ contextMenu: ci,
1850
+ notifications: li,
1851
+ notes: ui,
1852
+ welcome: di,
1853
+ menuedit: fi
1798
1854
  },
1799
1855
  es: {
1800
- common: _i,
1801
- apps: vi,
1802
- settings: yi,
1803
- window: bi,
1804
- contextMenu: xi,
1805
- notifications: Si,
1806
- notes: Ci,
1807
- welcome: wi,
1808
- menuedit: Ti
1856
+ common: pi,
1857
+ apps: mi,
1858
+ settings: hi,
1859
+ window: gi,
1860
+ contextMenu: _i,
1861
+ notifications: vi,
1862
+ notes: yi,
1863
+ welcome: bi,
1864
+ menuedit: xi
1809
1865
  }
1810
1866
  },
1811
1867
  fallbackLng: "en",
1812
- supportedLngs: Ei,
1868
+ supportedLngs: Si,
1813
1869
  ns: [
1814
1870
  "common",
1815
1871
  "apps",
@@ -1829,7 +1885,7 @@ dr.use(fr).use(ur).init({
1829
1885
  caches: ["localStorage"]
1830
1886
  }
1831
1887
  });
1832
- var Di = dr, Oi = {
1888
+ var Ci = cr, wi = {
1833
1889
  root: "_root_17um1_1",
1834
1890
  windowButton: "_windowButton_17um1_15",
1835
1891
  systemTray: "_systemTray_17um1_44",
@@ -1837,64 +1893,64 @@ var Di = dr, Oi = {
1837
1893
  clock: "_clock_17um1_70",
1838
1894
  notifButton: "_notifButton_17um1_88",
1839
1895
  langButton: "_langButton_17um1_109"
1840
- }, ki = {
1896
+ }, Ti = {
1841
1897
  en: "English",
1842
1898
  es: "Español"
1843
- }, Ai = () => {
1844
- let { t: e, i18n: t } = Z("settings"), n = a((e) => e.language), r = a((e) => e.setLanguage), [i, o] = U(!1), s = z((e) => {
1845
- r(e), t.changeLanguage(e), localStorage.setItem("fde-desktop:language", e), o(!1);
1846
- }, [r, t]);
1899
+ }, Ei = () => {
1900
+ let { t, i18n: n } = Z("settings"), r = e((e) => e.language), i = e((e) => e.setLanguage), [a, o] = U(!1), s = z((e) => {
1901
+ i(e), n.changeLanguage(e), localStorage.setItem("fde-desktop:language", e), o(!1);
1902
+ }, [i, n]);
1847
1903
  return /* @__PURE__ */ K(Y, {
1848
- opened: i,
1904
+ opened: a,
1849
1905
  onChange: o,
1850
1906
  position: "top-end",
1851
1907
  shadow: "md",
1852
1908
  withArrow: !0,
1853
- children: [/* @__PURE__ */ G(Y.Target, { children: /* @__PURE__ */ G(er, {
1854
- className: Oi.langButton,
1909
+ children: [/* @__PURE__ */ G(Y.Target, { children: /* @__PURE__ */ G(Zn, {
1910
+ className: wi.langButton,
1855
1911
  onClick: () => o((e) => !e),
1856
- "aria-label": e("language.selectPlaceholder"),
1857
- "aria-expanded": i,
1912
+ "aria-label": t("language.selectPlaceholder"),
1913
+ "aria-expanded": a,
1858
1914
  children: /* @__PURE__ */ G(l, {
1859
- lang: n,
1915
+ lang: r,
1860
1916
  size: 16
1861
1917
  })
1862
- }) }), /* @__PURE__ */ G(Y.Dropdown, { children: /* @__PURE__ */ G(Qn, {
1918
+ }) }), /* @__PURE__ */ G(Y.Dropdown, { children: /* @__PURE__ */ G(Yn, {
1863
1919
  gap: "xs",
1864
- children: Ei.map((e) => /* @__PURE__ */ G(er, {
1920
+ children: Si.map((e) => /* @__PURE__ */ G(Zn, {
1865
1921
  onClick: () => s(e),
1866
- "aria-label": ki[e],
1867
- "aria-pressed": e === n,
1922
+ "aria-label": Ti[e],
1923
+ "aria-pressed": e === r,
1868
1924
  style: {
1869
1925
  padding: "8px 12px",
1870
1926
  borderRadius: 6,
1871
1927
  width: "100%",
1872
- background: e === n ? "var(--mantine-primary-color-light)" : "transparent",
1928
+ background: e === r ? "var(--mantine-primary-color-light)" : "transparent",
1873
1929
  cursor: "pointer"
1874
1930
  },
1875
- children: /* @__PURE__ */ K(Kn, {
1931
+ children: /* @__PURE__ */ K(Un, {
1876
1932
  gap: "sm",
1877
1933
  children: [/* @__PURE__ */ G(l, {
1878
1934
  lang: e,
1879
1935
  size: 20
1880
1936
  }), /* @__PURE__ */ G(X, {
1881
1937
  size: "sm",
1882
- fw: e === n ? 600 : 400,
1883
- children: ki[e]
1938
+ fw: e === r ? 600 : 400,
1939
+ children: Ti[e]
1884
1940
  })]
1885
1941
  })
1886
1942
  }, e))
1887
1943
  }) })]
1888
1944
  });
1889
- }, ji = ({ win: e, onClick: t, onContextMenu: n }) => {
1890
- let r = H(null), { register: i, unregister: a } = Fr();
1945
+ }, Di = ({ win: e, onClick: t, onContextMenu: n }) => {
1946
+ let r = H(null), { register: i, unregister: a } = Mr();
1891
1947
  return B(() => (r.current && i(e.id, r.current.getBoundingClientRect()), () => a(e.id)), [
1892
1948
  e.id,
1893
1949
  i,
1894
1950
  a
1895
1951
  ]), /* @__PURE__ */ K("button", {
1896
1952
  ref: r,
1897
- className: Oi.windowButton,
1953
+ className: wi.windowButton,
1898
1954
  "data-active": e.state === "minimized" ? "false" : "true",
1899
1955
  onClick: t,
1900
1956
  onContextMenu: n,
@@ -1911,8 +1967,8 @@ var Di = dr, Oi = {
1911
1967
  children: e.title
1912
1968
  })]
1913
1969
  });
1914
- }, Mi = ({ calendarSlot: e }) => {
1915
- let { t } = Z("notifications"), n = a((e) => e.theme.colors.taskbar), r = a((e) => e.theme.mode), i = a((e) => e.toggleTheme), o = a((e) => e.launcherIcon), s = P((e) => e.notifications), c = P((e) => e.removeNotification), l = P((e) => e.windows), u = P((e) => e.restoreWindow), d = P((e) => e.minimizeWindow), f = P((e) => e.focusWindow), p = P((e) => e.closeWindow), m = P((e) => e.maximizeWindow), h = Br(), [g, _] = U(!1), [v, y] = U(!1), { position: b, targetWindowId: x, windowMenuOpened: S, panelMenuOpened: C, launcherMenuOpened: w, openWindowMenu: T, openPanelMenu: E, openLauncherMenu: D, closeMenu: ee } = Ur(), O = x ? l.find((e) => e.id === x)?.state ?? null : null, k = H(0);
1970
+ }, Oi = ({ calendarSlot: t }) => {
1971
+ let { t: n } = Z("notifications"), r = e((e) => e.theme.colors.taskbar), i = e((e) => e.theme.mode), a = e((e) => e.toggleTheme), o = e((e) => e.launcherIcon), s = P((e) => e.notifications), c = P((e) => e.removeNotification), l = P((e) => e.windows), u = P((e) => e.restoreWindow), d = P((e) => e.minimizeWindow), f = P((e) => e.focusWindow), p = P((e) => e.closeWindow), m = P((e) => e.maximizeWindow), h = Ir(), [g, _] = U(!1), [v, y] = U(!1), { position: b, targetWindowId: x, windowMenuOpened: S, panelMenuOpened: C, launcherMenuOpened: w, openWindowMenu: T, openPanelMenu: E, openLauncherMenu: D, closeMenu: ee } = zr(), O = x ? l.find((e) => e.id === x)?.state ?? null : null, k = H(0);
1916
1972
  B(() => {
1917
1973
  s.length > k.current && setTimeout(() => y(!0), 0), k.current = s.length;
1918
1974
  }, [s.length]);
@@ -1920,23 +1976,23 @@ var Di = dr, Oi = {
1920
1976
  t === "minimized" ? (u(e), f(e)) : d(e);
1921
1977
  };
1922
1978
  return /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ K("div", {
1923
- className: Oi.root,
1924
- style: { background: n },
1979
+ className: wi.root,
1980
+ style: { background: r },
1925
1981
  role: "toolbar",
1926
1982
  "aria-label": "Taskbar",
1927
1983
  onContextMenu: E,
1928
1984
  children: [
1929
- /* @__PURE__ */ G(ni, {
1985
+ /* @__PURE__ */ G(Qr, {
1930
1986
  fcIcon: o,
1931
1987
  onContextMenu: D
1932
1988
  }),
1933
- te.map((e) => /* @__PURE__ */ G(ji, {
1989
+ te.map((e) => /* @__PURE__ */ G(Di, {
1934
1990
  win: e,
1935
1991
  onClick: () => A(e.id, e.state),
1936
1992
  onContextMenu: (t) => T(t, e.id)
1937
1993
  }, e.id)),
1938
1994
  /* @__PURE__ */ K("div", {
1939
- className: Oi.systemTray,
1995
+ className: wi.systemTray,
1940
1996
  "data-testid": "system-tray",
1941
1997
  children: [
1942
1998
  /* @__PURE__ */ K(Y, {
@@ -1947,9 +2003,9 @@ var Di = dr, Oi = {
1947
2003
  withArrow: !0,
1948
2004
  keepMounted: !0,
1949
2005
  children: [/* @__PURE__ */ G(Y.Target, { children: /* @__PURE__ */ G("button", {
1950
- className: Oi.notifButton,
2006
+ className: wi.notifButton,
1951
2007
  onClick: () => y((e) => !e),
1952
- "aria-label": t(v ? "taskbar.hideNotifications" : "taskbar.showNotifications"),
2008
+ "aria-label": n(v ? "taskbar.hideNotifications" : "taskbar.showNotifications"),
1953
2009
  children: /* @__PURE__ */ G(L, {
1954
2010
  fcIcon: v ? "FcCollapse" : "FcExpand",
1955
2011
  size: 18
@@ -1967,11 +2023,11 @@ var Di = dr, Oi = {
1967
2023
  gap: 8,
1968
2024
  minWidth: 300
1969
2025
  },
1970
- children: s.length === 0 ? /* @__PURE__ */ G(Xn, {
1971
- title: t("empty.title"),
2026
+ children: s.length === 0 ? /* @__PURE__ */ G(qn, {
2027
+ title: n("empty.title"),
1972
2028
  onClose: () => y(!1),
1973
- children: t("empty.message")
1974
- }) : s.map((e) => /* @__PURE__ */ G(Xn, {
2029
+ children: n("empty.message")
2030
+ }) : s.map((e) => /* @__PURE__ */ G(qn, {
1975
2031
  withBorder: !0,
1976
2032
  icon: e.fcIcon ? /* @__PURE__ */ G(L, {
1977
2033
  fcIcon: e.fcIcon,
@@ -1986,13 +2042,13 @@ var Di = dr, Oi = {
1986
2042
  })
1987
2043
  })]
1988
2044
  }),
1989
- /* @__PURE__ */ G(Ai, {}),
2045
+ /* @__PURE__ */ G(Ei, {}),
1990
2046
  /* @__PURE__ */ G("button", {
1991
- className: Oi.themeToggle,
1992
- onClick: i,
1993
- "aria-label": t(r === "dark" ? "theme.switchToLight" : "theme.switchToDark", { ns: "common" }),
1994
- title: t(r === "dark" ? "theme.switchToLight" : "theme.switchToDark", { ns: "common" }),
1995
- children: r === "dark" ? "☀️" : "🌙"
2047
+ className: wi.themeToggle,
2048
+ onClick: a,
2049
+ "aria-label": n(i === "dark" ? "theme.switchToLight" : "theme.switchToDark", { ns: "common" }),
2050
+ title: n(i === "dark" ? "theme.switchToLight" : "theme.switchToDark", { ns: "common" }),
2051
+ children: i === "dark" ? "☀️" : "🌙"
1996
2052
  }),
1997
2053
  /* @__PURE__ */ K(Y, {
1998
2054
  opened: g,
@@ -2001,20 +2057,20 @@ var Di = dr, Oi = {
2001
2057
  shadow: "md",
2002
2058
  withArrow: !0,
2003
2059
  children: [/* @__PURE__ */ G(Y.Target, { children: /* @__PURE__ */ G("button", {
2004
- className: Oi.clock,
2060
+ className: wi.clock,
2005
2061
  onClick: () => _((e) => !e),
2006
- "aria-label": t("taskbar.clock"),
2062
+ "aria-label": n("taskbar.clock"),
2007
2063
  "aria-expanded": g,
2008
2064
  children: /* @__PURE__ */ G(X, {
2009
2065
  size: "xs",
2010
2066
  children: h
2011
2067
  })
2012
- }) }), /* @__PURE__ */ G(Y.Dropdown, { children: e })]
2068
+ }) }), /* @__PURE__ */ G(Y.Dropdown, { children: t })]
2013
2069
  })
2014
2070
  ]
2015
2071
  })
2016
2072
  ]
2017
- }), /* @__PURE__ */ G(si, {
2073
+ }), /* @__PURE__ */ G(ri, {
2018
2074
  windowMenuOpened: S,
2019
2075
  panelMenuOpened: C,
2020
2076
  launcherMenuOpened: w,
@@ -2027,21 +2083,21 @@ var Di = dr, Oi = {
2027
2083
  onRestoreWindow: u,
2028
2084
  onClose: ee
2029
2085
  })] });
2030
- }, Ni = ({ message: e = "Loading...", size: t = "lg" }) => /* @__PURE__ */ G(Gn, {
2086
+ }, ki = ({ message: e = "Loading...", size: t = "lg" }) => /* @__PURE__ */ G(Hn, {
2031
2087
  style: {
2032
2088
  width: "100%",
2033
2089
  height: "100%"
2034
2090
  },
2035
- children: /* @__PURE__ */ K(Qn, {
2091
+ children: /* @__PURE__ */ K(Yn, {
2036
2092
  align: "center",
2037
2093
  gap: "md",
2038
- children: [/* @__PURE__ */ G(qn, { size: t }), /* @__PURE__ */ G(X, {
2094
+ children: [/* @__PURE__ */ G(Wn, { size: t }), /* @__PURE__ */ G(X, {
2039
2095
  c: "dimmed",
2040
2096
  children: e
2041
2097
  })]
2042
2098
  })
2043
- }), Pi = ({ progress: e, windowIcon: t }) => {
2044
- let n = nr(), r = () => {
2099
+ }), Ai = ({ progress: e, windowIcon: t }) => {
2100
+ let n = $n(), r = () => {
2045
2101
  switch (e.state) {
2046
2102
  case "fetching": return "Fetching app info...";
2047
2103
  case "compiling": return "Compiling app...";
@@ -2051,13 +2107,13 @@ var Di = dr, Oi = {
2051
2107
  default: return "Loading...";
2052
2108
  }
2053
2109
  }, i = () => e.state === "error" ? "red" : e.state === "ready" ? "green" : n.primaryColor;
2054
- return /* @__PURE__ */ G(Gn, {
2110
+ return /* @__PURE__ */ G(Hn, {
2055
2111
  style: {
2056
2112
  width: "100%",
2057
2113
  height: "100%"
2058
2114
  },
2059
2115
  "data-testid": "custom-app-loading",
2060
- children: /* @__PURE__ */ K(Qn, {
2116
+ children: /* @__PURE__ */ K(Yn, {
2061
2117
  align: "center",
2062
2118
  gap: "lg",
2063
2119
  p: "xl",
@@ -2071,7 +2127,7 @@ var Di = dr, Oi = {
2071
2127
  fw: 700,
2072
2128
  children: e.appName || "App"
2073
2129
  }),
2074
- /* @__PURE__ */ G(Zn, {
2130
+ /* @__PURE__ */ G(Jn, {
2075
2131
  value: e.progress,
2076
2132
  size: "lg",
2077
2133
  radius: "xl",
@@ -2098,12 +2154,12 @@ var Di = dr, Oi = {
2098
2154
  ]
2099
2155
  })
2100
2156
  });
2101
- }, Fi = ({ appId: e }) => /* @__PURE__ */ G(Gn, {
2157
+ }, ji = ({ appId: e }) => /* @__PURE__ */ G(Hn, {
2102
2158
  style: {
2103
2159
  width: "100%",
2104
2160
  height: "100%"
2105
2161
  },
2106
- children: /* @__PURE__ */ K(Qn, {
2162
+ children: /* @__PURE__ */ K(Yn, {
2107
2163
  align: "center",
2108
2164
  gap: "lg",
2109
2165
  p: "xl",
@@ -2111,7 +2167,7 @@ var Di = dr, Oi = {
2111
2167
  children: [
2112
2168
  /* @__PURE__ */ G(X, {
2113
2169
  size: "3rem",
2114
- children: /* @__PURE__ */ G(hr, {})
2170
+ children: /* @__PURE__ */ G(fr, {})
2115
2171
  }),
2116
2172
  /* @__PURE__ */ G(X, {
2117
2173
  size: "lg",
@@ -2136,7 +2192,7 @@ var Di = dr, Oi = {
2136
2192
  },
2137
2193
  children: "Open Welcome App"
2138
2194
  }),
2139
- /* @__PURE__ */ G(Wn, {
2195
+ /* @__PURE__ */ G(Vn, {
2140
2196
  href: "https://github.com/frannunpal/frannunpal.github.io/issues",
2141
2197
  target: "_blank",
2142
2198
  rel: "noopener noreferrer",
@@ -2145,12 +2201,12 @@ var Di = dr, Oi = {
2145
2201
  })
2146
2202
  ]
2147
2203
  })
2148
- }), Ii = ({ appId: e }) => /* @__PURE__ */ G(Gn, {
2204
+ }), Mi = ({ appId: e }) => /* @__PURE__ */ G(Hn, {
2149
2205
  style: {
2150
2206
  width: "100%",
2151
2207
  height: "100%"
2152
2208
  },
2153
- children: /* @__PURE__ */ K(Qn, {
2209
+ children: /* @__PURE__ */ K(Yn, {
2154
2210
  align: "center",
2155
2211
  gap: "lg",
2156
2212
  p: "xl",
@@ -2158,7 +2214,7 @@ var Di = dr, Oi = {
2158
2214
  children: [
2159
2215
  /* @__PURE__ */ G(X, {
2160
2216
  size: "3rem",
2161
- children: /* @__PURE__ */ G(gr, {})
2217
+ children: /* @__PURE__ */ G(pr, {})
2162
2218
  }),
2163
2219
  /* @__PURE__ */ G(X, {
2164
2220
  size: "lg",
@@ -2184,15 +2240,15 @@ var Di = dr, Oi = {
2184
2240
  })
2185
2241
  ]
2186
2242
  })
2187
- }), Li = /* @__PURE__ */ new Set(), $ = null, Ri = null, zi = null, Bi = !1, Vi = 0, Hi = null, Ui = !1, Wi = !1;
2188
- function Gi() {
2189
- Li.clear(), $ = null, Ri = null, zi = null, Bi = !1, Vi = 0, Hi = null, Ui = !1, Wi = !1;
2243
+ }), Ni = /* @__PURE__ */ new Set(), $ = null, Pi = null, Fi = null, Ii = !1, Li = 0, Ri = null, zi = !1, Bi = !1;
2244
+ function Vi() {
2245
+ Ni.clear(), $ = null, Pi = null, Fi = null, Ii = !1, Li = 0, Ri = null, zi = !1, Bi = !1;
2190
2246
  }
2191
- var Ki = 1e4, qi = 2e3, Ji = 5, Yi = 0;
2192
- function Xi() {
2247
+ var Hi = 1e4, Ui = 2e3, Wi = 5, Gi = 0;
2248
+ function Ki() {
2193
2249
  return `${window.location.protocol === "https:" ? "wss:" : "ws:"}//${window.location.host}/api/hmr`;
2194
2250
  }
2195
- async function Zi() {
2251
+ async function qi() {
2196
2252
  try {
2197
2253
  let e = await fetch("/api/hmr", { method: "HEAD" });
2198
2254
  return e.status === 426 || e.status === 400;
@@ -2200,45 +2256,45 @@ async function Zi() {
2200
2256
  return !1;
2201
2257
  }
2202
2258
  }
2203
- function Qi() {
2204
- Ri &&= (clearTimeout(Ri), null), zi &&= (clearTimeout(zi), null), Bi = !1;
2259
+ function Ji() {
2260
+ Pi &&= (clearTimeout(Pi), null), Fi &&= (clearTimeout(Fi), null), Ii = !1;
2205
2261
  }
2206
- function $i(e) {
2207
- typeof BroadcastChannel > "u" || (Hi = new BroadcastChannel("fde-custom-apps"), Hi.onmessage = (t) => {
2262
+ function Yi(e) {
2263
+ typeof BroadcastChannel > "u" || (Ri = new BroadcastChannel("fde-custom-apps"), Ri.onmessage = (t) => {
2208
2264
  let n = t.data;
2209
2265
  n._fromBroadcast = !0, e(n);
2210
2266
  });
2211
2267
  }
2212
- function ea(e) {
2213
- Hi?.postMessage(e);
2268
+ function Xi(e) {
2269
+ Ri?.postMessage(e);
2214
2270
  }
2215
- async function ta() {
2271
+ async function Zi() {
2216
2272
  P.getState().isFsReady || await new Promise((e) => {
2217
2273
  let t = P.subscribe((n) => {
2218
2274
  n.isFsReady && (t(), e());
2219
2275
  });
2220
2276
  });
2221
2277
  try {
2222
- let e = F.getState().registeredApps, { added: t, removed: n } = await Re(e);
2278
+ let e = F.getState().registeredApps, { added: t, removed: n } = await Ye(e);
2223
2279
  for (let e of t) F.getState().registerApp(e), P.getState().handleCustomAppRegistered?.(e);
2224
2280
  for (let e of n) F.getState().unregisterApp(e), P.getState().handleCustomAppUnregistered?.(e);
2225
2281
  } catch (e) {
2226
2282
  console.warn("[HMR] Failed to sync apps on connect:", e);
2227
2283
  }
2228
2284
  }
2229
- function na(e, t, n) {
2230
- if (Bi || $ && $.readyState === WebSocket.OPEN) return $;
2231
- let r = Xi(), i = ++Vi;
2232
- return Bi = !0, $ = new WebSocket(r), zi = setTimeout(() => {
2233
- $ && $.readyState !== WebSocket.OPEN && i === Vi && (console.warn("[HMR] Initial connection timeout"), Yi++, Yi >= Ji ? (console.warn("[HMR] Max initial retries reached, marking server as offline"), t()) : ($?.close(), Ri = setTimeout(() => {
2234
- na(e, t, n);
2235
- }, qi)));
2236
- }, Ki), $.onopen = () => {
2237
- if (i !== Vi) {
2285
+ function Qi(e, t, n) {
2286
+ if (Ii || $ && $.readyState === WebSocket.OPEN) return $;
2287
+ let r = Ki(), i = ++Li;
2288
+ return Ii = !0, $ = new WebSocket(r), Fi = setTimeout(() => {
2289
+ $ && $.readyState !== WebSocket.OPEN && i === Li && (console.warn("[HMR] Initial connection timeout"), Gi++, Gi >= Wi ? (console.warn("[HMR] Max initial retries reached, marking server as offline"), t()) : ($?.close(), Pi = setTimeout(() => {
2290
+ Qi(e, t, n);
2291
+ }, Ui)));
2292
+ }, Hi), $.onopen = () => {
2293
+ if (i !== Li) {
2238
2294
  $?.close();
2239
2295
  return;
2240
2296
  }
2241
- console.log("[HMR] Connected to server"), Yi = 0, Bi = !1, F.getState().resetHmrRetry(), F.getState().setHmrConnected(!0), F.getState().setHmrError(null), F.getState().devServerOffline && n(), F.getState().setDevServerOffline(!1), Qi(), ta().catch((e) => {
2297
+ console.log("[HMR] Connected to server"), Gi = 0, Ii = !1, F.getState().resetHmrRetry(), F.getState().setHmrConnected(!0), F.getState().setHmrError(null), F.getState().devServerOffline && n(), F.getState().setDevServerOffline(!1), Ji(), Zi().catch((e) => {
2242
2298
  console.warn("[HMR] Failed to sync apps:", e);
2243
2299
  });
2244
2300
  }, $.onmessage = (t) => {
@@ -2249,18 +2305,18 @@ function na(e, t, n) {
2249
2305
  console.error("[HMR] Failed to parse message:", e);
2250
2306
  }
2251
2307
  }, $.onclose = (r) => {
2252
- i === Vi && (console.log(`[HMR] Disconnected from server (code: ${r.code})`), $ = null, Bi = !1, F.getState().setHmrConnected(!1), Qi(), Ri = setTimeout(() => {
2253
- na(e, t, n);
2254
- }, qi));
2308
+ i === Li && (console.log(`[HMR] Disconnected from server (code: ${r.code})`), $ = null, Ii = !1, F.getState().setHmrConnected(!1), Ji(), Pi = setTimeout(() => {
2309
+ Qi(e, t, n);
2310
+ }, Ui));
2255
2311
  }, $.onerror = (e) => {
2256
- i === Vi && (console.error("[HMR] WebSocket error:", e), F.getState().setHmrError("Connection failed"));
2312
+ i === Li && (console.error("[HMR] WebSocket error:", e), F.getState().setHmrError("Connection failed"));
2257
2313
  }, $;
2258
2314
  }
2259
- function ra() {
2260
- Qi(), $ &&= ($.close(), null), Hi &&= (Hi.close(), null);
2315
+ function $i() {
2316
+ Ji(), $ &&= ($.close(), null), Ri &&= (Ri.close(), null);
2261
2317
  }
2262
- function ia(e) {
2263
- let t = H(e), { notify: n } = an();
2318
+ function ea(e) {
2319
+ let t = H(e), { notify: n } = gn();
2264
2320
  B(() => {
2265
2321
  t.current = e;
2266
2322
  }, [e]);
@@ -2274,7 +2330,7 @@ function ia(e) {
2274
2330
  console.warn(`[HMR] Error unmounting ${t}:`, e);
2275
2331
  }
2276
2332
  let r = document.getElementById(`app-container-${t}`);
2277
- r && (r.innerHTML = ""), F.getState().setAppLoading(t), Li.forEach((e) => {
2333
+ r && (r.innerHTML = ""), F.getState().setAppLoading(t), Ni.forEach((e) => {
2278
2334
  try {
2279
2335
  e.onReload(t);
2280
2336
  } catch (e) {
@@ -2287,12 +2343,12 @@ function ia(e) {
2287
2343
  if (e.manifest) {
2288
2344
  console.log(`[HMR] App registered: ${e.manifest.id}`);
2289
2345
  let t = !!F.getState().registeredApps[e.manifest.id];
2290
- Ve(), We(e.manifest), F.getState().registerApp(e.manifest), P.getState().handleCustomAppRegistered?.(e.manifest), t || n("New App Available", `${e.manifest.name} is now available`, { fcIcon: "FcApproval" }), e._fromBroadcast || ea(e);
2346
+ Qe(), tt(e.manifest), F.getState().registerApp(e.manifest), P.getState().handleCustomAppRegistered?.(e.manifest), t || n("New App Available", `${e.manifest.name} is now available`, { fcIcon: "FcApproval" }), e._fromBroadcast || Xi(e);
2291
2347
  }
2292
2348
  break;
2293
2349
  case "app-unregistered": {
2294
2350
  let t = e.appId;
2295
- console.log(`[HMR] App unregistered: ${t}`), Ve(), Fe(t), F.getState().unregisterApp(t), P.getState().handleCustomAppUnregistered?.(t), e._fromBroadcast || ea(e);
2351
+ console.log(`[HMR] App unregistered: ${t}`), Qe(), Ke(t), F.getState().unregisterApp(t), P.getState().handleCustomAppUnregistered?.(t), e._fromBroadcast || Xi(e);
2296
2352
  break;
2297
2353
  }
2298
2354
  case "app-error":
@@ -2305,22 +2361,22 @@ function ia(e) {
2305
2361
  n("HMR Reconnected", "Hot module replacement is now active", { fcIcon: "FcApproval" });
2306
2362
  }, [n]);
2307
2363
  B(() => {
2308
- if (Pe() === "browser") {
2364
+ if (Ge() === "browser") {
2309
2365
  console.log("[HMR] Skipping: not running in Docker");
2310
2366
  return;
2311
2367
  }
2312
- if (!Ne() || !Ye()) return;
2368
+ if (!We() || !ot()) return;
2313
2369
  let e = !1;
2314
- return Li.add(t.current), !Wi && !Ui && (Ui = !0, Zi().then((t) => {
2315
- if (Ui = !1, e || !t) {
2370
+ return Ni.add(t.current), !Bi && !zi && (zi = !0, qi().then((t) => {
2371
+ if (zi = !1, e || !t) {
2316
2372
  t || console.warn("[HMR] HMR endpoint not available, skipping WebSocket connection");
2317
2373
  return;
2318
2374
  }
2319
- Wi = !0, $i(r), na(r, i, a);
2375
+ Bi = !0, Yi(r), Qi(r, i, a);
2320
2376
  }).catch(() => {
2321
- Ui = !1;
2377
+ zi = !1;
2322
2378
  })), () => {
2323
- e = !0, Li.delete(t.current), Li.size === 0 && (Wi = !1, ra());
2379
+ e = !0, Ni.delete(t.current), Ni.size === 0 && (Bi = !1, $i());
2324
2380
  };
2325
2381
  }, [
2326
2382
  r,
@@ -2328,9 +2384,9 @@ function ia(e) {
2328
2384
  a
2329
2385
  ]);
2330
2386
  }
2331
- function aa() {
2332
- let { notify: e } = an();
2333
- ia({
2387
+ function ta() {
2388
+ let { notify: e } = gn();
2389
+ ea({
2334
2390
  onReload: () => {},
2335
2391
  onRegistered: z((t) => {
2336
2392
  P.getState().handleCustomAppRegistered?.(t), e("New App Available", `${t.name} is now available`, { fcIcon: "FcApproval" });
@@ -2342,7 +2398,7 @@ function aa() {
2342
2398
  }
2343
2399
  //#endregion
2344
2400
  //#region src/utils/waitForContainer.ts
2345
- function oa(e, t = 5e3) {
2401
+ function na(e, t = 5e3) {
2346
2402
  return new Promise((n, r) => {
2347
2403
  let i = Date.now(), a = null, o = null, s = () => {
2348
2404
  o &&= (clearInterval(o), null), a &&= (clearTimeout(a), null);
@@ -2364,15 +2420,15 @@ function oa(e, t = 5e3) {
2364
2420
  }
2365
2421
  //#endregion
2366
2422
  //#region src/components/Shared/CustomAppLoader/CustomAppLoader.tsx
2367
- var sa = {
2423
+ var ra = {
2368
2424
  state: "idle",
2369
2425
  progress: 0,
2370
2426
  appName: ""
2371
- }, ca = 1e4, la = ({ appId: e, windowIcon: t, notifyReady: n }) => {
2427
+ }, ia = 1e4, aa = ({ appId: e, windowIcon: t, notifyReady: n }) => {
2372
2428
  let [r, i] = U({
2373
- ...sa,
2429
+ ...ra,
2374
2430
  appName: e
2375
- }), [a, o] = U(!1), [s, c] = U(null), [l, u] = U(!1), [d, f] = U(0), p = H(null), m = H(!0), h = H(!1), g = H(null), _ = H(null), v = F((e) => e.devServerOffline), y = F((t) => t.mountedApps[e]), b = F((e) => e.setAppLoading), x = F((e) => e.setAppLoaded), S = F((e) => e.setAppError), C = F((e) => e.clearApp), { notify: w } = an(), T = Ne(), E = z(() => {
2431
+ }), [a, o] = U(!1), [s, c] = U(null), [l, u] = U(!1), [d, f] = U(0), p = H(null), m = H(!0), h = H(!1), g = H(null), _ = H(null), v = F((e) => e.devServerOffline), y = F((t) => t.mountedApps[e]), b = F((e) => e.setAppLoading), x = F((e) => e.setAppLoaded), S = F((e) => e.setAppError), C = F((e) => e.clearApp), { notify: w } = gn(), T = We(), E = z(() => {
2376
2432
  _.current &&= (clearTimeout(_.current), null);
2377
2433
  }, []), D = z(() => {
2378
2434
  g.current &&= (clearInterval(g.current), null);
@@ -2389,8 +2445,8 @@ var sa = {
2389
2445
  ...e,
2390
2446
  state: "fetching",
2391
2447
  progress: 10
2392
- })), b(e), c(null), Ve();
2393
- let t = await De(!0);
2448
+ })), b(e), c(null), Qe();
2449
+ let t = await Re(!0);
2394
2450
  if (!t) throw Error("Apps manifest not found. Make sure apps are built.");
2395
2451
  let r = t.apps.find((t) => t.id === e);
2396
2452
  if (!r) throw Error(`App '${e}' not found in manifest. Available apps: ${t.apps.map((e) => e.id).join(", ")}`);
@@ -2410,7 +2466,7 @@ var sa = {
2410
2466
  }));
2411
2467
  }, 100);
2412
2468
  try {
2413
- await oa(`app-container-${e}`, 5e3);
2469
+ await na(`app-container-${e}`, 5e3);
2414
2470
  } catch {
2415
2471
  throw Error(`Container #app-container-${e} not found`);
2416
2472
  }
@@ -2431,8 +2487,8 @@ var sa = {
2431
2487
  return;
2432
2488
  }
2433
2489
  _.current = setTimeout(() => {
2434
- console.warn(`[${e}] App did not call appReady() within ${ca}ms`), w("Warning", `App ${e} took too long to initialize`, { fcIcon: "FcInfo" }), u(!0), F.getState().setAppReady(e), t();
2435
- }, ca), n();
2490
+ console.warn(`[${e}] App did not call appReady() within ${ia}ms`), w("Warning", `App ${e} took too long to initialize`, { fcIcon: "FcInfo" }), u(!0), F.getState().setAppReady(e), t();
2491
+ }, ia), n();
2436
2492
  }), i((e) => ({
2437
2493
  ...e,
2438
2494
  state: "ready",
@@ -2462,9 +2518,9 @@ var sa = {
2462
2518
  D,
2463
2519
  w
2464
2520
  ]);
2465
- if (ia({ onReload: z((t) => {
2521
+ if (ea({ onReload: z((t) => {
2466
2522
  t === e && (h.current = !1, ee(), C(e), o(!1), i({
2467
- ...sa,
2523
+ ...ra,
2468
2524
  appName: e
2469
2525
  }), c(null), f((e) => e + 1));
2470
2526
  }, [
@@ -2480,17 +2536,17 @@ var sa = {
2480
2536
  d,
2481
2537
  D,
2482
2538
  E
2483
- ]), !T) return /* @__PURE__ */ G(Ii, { appId: e });
2484
- if (v && !y?.isLoaded && !s) return /* @__PURE__ */ G(Fi, { appId: e });
2539
+ ]), !T) return /* @__PURE__ */ G(Mi, { appId: e });
2540
+ if (v && !y?.isLoaded && !s) return /* @__PURE__ */ G(ji, { appId: e });
2485
2541
  let k = r.state === "error", te = a && y?.isReady && !l, A = r.state === "ready" && a && l, j = A && !y?.instance;
2486
- return j ? /* @__PURE__ */ G(Pi, {
2542
+ return j ? /* @__PURE__ */ G(Ai, {
2487
2543
  progress: {
2488
2544
  ...r,
2489
2545
  state: "error",
2490
2546
  error: `App '${e}' loaded but did not mount. Check the browser console for errors.`
2491
2547
  },
2492
2548
  windowIcon: t
2493
- }) : /* @__PURE__ */ K(W, { children: [(k || j || !(te || A)) && /* @__PURE__ */ G(Pi, {
2549
+ }) : /* @__PURE__ */ K(W, { children: [(k || j || !(te || A)) && /* @__PURE__ */ G(Ai, {
2494
2550
  progress: r,
2495
2551
  windowIcon: t
2496
2552
  }), /* @__PURE__ */ G("div", {
@@ -2508,66 +2564,66 @@ var sa = {
2508
2564
  fontFamily: "sans-serif"
2509
2565
  }
2510
2566
  })] });
2511
- }, ua = Rn({
2567
+ }, oa = Fn({
2512
2568
  notifyReady: () => {},
2513
2569
  getContentData: () => void 0
2514
- }), da = () => Vn(ua), fa = ({ children: e }) => {
2570
+ }), sa = () => Rn(oa), ca = ({ children: e }) => {
2515
2571
  let t = H(void 0), n = z((e) => {
2516
2572
  e !== void 0 && (t.current = e);
2517
2573
  }, []), r = z(() => t.current, []);
2518
- return /* @__PURE__ */ G(ua.Provider, {
2574
+ return /* @__PURE__ */ G(oa.Provider, {
2519
2575
  value: {
2520
2576
  notifyReady: n,
2521
2577
  getContentData: r
2522
2578
  },
2523
2579
  children: e
2524
2580
  });
2525
- }, pa = {
2581
+ }, la = {
2526
2582
  root: "_root_1vtes_1",
2527
2583
  titleBar: "_titleBar_1vtes_12",
2528
2584
  windowButtons: "_windowButtons_1vtes_31",
2529
2585
  title: "_title_1vtes_12",
2530
2586
  content: "_content_1vtes_41",
2531
2587
  focusOverlay: "_focusOverlay_1vtes_48"
2532
- }, ma = ({ win: e, isFocused: t, focusWindow: n }) => {
2533
- let { notifyReady: r, getContentData: i } = da(), a = F((t) => e.content in t.registeredApps), o = V(() => Ce(e.content), [e.content]), s = V(() => v(e.content), [e.content]), c = V(() => Se(e.content), [e.content]), l = V(() => y(e.content), [e.content]), u = V(() => k(e.content), [e.content]), d = P((e) => e.closeWindow), f = i() ?? e.contentData, p = {
2588
+ }, ua = ({ win: e, isFocused: t, focusWindow: n }) => {
2589
+ let { notifyReady: r, getContentData: i } = sa(), a = F((t) => e.content in t.registeredApps), o = V(() => Pe(e.content), [e.content]), s = V(() => O(e.content), [e.content]), c = V(() => Ne(e.content), [e.content]), l = V(() => k(e.content), [e.content]), u = V(() => ce(e.content), [e.content]), d = P((e) => e.closeWindow), f = i() ?? e.contentData, p = {
2534
2590
  ...e,
2535
2591
  contentData: f
2536
2592
  }, m = s ? s(p) : void 0;
2537
- if (a) return /* @__PURE__ */ G(la, {
2593
+ if (a) return /* @__PURE__ */ G(aa, {
2538
2594
  appId: e.content,
2539
2595
  windowIcon: e.icon,
2540
2596
  notifyReady: r
2541
2597
  });
2542
- let h = l ? /* @__PURE__ */ G(Ln, {
2543
- fallback: /* @__PURE__ */ G(Ni, { message: u ? `Loading ${u}...` : void 0 }),
2544
- children: zn(o, {
2598
+ let h = l ? /* @__PURE__ */ G(Pn, {
2599
+ fallback: /* @__PURE__ */ G(ki, { message: u ? `Loading ${u}...` : void 0 }),
2600
+ children: In(o, {
2545
2601
  window: e,
2546
2602
  notifyReady: r
2547
2603
  })
2548
- }) : zn(o, {
2604
+ }) : In(o, {
2549
2605
  window: e,
2550
2606
  notifyReady: r
2551
2607
  });
2552
- return /* @__PURE__ */ K(W, { children: [c ? /* @__PURE__ */ G(Ln, {
2608
+ return /* @__PURE__ */ K(W, { children: [c ? /* @__PURE__ */ G(Pn, {
2553
2609
  fallback: null,
2554
- children: zn(c, {
2610
+ children: In(c, {
2555
2611
  windowId: e.id,
2556
2612
  contentData: f,
2557
2613
  onExit: () => d(e.id)
2558
2614
  })
2559
- }) : m && m.length > 0 ? /* @__PURE__ */ G(rn, { elements: m }) : null, /* @__PURE__ */ K("div", {
2560
- className: pa.content,
2615
+ }) : m && m.length > 0 ? /* @__PURE__ */ G(hn, { elements: m }) : null, /* @__PURE__ */ K("div", {
2616
+ className: la.content,
2561
2617
  children: [!t && /* @__PURE__ */ G("div", {
2562
2618
  "data-testid": "focus-overlay",
2563
- className: pa.focusOverlay,
2619
+ className: la.focusOverlay,
2564
2620
  onMouseDown: (t) => {
2565
2621
  t.stopPropagation(), n(e.id);
2566
2622
  }
2567
2623
  }), h]
2568
2624
  })] });
2569
- }, ha = ({ window: e }) => {
2570
- let { t } = Z("window"), n = P((t) => t.windows.find((t) => t.id === e.id)) ?? e, r = qr(n.content), { focusWindow: i, closeWindow: o, minimizeWindow: s, maximizeWindow: c, restoreWindow: l, moveWindow: u, resizeWindow: d } = P(mr((e) => ({
2625
+ }, da = ({ window: t }) => {
2626
+ let { t: n } = Z("window"), r = P((e) => e.windows.find((e) => e.id === t.id)) ?? t, i = Ur(r.content), { focusWindow: a, closeWindow: o, minimizeWindow: s, maximizeWindow: c, restoreWindow: l, moveWindow: u, resizeWindow: d } = P(dr((e) => ({
2571
2627
  focusWindow: e.focusWindow,
2572
2628
  closeWindow: e.closeWindow,
2573
2629
  minimizeWindow: e.minimizeWindow,
@@ -2575,20 +2631,20 @@ var sa = {
2575
2631
  restoreWindow: e.restoreWindow,
2576
2632
  moveWindow: e.moveWindow,
2577
2633
  resizeWindow: e.resizeWindow
2578
- }))), f = a((e) => e.theme.colors.window), p = Zt((e) => e.isOpen), m = Zt((e) => e.windowId), h = Zt((e) => e.onSave), g = Zt((e) => e.onDiscard), _ = Zt((e) => e.closeModal), { windowVariants: v, easeIn: y } = Wr(), b = P((e) => {
2579
- let t = e.windows.find((e) => e.id === n.id);
2634
+ }))), f = e((e) => e.theme.colors.window), p = ln((e) => e.isOpen), m = ln((e) => e.windowId), h = ln((e) => e.onSave), g = ln((e) => e.onDiscard), _ = ln((e) => e.closeModal), { windowVariants: v, easeIn: y } = Br(), b = P((e) => {
2635
+ let t = e.windows.find((e) => e.id === r.id);
2580
2636
  if (!t) return !0;
2581
- let r = t.alwaysOnTop ?? !1, i = e.windows.filter((e) => e.isOpen && e.state !== "minimized" && (e.alwaysOnTop ?? !1) === r);
2637
+ let n = t.alwaysOnTop ?? !1, i = e.windows.filter((e) => e.isOpen && e.state !== "minimized" && (e.alwaysOnTop ?? !1) === n);
2582
2638
  return i.length === 0 ? !0 : Math.max(...i.map((e) => e.zIndex)) === t.zIndex;
2583
- }), { getRect: x } = Fr(), S = lr(), C = H(n.state);
2639
+ }), { getRect: x } = Mr(), S = or(), C = H(r.state);
2584
2640
  B(() => {
2585
2641
  S.start("visible");
2586
2642
  }, [S]), B(() => {
2587
- if (C.current === "minimized" && n.state !== "minimized") {
2588
- let e = x(n.id);
2643
+ if (C.current === "minimized" && r.state !== "minimized") {
2644
+ let e = x(r.id);
2589
2645
  if (e) {
2590
- let t = n.x + n.width / 2, r = n.y + n.height / 2, i = e.left + e.width / 2, a = e.top + e.height / 2;
2591
- S.start(xe(i - t, a - r));
2646
+ let t = r.x + r.width / 2, n = r.y + r.height / 2, i = e.left + e.width / 2, a = e.top + e.height / 2;
2647
+ S.start(Me(i - t, a - n));
2592
2648
  } else S.set({
2593
2649
  x: 0,
2594
2650
  y: 0,
@@ -2596,170 +2652,170 @@ var sa = {
2596
2652
  opacity: 1
2597
2653
  }), S.start("visible");
2598
2654
  }
2599
- C.current = n.state;
2655
+ C.current = r.state;
2600
2656
  }, [
2601
- n.state,
2657
+ r.state,
2602
2658
  S,
2603
2659
  x,
2604
- n.id,
2605
- n.x,
2606
- n.y,
2607
- n.width,
2608
- n.height
2660
+ r.id,
2661
+ r.x,
2662
+ r.y,
2663
+ r.width,
2664
+ r.height
2609
2665
  ]);
2610
2666
  let w = z((e) => {
2611
- e.preventDefault(), it.find((e) => e.id === n.content)?.hasContextMenu || e.stopPropagation();
2612
- }, [n.content]);
2613
- if (!n.isOpen) return null;
2614
- let T = n.state === "minimized", E = n.state === "maximized", D = n.canMaximize !== !1, ee = p && m === n.id, O = async () => {
2615
- let e = x(n.id);
2667
+ e.preventDefault(), ht.find((e) => e.id === r.content)?.hasContextMenu || e.stopPropagation();
2668
+ }, [r.content]);
2669
+ if (!r.isOpen) return null;
2670
+ let T = r.state === "minimized", E = r.state === "maximized", D = r.canMaximize !== !1, ee = p && m === r.id, O = async () => {
2671
+ let e = x(r.id);
2616
2672
  if (e) {
2617
- let t = n.x + n.width / 2, r = n.y + n.height / 2, i = e.left + e.width / 2, a = e.top + e.height / 2;
2618
- await S.start(pe(i - t, a - r));
2673
+ let t = r.x + r.width / 2, n = r.y + r.height / 2, i = e.left + e.width / 2, a = e.top + e.height / 2;
2674
+ await S.start(we(i - t, a - n));
2619
2675
  } else await S.start({
2620
2676
  ...v.exit,
2621
2677
  transition: y
2622
2678
  });
2623
- s(n.id);
2679
+ s(r.id);
2624
2680
  }, k = async () => {
2625
- let e = tn(n.id);
2681
+ let e = pn(r.id);
2626
2682
  e && !e() || (await S.start({
2627
2683
  ...v.exit,
2628
2684
  transition: y
2629
- }), o(n.id));
2685
+ }), o(r.id));
2630
2686
  }, te = () => {
2631
2687
  h?.(), _();
2632
2688
  }, A = () => {
2633
2689
  g?.(), _();
2634
- let e = n.id;
2690
+ let e = r.id;
2635
2691
  e && o(e);
2636
2692
  }, j = () => {
2637
2693
  _();
2638
2694
  };
2639
- return /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(pr, {
2695
+ return /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(ur, {
2640
2696
  position: E ? {
2641
2697
  x: 0,
2642
2698
  y: 0
2643
2699
  } : {
2644
- x: n.x,
2645
- y: n.y
2700
+ x: r.x,
2701
+ y: r.y
2646
2702
  },
2647
2703
  size: E ? {
2648
2704
  width: "100vw",
2649
2705
  height: "100vh"
2650
2706
  } : {
2651
- width: n.width,
2652
- height: n.height
2707
+ width: r.width,
2708
+ height: r.height
2653
2709
  },
2654
- minWidth: n.minWidth ?? 0,
2655
- minHeight: n.minHeight ?? 0,
2710
+ minWidth: r.minWidth ?? 0,
2711
+ minHeight: r.minHeight ?? 0,
2656
2712
  style: {
2657
- zIndex: n.zIndex,
2713
+ zIndex: r.zIndex,
2658
2714
  visibility: T ? "hidden" : "visible",
2659
2715
  pointerEvents: T ? "none" : "auto"
2660
2716
  },
2661
- dragHandleClassName: pa.titleBar,
2717
+ dragHandleClassName: la.titleBar,
2662
2718
  disableDragging: E || T,
2663
2719
  enableResizing: !E && !T,
2664
- onMouseDown: () => i(n.id),
2665
- onDragStop: (e, t) => u(n.id, t.x, t.y),
2666
- onResizeStop: (e, t, r, i, a) => {
2667
- d(n.id, r.offsetWidth, r.offsetHeight), u(n.id, a.x, a.y);
2720
+ onMouseDown: () => a(r.id),
2721
+ onDragStop: (e, t) => u(r.id, t.x, t.y),
2722
+ onResizeStop: (e, t, n, i, a) => {
2723
+ d(r.id, n.offsetWidth, n.offsetHeight), u(r.id, a.x, a.y);
2668
2724
  },
2669
- children: /* @__PURE__ */ K(cr.div, {
2670
- className: pa.root,
2671
- "data-testid": `window-${n.content}`,
2725
+ children: /* @__PURE__ */ K(ar.div, {
2726
+ className: la.root,
2727
+ "data-testid": `window-${r.content}`,
2672
2728
  style: { background: f },
2673
2729
  variants: v,
2674
2730
  initial: "hidden",
2675
2731
  animate: S,
2676
2732
  exit: "exit",
2677
2733
  layout: !0,
2678
- transition: ge,
2734
+ transition: De,
2679
2735
  onContextMenu: w,
2680
2736
  children: [/* @__PURE__ */ K("div", {
2681
- className: pa.titleBar,
2737
+ className: la.titleBar,
2682
2738
  children: [
2683
2739
  /* @__PURE__ */ G(L, {
2684
- fcIcon: n.fcIcon,
2685
- iconUrl: n.iconUrl,
2686
- fallback: n.icon,
2740
+ fcIcon: r.fcIcon,
2741
+ iconUrl: r.iconUrl,
2742
+ fallback: r.icon,
2687
2743
  size: 14,
2688
- color: n.iconColor
2744
+ color: r.iconColor
2689
2745
  }),
2690
2746
  /* @__PURE__ */ G(X, {
2691
2747
  size: "sm",
2692
2748
  fw: 500,
2693
2749
  truncate: !0,
2694
- className: pa.title,
2695
- children: r
2750
+ className: la.title,
2751
+ children: i
2696
2752
  }),
2697
- /* @__PURE__ */ K(Kn, {
2753
+ /* @__PURE__ */ K(Un, {
2698
2754
  gap: 2,
2699
2755
  wrap: "nowrap",
2700
- className: pa.windowButtons,
2756
+ className: la.windowButtons,
2701
2757
  children: [
2702
- /* @__PURE__ */ G(Un, {
2758
+ /* @__PURE__ */ G(Bn, {
2703
2759
  size: "lg",
2704
2760
  variant: "subtle",
2705
- "aria-label": t("window.ariaLabels.minimize"),
2761
+ "aria-label": n("window.ariaLabels.minimize"),
2706
2762
  onClick: O,
2707
2763
  children: /* @__PURE__ */ G(R, { name: "VscChromeMinimize" })
2708
2764
  }),
2709
- D && /* @__PURE__ */ G(Un, {
2765
+ D && /* @__PURE__ */ G(Bn, {
2710
2766
  size: "lg",
2711
2767
  variant: "subtle",
2712
- "aria-label": t(E ? "window.ariaLabels.restore" : "window.ariaLabels.maximize"),
2713
- onClick: () => E ? l(n.id) : c(n.id),
2768
+ "aria-label": n(E ? "window.ariaLabels.restore" : "window.ariaLabels.maximize"),
2769
+ onClick: () => E ? l(r.id) : c(r.id),
2714
2770
  children: E ? /* @__PURE__ */ G(R, { name: "VscChromeRestore" }) : /* @__PURE__ */ G(R, { name: "VscChromeMaximize" })
2715
2771
  }),
2716
- /* @__PURE__ */ G(Un, {
2772
+ /* @__PURE__ */ G(Bn, {
2717
2773
  size: "lg",
2718
2774
  variant: "subtle",
2719
2775
  color: "red",
2720
- "aria-label": t("window.ariaLabels.close"),
2776
+ "aria-label": n("window.ariaLabels.close"),
2721
2777
  onClick: k,
2722
2778
  children: /* @__PURE__ */ G(R, { name: "VscChromeClose" })
2723
2779
  })
2724
2780
  ]
2725
2781
  })
2726
2782
  ]
2727
- }), /* @__PURE__ */ G(fa, { children: /* @__PURE__ */ G(ma, {
2728
- win: n,
2783
+ }), /* @__PURE__ */ G(ca, { children: /* @__PURE__ */ G(ua, {
2784
+ win: r,
2729
2785
  isFocused: b,
2730
- focusWindow: i
2786
+ focusWindow: a
2731
2787
  }) })]
2732
2788
  })
2733
- }), /* @__PURE__ */ K(Yn, {
2789
+ }), /* @__PURE__ */ K(Kn, {
2734
2790
  opened: ee,
2735
2791
  onClose: j,
2736
- title: t("unsavedModal.title"),
2792
+ title: n("unsavedModal.title"),
2737
2793
  centered: !0,
2738
2794
  withinPortal: !0,
2739
2795
  children: [
2740
2796
  /* @__PURE__ */ G(X, {
2741
2797
  size: "sm",
2742
2798
  mb: "lg",
2743
- children: t("unsavedModal.message")
2799
+ children: n("unsavedModal.message")
2744
2800
  }),
2745
2801
  /* @__PURE__ */ G(q, {
2746
2802
  variant: "default",
2747
2803
  onClick: A,
2748
- children: t("unsavedModal.dontSave")
2804
+ children: n("unsavedModal.dontSave")
2749
2805
  }),
2750
2806
  /* @__PURE__ */ G(q, {
2751
2807
  onClick: te,
2752
2808
  ml: "sm",
2753
- children: t("unsavedModal.save")
2809
+ children: n("unsavedModal.save")
2754
2810
  })
2755
2811
  ]
2756
2812
  })] });
2757
- }, ga = {
2813
+ }, fa = {
2758
2814
  root: "_root_1f7p3_1",
2759
2815
  iconImage: "_iconImage_1f7p3_21",
2760
2816
  label: "_label_1f7p3_26"
2761
- }, _a = ({ icon: e, onDoubleClick: t, onContextMenu: n }) => {
2762
- let r = it.find((t) => t.id === e.appId), i = e.iconName !== void 0, a = e.nodeId !== void 0, o = e.icon === "📁", s = e.appId === "pdf", c = H(0), l = qr(e.appId), u = e.appId && !a && r ? l : e.name, d = z((t) => {
2817
+ }, pa = ({ icon: e, onDoubleClick: t, onContextMenu: n }) => {
2818
+ let r = ht.find((t) => t.id === e.appId), i = e.iconName !== void 0, a = e.nodeId !== void 0, o = e.icon === "📁", s = e.appId === "pdf", c = H(0), l = Ur(e.appId), u = e.appId && !a && r ? l : e.name, d = z((t) => {
2763
2819
  if (t.preventDefault(), e.nodeId) {
2764
2820
  t.stopPropagation(), n?.(t, e.nodeId);
2765
2821
  return;
@@ -2770,7 +2826,7 @@ var sa = {
2770
2826
  e.appId,
2771
2827
  r?.hasContextMenu,
2772
2828
  n
2773
- ]), f = () => i ? /* @__PURE__ */ G(sn, {
2829
+ ]), f = () => i ? /* @__PURE__ */ G(_n, {
2774
2830
  type: "folder",
2775
2831
  name: e.name,
2776
2832
  folderNode: {
@@ -2785,11 +2841,11 @@ var sa = {
2785
2841
  updatedAt: /* @__PURE__ */ new Date()
2786
2842
  },
2787
2843
  size: 32
2788
- }) : o && a ? /* @__PURE__ */ G(sn, {
2844
+ }) : o && a ? /* @__PURE__ */ G(_n, {
2789
2845
  type: "folder",
2790
2846
  name: e.name,
2791
2847
  size: 32
2792
- }) : a || s ? /* @__PURE__ */ G(sn, {
2848
+ }) : a || s ? /* @__PURE__ */ G(_n, {
2793
2849
  type: "file",
2794
2850
  name: e.name,
2795
2851
  size: 32
@@ -2801,7 +2857,7 @@ var sa = {
2801
2857
  color: r?.iconColor
2802
2858
  });
2803
2859
  return /* @__PURE__ */ K("div", {
2804
- className: ga.root,
2860
+ className: fa.root,
2805
2861
  style: {
2806
2862
  left: e.x,
2807
2863
  top: e.y
@@ -2818,17 +2874,17 @@ var sa = {
2818
2874
  tabIndex: 0,
2819
2875
  onKeyDown: (n) => n.key === "Enter" && t(e.appId ?? "", e.nodeId),
2820
2876
  children: [/* @__PURE__ */ G("span", {
2821
- className: ga.iconImage,
2877
+ className: fa.iconImage,
2822
2878
  "aria-hidden": "true",
2823
2879
  children: f()
2824
2880
  }), /* @__PURE__ */ G(X, {
2825
2881
  size: "xs",
2826
- className: ga.label,
2882
+ className: fa.label,
2827
2883
  truncate: !0,
2828
2884
  children: u
2829
2885
  })]
2830
2886
  });
2831
- }, va = ({ x: e, y: t }) => /* @__PURE__ */ G(J.Target, { children: /* @__PURE__ */ G("div", {
2887
+ }, ma = ({ x: e, y: t }) => /* @__PURE__ */ G(J.Target, { children: /* @__PURE__ */ G("div", {
2832
2888
  "aria-hidden": "true",
2833
2889
  style: {
2834
2890
  position: "fixed",
@@ -2838,7 +2894,7 @@ var sa = {
2838
2894
  height: 0,
2839
2895
  pointerEvents: "none"
2840
2896
  }
2841
- }) }), ya = ({ owner: e, parentId: t, currentPath: n }) => {
2897
+ }) }), ha = ({ owner: e, parentId: t, currentPath: n }) => {
2842
2898
  let { t: r } = Z("contextMenu"), i = P((e) => e.contextMenu), a = P((e) => e.closeContextMenu), o = P((e) => e.copyToClipboard), s = P((e) => e.cutToClipboard), c = P((e) => e.clipboard), l = P((e) => e.clearClipboard), u = P((e) => e.fsNodes), d = P((e) => e.addNotification), f = P((e) => e.openWindow), p = P((e) => e.desktopSortMode), m = P((e) => e.filesSortMode), h = P((e) => e.setDesktopSortMode), g = P((e) => e.setFilesSortMode), _ = P((e) => e.setFsNodes), v = P((e) => e.syncIcons), y = e === "files" ? m : p, b = e === "files" ? g : h, [x, S] = U({
2843
2899
  opened: !1,
2844
2900
  pending: null
@@ -2848,7 +2904,7 @@ var sa = {
2848
2904
  nodeName: ""
2849
2905
  }), T = i.owner === e, E = i.targetNodeId, D = E ? u.find((e) => e.id === E) : void 0, ee = (e) => {
2850
2906
  a();
2851
- let { x: i, y: o } = ne();
2907
+ let { x: i, y: o } = fe();
2852
2908
  f({
2853
2909
  title: r(e === "folder" ? "createItem.folderTitle" : "createItem.fileTitle"),
2854
2910
  content: "createItem",
@@ -2894,10 +2950,10 @@ var sa = {
2894
2950
  D && s([D]), a();
2895
2951
  }, A = () => {
2896
2952
  D && o([D]), a();
2897
- }, j = (e, t) => u.find((n) => n.name === e && n.parentId === t), re = async (e, t) => {
2953
+ }, j = (e, t) => u.find((n) => n.name === e && n.parentId === t), ne = async (e, t) => {
2898
2954
  let n = await N.createFolder(e.name, t, e.iconName, e.iconColor), r = N.getChildren(e.id);
2899
- for (let e of r) e.type === "folder" ? await re(e, n.id) : await N.createFile(e.name, e.content || "", n.id);
2900
- }, ie = async (e, n) => {
2955
+ for (let e of r) e.type === "folder" ? await ne(e, n.id) : await N.createFile(e.name, e.content || "", n.id);
2956
+ }, re = async (e, n) => {
2901
2957
  if (t) {
2902
2958
  if (c.action === "cut") try {
2903
2959
  await N.move(e.id, t), _(N.getAllNodes()), v();
@@ -2913,7 +2969,7 @@ var sa = {
2913
2969
  else if (c.action === "copy") {
2914
2970
  if (e.type === "folder") {
2915
2971
  let r = j(e.name, t);
2916
- r && n && await N.delete(r.id), (!r || n) && (await re(e, t), _(N.getAllNodes()), v());
2972
+ r && n && await N.delete(r.id), (!r || n) && (await ne(e, t), _(N.getAllNodes()), v());
2917
2973
  } else if (e.type === "file") {
2918
2974
  let r = j(e.name, t);
2919
2975
  if (r && n && await N.delete(r.id), !r || n) try {
@@ -2930,7 +2986,7 @@ var sa = {
2930
2986
  }
2931
2987
  c.action === "cut" && l();
2932
2988
  }
2933
- }, M = async () => {
2989
+ }, ie = async () => {
2934
2990
  if (c.content.length === 0 || !t) return;
2935
2991
  let e = c.content[0];
2936
2992
  j(e.name, t) ? S({
@@ -2939,15 +2995,15 @@ var sa = {
2939
2995
  node: e,
2940
2996
  originalName: e.name
2941
2997
  }
2942
- }) : (await ie(e, !1), a());
2943
- }, ae = (e) => {
2944
- x.pending && ie(x.pending.node, e), S({
2998
+ }) : (await re(e, !1), a());
2999
+ }, M = (e) => {
3000
+ x.pending && re(x.pending.node, e), S({
2945
3001
  opened: !1,
2946
3002
  pending: null
2947
3003
  }), a();
2948
- }, oe = c.content.length > 0 && t !== null, se = c.content.length > 1 ? r("actions.pasteItems", { count: c.content.length }) : r("actions.paste"), ce = (e) => {
3004
+ }, ae = c.content.length > 0 && t !== null, oe = c.content.length > 1 ? r("actions.pasteItems", { count: c.content.length }) : r("actions.paste"), se = (e) => {
2949
3005
  b(e), a();
2950
- }, le = [
3006
+ }, ce = [
2951
3007
  {
2952
3008
  mode: "default",
2953
3009
  icon: "FcDatabase",
@@ -2978,7 +3034,7 @@ var sa = {
2978
3034
  closeOnItemClick: !0,
2979
3035
  withinPortal: !0,
2980
3036
  position: "bottom-start",
2981
- children: [/* @__PURE__ */ G(va, {
3037
+ children: [/* @__PURE__ */ G(ma, {
2982
3038
  x: i.x,
2983
3039
  y: i.y
2984
3040
  }), /* @__PURE__ */ G(J.Dropdown, { children: D ? /* @__PURE__ */ K(W, { children: [
@@ -2999,13 +3055,13 @@ var sa = {
2999
3055
  onClick: A,
3000
3056
  children: r("actions.copy")
3001
3057
  }),
3002
- oe && /* @__PURE__ */ G(J.Item, {
3058
+ ae && /* @__PURE__ */ G(J.Item, {
3003
3059
  leftSection: /* @__PURE__ */ G(R, {
3004
3060
  name: "VscCopy",
3005
3061
  size: 14
3006
3062
  }),
3007
- onClick: M,
3008
- children: se
3063
+ onClick: ie,
3064
+ children: oe
3009
3065
  }),
3010
3066
  /* @__PURE__ */ G(J.Divider, {}),
3011
3067
  /* @__PURE__ */ G(J.Item, {
@@ -3034,23 +3090,23 @@ var sa = {
3034
3090
  onClick: () => ee("file"),
3035
3091
  children: r("actions.createFile")
3036
3092
  }),
3037
- oe && /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(J.Divider, {}), /* @__PURE__ */ G(J.Item, {
3093
+ ae && /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(J.Divider, {}), /* @__PURE__ */ G(J.Item, {
3038
3094
  leftSection: /* @__PURE__ */ G(R, {
3039
3095
  name: "VscCopy",
3040
3096
  size: 14
3041
3097
  }),
3042
- onClick: M,
3043
- children: se
3098
+ onClick: ie,
3099
+ children: oe
3044
3100
  })] }),
3045
3101
  e === "desktop" || e === "files" ? /* @__PURE__ */ K(W, { children: [
3046
3102
  /* @__PURE__ */ G(J.Divider, {}),
3047
3103
  /* @__PURE__ */ G(J.Label, { children: r("sort.title") }),
3048
- le.map((e) => /* @__PURE__ */ G(J.Item, {
3104
+ ce.map((e) => /* @__PURE__ */ G(J.Item, {
3049
3105
  leftSection: /* @__PURE__ */ G(L, {
3050
3106
  fcIcon: e.icon,
3051
3107
  size: 14
3052
3108
  }),
3053
- onClick: () => ce(e.mode),
3109
+ onClick: () => se(e.mode),
3054
3110
  style: y === e.mode ? { fontWeight: 600 } : void 0,
3055
3111
  "data-testid": y === e.mode ? "sort-option-selected" : void 0,
3056
3112
  children: e.label
@@ -3058,9 +3114,9 @@ var sa = {
3058
3114
  ] }) : null
3059
3115
  ] }) })]
3060
3116
  }),
3061
- /* @__PURE__ */ K(Yn, {
3117
+ /* @__PURE__ */ K(Kn, {
3062
3118
  opened: x.opened,
3063
- onClose: () => ae(!1),
3119
+ onClose: () => M(!1),
3064
3120
  title: /* @__PURE__ */ G(X, {
3065
3121
  fw: 600,
3066
3122
  children: r("common:messages.replaceFile")
@@ -3071,12 +3127,12 @@ var sa = {
3071
3127
  size: "sm",
3072
3128
  mb: "md",
3073
3129
  children: r("common:messages.replaceFileMessage", { name: x.pending?.originalName })
3074
- }), /* @__PURE__ */ K(Kn, {
3130
+ }), /* @__PURE__ */ K(Un, {
3075
3131
  justify: "flex-end",
3076
3132
  children: [/* @__PURE__ */ G(q, {
3077
3133
  variant: "default",
3078
3134
  size: "sm",
3079
- onClick: () => ae(!1),
3135
+ onClick: () => M(!1),
3080
3136
  leftSection: /* @__PURE__ */ G(R, {
3081
3137
  name: "VscClose",
3082
3138
  size: 14
@@ -3084,7 +3140,7 @@ var sa = {
3084
3140
  children: r("common:buttons.no")
3085
3141
  }), /* @__PURE__ */ G(q, {
3086
3142
  size: "sm",
3087
- onClick: () => ae(!0),
3143
+ onClick: () => M(!0),
3088
3144
  leftSection: /* @__PURE__ */ G(R, {
3089
3145
  name: "VscCheck",
3090
3146
  size: 14
@@ -3093,7 +3149,7 @@ var sa = {
3093
3149
  })]
3094
3150
  })]
3095
3151
  }),
3096
- /* @__PURE__ */ K(Yn, {
3152
+ /* @__PURE__ */ K(Kn, {
3097
3153
  opened: C.opened,
3098
3154
  onClose: () => k(!1),
3099
3155
  title: /* @__PURE__ */ G(X, {
@@ -3106,7 +3162,7 @@ var sa = {
3106
3162
  size: "sm",
3107
3163
  mb: "md",
3108
3164
  children: r("deleteConfirm.message", { name: C.nodeName })
3109
- }), /* @__PURE__ */ K(Kn, {
3165
+ }), /* @__PURE__ */ K(Un, {
3110
3166
  justify: "flex-end",
3111
3167
  children: [/* @__PURE__ */ G(q, {
3112
3168
  variant: "default",
@@ -3130,7 +3186,7 @@ var sa = {
3130
3186
  })]
3131
3187
  })
3132
3188
  ] });
3133
- }, ba = {
3189
+ }, ga = {
3134
3190
  overlay: "_overlay_34o9z_1",
3135
3191
  content: "_content_34o9z_12",
3136
3192
  phoneIcon: "_phoneIcon_34o9z_22",
@@ -3138,15 +3194,15 @@ var sa = {
3138
3194
  title: "_title_34o9z_50",
3139
3195
  message: "_message_34o9z_54",
3140
3196
  button: "_button_34o9z_58"
3141
- }, xa = ({ onDismiss: e }) => {
3142
- let { isPortrait: t, shouldShowWarning: n } = un();
3197
+ }, _a = ({ onDismiss: e }) => {
3198
+ let { isPortrait: t, shouldShowWarning: n } = bn();
3143
3199
  return !n || !t ? null : /* @__PURE__ */ G("div", {
3144
- className: ba.overlay,
3200
+ className: ga.overlay,
3145
3201
  children: /* @__PURE__ */ K("div", {
3146
- className: ba.content,
3202
+ className: ga.content,
3147
3203
  children: [
3148
3204
  /* @__PURE__ */ G("div", {
3149
- className: ba.phoneIcon,
3205
+ className: ga.phoneIcon,
3150
3206
  children: /* @__PURE__ */ K("svg", {
3151
3207
  width: "64",
3152
3208
  height: "64",
@@ -3173,35 +3229,35 @@ var sa = {
3173
3229
  /* @__PURE__ */ G(X, {
3174
3230
  size: "lg",
3175
3231
  fw: 500,
3176
- className: ba.title,
3232
+ className: ga.title,
3177
3233
  children: "Turn your device"
3178
3234
  }),
3179
3235
  /* @__PURE__ */ G(X, {
3180
3236
  size: "sm",
3181
3237
  c: "dimmed",
3182
- className: ba.message,
3238
+ className: ga.message,
3183
3239
  children: "For a better experience use this app desktop OR horizontal mode"
3184
3240
  }),
3185
3241
  /* @__PURE__ */ G(q, {
3186
3242
  variant: "subtle",
3187
3243
  onClick: e,
3188
- className: ba.button,
3244
+ className: ga.button,
3189
3245
  children: "Continue vertically?"
3190
3246
  })
3191
3247
  ]
3192
3248
  })
3193
3249
  });
3194
- }, Sa = () => typeof window < "u" && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light", Ca = () => {
3195
- let e = a((e) => e.applySystemTheme), t = a((e) => e.themeSetManually);
3250
+ }, va = () => typeof window < "u" && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light", ya = () => {
3251
+ let t = e((e) => e.applySystemTheme), n = e((e) => e.themeSetManually);
3196
3252
  B(() => {
3197
3253
  if (typeof window > "u") return;
3198
- t || e(Sa());
3199
- let n = window.matchMedia("(prefers-color-scheme: dark)"), r = (t) => {
3200
- a.getState().themeSetManually || e(t.matches ? "dark" : "light");
3254
+ n || t(va());
3255
+ let r = window.matchMedia("(prefers-color-scheme: dark)"), i = (n) => {
3256
+ e.getState().themeSetManually || t(n.matches ? "dark" : "light");
3201
3257
  };
3202
- return n.addEventListener("change", r), () => n.removeEventListener("change", r);
3203
- }, [e, t]);
3204
- }, wa = (e, t) => {
3258
+ return r.addEventListener("change", i), () => r.removeEventListener("change", i);
3259
+ }, [t, n]);
3260
+ }, ba = (e, t) => {
3205
3261
  let n = (e) => e.replace(/^v/, "").split(".").map(Number), r = n(e), i = n(t), a = Math.max(r.length, i.length);
3206
3262
  for (let e = 0; e < a; e++) {
3207
3263
  let t = r[e] ?? 0, n = i[e] ?? 0;
@@ -3209,14 +3265,14 @@ var sa = {
3209
3265
  if (t < n) return !1;
3210
3266
  }
3211
3267
  return !1;
3212
- }, Ta = "frannunpal/frannunpal.github.io", Ea = `https://api.github.com/repos/${Ta}/releases/latest`, Da = async () => {
3213
- let e = await fetch(Ea);
3268
+ }, xa = "frannunpal/frannunpal.github.io", Sa = `https://api.github.com/repos/${xa}/releases/latest`, Ca = async () => {
3269
+ let e = await fetch(Sa);
3214
3270
  if (!e.ok) throw Error(`GitHub API error: ${e.status}`);
3215
3271
  return e.json();
3216
- }, Oa = "fde-desktop:version", ka = !1, Aa = () => {
3217
- let e = P((e) => e.mergeSeed), t = P((e) => e.mergeDesktopApps), n = P((e) => e.reorderDesktopApps), { notify: r } = an();
3272
+ }, wa = typeof __APP_VERSION__ == "string" ? __APP_VERSION__ : "0.4.0", Ta = () => `${wa}-${typeof __PROD__ == "boolean" && __PROD__ ? "prod" : "dev"}-${typeof window < "u" && window.__FDE_IN_DOCKER__ ? "docker" : "web"}`, Ea = () => typeof __PROD__ == "boolean" && __PROD__ ? "prod" : "dev", Da = () => typeof window > "u" ? "web" : window.__FDE_IN_DOCKER__ ? "docker" : /Electron/i.test(navigator.userAgent) ? "electron" : "web", Oa = "fde-desktop:version", ka = !1, Aa = () => {
3273
+ let e = P((e) => e.mergeSeed), t = P((e) => e.mergeDesktopApps), n = P((e) => e.reorderDesktopApps), { notify: r } = gn();
3218
3274
  B(() => {
3219
- typeof window > "u" || ka || (ka = !0, Le() ? ja(r) : Ma(e, t, n, r));
3275
+ typeof window > "u" || ka || (ka = !0, Je() ? ja(r) : Ma(e, t, n, r));
3220
3276
  }, [
3221
3277
  e,
3222
3278
  t,
@@ -3225,8 +3281,8 @@ var sa = {
3225
3281
  ]);
3226
3282
  }, ja = async (e) => {
3227
3283
  try {
3228
- let t = await Da(), n = t.tag_name;
3229
- if (!wa(n, __APP_VERSION__)) return;
3284
+ let t = await Ca(), n = t.tag_name;
3285
+ if (!ba(n, wa)) return;
3230
3286
  e(`Update ${n} available!`, "Click close to open the download page.", {
3231
3287
  fcIcon: "FcEngineering",
3232
3288
  onClose: () => window.open(t.html_url, "_blank")
@@ -3236,11 +3292,11 @@ var sa = {
3236
3292
  }
3237
3293
  }, Ma = async (e, t, n, r) => {
3238
3294
  try {
3239
- let i = localStorage.getItem(Oa), a = i ? JSON.parse(i) : null, o = await fetch(ut("version.json")).then((e) => e.json());
3295
+ let i = localStorage.getItem(Oa), a = i ? JSON.parse(i) : null, o = await fetch(xt("version.json")).then((e) => e.json());
3240
3296
  if (a?.sha === o.sha) return;
3241
- let s = await kt();
3297
+ let s = await Vt();
3242
3298
  if (!s) return;
3243
- e(s), t(_t), n(_t), localStorage.setItem(Oa, JSON.stringify(o)), r("New version available!", "Close this notification to install it.", {
3299
+ e(s), t(kt), n(kt), localStorage.setItem(Oa, JSON.stringify(o)), r("New version available!", "Close this notification to install it.", {
3244
3300
  fcIcon: "FcEngineering",
3245
3301
  onClose: () => window.location.reload()
3246
3302
  });
@@ -3248,37 +3304,37 @@ var sa = {
3248
3304
  ka = !1;
3249
3305
  }
3250
3306
  }, Na = (e) => `https://fonts.googleapis.com/css2?family=${e.replace(/\s+/g, "+")}&display=swap`, Pa = (e) => {
3251
- let t = d[e];
3307
+ let t = r[e];
3252
3308
  if (!t || document.head.querySelector(`link[data-font="${e}"]`)) return;
3253
3309
  let n = document.createElement("link");
3254
3310
  n.rel = "stylesheet", n.href = t, n.setAttribute("data-font", e), document.head.appendChild(n);
3255
3311
  }, Fa = () => {
3256
- let e = a((e) => e.font), t = a((e) => e.fontSize), n = a((e) => e.downloadedFonts);
3312
+ let t = e((e) => e.font), i = e((e) => e.fontSize), a = e((e) => e.downloadedFonts);
3257
3313
  B(() => {
3258
- n.forEach((e) => {
3259
- d[e] || (d[e] = Na(e)), Pa(e);
3314
+ a.forEach((e) => {
3315
+ r[e] || (r[e] = Na(e)), Pa(e);
3260
3316
  });
3261
- }, [n]), B(() => {
3262
- let a = r.map((e) => e.value).includes(e);
3263
- !a && n.includes(e) && (d[e] || (d[e] = Na(e)), Pa(e));
3317
+ }, [a]), B(() => {
3318
+ let e = p.map((e) => e.value).includes(t);
3319
+ !e && a.includes(t) && (r[t] || (r[t] = Na(t)), Pa(t));
3264
3320
  let o;
3265
- o = a ? i[e] ?? i["system-ui"] : n.includes(e) ? `"${e}", sans-serif` : i["system-ui"], document.documentElement.style.setProperty("font-family", o), document.documentElement.style.setProperty("--mantine-font-family", o), document.documentElement.style.setProperty("font-size", `${t}px`);
3321
+ o = e ? n[t] ?? n["system-ui"] : a.includes(t) ? `"${t}", sans-serif` : n["system-ui"], document.documentElement.style.setProperty("font-family", o), document.documentElement.style.setProperty("--mantine-font-family", o), document.documentElement.style.setProperty("font-size", `${i}px`);
3266
3322
  }, [
3267
- e,
3268
3323
  t,
3269
- n
3324
+ i,
3325
+ a
3270
3326
  ]);
3271
3327
  };
3272
3328
  //#endregion
3273
3329
  //#region src/hooks/useLanguageSync.ts
3274
3330
  function Ia() {
3275
- let { i18n: e } = Z(), t = a((e) => e.language);
3331
+ let { i18n: t } = Z(), n = e((e) => e.language);
3276
3332
  B(() => {
3277
- t && e.language !== t && (e.changeLanguage(t), localStorage.setItem("fde-desktop:language", t));
3278
- }, [t, e]), B(() => {
3333
+ n && t.language !== n && (t.changeLanguage(n), localStorage.setItem("fde-desktop:language", n));
3334
+ }, [n, t]), B(() => {
3279
3335
  let e = localStorage.getItem("fde-desktop:language");
3280
- t && !e && localStorage.setItem("fde-desktop:language", t);
3281
- }, [t]);
3336
+ n && !e && localStorage.setItem("fde-desktop:language", n);
3337
+ }, [n]);
3282
3338
  }
3283
3339
  //#endregion
3284
3340
  //#region src/infrastructure/Migration/migrateStorage.ts
@@ -3437,7 +3493,7 @@ function io() {
3437
3493
  }
3438
3494
  Qa = {
3439
3495
  openApp: (e, t) => {
3440
- let n = P.getState().openWindow, r = it.find((t) => t.id === e);
3496
+ let n = P.getState().openWindow, r = ht.find((t) => t.id === e);
3441
3497
  n({
3442
3498
  content: e,
3443
3499
  title: t?.title ?? r?.name ?? e,
@@ -3498,13 +3554,13 @@ function io() {
3498
3554
  openFileDialog: async () => (console.warn("[FdeApi] openFileDialog not yet implemented"), null),
3499
3555
  saveFile: async () => (console.warn("[FdeApi] saveFile not yet implemented"), !1),
3500
3556
  saveFileDialog: async () => (console.warn("[FdeApi] saveFileDialog not yet implemented"), null),
3501
- getTheme: () => a.getState().theme,
3502
- setTheme: (e) => {
3503
- let t = e;
3504
- t.taskbar && t.window && t.accent && (a.getState().setCustomThemeColors(t), to("theme-changed", { theme: JSON.stringify(e) }));
3557
+ getTheme: () => e.getState().theme,
3558
+ setTheme: (t) => {
3559
+ let n = t;
3560
+ n.taskbar && n.window && n.accent && (e.getState().setCustomThemeColors(n), to("theme-changed", { theme: JSON.stringify(t) }));
3505
3561
  },
3506
3562
  showNotification: (e) => {
3507
- let t = xt();
3563
+ let t = Nt();
3508
3564
  return P.getState().addNotification({
3509
3565
  id: t,
3510
3566
  title: e.title,
@@ -3545,82 +3601,83 @@ function oo() {
3545
3601
  }
3546
3602
  //#endregion
3547
3603
  //#region src/components/FdeDesktop/FdeDesktop.tsx
3548
- var so = new ir({ defaultOptions: { queries: {
3604
+ var so = new tr({ defaultOptions: { queries: {
3549
3605
  staleTime: Infinity,
3550
3606
  gcTime: Infinity
3551
3607
  } } }), co = !1;
3552
- function lo({ defaultWallpaper: e, initialApp: t, prefetchLoaders: n }) {
3553
- let r = fn(a((e) => e.wallpaper) ?? void 0), i = P((e) => e.windows), o = P((e) => e.icons), s = P((e) => e.initFs), c = P((e) => e.isFsReady), l = P((e) => e.fsNodes), u = P((e) => e.openContextMenu), d = P((e) => e.filesCurrentFolderId), f = P((e) => e.desktopFolderId), p = ye(), { shouldShowWarning: m } = un(), { notify: h } = an(), [g, _] = U(!1);
3554
- Ca(), Aa(), Fa(), Ia(), aa(), B(() => {
3608
+ function lo({ defaultWallpaper: t, initialApp: n, prefetchLoaders: r }) {
3609
+ let i = e((e) => e.wallpaper), a = e((e) => e.wallpaperModule), o = T(i ?? void 0), s = a === "gradient" ? i ?? void 0 : o ?? t ?? C, c = P((e) => e.windows), l = P((e) => e.icons), u = P((e) => e.initFs), d = P((e) => e.isFsReady), f = P((e) => e.fsNodes), p = P((e) => e.openContextMenu), m = P((e) => e.filesCurrentFolderId), h = P((e) => e.desktopFolderId), g = Ae(), { shouldShowWarning: _ } = bn(), { notify: v } = gn(), [y, b] = U(!1);
3610
+ ya(), Aa(), Fa(), Ia(), ta(), B(() => {
3555
3611
  oo() || io();
3556
3612
  }, []), B(() => {
3557
- if (!c) return;
3613
+ if (!d) return;
3558
3614
  let e = document.getElementById("initial-loader");
3559
3615
  e && (e.classList.add("hidden"), setTimeout(() => e.remove(), 200));
3560
- }, [c]), B(() => {
3561
- if (!n?.length) return;
3616
+ }, [d]), B(() => {
3617
+ if (!r?.length) return;
3562
3618
  let e = setTimeout(() => {
3563
- Za(n);
3619
+ Za(r);
3564
3620
  }, 3e3);
3565
3621
  return () => clearTimeout(e);
3566
- }, [n]), B(() => {
3622
+ }, [r]), B(() => {
3567
3623
  co || (co = !0, Ga().finally(() => {
3568
- s(), t && p(t);
3624
+ u(), n && g(n);
3569
3625
  }));
3570
3626
  }, [
3571
- s,
3572
- p,
3573
- t
3627
+ u,
3628
+ g,
3629
+ n
3574
3630
  ]);
3575
- let v = z((e) => {
3576
- e.preventDefault(), u(e.clientX, e.clientY, "desktop");
3577
- }, [u]), y = z((e, t) => {
3578
- e.preventDefault(), e.stopPropagation(), u(e.clientX, e.clientY, "desktop", t);
3579
- }, [u]), b = z((e, t) => {
3631
+ let x = z((e) => {
3632
+ e.preventDefault(), p(e.clientX, e.clientY, "desktop");
3633
+ }, [p]), S = z((e, t) => {
3634
+ e.preventDefault(), e.stopPropagation(), p(e.clientX, e.clientY, "desktop", t);
3635
+ }, [p]), w = z((e, t) => {
3580
3636
  let n;
3581
3637
  if (t) {
3582
- let r = l.find((e) => e.id === t);
3638
+ let r = f.find((e) => e.id === t);
3583
3639
  if (r?.type === "folder") n = { initialFolderId: t };
3584
3640
  else if (r?.type === "file") {
3585
- let t = Pt(r);
3641
+ let t = Kt(r);
3586
3642
  if (!t) {
3587
- h("Unsupported file type", "The type of file you are trying to open is not supported currently", { fcIcon: "FcDeleteRow" });
3643
+ v("Unsupported file type", "The type of file you are trying to open is not supported currently", { fcIcon: "FcDeleteRow" });
3588
3644
  return;
3589
3645
  }
3590
- t.appId !== e && h("File type mismatch", `Opening "${r.name}" as ${t.appId} instead of ${e}`, { fcIcon: "FcDeleteRow" }), p(t.appId, { contentData: t.contentData });
3646
+ t.appId !== e && v("File type mismatch", `Opening "${r.name}" as ${t.appId} instead of ${e}`, { fcIcon: "FcDeleteRow" }), g(t.appId, { contentData: t.contentData });
3591
3647
  return;
3592
3648
  }
3593
3649
  }
3594
- p(e, { contentData: n });
3650
+ g(e, { contentData: n });
3595
3651
  }, [
3596
- p,
3597
- l,
3598
- h
3652
+ g,
3653
+ f,
3654
+ v
3599
3655
  ]);
3600
- return c ? /* @__PURE__ */ K(W, { children: [
3601
- m && !g && /* @__PURE__ */ G(xa, { onDismiss: () => _(!0) }),
3602
- /* @__PURE__ */ K(Rr, {
3603
- wallpaper: r ?? e,
3604
- onContextMenu: v,
3605
- children: [o.map((e) => /* @__PURE__ */ G(_a, {
3656
+ return d ? /* @__PURE__ */ K(W, { children: [
3657
+ _ && !y && /* @__PURE__ */ G(_a, { onDismiss: () => b(!0) }),
3658
+ /* @__PURE__ */ K(Pr, {
3659
+ wallpaper: s,
3660
+ wallpaperModule: a,
3661
+ onContextMenu: x,
3662
+ children: [l.map((e) => /* @__PURE__ */ G(pa, {
3606
3663
  icon: e,
3607
- onDoubleClick: b,
3608
- onContextMenu: y
3609
- }, e.id)), /* @__PURE__ */ G(sr, { children: i.map((e) => /* @__PURE__ */ G(ha, { window: e }, e.id)) })]
3664
+ onDoubleClick: w,
3665
+ onContextMenu: S
3666
+ }, e.id)), /* @__PURE__ */ G(ir, { children: c.map((e) => /* @__PURE__ */ G(da, { window: e }, e.id)) })]
3610
3667
  }),
3611
- /* @__PURE__ */ G(Mi, {}),
3612
- /* @__PURE__ */ G(ya, {
3668
+ /* @__PURE__ */ G(Oi, {}),
3669
+ /* @__PURE__ */ G(ha, {
3613
3670
  owner: "desktop",
3614
- parentId: f,
3671
+ parentId: h,
3615
3672
  currentPath: "/home"
3616
3673
  }),
3617
- /* @__PURE__ */ G(ya, {
3674
+ /* @__PURE__ */ G(ha, {
3618
3675
  owner: "files",
3619
- parentId: d,
3676
+ parentId: m,
3620
3677
  currentPath: (() => {
3621
- let e = ["/home"], t = d, n = [];
3678
+ let e = ["/home"], t = m, n = [];
3622
3679
  for (; t !== null;) {
3623
- let e = l.find((e) => e.id === t);
3680
+ let e = f.find((e) => e.id === t);
3624
3681
  if (!e) break;
3625
3682
  n.unshift(e.name), t = e.parentId;
3626
3683
  }
@@ -3629,40 +3686,40 @@ function lo({ defaultWallpaper: e, initialApp: t, prefetchLoaders: n }) {
3629
3686
  })
3630
3687
  ] }) : null;
3631
3688
  }
3632
- function uo({ children: e, isReady: t, error: n, defaultWallpaper: r, initialApp: i, prefetchLoaders: o }) {
3633
- let s = Tr(), c = a((e) => e.setThemeMode), l = a((e) => e.toggleTheme), u = V(() => ({
3689
+ function uo({ children: t, isReady: n, error: r, defaultWallpaper: i, initialApp: a, prefetchLoaders: o }) {
3690
+ let s = Sr(), c = e((e) => e.setThemeMode), l = e((e) => e.toggleTheme), u = V(() => ({
3634
3691
  fs: null,
3635
- isReady: t,
3636
- error: n,
3692
+ isReady: n,
3693
+ error: r,
3637
3694
  theme: s,
3638
3695
  setThemeMode: c,
3639
3696
  toggleTheme: l
3640
3697
  }), [
3641
- t,
3642
3698
  n,
3699
+ r,
3643
3700
  s,
3644
3701
  c,
3645
3702
  l
3646
3703
  ]);
3647
- return e ? /* @__PURE__ */ G(Pr, { children: /* @__PURE__ */ G(Or.Provider, {
3704
+ return t ? /* @__PURE__ */ G(jr, { children: /* @__PURE__ */ G(Tr.Provider, {
3648
3705
  value: u,
3649
- children: e
3650
- }) }) : /* @__PURE__ */ G(Pr, { children: /* @__PURE__ */ G(Or.Provider, {
3706
+ children: t
3707
+ }) }) : /* @__PURE__ */ G(jr, { children: /* @__PURE__ */ G(Tr.Provider, {
3651
3708
  value: u,
3652
3709
  children: /* @__PURE__ */ G(lo, {
3653
- defaultWallpaper: r,
3654
- initialApp: i,
3710
+ defaultWallpaper: i,
3711
+ initialApp: a,
3655
3712
  prefetchLoaders: o
3656
3713
  })
3657
3714
  }) });
3658
3715
  }
3659
- function fo({ children: e, fallback: t = null, theme: n, mantineTheme: r, fileSystem: i, initialMode: o, customApps: s, appEntries: c, onError: l, defaultWallpaper: u, initialApp: d, prefetchLoaders: f, queryClient: p = so }) {
3660
- let [m, h] = U(!1), [g, _] = U(null), v = a((e) => e.theme.mode), [y] = U(o), b = y ?? v;
3716
+ function fo({ children: t, fallback: n = null, theme: r, mantineTheme: i, fileSystem: a, initialMode: o, customApps: s, appEntries: c, onError: l, defaultWallpaper: u, initialApp: d, prefetchLoaders: f, queryClient: p = so }) {
3717
+ let [m, h] = U(!1), [g, _] = U(null), v = e((e) => e.theme.mode), [y] = U(o), b = y ?? v;
3661
3718
  B(() => {
3662
3719
  let e = !0;
3663
3720
  return (async () => {
3664
3721
  try {
3665
- if (te(), c && Mt(c), s) {
3722
+ if (le(), c && Wt(c), s) {
3666
3723
  let e = { ...s };
3667
3724
  if (c) for (let t of c) {
3668
3725
  let n = e[t.id];
@@ -3682,17 +3739,17 @@ function fo({ children: e, fallback: t = null, theme: n, mantineTheme: r, fileSy
3682
3739
  iconColor: n.iconColor ?? t.iconColor
3683
3740
  });
3684
3741
  }
3685
- D(e);
3742
+ ae(e);
3686
3743
  }
3687
3744
  } catch (e) {
3688
3745
  console.error("[FdeDesktop] Failed to initialize core registry:", e);
3689
3746
  }
3690
- if (!i) {
3747
+ if (!a) {
3691
3748
  e && h(!0);
3692
3749
  return;
3693
3750
  }
3694
3751
  try {
3695
- await i.initialize(), e && h(!0);
3752
+ await a.initialize(), e && h(!0);
3696
3753
  } catch (t) {
3697
3754
  let n = t instanceof Error ? t : Error(String(t));
3698
3755
  e && (_(n), l?.(n));
@@ -3701,30 +3758,30 @@ function fo({ children: e, fallback: t = null, theme: n, mantineTheme: r, fileSy
3701
3758
  e = !1;
3702
3759
  };
3703
3760
  }, [
3704
- i,
3761
+ a,
3705
3762
  c,
3706
3763
  s,
3707
3764
  l
3708
3765
  ]);
3709
- let x = V(() => tr({
3710
- ...Dr,
3711
- ...r
3712
- }), [r]);
3713
- return g || !m ? /* @__PURE__ */ G(W, { children: t }) : /* @__PURE__ */ G(ar, {
3766
+ let x = V(() => Qn({
3767
+ ...wr,
3768
+ ...i
3769
+ }), [i]);
3770
+ return g || !m ? /* @__PURE__ */ G(W, { children: n }) : /* @__PURE__ */ G(nr, {
3714
3771
  client: p,
3715
- children: /* @__PURE__ */ G(Jn, {
3772
+ children: /* @__PURE__ */ G(Gn, {
3716
3773
  theme: x,
3717
3774
  forceColorScheme: b,
3718
- children: /* @__PURE__ */ G(wr, {
3775
+ children: /* @__PURE__ */ G(xr, {
3719
3776
  mode: b,
3720
- theme: n,
3777
+ theme: r,
3721
3778
  children: /* @__PURE__ */ G(uo, {
3722
3779
  isReady: m,
3723
3780
  error: g,
3724
3781
  defaultWallpaper: u,
3725
3782
  initialApp: d,
3726
3783
  prefetchLoaders: f,
3727
- children: e
3784
+ children: t
3728
3785
  })
3729
3786
  })
3730
3787
  })
@@ -3736,14 +3793,14 @@ var po = ({ component: e, windowId: t, contentData: n, onExit: r }) => e ? /* @_
3736
3793
  windowId: t,
3737
3794
  contentData: n,
3738
3795
  onExit: r
3739
- }) : null, mo = it.filter((e) => e.id !== "settings"), ho = ({ opened: e, position: t, onClose: n, onOpenApp: r, onToggleTheme: i }) => /* @__PURE__ */ K(J, {
3796
+ }) : null, mo = ht.filter((e) => e.id !== "settings"), ho = ({ opened: e, position: t, onClose: n, onOpenApp: r, onToggleTheme: i }) => /* @__PURE__ */ K(J, {
3740
3797
  opened: e,
3741
3798
  onClose: n,
3742
3799
  closeOnClickOutside: !0,
3743
3800
  closeOnEscape: !0,
3744
3801
  closeOnItemClick: !0,
3745
3802
  withinPortal: !0,
3746
- children: [/* @__PURE__ */ G(va, {
3803
+ children: [/* @__PURE__ */ G(ma, {
3747
3804
  x: t.x,
3748
3805
  y: t.y
3749
3806
  }), /* @__PURE__ */ K(J.Dropdown, { children: [
@@ -3765,7 +3822,7 @@ var po = ({ component: e, windowId: t, contentData: n, onExit: r }) => e ? /* @_
3765
3822
  }), yo = {
3766
3823
  scrollback: 5e3,
3767
3824
  shell: "/bin/zsh"
3768
- }, bo = or((e, t) => ({
3825
+ }, bo = rr((e, t) => ({
3769
3826
  states: {},
3770
3827
  getScrollback: (e) => t().states[e]?.scrollback ?? yo.scrollback,
3771
3828
  getShell: (e) => t().states[e]?.shell ?? yo.shell,
@@ -3866,7 +3923,7 @@ var po = ({ component: e, windowId: t, contentData: n, onExit: r }) => e ? /* @_
3866
3923
  }, [x]);
3867
3924
  B(() => {
3868
3925
  if (m.current || (m.current = !0, u.current = !0, !i.current)) return;
3869
- let e = new _r({
3926
+ let e = new mr({
3870
3927
  fontFamily: "'Operator Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace",
3871
3928
  fontSize: 14,
3872
3929
  theme: {
@@ -3878,7 +3935,7 @@ var po = ({ component: e, windowId: t, contentData: n, onExit: r }) => e ? /* @_
3878
3935
  cursorStyle: "underline",
3879
3936
  cursorBlink: !0,
3880
3937
  scrollback: t
3881
- }), n = new vr(), r = new yr();
3938
+ }), n = new hr(), r = new gr();
3882
3939
  return e.loadAddon(n), e.loadAddon(r), e.open(i.current), n.fit(), a.current = e, o.current = n, s.current = r, e.onData((e) => {
3883
3940
  c.current?.readyState === WebSocket.OPEN && c.current.send(JSON.stringify({
3884
3941
  type: "input",
@@ -3999,13 +4056,13 @@ function Do(e) {
3999
4056
  //#region src/components/Apps/TerminalApp/TerminalNotSupported.tsx
4000
4057
  var Oo = () => {
4001
4058
  let { t: e } = Z("apps");
4002
- return /* @__PURE__ */ G(Gn, {
4059
+ return /* @__PURE__ */ G(Hn, {
4003
4060
  "data-testid": "terminal-not-supported",
4004
4061
  style: {
4005
4062
  width: "100%",
4006
4063
  height: "100%"
4007
4064
  },
4008
- children: /* @__PURE__ */ K(Qn, {
4065
+ children: /* @__PURE__ */ K(Yn, {
4009
4066
  align: "center",
4010
4067
  gap: "lg",
4011
4068
  p: "xl",
@@ -4013,7 +4070,7 @@ var Oo = () => {
4013
4070
  children: [
4014
4071
  /* @__PURE__ */ G(X, {
4015
4072
  size: "3rem",
4016
- children: /* @__PURE__ */ G(gr, {})
4073
+ children: /* @__PURE__ */ G(pr, {})
4017
4074
  }),
4018
4075
  /* @__PURE__ */ G(X, {
4019
4076
  size: "lg",
@@ -4037,7 +4094,7 @@ var Oo = () => {
4037
4094
  })
4038
4095
  });
4039
4096
  }, ko = ({ window: e, notifyReady: t }) => {
4040
- let n = e, r = n?.id ?? "", i = Pe(), a = xo(r), o = So(r), { setScrollback: s, setShell: c, reset: l } = bo(), u = H(null), d = H(!1), f = H(!1), [p, m] = U("idle"), [h, g] = U(null);
4097
+ let n = e, r = n?.id ?? "", i = Ge(), a = xo(r), o = So(r), { setScrollback: s, setShell: c, reset: l } = bo(), u = H(null), d = H(!1), f = H(!1), [p, m] = U("idle"), [h, g] = U(null);
4041
4098
  B(() => {
4042
4099
  i !== "docker" || f.current || (f.current = !0, (async () => {
4043
4100
  try {
@@ -4099,13 +4156,13 @@ var Oo = () => {
4099
4156
  }) : /* @__PURE__ */ G(Oo, {});
4100
4157
  }, Ao = () => {
4101
4158
  let { t: e } = Z("apps");
4102
- return /* @__PURE__ */ G(Gn, {
4159
+ return /* @__PURE__ */ G(Hn, {
4103
4160
  "data-testid": "code-server-not-supported",
4104
4161
  style: {
4105
4162
  width: "100%",
4106
4163
  height: "100%"
4107
4164
  },
4108
- children: /* @__PURE__ */ K(Qn, {
4165
+ children: /* @__PURE__ */ K(Yn, {
4109
4166
  align: "center",
4110
4167
  gap: "lg",
4111
4168
  p: "xl",
@@ -4113,7 +4170,7 @@ var Oo = () => {
4113
4170
  children: [
4114
4171
  /* @__PURE__ */ G(X, {
4115
4172
  size: "3rem",
4116
- children: /* @__PURE__ */ G(gr, {})
4173
+ children: /* @__PURE__ */ G(pr, {})
4117
4174
  }),
4118
4175
  /* @__PURE__ */ G(X, {
4119
4176
  size: "lg",
@@ -4235,7 +4292,7 @@ var Oo = () => {
4235
4292
  allow: "clipboard-read; clipboard-write"
4236
4293
  })
4237
4294
  });
4238
- }, No = (e) => Ne() ? /* @__PURE__ */ G(Mo, { ...e }) : /* @__PURE__ */ G(Ao, {}), Po = [{
4295
+ }, No = (e) => We() ? /* @__PURE__ */ G(Mo, { ...e }) : /* @__PURE__ */ G(Ao, {}), Po = [{
4239
4296
  value: "/bin/sh",
4240
4297
  label: "sh"
4241
4298
  }, {
@@ -4328,7 +4385,7 @@ function Fo(e) {
4328
4385
  }
4329
4386
  //#endregion
4330
4387
  //#region src/components/Apps/TerminalApp/TerminalMenuBar.tsx
4331
- var Io = Bn(({ windowId: e, contentData: t, onExit: n }) => /* @__PURE__ */ G(rn, { elements: Fo({
4388
+ var Io = Ln(({ windowId: e, contentData: t, onExit: n }) => /* @__PURE__ */ G(hn, { elements: Fo({
4332
4389
  windowId: e,
4333
4390
  onExit: n,
4334
4391
  clear: t?.clear,
@@ -4355,16 +4412,16 @@ var Lo = { container: "_container_1br66_1" }, Ro = ({ notifyReady: e, window: t,
4355
4412
  ]);
4356
4413
  let a = () => {
4357
4414
  globalThis.window.open(n.url, "_blank", "noopener,noreferrer");
4358
- }, o = Bt(n.icon, {
4415
+ }, o = Qt(n.icon, {
4359
4416
  size: 48,
4360
4417
  color: n.iconColor
4361
- }), s = Bt(n.icon, {
4418
+ }), s = Qt(n.icon, {
4362
4419
  size: 16,
4363
4420
  color: n.iconColor
4364
4421
  });
4365
- return /* @__PURE__ */ G(Gn, {
4422
+ return /* @__PURE__ */ G(Hn, {
4366
4423
  className: Lo.container,
4367
- children: /* @__PURE__ */ K(Qn, {
4424
+ children: /* @__PURE__ */ K(Yn, {
4368
4425
  align: "center",
4369
4426
  gap: "md",
4370
4427
  children: [
@@ -4403,7 +4460,7 @@ var Lo = { container: "_container_1br66_1" }, Ro = ({ notifyReady: e, window: t,
4403
4460
  opened: n,
4404
4461
  position: i,
4405
4462
  open: z((n, i) => {
4406
- if (n.preventDefault(), t && !it.find((e) => e.id === t)?.hasContextMenu) {
4463
+ if (n.preventDefault(), t && !ht.find((e) => e.id === t)?.hasContextMenu) {
4407
4464
  n.stopPropagation();
4408
4465
  return;
4409
4466
  }
@@ -4424,7 +4481,7 @@ function Bo({ snapshotRef: e, getCurrentState: t, initialSnapshot: n, onChange:
4424
4481
  }, [r]), B(() => {
4425
4482
  if (e.current === null) {
4426
4483
  if (i) {
4427
- let t = _n.getState().getSnapshot(i);
4484
+ let t = jn.getState().getSnapshot(i);
4428
4485
  if (t !== null) {
4429
4486
  e.current = t;
4430
4487
  return;
@@ -4445,7 +4502,7 @@ function Bo({ snapshotRef: e, getCurrentState: t, initialSnapshot: n, onChange:
4445
4502
  isDirty: a,
4446
4503
  takeSnapshot: z(() => {
4447
4504
  let n = t();
4448
- e.current = n, o(!1), i && _n.getState().setSnapshot(i, n), s.current && s.current(!1);
4505
+ e.current = n, o(!1), i && jn.getState().setSnapshot(i, n), s.current && s.current(!1);
4449
4506
  }, [
4450
4507
  e,
4451
4508
  t,
@@ -4549,7 +4606,7 @@ var Ho = {
4549
4606
  window: "#25262b",
4550
4607
  accent: "#4dabf7"
4551
4608
  }
4552
- }, Go = typeof __APP_VERSION__ == "string" ? __APP_VERSION__ : "0.4.0", Ko = () => `${Go}-${typeof __PROD__ == "boolean" && __PROD__ ? "prod" : "dev"}-${typeof window < "u" && window.__FDE_IN_DOCKER__ ? "docker" : "web"}`, qo = () => typeof __PROD__ == "boolean" && __PROD__ ? "prod" : "dev", Jo = () => typeof window > "u" ? "web" : window.__FDE_IN_DOCKER__ ? "docker" : /Electron/i.test(navigator.userAgent) ? "electron" : "web", Yo = (e) => ({
4609
+ }, Go = (e) => ({
4553
4610
  primaryColor: "blue",
4554
4611
  other: {
4555
4612
  desktop: e.desktop,
@@ -4559,4 +4616,4 @@ var Ho = {
4559
4616
  }
4560
4617
  });
4561
4618
  //#endregion
4562
- export { me as ANIMATION_DURATION, it as APPS, Q as APP_IDS, Gr as APP_ID_TO_TRANSLATION_KEY, Go as APP_VERSION, r as AVAILABLE_FONTS, bn as AppEmptyState, L as AppIcon, Ni as AppLoading, rn as AppMenuBar, fa as AppReadyProvider, St as BREAKPOINTS, lt as CORE_APPS, Ct as CORE_APP_IDS, ie as CORE_REGISTRY, It as CUSTOM_APPS_FOLDER_ID, pn as CalendarApp, de as CalendarAppLazy, No as CodeServerApp, Zr as CollapsibleSection, Dn as ColorPicker, ho as ContextMenu, ri as ContextMenuAnchor, In as CreateItemApp, g as CreateItemAppLazy, ya as CreateItemContextMenu, la as CustomAppLoader, Pi as CustomAppLoadingScreen, Ii as CustomAppNotSupported, Fi as CustomAppOffline, Cr as DEFAULT_FDE_THEME, t as DEFAULT_LANGUAGE, Oe as DEFAULT_LAUNCHER_FOLDERS, Wo as DEFAULT_THEME_COLORS, Dt as DEFAULT_VIEWPORT_HEIGHT, rt as DEFAULT_VIEWPORT_WIDTH, yt as DEFAULT_WINDOW_DIMENSIONS, Kr as DESKTOP_APPS, _t as DESKTOP_APPS_ORDER, e as DefaultThemeProvider, Rr as Desktop, _a as DesktopIcon, dn as DeviceInfoApp, ue as DeviceInfoAppLazy, nn as DirtyIndicator, wt as DockerFileSystemAdapter, wn as DownloadProgress, qt as DragDropProvider, po as DynamicMenuBarRenderer, _e as EASE_IN, le as EASE_OUT, Ro as ExternalLinkApp, i as FONT_STACKS, fo as FdeDesktop, jr as FdeProvider, sn as FileIcon, gn as FilePickerApp, hn as FilePickerModal, on as FilesApp, T as FilesAppLazy, mn as FolderPicker, Ea as GITHUB_LATEST_RELEASE_URL, Ta as GITHUB_RELEASES_REPO, d as GOOGLE_FONTS_HREF, gt as ICON_COLUMN_WIDTH, jt as ICON_MARGIN, at as ICON_ROW_HEIGHT, Ft as IMAGE_MIME_TYPES, Fn as IconColorPicker, Sn as ImageViewerApp, E as ImageViewerAppLazy, Nn as ImageViewerMenuBar, ee as ImageViewerMenuBarLazy, Ze as IndexedDBFileSystem, l as LanguageFlag, Ai as LanguageSelector, ni as Launcher, Xt as MenuEditApp, x as MenuEditAppLazy, An as MenuEditMenuBar, C as MenuEditMenuBarLazy, vn as NotesApp, w as NotesAppLazy, kn as NotesMenuBar, O as NotesMenuBarLazy, Je as PREDEFINED_LAUNCHER_FOLDERS, xn as PRESET_COLORS, Pn as PRESET_ICONS, f as PROFILE, Cn as PdfApp, Te as PdfAppLazy, Mn as PdfMenuBar, _ as PdfMenuBarLazy, rr as QueryClient, h as SETTINGS_SECTIONS, u as SUPPORTED_LANGUAGES, m as SettingsApp, j as SettingsAppLazy, jn as SettingsMenuBar, S as SettingsMenuBarLazy, c as SettingsSectionComponent, ke as SortOptions, vo as StorybookApp, ct as TASKBAR_HEIGHT, nt as TEXT_MIME_TYPES, Mi as Taskbar, si as TaskbarContextMenu, ko as TerminalApp, Io as TerminalMenuBar, wr as ThemeProvider, En as UploaderApp, A as UploaderAppLazy, R as VscIcon, ha as Window, Pr as WindowButtonRegistryProvider, Ue as WindowManagerAdapter, On as appendDirtyIndicator, ln as buildBreadcrumbs, re as centerWindowPosition, Zi as checkHMREndpointExists, s as clearBrowserData, Ve as clearManifestCache, ht as convertToAppEntry, pt as createDesktopIcon, he as createEaseIn, ve as createEaseOut, Ee as createFile, st as createFolder, At as createLauncherFolder, M as createMaximizeTransition, fe as createMinimizeVariant, be as createPanelVariants, bt as createPredefinedLauncherFolder, ae as createRestoreVariant, tt as createWindow, oe as createWindowVariants, De as fetchAppManifest, N as fileSystem, Tn as formatBytes, xt as generateUUID, Ce as getAppComponent, Pt as getAppIdForMime, k as getAppName, vt as getBaseUrl, mt as getCachedManifest, tn as getCloseInterceptor, ze as getCustomAppById, Be as getCustomApps, qo as getEnvironment, ao as getFdeApi, cn as getFileExtension, yn as getFourRandomColors, v as getMenuBarBuilder, Se as getMenuBarComponent, Qe as getMimeTypeFromExtension, o as getPersistedThemeMode, Jo as getReleaseType, Pe as getRuntime, Ko as getVersionString, Xe as hashBlob, Di as i18n, b as initRegistry, io as initializeFdeApi, n as injectFontLink, qe as isBrowser, He as isCustomApp, Ye as isDev, Ne as isDocker, Le as isElectron, oo as isFdeApiInitialized, y as isLazyApp, wa as isNewerVersion, ge as maximizeTransition, Me as mergeAppsWithCustomApps, Ga as migrateStorage, pe as minimizeVariant, ce as openVariants, se as panelVariants, Za as prefetchApps, ne as randomWindowPosition, Ge as registerAppFileHandler, $t as registerCloseInterceptor, D as registerComponents, Mt as registerCustomApps, ot as registerDesktopApps, Fe as removeFromManifestCache, dt as resetBaseUrlCache, Tt as resetFileSystem, Gi as resetHMRState, ft as resetWindowManager, et as resolveFileUrl, ut as resolveUrl, xe as restoreVariant, Ie as setApiBaseUrl, $e as setTestBaseUrl, Nt as sortDesktopIcons, Ke as sortDesktopIconsByMode, je as sortNodes, Ae as sortNodesByMode, Re as syncWithServer, Yo as toMantineTheme, en as unregisterCloseInterceptor, Et as updateLauncherFolder, We as updateManifestCache, Wt as useAdaptiveDimensions, Wr as useAnimationDuration, qr as useAppName, da as useAppReady, _n as useAppTempMemoryStore, Aa as useAppUpdate, Fa as useApplyFont, Br as useClock, Qt as useCloseInterceptor, Zt as useCloseModalStore, Yr as useCollapsible, zo as useContextMenu, ia as useCustomAppHMR, aa as useCustomAppLifecycle, F as useCustomAppStore, P as useDesktopStore, un as useDeviceDetection, Uo as useDownload, Jt as useDragDropState, Gt as useDraggableItem, Kt as useDroppableArea, Ut as useDynamicIcon, zt as useDynamicIconElement, Vt as useFcIcon, I as useFcIconElement, Vo as useFdeApi, Mr as useFdeContext, Lt as useFiIcon, Bt as useFiIconElement, Yt as useFolderName, p as useFontDownload, Bo as useIsDirty, Ia as useLanguageSync, an as useNotifications, ye as useOpenApp, fn as useResolvedUrl, Jr as useSearchFilter, a as useSettingsStore, Ca as useSystemTheme, Ur as useTaskbarContextMenu, ii as useTaskbarHeight, Tr as useTheme, Er as useThemeContext, Ht as useVscIcon, Rt as useVscIconElement, Fr as useWindowButtonRegistry, Ot as uuidv4, oa as waitForContainer, we as windowVariants };
4619
+ export { Te as ANIMATION_DURATION, ht as APPS, Q as APP_IDS, Vr as APP_ID_TO_TRANSLATION_KEY, wa as APP_VERSION, p as AVAILABLE_FONTS, Sn as AppEmptyState, L as AppIcon, ki as AppLoading, hn as AppMenuBar, ca as AppReadyProvider, Pt as BREAKPOINTS, bt as CORE_APPS, Ft as CORE_APP_IDS, me as CORE_REGISTRY, Jt as CUSTOM_APPS_FOLDER_ID, jt as CalendarApp, Se as CalendarAppLazy, No as CodeServerApp, qr as CollapsibleSection, wn as ColorPicker, ho as ContextMenu, $r as ContextMenuAnchor, D as CreateItemAppLazy, ha as CreateItemContextMenu, aa as CustomAppLoader, Ai as CustomAppLoadingScreen, Mi as CustomAppNotSupported, ji as CustomAppOffline, br as DEFAULT_FDE_THEME, x as DEFAULT_GRADIENT_CSS, f as DEFAULT_LANGUAGE, ze as DEFAULT_LAUNCHER_FOLDERS, Wo as DEFAULT_THEME_COLORS, zt as DEFAULT_VIEWPORT_HEIGHT, mt as DEFAULT_VIEWPORT_WIDTH, C as DEFAULT_WALLPAPER_URL, Ct as DEFAULT_WINDOW_DIMENSIONS, Hr as DESKTOP_APPS, kt as DESKTOP_APPS_ORDER, m as DefaultThemeProvider, Pr as Desktop, pa as DesktopIcon, xe as DeviceInfoAppLazy, mn as DirtyIndicator, It as DockerFileSystemAdapter, Tn as DownloadProgress, on as DragDropProvider, po as DynamicMenuBarRenderer, Oe as EASE_IN, be as EASE_OUT, Ro as ExternalLinkApp, n as FONT_STACKS, fo as FdeDesktop, Or as FdeProvider, _n as FileIcon, On as FilePickerApp, Dn as FilePickerModal, ie as FilesAppLazy, En as FolderPicker, Sa as GITHUB_LATEST_RELEASE_URL, xa as GITHUB_RELEASES_REPO, r as GOOGLE_FONTS_HREF, y as GRADIENT_PRESETS, Ot as ICON_COLUMN_WIDTH, Ut as ICON_MARGIN, gt as ICON_ROW_HEIGHT, qt as IMAGE_MIME_TYPES, An as IconColorPicker, M as ImageViewerAppLazy, oe as ImageViewerMenuBarLazy, ct as IndexedDBFileSystem, l as LanguageFlag, Ei as LanguageSelector, Qr as Launcher, A as MenuEditAppLazy, ne as MenuEditMenuBarLazy, re as NotesAppLazy, se as NotesMenuBarLazy, at as PREDEFINED_LAUNCHER_FOLDERS, Cn as PRESET_COLORS, kn as PRESET_ICONS, u as PROFILE, Ie as PdfAppLazy, ee as PdfMenuBarLazy, er as QueryClient, a as SETTINGS_SECTIONS, h as SUNSET_CONFIG, s as SUPPORTED_LANGUAGES, de as SettingsAppLazy, j as SettingsMenuBarLazy, d as SettingsSectionComponent, Be as SortOptions, vo as StorybookApp, yt as TASKBAR_HEIGHT, pt as TEXT_MIME_TYPES, Oi as Taskbar, ri as TaskbarContextMenu, ko as TerminalApp, Io as TerminalMenuBar, xr as ThemeProvider, ue as UploaderAppLazy, R as VscIcon, da as Window, jr as WindowButtonRegistryProvider, et as WindowManagerAdapter, Mn as appendDirtyIndicator, yn as buildBreadcrumbs, g as buildGradientCSS, pe as centerWindowPosition, qi as checkHMREndpointExists, i as clearBrowserData, Qe as clearManifestCache, Dt as convertToAppEntry, Tt as createDesktopIcon, Ee as createEaseIn, ke as createEaseOut, Le as createFile, vt as createFolder, Ht as createLauncherFolder, he as createMaximizeTransition, Ce as createMinimizeVariant, S as createNoiseDataUrl, je as createPanelVariants, Mt as createPredefinedLauncherFolder, ge as createRestoreVariant, ft as createWindow, _e as createWindowVariants, Re as fetchAppManifest, N as fileSystem, Nn as formatBytes, Nt as generateUUID, Pe as getAppComponent, Kt as getAppIdForMime, ce as getAppName, At as getBaseUrl, Et as getCachedManifest, pn as getCloseInterceptor, Xe as getCustomAppById, Ze as getCustomApps, Ea as getEnvironment, ao as getFdeApi, vn as getFileExtension, xn as getFourRandomColors, O as getMenuBarBuilder, Ne as getMenuBarComponent, lt as getMimeTypeFromExtension, o as getPersistedThemeMode, w as getPresets, Da as getReleaseType, Ge as getRuntime, Ta as getVersionString, b as getWallpaperBackgroundStyle, st as hashBlob, Ci as i18n, te as initRegistry, io as initializeFdeApi, c as injectFontLink, it as isBrowser, E as isCSSGradient, $e as isCustomApp, ot as isDev, We as isDocker, Je as isElectron, oo as isFdeApiInitialized, k as isLazyApp, ba as isNewerVersion, De as maximizeTransition, Ue as mergeAppsWithCustomApps, Ga as migrateStorage, we as minimizeVariant, ye as openVariants, ve as panelVariants, _ as parseGradientCSS, Za as prefetchApps, fe as randomWindowPosition, nt as registerAppFileHandler, dn as registerCloseInterceptor, ae as registerComponents, Wt as registerCustomApps, _t as registerDesktopApps, Ke as removeFromManifestCache, St as resetBaseUrlCache, Lt as resetFileSystem, Vi as resetHMRState, wt as resetWindowManager, dt as resolveFileUrl, xt as resolveUrl, Me as restoreVariant, qe as setApiBaseUrl, ut as setTestBaseUrl, Gt as sortDesktopIcons, rt as sortDesktopIconsByMode, He as sortNodes, Ve as sortNodesByMode, Ye as syncWithServer, Go as toMantineTheme, fn as unregisterCloseInterceptor, Rt as updateLauncherFolder, tt as updateManifestCache, nn as useAdaptiveDimensions, Br as useAnimationDuration, Ur as useAppName, sa as useAppReady, jn as useAppTempMemoryStore, Aa as useAppUpdate, Fa as useApplyFont, Ir as useClock, un as useCloseInterceptor, ln as useCloseModalStore, Gr as useCollapsible, zo as useContextMenu, ea as useCustomAppHMR, ta as useCustomAppLifecycle, F as useCustomAppStore, P as useDesktopStore, bn as useDeviceDetection, Uo as useDownload, sn as useDragDropState, rn as useDraggableItem, an as useDroppableArea, tn as useDynamicIcon, Zt as useDynamicIconElement, $t as useFcIcon, I as useFcIconElement, Vo as useFdeApi, kr as useFdeContext, Yt as useFiIcon, Qt as useFiIconElement, cn as useFolderName, t as useFontDownload, Bo as useIsDirty, Ia as useLanguageSync, gn as useNotifications, Ae as useOpenApp, T as useResolvedUrl, Wr as useSearchFilter, e as useSettingsStore, ya as useSystemTheme, zr as useTaskbarContextMenu, ei as useTaskbarHeight, Sr as useTheme, Cr as useThemeContext, en as useVscIcon, Xt as useVscIconElement, Mr as useWindowButtonRegistry, Bt as uuidv4, v as validateGradientConfig, na as waitForContainer, Fe as windowVariants };