@fde-desktop/fde-core 0.4.7 → 0.4.9

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 (284) hide show
  1. package/dist/AccordionChevron-DxpOyInK.js +26 -0
  2. package/dist/AccordionChevron-kn5kSrEc.cjs +1 -0
  3. package/dist/ActionIcon-Drh4p6Fv.js +145 -0
  4. package/dist/ActionIcon-alk2zZD6.cjs +1 -0
  5. package/dist/AppEmptyState-BWCUbf-B.cjs +1 -0
  6. package/dist/AppEmptyState-Bxpit0JV.js +49 -0
  7. package/dist/AppIcon-BU7a3ZNH.cjs +1 -0
  8. package/dist/AppIcon-XumS3bIG.js +80 -0
  9. package/dist/AppMenuBar-B9U0n1Vv.cjs +1 -0
  10. package/dist/AppMenuBar-CnIEVjr8.js +2049 -0
  11. package/dist/Box-DSKR_qaa.js +1579 -0
  12. package/dist/Box-zW6Twge8.cjs +1 -0
  13. package/dist/Button-DMlnrqyx.cjs +1 -0
  14. package/dist/Button-wTOTQKxF.js +178 -0
  15. package/dist/CalendarApp-B_e1B1Yn.cjs +1 -0
  16. package/dist/CalendarApp-C-l9D6nd.cjs +1 -0
  17. package/dist/CalendarApp-D0ftTCTG.js +1399 -0
  18. package/dist/Center-CmxXB9ql.js +25 -0
  19. package/dist/Center-DKUE2pER.cjs +1 -0
  20. package/dist/CheckIcon-CZhtJD1O.cjs +1 -0
  21. package/dist/CheckIcon-N5qBqXQJ.js +25 -0
  22. package/dist/CodeServerApp-BOoGwZ7r.cjs +1 -0
  23. package/dist/CodeServerApp-Be3I5EGg.cjs +1 -0
  24. package/dist/CodeServerApp-DW18EZxa.js +150 -0
  25. package/dist/ColorPicker-BCNqi02x.js +997 -0
  26. package/dist/ColorPicker-BrDE7tMO.cjs +1 -0
  27. package/dist/Colors-ClnDxnyA.js +15 -0
  28. package/dist/Colors-zP2AFgU3.cjs +1 -0
  29. package/dist/CreateItemApp-B12M1E_1.cjs +1 -0
  30. package/dist/CreateItemApp-TAAprby3.js +400 -0
  31. package/dist/CreateItemApp-ePB6ujNl.cjs +1 -0
  32. package/dist/DeviceInfoApp-BMF18BGo.cjs +1 -0
  33. package/dist/DeviceInfoApp-DRy0H3aT.cjs +1 -0
  34. package/dist/DeviceInfoApp-lgpwkeRR.js +223 -0
  35. package/dist/DownloadProgress-EoyCaD5O.js +174 -0
  36. package/dist/DownloadProgress-VNdj22U8.cjs +1 -0
  37. package/dist/FileIcon-7JaSR3Gn.js +89 -0
  38. package/dist/FileIcon-CIXopWLv.cjs +1 -0
  39. package/dist/FilePickerApp-DaMgEqKh.js +409 -0
  40. package/dist/FilePickerApp-DjmuSFqa.cjs +1 -0
  41. package/dist/FilesApp-Bp7wfrBZ.cjs +1 -0
  42. package/dist/FilesApp-BpJJRKhi.cjs +1 -0
  43. package/dist/FilesApp-Cj94QG5o.js +225 -0
  44. package/dist/Group-CtBJSfCo.js +48 -0
  45. package/dist/Group-Dsrf6lEK.cjs +1 -0
  46. package/dist/ImageViewerApp-BaLP3gkO.js +69 -0
  47. package/dist/ImageViewerApp-DlHGeB3S.cjs +1 -0
  48. package/dist/ImageViewerApp-DoXd_Swu.cjs +1 -0
  49. package/dist/ImageViewerMenuBar-CabGSi9r.js +87 -0
  50. package/dist/ImageViewerMenuBar-SAI7UNz7.cjs +1 -0
  51. package/dist/ImageViewerMenuBar-_Jr29gii.cjs +1 -0
  52. package/dist/MenuEditApp-BJjlPTOa.cjs +1 -0
  53. package/dist/MenuEditApp-BTRppYnD.js +497 -0
  54. package/dist/MenuEditApp-JPsGT-S3.cjs +1 -0
  55. package/dist/MenuEditMenuBar-BydGkqMw.cjs +1 -0
  56. package/dist/MenuEditMenuBar-DptlwVPQ.cjs +1 -0
  57. package/dist/MenuEditMenuBar-x1IQrHP2.js +60 -0
  58. package/dist/NotesApp-BOcRGO7w.cjs +1 -0
  59. package/dist/NotesApp-CQe7UfBC.js +364 -0
  60. package/dist/NotesApp-OL07JXRE.cjs +1 -0
  61. package/dist/NotesMenuBar-BSI_2Y7p.cjs +1 -0
  62. package/dist/NotesMenuBar-Df6aW85J.cjs +1 -0
  63. package/dist/NotesMenuBar-VhpIe68v.js +62 -0
  64. package/dist/Paper-BX_9odR6.js +30 -0
  65. package/dist/Paper-D8-BaBx2.cjs +1 -0
  66. package/dist/PdfApp-CNEbty5v.cjs +1 -0
  67. package/dist/PdfApp-CVv3ZCaM.cjs +1 -0
  68. package/dist/PdfApp-DL_R9-Nc.js +39 -0
  69. package/dist/PdfMenuBar--E6kDyrT.cjs +1 -0
  70. package/dist/PdfMenuBar-DZCLSOpR.js +39 -0
  71. package/dist/PdfMenuBar-Dj5cJUkg.cjs +1 -0
  72. package/dist/SettingsApp-BlmHuAjT.js +1831 -0
  73. package/dist/SettingsApp-CNvIgf5B.cjs +1 -0
  74. package/dist/SettingsApp-DWxanNE4.cjs +1 -0
  75. package/dist/SettingsMenuBar-CBoOBCfx.cjs +1 -0
  76. package/dist/SettingsMenuBar-DQooFkZN.cjs +1 -0
  77. package/dist/SettingsMenuBar-YWiJHaxq.js +42 -0
  78. package/dist/Slider-BUiHxjKO.cjs +1 -0
  79. package/dist/Slider-t-NcD60t.js +1176 -0
  80. package/dist/Stack-Bp1Ek2Gp.js +34 -0
  81. package/dist/Stack-D4jAiRfc.cjs +1 -0
  82. package/dist/StorybookApp-CDLV_kja.cjs +1 -0
  83. package/dist/StorybookApp-DKwlPCmo.js +10 -0
  84. package/dist/TerminalApp-BCB7i1lR.cjs +1 -0
  85. package/dist/TerminalApp-BYc_gHLe.js +326 -0
  86. package/dist/TerminalApp-Dviz6aP2.cjs +1 -0
  87. package/dist/TerminalMenuBar-D5tPmgR_.js +113 -0
  88. package/dist/TerminalMenuBar-DNshPmCa.cjs +1 -0
  89. package/dist/TerminalMenuBar-HzMSR7XP.cjs +1 -0
  90. package/dist/TextInput-C-JtGWn1.js +981 -0
  91. package/dist/TextInput-CrsmcOip.cjs +1 -0
  92. package/dist/Tooltip-D5Cd9wtz.cjs +1 -0
  93. package/dist/Tooltip-DOeIvhrO.js +1142 -0
  94. package/dist/UnstyledButton-DGaG-e_G.js +25 -0
  95. package/dist/UnstyledButton-DX2pTahr.cjs +1 -0
  96. package/dist/UploaderApp-C6xA5Rrf2.cjs +1 -0
  97. package/dist/UploaderApp-DnHIRxB_.cjs +1 -0
  98. package/dist/UploaderApp-qBfpukR_.js +488 -0
  99. package/dist/VscIcon-CcMdrFoJ.cjs +1 -0
  100. package/dist/VscIcon-DBfVnArE.js +8 -0
  101. package/dist/create-safe-context-Bboj0GWC.cjs +1 -0
  102. package/dist/create-safe-context-XT2cxc14.js +12 -0
  103. package/dist/desktopStore-CZoA9VHO.cjs +1 -0
  104. package/dist/desktopStore-F8bgLqFl.js +1768 -0
  105. package/dist/getRuntime-BFK0-8R1.cjs +1 -0
  106. package/dist/getRuntime-DAPqFH2W.js +63 -0
  107. package/dist/imageViewerStore-BB_tssZR.cjs +1 -0
  108. package/dist/imageViewerStore-C5kWz0o7.js +50 -0
  109. package/dist/index.cjs +1 -5642
  110. package/dist/index.css +2 -9192
  111. package/dist/index.d.ts +2258 -2019
  112. package/dist/index.js +4826 -4798
  113. package/dist/is-element-Bu_JY8Qy.js +7 -0
  114. package/dist/is-element-CdV0xajp.cjs +1 -0
  115. package/dist/menuEditStore-CTeM_dns.cjs +1 -0
  116. package/dist/menuEditStore-Cj1zAwxQ.js +38 -0
  117. package/dist/notesStore-BCEl1D_v.cjs +1 -0
  118. package/dist/notesStore-BPyRTHEc.js +36 -0
  119. package/dist/rolldown-runtime-CAFD8bLK.js +11 -0
  120. package/dist/settingsAppStore-BDQ3ts1y.js +29 -0
  121. package/dist/settingsAppStore-CMBc13VU.cjs +1 -0
  122. package/dist/terminalStore-IWdf4Mm6.js +30 -0
  123. package/dist/terminalStore-iIuyodfK.cjs +1 -0
  124. package/dist/use-merged-ref-BT8_u6vW.js +25 -0
  125. package/dist/use-merged-ref-n9Gw9LNn.cjs +1 -0
  126. package/dist/use-resolved-styles-api-8OXE2oRq.cjs +1 -0
  127. package/dist/use-resolved-styles-api-DNUlJJZf.js +21 -0
  128. package/dist/use-uncontrolled-A4hm9ATM.js +23 -0
  129. package/dist/use-uncontrolled-DDJVQiM_.cjs +1 -0
  130. package/dist/useAdaptiveDimensions-AVDc_qPa.js +40 -0
  131. package/dist/useAdaptiveDimensions-CfITBJ_m.cjs +1 -0
  132. package/dist/useCloseInterceptor-BZd3VILp.js +51 -0
  133. package/dist/useCloseInterceptor-yntBEzNc.cjs +1 -0
  134. package/dist/useDynamicIcon-Bf0t2foA.js +22 -0
  135. package/dist/useDynamicIcon-DJ_il30E.cjs +1 -0
  136. package/dist/useMenuBarUtils-nJIPJGIQ.cjs +1 -0
  137. package/dist/useMenuBarUtils-nmu9yehT.js +6 -0
  138. package/dist/useOpenApp-CBIm7Gzl.js +279 -0
  139. package/dist/useOpenApp-DW4x79Zg.cjs +1 -0
  140. package/dist/useResolvedUrl-BkMPM1fM.cjs +1 -0
  141. package/dist/useResolvedUrl-DQpLqOoL.js +30 -0
  142. package/package.json +7 -3
  143. package/dist/CalendarApp-CHLUCAI7.css +0 -744
  144. package/dist/CalendarApp-K7ZOUZ6C.js +0 -2
  145. package/dist/CalendarApp-OTGEERSS.cjs +0 -8
  146. package/dist/CodeServerApp-5KZGO7HL.css +0 -75
  147. package/dist/CodeServerApp-LUZFCQBI.js +0 -3
  148. package/dist/CodeServerApp-P3TMJPLY.cjs +0 -9
  149. package/dist/CreateItemApp-ESQ42VHH.js +0 -8
  150. package/dist/CreateItemApp-PQB5GTFG.css +0 -107
  151. package/dist/CreateItemApp-RFE3REWZ.cjs +0 -14
  152. package/dist/DeviceInfoApp-XNIS6ZY6.js +0 -5
  153. package/dist/DeviceInfoApp-ZNLQNOKI.cjs +0 -11
  154. package/dist/DeviceInfoApp-ZSMRSITP.css +0 -7
  155. package/dist/FilesApp-4GEU64QN.js +0 -8
  156. package/dist/FilesApp-E6L5W3T2.css +0 -1817
  157. package/dist/FilesApp-QSLB5IWR.cjs +0 -14
  158. package/dist/ImageViewerApp-N2Q7E7WZ.css +0 -215
  159. package/dist/ImageViewerApp-NCVDKLB3.js +0 -11
  160. package/dist/ImageViewerApp-QB373H5Z.cjs +0 -17
  161. package/dist/ImageViewerMenuBar-I3TFKQPS.cjs +0 -14
  162. package/dist/ImageViewerMenuBar-TV5C6TM2.js +0 -5
  163. package/dist/ImageViewerMenuBar-XLK4LIHW.css +0 -56
  164. package/dist/MenuEditApp-5EFYAPFC.cjs +0 -15
  165. package/dist/MenuEditApp-V5XOPIHX.js +0 -9
  166. package/dist/MenuEditApp-YA6HSAMJ.css +0 -94
  167. package/dist/MenuEditMenuBar-7VHMZNRM.css +0 -56
  168. package/dist/MenuEditMenuBar-GF6L4PGZ.cjs +0 -15
  169. package/dist/MenuEditMenuBar-IUXFPZE5.js +0 -6
  170. package/dist/NotesApp-2YNT7Y3D.js +0 -10
  171. package/dist/NotesApp-IAEE7YHU.cjs +0 -16
  172. package/dist/NotesApp-TQ6IHDNX.css +0 -302
  173. package/dist/NotesMenuBar-25LKN3SE.cjs +0 -15
  174. package/dist/NotesMenuBar-MXLOX7OT.css +0 -56
  175. package/dist/NotesMenuBar-SRV3AIAL.js +0 -6
  176. package/dist/PdfApp-67XIX6AM.js +0 -10
  177. package/dist/PdfApp-BUIC5U5H.css +0 -206
  178. package/dist/PdfApp-GZ6RHTBR.cjs +0 -16
  179. package/dist/PdfMenuBar-NLZC6JHS.js +0 -4
  180. package/dist/PdfMenuBar-QUM72EE4.css +0 -56
  181. package/dist/PdfMenuBar-WBRTKMLN.cjs +0 -13
  182. package/dist/SettingsApp-BPLMGPNK.cjs +0 -20
  183. package/dist/SettingsApp-JVOSEFH3.css +0 -283
  184. package/dist/SettingsApp-LUDIXCYY.js +0 -14
  185. package/dist/SettingsMenuBar-5CBSSMVM.css +0 -56
  186. package/dist/SettingsMenuBar-VLT6TTCM.js +0 -6
  187. package/dist/SettingsMenuBar-Y5QEXDEO.cjs +0 -15
  188. package/dist/StorybookApp-NQ244BER.css +0 -7
  189. package/dist/StorybookApp-NZDV4X3Y.js +0 -1
  190. package/dist/StorybookApp-VF3KIMU3.cjs +0 -7
  191. package/dist/TerminalApp-CDGWRBFJ.cjs +0 -10
  192. package/dist/TerminalApp-EAATMIMX.css +0 -77
  193. package/dist/TerminalApp-GCKJCM55.js +0 -4
  194. package/dist/TerminalMenuBar-3J26O26Q.css +0 -56
  195. package/dist/TerminalMenuBar-7BH7MGNJ.cjs +0 -14
  196. package/dist/TerminalMenuBar-7JAEQUZ4.js +0 -5
  197. package/dist/UploaderApp-6KV3TGCT.css +0 -1817
  198. package/dist/UploaderApp-FJC2J4I5.js +0 -10
  199. package/dist/UploaderApp-HLXJYJZQ.cjs +0 -16
  200. package/dist/chunk-2PSTHGTD.cjs +0 -42
  201. package/dist/chunk-2RQX7QBP.cjs +0 -148
  202. package/dist/chunk-43W6UDUZ.cjs +0 -19
  203. package/dist/chunk-4E45FBAH.js +0 -223
  204. package/dist/chunk-4E4U2A25.cjs +0 -237
  205. package/dist/chunk-4QHX7CMN.cjs +0 -38
  206. package/dist/chunk-4XURSNM4.js +0 -43
  207. package/dist/chunk-4ZCRYHL6.js +0 -407
  208. package/dist/chunk-5C6IQE42.cjs +0 -35
  209. package/dist/chunk-5HUYQDQF.js +0 -36
  210. package/dist/chunk-5NOHYJNH.js +0 -84
  211. package/dist/chunk-5QFZW6HW.js +0 -2241
  212. package/dist/chunk-5YH6AKEO.js +0 -146
  213. package/dist/chunk-756GPSPM.js +0 -283
  214. package/dist/chunk-7WUYUTPN.js +0 -2293
  215. package/dist/chunk-7XCMBW64.js +0 -162
  216. package/dist/chunk-7Y7HB7FB.cjs +0 -53
  217. package/dist/chunk-ABIAPZ6S.cjs +0 -45
  218. package/dist/chunk-ACHGJKCI.cjs +0 -286
  219. package/dist/chunk-BQCD5RAF.cjs +0 -48
  220. package/dist/chunk-BQL3YXMV.js +0 -17429
  221. package/dist/chunk-C3XER4N3.js +0 -442
  222. package/dist/chunk-C6BEZNAM.cjs +0 -45
  223. package/dist/chunk-CILU6BWC.cjs +0 -548
  224. package/dist/chunk-CV5PUHAE.cjs +0 -86
  225. package/dist/chunk-D5MVFFID.js +0 -42
  226. package/dist/chunk-D7R55WWT.js +0 -1601
  227. package/dist/chunk-DFYDUXWP.cjs +0 -34
  228. package/dist/chunk-DWP2SYF7.js +0 -55
  229. package/dist/chunk-E55VXNLK.cjs +0 -17498
  230. package/dist/chunk-E5FW77FG.js +0 -77
  231. package/dist/chunk-EAELL43F.js +0 -42
  232. package/dist/chunk-EX5V2ZTU.js +0 -40
  233. package/dist/chunk-FD7QZCTN.cjs +0 -2329
  234. package/dist/chunk-FH4ILMKF.js +0 -38
  235. package/dist/chunk-FRHBM2U7.js +0 -33
  236. package/dist/chunk-FX2TPX3L.cjs +0 -45
  237. package/dist/chunk-GPXNLTPI.cjs +0 -451
  238. package/dist/chunk-GRYCUBJZ.js +0 -9
  239. package/dist/chunk-HPHHS7FJ.cjs +0 -49
  240. package/dist/chunk-HWHBSAUC.js +0 -40
  241. package/dist/chunk-IDHP3R4I.js +0 -31
  242. package/dist/chunk-IHWGT3DL.js +0 -86
  243. package/dist/chunk-JEBKLIMU.cjs +0 -123
  244. package/dist/chunk-KDZLBI6F.cjs +0 -324
  245. package/dist/chunk-KQHICFX3.js +0 -121
  246. package/dist/chunk-LMJE6V4N.cjs +0 -42
  247. package/dist/chunk-MCHPDWVH.js +0 -444
  248. package/dist/chunk-MVDGM5Y4.js +0 -68
  249. package/dist/chunk-N36HBL53.cjs +0 -165
  250. package/dist/chunk-NV5GNFA3.js +0 -541
  251. package/dist/chunk-NVEGEK3N.js +0 -31
  252. package/dist/chunk-OJIDKDKF.js +0 -68
  253. package/dist/chunk-PGGNSLM7.js +0 -215
  254. package/dist/chunk-PKPQA5NR.js +0 -15
  255. package/dist/chunk-PNDBLFJW.cjs +0 -50
  256. package/dist/chunk-Q3WA72BF.cjs +0 -70
  257. package/dist/chunk-RDIDAZ3S.cjs +0 -9
  258. package/dist/chunk-RGJPRXYY.js +0 -48
  259. package/dist/chunk-RPSYXORB.cjs +0 -219
  260. package/dist/chunk-RQ6OZRUW.cjs +0 -41
  261. package/dist/chunk-SBE4SZAN.cjs +0 -226
  262. package/dist/chunk-TAFNCDUI.js +0 -234
  263. package/dist/chunk-TFIDSENE.cjs +0 -88
  264. package/dist/chunk-TGWMOHAO.js +0 -17
  265. package/dist/chunk-UA6XSTW6.js +0 -48
  266. package/dist/chunk-UIQCTAVM.cjs +0 -59
  267. package/dist/chunk-UKYESVDS.cjs +0 -50
  268. package/dist/chunk-V4N255NL.cjs +0 -2309
  269. package/dist/chunk-VO6KXO2I.js +0 -32
  270. package/dist/chunk-WXSTSC3D.cjs +0 -83
  271. package/dist/chunk-XSK7BWYO.js +0 -47
  272. package/dist/chunk-XVAPJ4PP.cjs +0 -449
  273. package/dist/chunk-XVASHRCE.cjs +0 -70
  274. package/dist/chunk-XYSMVQQD.cjs +0 -1608
  275. package/dist/chunk-YAIWI4Z5.js +0 -7
  276. package/dist/chunk-YGYOLDKR.js +0 -280
  277. package/dist/chunk-YP2PLNOF.cjs +0 -34
  278. package/dist/chunk-YSOLW4FS.cjs +0 -11
  279. package/dist/chunk-YY6OUR2U.js +0 -44
  280. package/dist/chunk-YZWS7FDT.cjs +0 -409
  281. package/dist/chunk-Z5YGWL65.cjs +0 -39
  282. package/dist/chunk-ZHNDXNL4.js +0 -45
  283. package/dist/chunk-ZX3EDZ5C.cjs +0 -17
  284. package/dist/index.d.cts +0 -2019
package/dist/index.d.ts CHANGED
@@ -1,2019 +1,2258 @@
1
- import * as react from 'react';
2
- import react__default, { ReactNode, FC, MouseEvent, ReactElement } from 'react';
3
- import { MantineThemeOverride } from '@mantine/core';
4
- import i18n from 'i18next';
5
- export { default as i18n } from 'i18next';
6
- import * as framer_motion from 'framer-motion';
7
- import { Transition, TargetAndTransition, Variants } from 'framer-motion';
8
- import { IconType, IconBaseProps } from 'react-icons';
9
- import * as _tanstack_react_query from '@tanstack/react-query';
10
- import * as zustand_middleware from 'zustand/middleware';
11
- import * as zustand from 'zustand';
12
- export { v4 as uuidv4 } from 'uuid';
13
-
14
- type SupportedLanguage$2 = 'en' | 'es';
15
- interface CustomThemeColors {
16
- taskbar: string;
17
- window: string;
18
- accent: string;
19
- }
20
- interface ISettingsState {
21
- wallpaper: string | null;
22
- wallpaperModule: string;
23
- launcherIcon: string;
24
- font: string;
25
- downloadedFonts: string[];
26
- fontSize: number;
27
- animationDuration: number;
28
- theme: FdeTheme;
29
- themeSetManually: boolean;
30
- customThemeColors: CustomThemeColors | null;
31
- language: SupportedLanguage$2;
32
- setWallpaper: (url: string | null) => void;
33
- setWallpaperModule: (module: string) => void;
34
- setLauncherIcon: (icon: string) => void;
35
- setFont: (font: string) => void;
36
- markFontDownloaded: (fontName: string) => void;
37
- setFontSize: (size: number) => void;
38
- setAnimationDuration: (duration: number) => void;
39
- setThemeMode: (mode: ThemeMode) => void;
40
- toggleTheme: () => void;
41
- setThemeAutomatic: () => void;
42
- applySystemTheme: (mode: ThemeMode) => void;
43
- setCustomThemeColors: (colors: CustomThemeColors | null) => void;
44
- setLanguage: (lang: SupportedLanguage$2) => void;
45
- }
46
-
47
- type ThemeMode = 'light' | 'dark';
48
- interface Theme {
49
- mode: ThemeMode;
50
- desktop: string;
51
- taskbar: string;
52
- window: string;
53
- accent: string;
54
- }
55
- interface WindowTheme {
56
- borderRadius: string;
57
- headerHeight: number;
58
- minWidth: number;
59
- minHeight: number;
60
- defaultWidth: number;
61
- defaultHeight: number;
62
- shadow: string;
63
- }
64
- interface TaskbarTheme {
65
- height: number;
66
- position: 'bottom' | 'top';
67
- background: string;
68
- blur: boolean;
69
- }
70
- interface DesktopTheme {
71
- background: string;
72
- iconSize: number;
73
- iconSpacing: number;
74
- }
75
- interface FdeTheme {
76
- mode: ThemeMode;
77
- colors: {
78
- desktop: string;
79
- taskbar: string;
80
- window: string;
81
- accent: string;
82
- };
83
- window: WindowTheme;
84
- taskbar: TaskbarTheme;
85
- desktop: DesktopTheme;
86
- }
87
- interface PartialFdeTheme {
88
- mode?: ThemeMode;
89
- colors?: Partial<FdeTheme['colors']>;
90
- window?: Partial<WindowTheme>;
91
- taskbar?: Partial<TaskbarTheme>;
92
- desktop?: Partial<DesktopTheme>;
93
- }
94
- interface IThemeProvider {
95
- getTheme(): FdeTheme;
96
- setMode(mode: ThemeMode): void;
97
- toggle(): void;
98
- setCustomColors(colors: CustomThemeColors | null): void;
99
- }
100
-
101
- interface ThemeProviderProps {
102
- children: react__default.ReactNode;
103
- initialMode?: ThemeMode;
104
- /** External mode override - when provided, syncs internal state with this value */
105
- mode?: ThemeMode;
106
- theme?: PartialFdeTheme;
107
- }
108
- declare function ThemeProvider({ children, initialMode, mode: externalMode, theme, }: ThemeProviderProps): react__default.ReactElement;
109
-
110
- declare function useTheme(): FdeTheme;
111
- declare function useThemeContext(): IThemeProvider;
112
-
113
- declare const DEFAULT_FDE_THEME: Record<ThemeMode, FdeTheme>;
114
-
115
- interface FileSystemNode {
116
- id: string;
117
- name: string;
118
- type: FileSystemNodeType;
119
- parentId: string | null;
120
- createdAt: Date;
121
- updatedAt: Date;
122
- }
123
-
124
- interface FileNode extends FileSystemNode {
125
- type: 'file';
126
- content: string;
127
- mimeType?: string;
128
- url?: string;
129
- iconName?: string;
130
- iconColor?: string;
131
- }
132
-
133
- interface FolderNode extends FileSystemNode {
134
- type: 'folder';
135
- children: string[];
136
- iconName?: string;
137
- iconColor?: string;
138
- }
139
-
140
- type FileSystemNodeType = 'file' | 'folder';
141
- type FSNode = FileNode | FolderNode;
142
-
143
- interface FsManifestFile {
144
- name: string;
145
- folder: string;
146
- mimeType: string;
147
- url: string;
148
- }
149
- interface FsManifest {
150
- folders: string[];
151
- files: FsManifestFile[];
152
- }
153
- interface IFileSystem {
154
- initialize(): Promise<void>;
155
- reinitialize(): Promise<void>;
156
- isReady(): boolean;
157
- isEmpty(): boolean;
158
- getNode(id: string): FSNode | undefined;
159
- getChildren(folderId: string): FSNode[];
160
- getRootNodes(): FSNode[];
161
- getAllNodes(): FSNode[];
162
- createFile(name: string, content: string, parentId: string | null, url?: string): Promise<FileNode>;
163
- createFolder(name: string, parentId: string | null, iconName?: string, iconColor?: string): Promise<FolderNode>;
164
- updateFile(id: string, content: string): Promise<FileNode>;
165
- move(id: string, newParentId: string | null): Promise<FSNode>;
166
- delete(id: string): Promise<void>;
167
- readFile(path: string): Promise<string>;
168
- writeFile(path: string, content: string): Promise<void>;
169
- saveBlob(blob: Blob): Promise<string>;
170
- /** url: `idb://{hash}` for IndexedDB, `/api/fs?action=file&path=...` for Docker */
171
- getBlob(url: string): Promise<Blob | null>;
172
- toBlobUrl(url: string): Promise<string | null>;
173
- seed(manifest: FsManifest): Promise<void>;
174
- mergeSeed(manifest: FsManifest): Promise<void>;
175
- getManifestSha(): Promise<string | null>;
176
- saveManifestSha(sha: string): Promise<void>;
177
- clearAll(): Promise<void>;
178
- }
179
-
180
- interface FdeProviderProps {
181
- children: react__default.ReactNode;
182
- fileSystem: IFileSystem;
183
- initialMode?: ThemeMode;
184
- theme?: PartialFdeTheme;
185
- mantineTheme?: MantineThemeOverride;
186
- fallback?: react__default.ReactNode;
187
- onError?: (error: Error) => void;
188
- }
189
- declare function FdeProvider({ children, fileSystem, initialMode, theme, mantineTheme, fallback, onError, }: FdeProviderProps): react__default.ReactElement;
190
-
191
- interface FdeContextValue {
192
- fs: IFileSystem | null;
193
- isReady: boolean;
194
- error: Error | null;
195
- theme: FdeTheme;
196
- setThemeMode: (mode: ThemeMode) => void;
197
- toggleTheme: () => void;
198
- }
199
-
200
- declare function useFdeContext(): FdeContextValue;
201
-
202
- interface AppEntry {
203
- id: string;
204
- name: string;
205
- icon: string;
206
- fcIcon?: string;
207
- iconUrl?: string;
208
- iconColor?: string;
209
- defaultWidth?: number;
210
- defaultHeight?: number;
211
- minWidth?: number | false;
212
- minHeight?: number | false;
213
- canMaximize?: boolean;
214
- alwaysOnTop?: boolean;
215
- autoLoad?: {
216
- url: string;
217
- name?: string;
218
- };
219
- hasContextMenu?: boolean;
220
- singleWindow?: boolean;
221
- }
222
-
223
- type WindowState = 'normal' | 'minimized' | 'maximized';
224
- type WindowInput<T = Record<string, unknown>> = {
225
- title: string;
226
- content: string;
227
- x: number;
228
- y: number;
229
- width: number;
230
- height: number;
231
- minWidth?: number;
232
- minHeight?: number;
233
- icon?: string;
234
- fcIcon?: string;
235
- iconUrl?: string;
236
- iconColor?: string;
237
- canMaximize?: boolean;
238
- alwaysOnTop?: boolean;
239
- contentData?: T;
240
- };
241
-
242
- interface WindowEntity {
243
- id: string;
244
- title: string;
245
- content: string;
246
- x: number;
247
- y: number;
248
- width: number;
249
- height: number;
250
- minWidth?: number;
251
- minHeight?: number;
252
- isOpen: boolean;
253
- state: WindowState;
254
- zIndex: number;
255
- icon?: string;
256
- fcIcon?: string;
257
- iconUrl?: string;
258
- iconColor?: string;
259
- canMaximize?: boolean;
260
- alwaysOnTop?: boolean;
261
- contentData?: Record<string, unknown>;
262
- closeInterceptor?: () => boolean;
263
- }
264
-
265
- interface MenuItemAction {
266
- type: 'item';
267
- label: string;
268
- icon?: string;
269
- onClick: () => void;
270
- disabled?: boolean;
271
- }
272
- interface MenuItemDivider {
273
- type: 'divider';
274
- }
275
- interface MenuItemSlider {
276
- type: 'slider';
277
- label?: string;
278
- min: number;
279
- max: number;
280
- value: number;
281
- onChange: (value: number) => void;
282
- labelFormat?: (value: number) => string;
283
- }
284
- type MenuItem = MenuItemAction | MenuItemDivider | MenuItemSlider;
285
- interface AppMenuDropdown {
286
- type: 'menu';
287
- label: string;
288
- icon?: string;
289
- items: MenuItem[];
290
- rightSection?: ReactNode;
291
- }
292
- interface AppMenuCombobox {
293
- type: 'combobox';
294
- label?: string;
295
- options: string[];
296
- value: string;
297
- onChange: (value: string) => void;
298
- }
299
- interface AppMenuSwitch {
300
- type: 'switch';
301
- label: string;
302
- checked: boolean;
303
- onChange: (value: boolean) => void;
304
- }
305
- interface AppMenuSlider {
306
- type: 'slider';
307
- label?: string;
308
- min: number;
309
- max: number;
310
- value: number;
311
- onChange: (value: number) => void;
312
- marks?: {
313
- value: number;
314
- label?: string;
315
- }[];
316
- labelFormat?: (value: number) => string;
317
- }
318
- interface AppMenuTextInput {
319
- type: 'text-input';
320
- placeholder?: string;
321
- value: string;
322
- onChange: (value: string) => void;
323
- }
324
- interface AppMenuNumberInput {
325
- type: 'number-input';
326
- label?: string;
327
- value: number;
328
- onChange: (value: number) => void;
329
- min?: number;
330
- max?: number;
331
- step?: number;
332
- placeholder?: string;
333
- }
334
- interface AppMenuSelect {
335
- type: 'select';
336
- label?: string;
337
- options: {
338
- value: string;
339
- label: string;
340
- }[];
341
- value: string;
342
- onChange: (value: string) => void;
343
- }
344
- interface AppMenuDirtyIndicator {
345
- type: 'dirty-indicator';
346
- }
347
- type AppMenuElement = AppMenuDropdown | AppMenuCombobox | AppMenuSwitch | AppMenuSlider | AppMenuTextInput | AppMenuNumberInput | AppMenuSelect | AppMenuDirtyIndicator;
348
-
349
- interface WindowContentProps {
350
- window?: WindowEntity;
351
- notifyReady?: (contentData?: Record<string, unknown>) => void;
352
- }
353
- type AppComponent$1 = FC<WindowContentProps>;
354
- type MenuBarBuilder = (window: WindowEntity) => AppMenuElement[] | undefined;
355
- interface MenuBarComponentProps {
356
- windowId: string;
357
- onExit: () => void;
358
- contentData?: Record<string, unknown>;
359
- }
360
- type MenuBarComponent = FC<MenuBarComponentProps>;
361
- interface AppRegistration {
362
- component: AppComponent$1;
363
- buildMenuBar?: MenuBarBuilder;
364
- MenuBarComponent?: MenuBarComponent;
365
- }
366
-
367
- interface DesktopIconEntity {
368
- id: string;
369
- name: string;
370
- icon: string;
371
- iconName?: string;
372
- iconColor?: string;
373
- x: number;
374
- y: number;
375
- appId: string;
376
- nodeId?: string;
377
- }
378
-
379
- interface MenuPosition {
380
- x: number;
381
- y: number;
382
- }
383
-
384
- interface CreateFolderOptions {
385
- iconName?: string;
386
- iconColor?: string;
387
- }
388
-
389
- type LoadingState = 'idle' | 'fetching' | 'compiling' | 'loading' | 'ready' | 'error';
390
- interface LoadingProgress {
391
- state: LoadingState;
392
- progress: number;
393
- message?: string;
394
- appName?: string;
395
- error?: string;
396
- }
397
- interface WindowLoading extends LoadingProgress {
398
- windowId: string;
399
- }
400
-
401
- type DesktopIconInput = Omit<DesktopIconEntity, 'id'>;
402
-
403
- interface OpenAppOptions {
404
- title?: string;
405
- icon?: string;
406
- contentData?: Record<string, unknown>;
407
- position?: {
408
- x?: number;
409
- y?: number;
410
- };
411
- size?: {
412
- width?: number;
413
- height?: number;
414
- };
415
- }
416
- interface FileDialogOptions {
417
- acceptedMimeTypes?: string[];
418
- multiple?: boolean;
419
- defaultPath?: string;
420
- }
421
- interface SaveDialogOptions {
422
- defaultName?: string;
423
- defaultPath?: string;
424
- acceptedMimeTypes?: string[];
425
- }
426
- interface NotificationOptions {
427
- title: string;
428
- message: string;
429
- type?: 'info' | 'success' | 'warning' | 'error';
430
- duration?: number;
431
- }
432
- type FdeEventType = 'window-opened' | 'window-closed' | 'window-focused' | 'window-minimized' | 'window-maximized' | 'file-opened' | 'file-saved' | 'theme-changed' | 'notification-shown';
433
- interface FdeEventPayloads {
434
- 'window-opened': {
435
- windowId: string;
436
- content: string;
437
- };
438
- 'window-closed': {
439
- windowId: string;
440
- };
441
- 'window-focused': {
442
- windowId: string;
443
- };
444
- 'window-minimized': {
445
- windowId: string;
446
- };
447
- 'window-maximized': {
448
- windowId: string;
449
- };
450
- 'file-opened': {
451
- path: string;
452
- appId?: string;
453
- };
454
- 'file-saved': {
455
- path: string;
456
- success: boolean;
457
- };
458
- 'theme-changed': {
459
- theme: string;
460
- };
461
- 'notification-shown': {
462
- notificationId: string;
463
- };
464
- }
465
- interface FdeDesktopAPI {
466
- openApp: (appId: string, options?: OpenAppOptions) => void;
467
- closeWindow: (windowId?: string) => void;
468
- minimizeWindow: (windowId?: string) => void;
469
- maximizeWindow: (windowId?: string) => void;
470
- restoreWindow: (windowId?: string) => void;
471
- focusWindow: (windowId?: string) => void;
472
- openFile: (path: string, appId?: string) => void;
473
- openFileDialog: (options?: FileDialogOptions) => Promise<string | null>;
474
- saveFile: (content: string, options?: SaveDialogOptions) => Promise<boolean>;
475
- saveFileDialog: (options?: SaveDialogOptions) => Promise<string | null>;
476
- getTheme: () => Record<string, unknown>;
477
- setTheme: (theme: Record<string, unknown>) => void;
478
- showNotification: (options: NotificationOptions) => string;
479
- hideNotification: (notificationId: string) => void;
480
- getWindows: () => WindowEntity[];
481
- getActiveWindow: () => WindowEntity | null;
482
- getWindowById: (windowId: string) => WindowEntity | null;
483
- fs: IFileSystem;
484
- on: <T extends FdeEventType>(event: T, callback: (data: FdeEventPayloads[T]) => void) => () => void;
485
- off: <T extends FdeEventType>(event: T, callback: (data: FdeEventPayloads[T]) => void) => void;
486
- appReady: (appId: string) => void;
487
- registerAppInstance: (appId: string, instance: unknown) => void;
488
- }
489
- declare global {
490
- interface Window {
491
- __FDE_API__?: FdeDesktopAPI;
492
- }
493
- }
494
-
495
- declare const createWindow: (input: WindowInput) => WindowEntity;
496
-
497
- declare const createDesktopIcon: (input: DesktopIconInput) => DesktopIconEntity;
498
-
499
- interface LauncherFolder {
500
- id: string;
501
- name: string;
502
- fcIcon: string;
503
- appIds: string[];
504
- isExpanded: boolean;
505
- isPredefined: boolean;
506
- order: number;
507
- }
508
- interface LauncherFolderInput {
509
- name: string;
510
- fcIcon: string;
511
- appIds?: string[];
512
- isExpanded?: boolean;
513
- isPredefined?: boolean;
514
- order?: number;
515
- }
516
- declare const createLauncherFolder: (input: LauncherFolderInput) => LauncherFolder;
517
- declare const createPredefinedLauncherFolder: (input: Omit<LauncherFolderInput, "isPredefined">) => LauncherFolder;
518
- declare const updateLauncherFolder: (folder: LauncherFolder, updates: Partial<Omit<LauncherFolder, "id" | "isPredefined">>) => LauncherFolder;
519
-
520
- declare const createFolder: (name: string, parentId?: string | null, options?: CreateFolderOptions) => FolderNode;
521
- declare const createFile: (name: string, content: string, parentId?: string | null, mimeType?: string, url?: string) => FileNode;
522
-
523
- interface CustomAppManifest {
524
- id: string;
525
- name: string;
526
- version: string;
527
- icon: string;
528
- iconUrl?: string;
529
- entry: string;
530
- window: {
531
- defaultWidth?: number;
532
- defaultHeight?: number;
533
- minWidth?: number | false;
534
- minHeight?: number | false;
535
- canMaximize?: boolean;
536
- alwaysOnTop?: boolean;
537
- singleWindow?: boolean;
538
- };
539
- }
540
- interface AppsManifest {
541
- version: string;
542
- generated: string;
543
- apps: CustomAppManifest[];
544
- }
545
- declare function fetchAppManifest(forceRefresh?: boolean): Promise<AppsManifest | null>;
546
- declare function getCachedManifest(): AppsManifest | null;
547
- declare function clearManifestCache(): void;
548
- declare function updateManifestCache(manifest: CustomAppManifest): void;
549
- declare function removeFromManifestCache(appId: string): void;
550
- declare function getCustomApps(): Promise<CustomAppManifest[]>;
551
- declare function getCustomAppById(appId: string): Promise<CustomAppManifest | undefined>;
552
- declare function isCustomApp(appId: string): boolean;
553
- declare function convertToAppEntry(manifest: CustomAppManifest): Partial<AppEntry>;
554
- declare function mergeAppsWithCustomApps(staticApps: AppEntry[], customApps: CustomAppManifest[]): AppEntry[];
555
- declare function syncWithServer(currentRegisteredApps: Record<string, CustomAppManifest>): Promise<{
556
- added: CustomAppManifest[];
557
- removed: string[];
558
- manifest: AppsManifest | null;
559
- }>;
560
-
561
- type ClipboardAction = 'copy' | 'cut' | null;
562
- interface ClipboardState {
563
- content: FSNode[];
564
- action: ClipboardAction;
565
- }
566
- type DesktopSortMode$1 = 'default' | 'name-asc' | 'name-desc' | 'type';
567
- interface NotificationItem {
568
- id: string;
569
- title: string;
570
- message: string;
571
- onClose?: () => void;
572
- fcIcon?: string;
573
- }
574
- interface DesktopState {
575
- windows: WindowEntity[];
576
- openWindow: (input: WindowInput) => void;
577
- closeWindow: (id: string) => void;
578
- minimizeWindow: (id: string) => void;
579
- maximizeWindow: (id: string) => void;
580
- restoreWindow: (id: string) => void;
581
- focusWindow: (id: string) => void;
582
- moveWindow: (id: string, x: number, y: number) => void;
583
- resizeWindow: (id: string, width: number, height: number) => void;
584
- icons: DesktopIconEntity[];
585
- addIcon: (input: DesktopIconInput) => void;
586
- removeIcon: (id: string) => void;
587
- fsNodes: FSNode[];
588
- desktopFolderId: string | null;
589
- isFsReady: boolean;
590
- createFile: (name: string, content: string, parentId: string | null, url?: string) => Promise<FileNode>;
591
- createFolder: (name: string, parentId: string | null, iconName?: string, iconColor?: string) => Promise<FolderNode>;
592
- initFs: () => Promise<void>;
593
- updateFile: (id: string, content: string) => Promise<void>;
594
- deleteNode: (id: string) => Promise<void>;
595
- moveNode: (id: string, newParentId: string | null) => Promise<void>;
596
- setFsNodes: (nodes: FSNode[]) => void;
597
- syncIcons: () => void;
598
- clipboard: ClipboardState;
599
- copyToClipboard: (nodes: FSNode[]) => void;
600
- cutToClipboard: (nodes: FSNode[]) => void;
601
- clearClipboard: () => void;
602
- contextMenu: {
603
- x: number;
604
- y: number;
605
- owner: string | null;
606
- targetNodeId?: string;
607
- };
608
- openContextMenu: (x: number, y: number, owner: string, targetNodeId?: string) => void;
609
- closeContextMenu: () => void;
610
- filesCurrentFolderId: string | null;
611
- setFilesCurrentFolderId: (id: string | null) => void;
612
- mergeSeed: (manifest: FsManifest) => Promise<void>;
613
- mergeDesktopApps: (appIds: readonly string[]) => void;
614
- reorderDesktopApps: (appIds: readonly string[]) => void;
615
- notifications: NotificationItem[];
616
- addNotification: (item: NotificationItem) => void;
617
- removeNotification: (id: string) => void;
618
- viewportWidth: number;
619
- viewportHeight: number;
620
- isViewportInitialized: boolean;
621
- setViewportSize: (width: number, height: number) => void;
622
- desktopSortMode: DesktopSortMode$1;
623
- filesSortMode: DesktopSortMode$1;
624
- setDesktopSortMode: (mode: DesktopSortMode$1) => void;
625
- setFilesSortMode: (mode: DesktopSortMode$1) => void;
626
- launcherFolders: LauncherFolder[];
627
- setLauncherFolders: (folders: LauncherFolder[]) => void;
628
- createLauncherFolder: (input: LauncherFolderInput) => LauncherFolder;
629
- updateLauncherFolder: (id: string, updates: Partial<Omit<LauncherFolder, 'id' | 'isPredefined'>>) => void;
630
- deleteLauncherFolder: (id: string) => void;
631
- moveLauncherFolder: (id: string, newOrder: number) => void;
632
- addAppToFolder: (appId: string, folderId: string) => void;
633
- removeAppFromFolder: (appId: string, folderId: string) => void;
634
- customApps: CustomAppManifest[];
635
- setCustomApps: (apps: CustomAppManifest[]) => void;
636
- handleCustomAppRegistered: (manifest: CustomAppManifest) => void;
637
- handleCustomAppUnregistered: (appId: string) => void;
638
- }
639
-
640
- interface MountedAppState {
641
- isLoaded: boolean;
642
- isLoading: boolean;
643
- isReady: boolean;
644
- hasError: boolean;
645
- error?: string;
646
- mountedAt: number;
647
- instance?: unknown;
648
- }
649
- interface CustomAppState {
650
- mountedApps: Record<string, MountedAppState>;
651
- registeredApps: Record<string, CustomAppManifest>;
652
- hmrConnected: boolean;
653
- hmrError: string | null;
654
- devServerOffline: boolean;
655
- hmrRetryCount: number;
656
- setAppLoading: (appId: string) => void;
657
- setAppLoaded: (appId: string) => void;
658
- setAppReady: (appId: string, instance?: unknown) => void;
659
- setAppError: (appId: string, error: string) => void;
660
- clearApp: (appId: string) => void;
661
- registerApp: (manifest: CustomAppManifest) => void;
662
- unregisterApp: (appId: string) => void;
663
- setHmrConnected: (connected: boolean) => void;
664
- setHmrError: (error: string | null) => void;
665
- setDevServerOffline: (offline: boolean) => void;
666
- incrementHmrRetry: () => void;
667
- resetHmrRetry: () => void;
668
- }
669
-
670
- interface IWindowManager {
671
- getAll(): WindowEntity[];
672
- getById(id: string): WindowEntity | undefined;
673
- open(input: WindowInput): WindowEntity;
674
- close(id: string): void;
675
- minimize(id: string): void;
676
- maximize(id: string): void;
677
- restore(id: string): void;
678
- focus(id: string): void;
679
- move(id: string, x: number, y: number): void;
680
- resize(id: string, width: number, height: number): void;
681
- loadWindows(windows: WindowEntity[]): void;
682
- }
683
-
684
- interface WindowProps {
685
- window: WindowEntity;
686
- menuBar?: AppMenuElement[];
687
- children?: ReactNode;
688
- closeInterceptor?: () => boolean;
689
- }
690
- interface DesktopIconProps {
691
- icon: DesktopIconEntity;
692
- onDoubleClick: (appId: string, nodeId?: string) => void;
693
- onContextMenu: (e: React.MouseEvent, nodeId: string) => void;
694
- }
695
- interface DesktopContextMenuProps {
696
- opened: boolean;
697
- position: MenuPosition;
698
- onClose: () => void;
699
- onOpenApp: (appId: string) => void;
700
- onToggleTheme: () => void;
701
- }
702
- interface LauncherProps {
703
- fcIcon?: string;
704
- onContextMenu?: (e: React.MouseEvent) => void;
705
- }
706
- interface DesktopAreaProps {
707
- children?: ReactNode;
708
- onContextMenu?: (e: MouseEvent<HTMLDivElement>) => void;
709
- }
710
- interface TaskbarContextMenuProps {
711
- windowMenuOpened: boolean;
712
- panelMenuOpened: boolean;
713
- launcherMenuOpened: boolean;
714
- menuPosition: MenuPosition;
715
- targetWindowId: string | null;
716
- targetWindowState: string | null;
717
- onCloseWindow: (id: string) => void;
718
- onMinimizeWindow: (id: string) => void;
719
- onMaximizeWindow: (id: string) => void;
720
- onRestoreWindow: (id: string) => void;
721
- onClose: () => void;
722
- }
723
-
724
- interface FileIconProps {
725
- type: 'file' | 'folder';
726
- name?: string;
727
- folderNode?: FolderNode;
728
- fileNode?: FileNode;
729
- size?: number;
730
- iconName?: string;
731
- }
732
-
733
- type AppComponent = FC<WindowContentProps>;
734
- interface AppRegistryEntry {
735
- component?: AppComponent;
736
- loader?: () => Promise<{
737
- default: AppComponent;
738
- }>;
739
- menuBarLoader?: () => Promise<{
740
- default: MenuBarComponent;
741
- }>;
742
- buildMenuBar?: MenuBarBuilder;
743
- MenuBarComponent?: MenuBarComponent;
744
- isLazy?: boolean;
745
- appName?: string;
746
- singleWindow?: boolean;
747
- defaultWidth?: number;
748
- defaultHeight?: number;
749
- minWidth?: number | false;
750
- minHeight?: number | false;
751
- canMaximize?: boolean;
752
- alwaysOnTop?: boolean;
753
- icon?: string;
754
- fcIcon?: string;
755
- iconUrl?: string;
756
- iconColor?: string;
757
- }
758
- declare function initRegistry(registry: Record<string, AppRegistryEntry>): void;
759
- declare function getAppComponent(content: string): AppComponent;
760
- declare function getMenuBarBuilder(content: string): MenuBarBuilder | undefined;
761
- declare function getMenuBarComponent(content: string): MenuBarComponent | undefined;
762
- declare function isLazyApp(content: string): boolean;
763
- declare function getAppName(content: string): string | undefined;
764
- declare function registerComponents(entries: Record<string, AppRegistryEntry>): void;
765
- declare const CORE_REGISTRY: Record<string, AppRegistryEntry>;
766
-
767
- interface FdeDesktopProps {
768
- children?: react__default.ReactNode;
769
- fallback?: react__default.ReactNode;
770
- theme?: PartialFdeTheme;
771
- mantineTheme?: MantineThemeOverride;
772
- fileSystem?: IFileSystem;
773
- initialMode?: ThemeMode;
774
- customApps?: Record<string, AppRegistryEntry>;
775
- onError?: (error: Error) => void;
776
- /** URL or import of the default wallpaper image */
777
- defaultWallpaper?: string;
778
- /** App ID to open on startup */
779
- initialApp?: string;
780
- /** Loaders to prefetch in the background after startup */
781
- prefetchLoaders?: Array<{
782
- id: string;
783
- loader: () => Promise<unknown>;
784
- }>;
785
- }
786
- declare function FdeDesktop({ children, fallback, theme, mantineTheme, fileSystem, initialMode, customApps, onError, defaultWallpaper, initialApp, prefetchLoaders, }: FdeDesktopProps): react__default.ReactElement;
787
-
788
- declare const Window: FC<WindowProps>;
789
-
790
- declare const AppReadyProvider: FC<{
791
- children: ReactNode;
792
- }>;
793
-
794
- interface AppReadyContextValue {
795
- notifyReady: (contentData?: Record<string, unknown>) => void;
796
- getContentData: () => Record<string, unknown> | undefined;
797
- }
798
- declare const useAppReady: () => AppReadyContextValue;
799
-
800
- declare const FilesAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
801
- declare const NotesAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
802
- declare const ImageViewerAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
803
- declare const PdfAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
804
- declare const MenuEditAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
805
- declare const UploaderAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
806
- declare const SettingsAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
807
- declare const DeviceInfoAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
808
- declare const CalendarAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
809
- declare const CreateItemAppLazy: react.LazyExoticComponent<react.FC<WindowContentProps>>;
810
- declare const NotesMenuBarLazy: MenuBarComponent;
811
- declare const MenuEditMenuBarLazy: MenuBarComponent;
812
- declare const SettingsMenuBarLazy: MenuBarComponent;
813
- declare const PdfMenuBarLazy: MenuBarComponent;
814
- declare const ImageViewerMenuBarLazy: MenuBarComponent;
815
-
816
- interface AppMenuBarProps {
817
- elements: AppMenuElement[];
818
- }
819
- declare const AppMenuBar: FC<AppMenuBarProps>;
820
-
821
- interface TaskbarProps {
822
- calendarSlot?: ReactNode;
823
- }
824
- declare const Taskbar: FC<TaskbarProps>;
825
-
826
- declare const LanguageSelector: FC;
827
-
828
- declare const Launcher: FC<LauncherProps>;
829
-
830
- declare const TaskbarContextMenu: FC<TaskbarContextMenuProps>;
831
-
832
- interface DesktopProps extends DesktopAreaProps {
833
- wallpaper?: string;
834
- backgroundColor?: string;
835
- }
836
- declare const Desktop: FC<DesktopProps>;
837
-
838
- declare const DesktopIcon: FC<DesktopIconProps>;
839
-
840
- interface DynamicMenuBarRendererProps {
841
- component?: MenuBarComponent;
842
- windowId: string;
843
- contentData: Record<string, unknown> | undefined;
844
- onExit: () => void;
845
- }
846
- declare const DynamicMenuBarRenderer: FC<DynamicMenuBarRendererProps>;
847
-
848
- declare const ContextMenu: FC<DesktopContextMenuProps>;
849
-
850
- interface CreateItemContextMenuProps {
851
- owner: string;
852
- parentId: string | null;
853
- currentPath: string;
854
- }
855
- declare const CreateItemContextMenu: FC<CreateItemContextMenuProps>;
856
-
857
- declare const CalendarApp: FC<WindowContentProps>;
858
-
859
- declare const FilesApp: FC<WindowContentProps>;
860
-
861
- declare const NotesApp: FC<WindowContentProps>;
862
-
863
- declare const ImageViewerApp: FC<WindowContentProps>;
864
-
865
- declare const PdfApp: FC<WindowContentProps>;
866
-
867
- declare const MenuEditApp: FC<WindowContentProps>;
868
-
869
- declare const UploaderApp: FC<WindowContentProps>;
870
-
871
- declare const StorybookApp: FC<WindowContentProps>;
872
-
873
- declare const SettingsApp: FC<WindowContentProps>;
874
-
875
- declare const DeviceInfoApp: FC<WindowContentProps>;
876
-
877
- interface SettingsSection$1 {
878
- id: 'wallpaper' | 'appearance' | 'launcher' | 'font' | 'language' | 'reset';
879
- label: string;
880
- fcIcon: string;
881
- description: string;
882
- }
883
- declare const SETTINGS_SECTIONS: SettingsSection$1[];
884
-
885
- declare const NotesMenuBar: FC<MenuBarComponentProps>;
886
-
887
- declare const MenuEditMenuBar: FC<MenuBarComponentProps>;
888
-
889
- declare const SettingsMenuBar: FC<MenuBarComponentProps>;
890
-
891
- declare const PdfMenuBar: FC<MenuBarComponentProps>;
892
-
893
- declare const ImageViewerMenuBar: FC<MenuBarComponentProps>;
894
-
895
- interface AppIconProps {
896
- fcIcon?: string;
897
- fallback?: string;
898
- iconUrl?: string;
899
- size?: number;
900
- color?: string;
901
- }
902
- declare const AppIcon: FC<AppIconProps>;
903
-
904
- interface VscIconProps {
905
- name: string;
906
- size?: number;
907
- color?: string;
908
- }
909
- declare const VscIcon: FC<VscIconProps>;
910
-
911
- interface AppLoadingProps {
912
- message?: string;
913
- size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
914
- }
915
- declare const AppLoading: FC<AppLoadingProps>;
916
-
917
- interface DirtyIndicatorProps {
918
- size?: number;
919
- }
920
- declare const DirtyIndicator: FC<DirtyIndicatorProps>;
921
-
922
- declare const ContextMenuAnchor: FC<MenuPosition>;
923
-
924
- declare const FileIcon: FC<FileIconProps>;
925
-
926
- interface AppEmptyStateProps {
927
- label?: string;
928
- }
929
- declare const AppEmptyState: FC<AppEmptyStateProps>;
930
-
931
- interface ColorPickerProps {
932
- value: string;
933
- onChange: (color: string) => void;
934
- error?: string;
935
- disabled?: boolean;
936
- }
937
- declare const ColorPicker: FC<ColorPickerProps>;
938
-
939
- declare const CreateItemApp: FC<WindowContentProps>;
940
-
941
- type DownloadStatus = 'idle' | 'downloading' | 'done' | 'error';
942
- interface DownloadState {
943
- status: DownloadStatus;
944
- loaded: number;
945
- total: number | null;
946
- percent: number | null;
947
- error: string | null;
948
- }
949
- interface UseDownloadReturn extends DownloadState {
950
- download: (url: string) => Promise<string | null>;
951
- reset: () => void;
952
- }
953
- declare const useDownload: () => UseDownloadReturn;
954
-
955
- interface DownloadProgressProps {
956
- state: DownloadState;
957
- ariaLabel?: string;
958
- minDisplayTime?: number;
959
- }
960
- declare const DownloadProgress: FC<DownloadProgressProps>;
961
-
962
- interface FilePickerAppProps {
963
- acceptedMimeTypes?: string[];
964
- onConfirm: (node: FileNode) => void;
965
- onCancel: () => void;
966
- }
967
- declare const FilePickerApp: FC<FilePickerAppProps>;
968
- interface FilePickerModalProps extends FilePickerAppProps {
969
- opened: boolean;
970
- }
971
- declare const FilePickerModal: FC<FilePickerModalProps>;
972
-
973
- interface PickerModalProps {
974
- opened: boolean;
975
- children: ReactNode;
976
- ariaLabelKey: string;
977
- ariaLabelNs?: string;
978
- }
979
- declare const PickerModal: react.NamedExoticComponent<PickerModalProps>;
980
-
981
- interface IconColorPickerProps {
982
- selectedIcon: string;
983
- selectedColor: string;
984
- onIconChange: (icon: string) => void;
985
- onColorChange: (color: string) => void;
986
- colorError?: string;
987
- }
988
- declare const IconColorPicker: FC<IconColorPickerProps>;
989
-
990
- interface SettingsSectionProps {
991
- title: string;
992
- description?: string;
993
- children: ReactNode;
994
- }
995
- declare const SettingsSection: FC<SettingsSectionProps>;
996
-
997
- interface ExternalLinkAppConfig {
998
- icon: string;
999
- iconColor: string;
1000
- title: string;
1001
- url: string;
1002
- buttonLabel: string;
1003
- description?: string;
1004
- }
1005
- declare const ExternalLinkApp: FC<WindowContentProps & {
1006
- config: ExternalLinkAppConfig;
1007
- }>;
1008
-
1009
- declare const SUPPORTED_LANGUAGES$1: readonly ["en", "es"];
1010
- type SupportedLanguage$1 = (typeof SUPPORTED_LANGUAGES$1)[number];
1011
-
1012
- interface LanguageFlagProps {
1013
- lang: SupportedLanguage$1;
1014
- size?: number;
1015
- }
1016
- declare const LanguageFlag: FC<LanguageFlagProps>;
1017
-
1018
- interface CollapsibleSectionProps {
1019
- title: string;
1020
- fcIcon?: string;
1021
- expanded: boolean;
1022
- onToggle: () => void;
1023
- children: ReactNode;
1024
- className?: string;
1025
- 'aria-label'?: string;
1026
- }
1027
- declare const CollapsibleSection: FC<CollapsibleSectionProps>;
1028
-
1029
- interface CustomAppLoaderProps {
1030
- appId: string;
1031
- windowIcon?: string;
1032
- notifyReady?: WindowContentProps['notifyReady'];
1033
- }
1034
- declare const CustomAppLoader: FC<CustomAppLoaderProps>;
1035
-
1036
- interface CustomAppLoadingScreenProps {
1037
- progress: LoadingProgress;
1038
- windowIcon?: string;
1039
- }
1040
- declare const CustomAppLoadingScreen: FC<CustomAppLoadingScreenProps>;
1041
-
1042
- interface CustomAppOfflineProps {
1043
- appId: string;
1044
- }
1045
- declare const CustomAppOffline: FC<CustomAppOfflineProps>;
1046
-
1047
- interface CustomAppNotSupportedProps {
1048
- appId: string;
1049
- }
1050
- declare const CustomAppNotSupported: FC<CustomAppNotSupportedProps>;
1051
-
1052
- declare const registerCloseInterceptor: (windowId: string, interceptor: () => boolean) => void;
1053
- declare const unregisterCloseInterceptor: (windowId: string) => void;
1054
- declare const getCloseInterceptor: (windowId: string) => (() => boolean) | undefined;
1055
- interface UseCloseInterceptorOptions {
1056
- isDirtyGetter: () => boolean;
1057
- windowId?: string;
1058
- onDiscard?: () => void;
1059
- onSave?: () => void;
1060
- }
1061
- declare function useCloseInterceptor({ isDirtyGetter, windowId, onDiscard, onSave, }: UseCloseInterceptorOptions): void;
1062
-
1063
- declare function useAppName(appId: string | undefined): string;
1064
-
1065
- declare function useFolderName(folder: {
1066
- id: string;
1067
- name: string;
1068
- isPredefined: boolean;
1069
- }): string;
1070
-
1071
- declare const useClock: () => string;
1072
-
1073
- declare const useAnimationDuration: () => {
1074
- duration: number;
1075
- windowVariants: framer_motion.Variants;
1076
- panelVariants: {
1077
- initial: {
1078
- opacity: number;
1079
- y: number;
1080
- scale: number;
1081
- };
1082
- animate: {
1083
- opacity: number;
1084
- y: number;
1085
- scale: number;
1086
- transition: framer_motion.Transition;
1087
- };
1088
- exit: {
1089
- opacity: number;
1090
- y: number;
1091
- scale: number;
1092
- transition: framer_motion.Transition;
1093
- };
1094
- };
1095
- minimizeVariant: (deltaX: number, deltaY: number) => framer_motion.TargetAndTransition;
1096
- restoreVariant: (deltaX: number, deltaY: number) => framer_motion.TargetAndTransition;
1097
- maximizeTransition: framer_motion.Transition;
1098
- easeIn: framer_motion.Transition;
1099
- easeOut: framer_motion.Transition;
1100
- };
1101
-
1102
- type IconLibrary = 'fi' | 'fc' | 'vsc';
1103
- declare const useDynamicIcon: (name: string, library: IconLibrary) => IconType | null;
1104
- declare const useDynamicIconElement: (name: string, library: IconLibrary, props?: IconBaseProps) => ReactElement | null;
1105
- declare const useFiIcon: (name: string) => IconType | null;
1106
- declare const useFcIcon: (name: string) => IconType | null;
1107
- declare const useVscIcon: (name: string) => IconType | null;
1108
- declare const useFiIconElement: (name: string, props?: IconBaseProps) => ReactElement | null;
1109
- declare const useFcIconElement: (name: string, props?: IconBaseProps) => ReactElement | null;
1110
- declare const useVscIconElement: (name: string, props?: IconBaseProps) => ReactElement | null;
1111
-
1112
- declare const useTaskbarHeight: (opened: boolean) => {
1113
- menuRef: react.RefObject<HTMLDivElement | null>;
1114
- menuHeight: number;
1115
- };
1116
-
1117
- type TaskbarMenuType = 'window' | 'panel' | 'launcher' | null;
1118
- interface UseTaskbarContextMenuReturn {
1119
- activeMenu: TaskbarMenuType;
1120
- position: MenuPosition;
1121
- targetWindowId: string | null;
1122
- windowMenuOpened: boolean;
1123
- panelMenuOpened: boolean;
1124
- launcherMenuOpened: boolean;
1125
- openWindowMenu: (e: React.MouseEvent, windowId: string) => void;
1126
- openPanelMenu: (e: React.MouseEvent) => void;
1127
- openLauncherMenu: (e: React.MouseEvent) => void;
1128
- closeMenu: () => void;
1129
- }
1130
- declare const useTaskbarContextMenu: () => UseTaskbarContextMenuReturn;
1131
-
1132
- declare function useCollapsible(initialExpanded?: Set<string>): {
1133
- expanded: Set<string>;
1134
- toggle: (id: string) => void;
1135
- expand: (id: string) => void;
1136
- collapse: (id: string) => void;
1137
- expandAll: (ids: string[]) => void;
1138
- collapseAll: () => void;
1139
- reset: () => void;
1140
- isExpanded: (id: string) => boolean;
1141
- };
1142
-
1143
- declare function useSearchFilter<T>(items: T[], searchQuery: string, getSearchableText: (item: T) => string | string[]): T[];
1144
-
1145
- interface RegistryContextValue {
1146
- register: (id: string, rect: DOMRect) => void;
1147
- unregister: (id: string) => void;
1148
- getRect: (id: string) => DOMRect | undefined;
1149
- }
1150
- declare const WindowButtonRegistryProvider: FC<{
1151
- children: ReactNode;
1152
- }>;
1153
- declare const useWindowButtonRegistry: () => RegistryContextValue;
1154
-
1155
- declare const AVAILABLE_FONTS: {
1156
- value: string;
1157
- label: string;
1158
- stack: string;
1159
- }[];
1160
- declare const FONT_STACKS: Record<string, string>;
1161
- declare const GOOGLE_FONTS_HREF: Record<string, string>;
1162
-
1163
- /**
1164
- * Applies the currently selected font stack to the document root.
1165
- * Also re-injects <link> tags for all previously downloaded fonts on mount.
1166
- */
1167
- declare const useApplyFont: () => void;
1168
-
1169
- declare const useAppUpdate: () => void;
1170
-
1171
- interface UseContextMenuReturn {
1172
- opened: boolean;
1173
- position: MenuPosition;
1174
- open: (e: MouseEvent, offsetY?: number) => void;
1175
- close: () => void;
1176
- }
1177
- declare const useContextMenu: (offsetY?: number, appId?: string) => UseContextMenuReturn;
1178
-
1179
- type DragItemType = 'app' | 'file' | 'folder';
1180
- type DropTargetType = 'launcher-folder' | 'filesystem-folder' | 'desktop' | 'available-apps';
1181
- interface DragItemData {
1182
- type: DragItemType;
1183
- id: string;
1184
- name: string;
1185
- sourceId: string;
1186
- sourceType: DropTargetType;
1187
- metadata?: {
1188
- fcIcon?: string;
1189
- iconUrl?: string;
1190
- icon?: string;
1191
- iconColor?: string;
1192
- };
1193
- }
1194
- interface DropTarget {
1195
- type: DropTargetType;
1196
- id: string;
1197
- name: string;
1198
- accepts: DragItemType[];
1199
- }
1200
- interface DragDropContextValue {
1201
- activeItem: DragItemData | null;
1202
- overTarget: DropTarget | null;
1203
- }
1204
-
1205
- interface DragDropProviderProps {
1206
- children: ReactNode;
1207
- onDrop: (item: DragItemData, target: DropTarget) => void;
1208
- onCancel?: () => void;
1209
- }
1210
- declare const DragDropProvider: FC<DragDropProviderProps>;
1211
-
1212
- interface UseDraggableItemOptions {
1213
- item: DragItemData;
1214
- disabled?: boolean;
1215
- }
1216
- interface UseDraggableItemReturn {
1217
- attributes: React.HTMLAttributes<HTMLElement>;
1218
- listeners: Record<string, unknown> | undefined;
1219
- setNodeRef: (node: HTMLElement | null) => void;
1220
- isDragging: boolean;
1221
- transform: {
1222
- x: number;
1223
- y: number;
1224
- } | null;
1225
- style: React.CSSProperties;
1226
- }
1227
- declare function useDraggableItem(options: UseDraggableItemOptions): UseDraggableItemReturn;
1228
-
1229
- interface UseDroppableAreaOptions {
1230
- target: DropTarget;
1231
- disabled?: boolean;
1232
- }
1233
- interface UseDroppableAreaReturn {
1234
- setNodeRef: (node: HTMLElement | null) => void;
1235
- isOver: boolean;
1236
- active: DragItemData | null;
1237
- }
1238
- declare function useDroppableArea(options: UseDroppableAreaOptions): UseDroppableAreaReturn;
1239
-
1240
- declare function useDragDropState(): DragDropContextValue;
1241
-
1242
- interface FontDownloadProgress {
1243
- status: 'idle' | 'downloading' | 'done' | 'error';
1244
- loaded: number;
1245
- total: number | null;
1246
- percent: number | null;
1247
- error: string | null;
1248
- }
1249
- interface FontDownloadResult {
1250
- font: string;
1251
- success: boolean;
1252
- }
1253
- declare const useFontDownload: (font: string | null) => {
1254
- progress: FontDownloadProgress;
1255
- isDownloaded: boolean;
1256
- reset: () => void;
1257
- data: FontDownloadResult;
1258
- error: Error;
1259
- isError: true;
1260
- isPending: false;
1261
- isLoading: false;
1262
- isLoadingError: false;
1263
- isRefetchError: true;
1264
- isSuccess: false;
1265
- isPlaceholderData: false;
1266
- status: "error";
1267
- dataUpdatedAt: number;
1268
- errorUpdatedAt: number;
1269
- failureCount: number;
1270
- failureReason: Error | null;
1271
- errorUpdateCount: number;
1272
- isFetched: boolean;
1273
- isFetchedAfterMount: boolean;
1274
- isFetching: boolean;
1275
- isInitialLoading: boolean;
1276
- isPaused: boolean;
1277
- isRefetching: boolean;
1278
- isStale: boolean;
1279
- isEnabled: boolean;
1280
- refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<FontDownloadResult, Error>>;
1281
- fetchStatus: _tanstack_react_query.FetchStatus;
1282
- promise: Promise<FontDownloadResult>;
1283
- } | {
1284
- progress: FontDownloadProgress;
1285
- isDownloaded: boolean;
1286
- reset: () => void;
1287
- data: FontDownloadResult;
1288
- error: null;
1289
- isError: false;
1290
- isPending: false;
1291
- isLoading: false;
1292
- isLoadingError: false;
1293
- isRefetchError: false;
1294
- isSuccess: true;
1295
- isPlaceholderData: false;
1296
- status: "success";
1297
- dataUpdatedAt: number;
1298
- errorUpdatedAt: number;
1299
- failureCount: number;
1300
- failureReason: Error | null;
1301
- errorUpdateCount: number;
1302
- isFetched: boolean;
1303
- isFetchedAfterMount: boolean;
1304
- isFetching: boolean;
1305
- isInitialLoading: boolean;
1306
- isPaused: boolean;
1307
- isRefetching: boolean;
1308
- isStale: boolean;
1309
- isEnabled: boolean;
1310
- refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<FontDownloadResult, Error>>;
1311
- fetchStatus: _tanstack_react_query.FetchStatus;
1312
- promise: Promise<FontDownloadResult>;
1313
- } | {
1314
- progress: FontDownloadProgress;
1315
- isDownloaded: boolean;
1316
- reset: () => void;
1317
- data: undefined;
1318
- error: Error;
1319
- isError: true;
1320
- isPending: false;
1321
- isLoading: false;
1322
- isLoadingError: true;
1323
- isRefetchError: false;
1324
- isSuccess: false;
1325
- isPlaceholderData: false;
1326
- status: "error";
1327
- dataUpdatedAt: number;
1328
- errorUpdatedAt: number;
1329
- failureCount: number;
1330
- failureReason: Error | null;
1331
- errorUpdateCount: number;
1332
- isFetched: boolean;
1333
- isFetchedAfterMount: boolean;
1334
- isFetching: boolean;
1335
- isInitialLoading: boolean;
1336
- isPaused: boolean;
1337
- isRefetching: boolean;
1338
- isStale: boolean;
1339
- isEnabled: boolean;
1340
- refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<FontDownloadResult, Error>>;
1341
- fetchStatus: _tanstack_react_query.FetchStatus;
1342
- promise: Promise<FontDownloadResult>;
1343
- } | {
1344
- progress: FontDownloadProgress;
1345
- isDownloaded: boolean;
1346
- reset: () => void;
1347
- data: undefined;
1348
- error: null;
1349
- isError: false;
1350
- isPending: true;
1351
- isLoading: true;
1352
- isLoadingError: false;
1353
- isRefetchError: false;
1354
- isSuccess: false;
1355
- isPlaceholderData: false;
1356
- status: "pending";
1357
- dataUpdatedAt: number;
1358
- errorUpdatedAt: number;
1359
- failureCount: number;
1360
- failureReason: Error | null;
1361
- errorUpdateCount: number;
1362
- isFetched: boolean;
1363
- isFetchedAfterMount: boolean;
1364
- isFetching: boolean;
1365
- isInitialLoading: boolean;
1366
- isPaused: boolean;
1367
- isRefetching: boolean;
1368
- isStale: boolean;
1369
- isEnabled: boolean;
1370
- refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<FontDownloadResult, Error>>;
1371
- fetchStatus: _tanstack_react_query.FetchStatus;
1372
- promise: Promise<FontDownloadResult>;
1373
- } | {
1374
- progress: FontDownloadProgress;
1375
- isDownloaded: boolean;
1376
- reset: () => void;
1377
- data: undefined;
1378
- error: null;
1379
- isError: false;
1380
- isPending: true;
1381
- isLoadingError: false;
1382
- isRefetchError: false;
1383
- isSuccess: false;
1384
- isPlaceholderData: false;
1385
- status: "pending";
1386
- dataUpdatedAt: number;
1387
- errorUpdatedAt: number;
1388
- failureCount: number;
1389
- failureReason: Error | null;
1390
- errorUpdateCount: number;
1391
- isFetched: boolean;
1392
- isFetchedAfterMount: boolean;
1393
- isFetching: boolean;
1394
- isLoading: boolean;
1395
- isInitialLoading: boolean;
1396
- isPaused: boolean;
1397
- isRefetching: boolean;
1398
- isStale: boolean;
1399
- isEnabled: boolean;
1400
- refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<FontDownloadResult, Error>>;
1401
- fetchStatus: _tanstack_react_query.FetchStatus;
1402
- promise: Promise<FontDownloadResult>;
1403
- } | {
1404
- progress: FontDownloadProgress;
1405
- isDownloaded: boolean;
1406
- reset: () => void;
1407
- data: FontDownloadResult;
1408
- isError: false;
1409
- error: null;
1410
- isPending: false;
1411
- isLoading: false;
1412
- isLoadingError: false;
1413
- isRefetchError: false;
1414
- isSuccess: true;
1415
- isPlaceholderData: true;
1416
- status: "success";
1417
- dataUpdatedAt: number;
1418
- errorUpdatedAt: number;
1419
- failureCount: number;
1420
- failureReason: Error | null;
1421
- errorUpdateCount: number;
1422
- isFetched: boolean;
1423
- isFetchedAfterMount: boolean;
1424
- isFetching: boolean;
1425
- isInitialLoading: boolean;
1426
- isPaused: boolean;
1427
- isRefetching: boolean;
1428
- isStale: boolean;
1429
- isEnabled: boolean;
1430
- refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<FontDownloadResult, Error>>;
1431
- fetchStatus: _tanstack_react_query.FetchStatus;
1432
- promise: Promise<FontDownloadResult>;
1433
- };
1434
-
1435
- interface UseIsDirtyOptions<T> {
1436
- /** Mutable ref that holds the snapshot (used internally). */
1437
- snapshotRef: React.MutableRefObject<T | null>;
1438
- /** Function that returns the current state of the app. */
1439
- getCurrentState: () => T;
1440
- /** Optional initial snapshot – used when no stored snapshot exists. */
1441
- initialSnapshot?: T;
1442
- /** Optional callback invoked when the dirty flag changes. */
1443
- onChange?: (isDirty: boolean) => void;
1444
- /** Unique identifier for the app – used to persist the snapshot in the global store. */
1445
- appId?: string;
1446
- }
1447
- declare function useIsDirty<T>({ snapshotRef, getCurrentState, initialSnapshot, onChange, appId, }: UseIsDirtyOptions<T>): {
1448
- isDirty: boolean;
1449
- takeSnapshot: () => void;
1450
- reset: () => void;
1451
- };
1452
-
1453
- declare function useLanguageSync(): void;
1454
-
1455
- declare class IndexedDBFileSystem implements IFileSystem {
1456
- private db;
1457
- private nodes;
1458
- private ready;
1459
- private initPromise;
1460
- private persistQueue;
1461
- private persistScheduled;
1462
- initialize(): Promise<void>;
1463
- private doInitialize;
1464
- private openDatabase;
1465
- private loadNodes;
1466
- private migrateFromLocalStorage;
1467
- isReady(): boolean;
1468
- reinitialize(): Promise<void>;
1469
- private persistAllNodes;
1470
- private schedulePersist;
1471
- private flushPersistQueue;
1472
- private persistNode;
1473
- private deleteNodeFromPersist;
1474
- saveBlob(blob: Blob): Promise<string>;
1475
- getBlob(url: string): Promise<Blob | null>;
1476
- toBlobUrl(url: string): Promise<string | null>;
1477
- clearBlobs(): Promise<void>;
1478
- readFile(_path: string): Promise<string>;
1479
- writeFile(_path: string, _content: string): Promise<void>;
1480
- getNode(id: string): FSNode | undefined;
1481
- getChildren(folderId: string): FSNode[];
1482
- getRootNodes(): FSNode[];
1483
- getAllNodes(): FSNode[];
1484
- isEmpty(): boolean;
1485
- createFile(name: string, content: string, parentId: string | null, url?: string): Promise<FileNode>;
1486
- createFolder(name: string, parentId: string | null, iconName?: string, iconColor?: string): Promise<FolderNode>;
1487
- updateFile(id: string, content: string): Promise<FileNode>;
1488
- move(id: string, newParentId: string | null): Promise<FSNode>;
1489
- delete(id: string): Promise<void>;
1490
- getManifestSha(): Promise<string | null>;
1491
- saveManifestSha(sha: string): Promise<void>;
1492
- clearAll(): Promise<void>;
1493
- seed(manifest: FsManifest): Promise<void>;
1494
- mergeSeed(manifest: FsManifest): Promise<void>;
1495
- private buildFolderMapFromManifest;
1496
- private addChildToFolder;
1497
- private removeChildFromParent;
1498
- private deleteRecursive;
1499
- }
1500
-
1501
- declare function setApiBaseUrl(url: string): void;
1502
- declare class DockerFileSystemAdapter implements IFileSystem {
1503
- private nodes;
1504
- private pathToId;
1505
- private ready;
1506
- private rootFolderId;
1507
- private initPromise;
1508
- constructor();
1509
- initialize(): Promise<void>;
1510
- private doInitialize;
1511
- reinitialize(): Promise<void>;
1512
- isReady(): boolean;
1513
- isEmpty(): boolean;
1514
- getNode(id: string): FSNode | undefined;
1515
- getChildren(folderId: string): FSNode[];
1516
- getRootNodes(): FSNode[];
1517
- getAllNodes(): FSNode[];
1518
- createFile(name: string, content: string, parentId: string | null, url?: string): Promise<FileNode>;
1519
- createFolder(name: string, parentId: string | null, iconName?: string, iconColor?: string): Promise<FolderNode>;
1520
- updateFile(id: string, content: string): Promise<FileNode>;
1521
- move(id: string, newParentId: string | null): Promise<FSNode>;
1522
- delete(id: string): Promise<void>;
1523
- readFile(path: string): Promise<string>;
1524
- writeFile(path: string, content: string): Promise<void>;
1525
- saveBlob(blob: Blob): Promise<string>;
1526
- getBlob(url: string): Promise<Blob | null>;
1527
- toBlobUrl(url: string): Promise<string | null>;
1528
- getManifestSha(): Promise<string | null>;
1529
- saveManifestSha(_sha: string): Promise<void>;
1530
- seed(_manifest: FsManifest): Promise<void>;
1531
- mergeSeed(_manifest: FsManifest): Promise<void>;
1532
- clearAll(): Promise<void>;
1533
- private getMimeType;
1534
- private getPathFromId;
1535
- private deleteRecursive;
1536
- private syncFromEntries;
1537
- private fetchReaddir;
1538
- private writeFileToServer;
1539
- private createDirOnServer;
1540
- private deleteFromServer;
1541
- }
1542
-
1543
- declare const fileSystem: IndexedDBFileSystem | DockerFileSystemAdapter;
1544
- declare const resetFileSystem: () => void;
1545
- declare const resetWindowManager: () => void;
1546
- declare function resolveFileUrl(url: string, signal?: AbortSignal): Promise<string>;
1547
- declare const useDesktopStore: zustand.UseBoundStore<Omit<zustand.StoreApi<DesktopState>, "setState" | "persist"> & {
1548
- setState(partial: DesktopState | Partial<DesktopState> | ((state: DesktopState) => DesktopState | Partial<DesktopState>), replace?: false | undefined): unknown;
1549
- setState(state: DesktopState | ((state: DesktopState) => DesktopState), replace: true): unknown;
1550
- persist: {
1551
- setOptions: (options: Partial<zustand_middleware.PersistOptions<DesktopState, unknown, unknown>>) => void;
1552
- clearStorage: () => void;
1553
- rehydrate: () => Promise<void> | void;
1554
- hasHydrated: () => boolean;
1555
- onHydrate: (fn: (state: DesktopState) => void) => () => void;
1556
- onFinishHydration: (fn: (state: DesktopState) => void) => () => void;
1557
- getOptions: () => Partial<zustand_middleware.PersistOptions<DesktopState, unknown, unknown>>;
1558
- };
1559
- }>;
1560
-
1561
- declare const getPersistedThemeMode: () => ThemeMode | null;
1562
- declare const useSettingsStore: zustand.UseBoundStore<Omit<zustand.StoreApi<ISettingsState>, "setState" | "persist"> & {
1563
- setState(partial: ISettingsState | Partial<ISettingsState> | ((state: ISettingsState) => ISettingsState | Partial<ISettingsState>), replace?: false | undefined): unknown;
1564
- setState(state: ISettingsState | ((state: ISettingsState) => ISettingsState), replace: true): unknown;
1565
- persist: {
1566
- setOptions: (options: Partial<zustand_middleware.PersistOptions<ISettingsState, unknown, unknown>>) => void;
1567
- clearStorage: () => void;
1568
- rehydrate: () => Promise<void> | void;
1569
- hasHydrated: () => boolean;
1570
- onHydrate: (fn: (state: ISettingsState) => void) => () => void;
1571
- onFinishHydration: (fn: (state: ISettingsState) => void) => () => void;
1572
- getOptions: () => Partial<zustand_middleware.PersistOptions<ISettingsState, unknown, unknown>>;
1573
- };
1574
- }>;
1575
-
1576
- declare const useCustomAppStore: zustand.UseBoundStore<zustand.StoreApi<CustomAppState>>;
1577
-
1578
- interface AppTempMemoryState {
1579
- snapshots: Record<string, unknown>;
1580
- setSnapshot: (appId: string, snapshot: unknown) => void;
1581
- getSnapshot: (appId: string) => unknown | null;
1582
- clearSnapshot: (appId: string) => void;
1583
- }
1584
- declare const useAppTempMemoryStore: zustand.UseBoundStore<Omit<zustand.StoreApi<AppTempMemoryState>, "setState" | "persist"> & {
1585
- setState(partial: AppTempMemoryState | Partial<AppTempMemoryState> | ((state: AppTempMemoryState) => AppTempMemoryState | Partial<AppTempMemoryState>), replace?: false | undefined): unknown;
1586
- setState(state: AppTempMemoryState | ((state: AppTempMemoryState) => AppTempMemoryState), replace: true): unknown;
1587
- persist: {
1588
- setOptions: (options: Partial<zustand_middleware.PersistOptions<AppTempMemoryState, unknown, unknown>>) => void;
1589
- clearStorage: () => void;
1590
- rehydrate: () => Promise<void> | void;
1591
- hasHydrated: () => boolean;
1592
- onHydrate: (fn: (state: AppTempMemoryState) => void) => () => void;
1593
- onFinishHydration: (fn: (state: AppTempMemoryState) => void) => () => void;
1594
- getOptions: () => Partial<zustand_middleware.PersistOptions<AppTempMemoryState, unknown, unknown>>;
1595
- };
1596
- }>;
1597
-
1598
- interface CloseModalState {
1599
- isOpen: boolean;
1600
- windowId: string | null;
1601
- onSave: (() => void) | null;
1602
- onDiscard: (() => void) | null;
1603
- }
1604
- interface CloseModalActions {
1605
- openModal: (windowId: string, onSave: () => void, onDiscard: () => void) => void;
1606
- closeModal: () => void;
1607
- }
1608
- declare const useCloseModalStore: zustand.UseBoundStore<zustand.StoreApi<CloseModalState & CloseModalActions>>;
1609
-
1610
- interface AdaptiveDimensions {
1611
- defaultWidth: number;
1612
- defaultHeight: number;
1613
- minWidth: number;
1614
- minHeight: number;
1615
- }
1616
- declare function useAdaptiveDimensions(): AdaptiveDimensions;
1617
-
1618
- declare const useNotifications: () => {
1619
- notifications: NotificationItem[];
1620
- notify: (title: string, message: string, options?: {
1621
- fcIcon?: string;
1622
- onClose?: () => void;
1623
- }) => string;
1624
- dismiss: (id: string) => void;
1625
- addNotification: (item: NotificationItem) => void;
1626
- removeNotification: (id: string) => void;
1627
- };
1628
-
1629
- declare const useSystemTheme: () => void;
1630
-
1631
- type OpenHookOptions = {
1632
- contentData?: Record<string, unknown>;
1633
- position?: {
1634
- x: number;
1635
- y: number;
1636
- };
1637
- };
1638
- declare const useOpenApp: () => (appId: string, { contentData, position }?: OpenHookOptions) => void;
1639
-
1640
- declare function useFdeApi(): FdeDesktopAPI | null;
1641
-
1642
- declare function useResolvedUrl(url: string | undefined): string | undefined;
1643
-
1644
- interface DeviceInfo {
1645
- isMobile: boolean;
1646
- isTablet: boolean;
1647
- isDesktop: boolean;
1648
- isPortrait: boolean;
1649
- shouldShowWarning: boolean;
1650
- screenWidth: number;
1651
- screenHeight: number;
1652
- }
1653
- declare function useDeviceDetection(): DeviceInfo;
1654
-
1655
- type AppReloadCallback = (appId: string) => void;
1656
- type AppRegisteredCallback = (manifest: CustomAppManifest) => void;
1657
- type AppUnregisteredCallback = (appId: string) => void;
1658
- interface HMRCallbacks {
1659
- onReload: AppReloadCallback;
1660
- onRegistered?: AppRegisteredCallback;
1661
- onUnregistered?: AppUnregisteredCallback;
1662
- }
1663
- /**
1664
- * Reset connection state - useful for testing
1665
- * @internal
1666
- */
1667
- declare function resetHMRState(): void;
1668
- declare function checkHMREndpointExists(): Promise<boolean>;
1669
- declare function useCustomAppHMR(callbacksArg: HMRCallbacks): void;
1670
- declare function useCustomAppLifecycle(): void;
1671
-
1672
- /**
1673
- * Appends a dirty-indicator element to menu items if dirty.
1674
- * Returns a new array when dirty (immutable), or the original array when not dirty.
1675
- *
1676
- * @param items - The array of menu elements
1677
- * @param isDirty - Whether there are unsaved changes
1678
- * @returns The same array if not dirty, or a new array with dirty-indicator appended
1679
- *
1680
- * @example
1681
- * const items: AppMenuElement[] = [
1682
- * { type: 'menu', label: 'File', items: [...] }
1683
- * ];
1684
- *
1685
- * return appendDirtyIndicator(items, isDirty);
1686
- */
1687
- declare function appendDirtyIndicator(items: AppMenuElement[], isDirty: boolean): AppMenuElement[];
1688
-
1689
- declare const injectFontLink: (font: string) => void;
1690
-
1691
- type Runtime = 'browser' | 'docker' | 'electron';
1692
- declare function getRuntime(): Runtime;
1693
- declare function isDocker(): boolean;
1694
- declare function isElectron(): boolean;
1695
- declare function isBrowser(): boolean;
1696
- declare function isDev(): boolean;
1697
-
1698
- declare function generateUUID(): string;
1699
-
1700
- declare function waitForContainer(containerId: string, timeout?: number): Promise<HTMLElement>;
1701
-
1702
- declare function setTestBaseUrl(url: string | null): void;
1703
- declare function getBaseUrl(): string;
1704
- declare function resetBaseUrlCache(): void;
1705
- declare function resolveUrl(relativeUrl: string): string;
1706
-
1707
- declare const sortNodes: (nodes: FSNode[]) => FSNode[];
1708
- declare const SortOptions: {
1709
- readonly BY_TYPE: "byType";
1710
- readonly BY_NAME: "byName";
1711
- readonly BY_DATE: "byDate";
1712
- };
1713
- type SortOption = (typeof SortOptions)[keyof typeof SortOptions];
1714
- type DesktopSortMode = 'default' | 'name-asc' | 'name-desc' | 'type';
1715
- declare function sortDesktopIcons(icons: DesktopIconEntity[], desktopAppsOrder?: readonly string[]): DesktopIconEntity[];
1716
- declare const sortDesktopIconsByMode: (icons: DesktopIconEntity[], mode: DesktopSortMode) => DesktopIconEntity[];
1717
- declare const sortNodesByMode: (nodes: FSNode[], mode: DesktopSortMode) => FSNode[];
1718
-
1719
- declare function formatBytes(bytes: number): string;
1720
-
1721
- declare function hashBlob(blob: Blob): Promise<string>;
1722
-
1723
- interface AppFileHandler {
1724
- appId: string;
1725
- mimeTypes: string[] | ((mimeType: string) => boolean);
1726
- transformContentData: (node: FileNode) => Record<string, unknown>;
1727
- }
1728
- declare const registerAppFileHandler: (handler: AppFileHandler) => void;
1729
- declare const IMAGE_MIME_TYPES: Set<string>;
1730
- declare const TEXT_MIME_TYPES: Set<string>;
1731
- declare function getAppIdForMime(mimeType: string | undefined): string;
1732
- declare function getAppIdForMime(node: FileNode): {
1733
- appId: string;
1734
- contentData: Record<string, unknown>;
1735
- } | null;
1736
-
1737
- declare function getMimeTypeFromExtension(filename: string): string | undefined;
1738
-
1739
- declare const getFileExtension: (name: string) => string;
1740
-
1741
- declare function getFourRandomColors(count?: number): string[];
1742
-
1743
- type Breadcrumb = {
1744
- id: string | null;
1745
- name: string;
1746
- };
1747
- declare const buildBreadcrumbs: (currentFolderId: string | null, fsNodes: FSNode[]) => Breadcrumb[];
1748
-
1749
- declare const isNewerVersion: (latest: string, current: string) => boolean;
1750
-
1751
- interface ClearBrowserDataOptions {
1752
- keepIndexedDB?: boolean;
1753
- keepServiceWorker?: boolean;
1754
- keepLocalStorage?: boolean;
1755
- keepSessionStorage?: boolean;
1756
- }
1757
- declare function clearBrowserData(options?: ClearBrowserDataOptions): Promise<void>;
1758
-
1759
- declare const DEFAULT_WINDOW_DIMENSIONS: {
1760
- readonly defaultWidth: 800;
1761
- readonly defaultHeight: 600;
1762
- readonly minWidth: 640;
1763
- readonly minHeight: 480;
1764
- };
1765
- declare const CORE_APPS: AppEntry[];
1766
- declare const CORE_APP_IDS: string[];
1767
-
1768
- declare const ANIMATION_DURATION = 0.3;
1769
- declare const createEaseIn: (duration: number) => Transition;
1770
- declare const createEaseOut: (duration: number) => Transition;
1771
- declare const createWindowVariants: (duration: number) => Variants;
1772
- declare const createPanelVariants: (duration: number) => {
1773
- initial: {
1774
- opacity: number;
1775
- y: number;
1776
- scale: number;
1777
- };
1778
- animate: {
1779
- opacity: number;
1780
- y: number;
1781
- scale: number;
1782
- transition: Transition;
1783
- };
1784
- exit: {
1785
- opacity: number;
1786
- y: number;
1787
- scale: number;
1788
- transition: Transition;
1789
- };
1790
- };
1791
- declare const createMinimizeVariant: (duration: number) => (deltaX: number, deltaY: number) => TargetAndTransition;
1792
- declare const createRestoreVariant: (duration: number) => (deltaX: number, deltaY: number) => TargetAndTransition;
1793
- declare const createMaximizeTransition: (duration: number) => Transition;
1794
- declare const EASE_IN: Transition;
1795
- declare const EASE_OUT: Transition;
1796
- declare const windowVariants: Variants;
1797
- declare const panelVariants: {
1798
- initial: {
1799
- opacity: number;
1800
- y: number;
1801
- scale: number;
1802
- };
1803
- animate: {
1804
- opacity: number;
1805
- y: number;
1806
- scale: number;
1807
- transition: Transition;
1808
- };
1809
- exit: {
1810
- opacity: number;
1811
- y: number;
1812
- scale: number;
1813
- transition: Transition;
1814
- };
1815
- };
1816
- declare const minimizeVariant: (deltaX: number, deltaY: number) => TargetAndTransition;
1817
- declare const restoreVariant: (deltaX: number, deltaY: number) => TargetAndTransition;
1818
- declare const openVariants: {
1819
- readonly scale: {
1820
- readonly hidden: {
1821
- readonly opacity: 0;
1822
- readonly scale: 0.92;
1823
- readonly y: 12;
1824
- };
1825
- readonly visible: {
1826
- readonly opacity: 1;
1827
- readonly scale: 1;
1828
- readonly y: 0;
1829
- readonly transition: Transition;
1830
- };
1831
- };
1832
- readonly slide: {
1833
- readonly hidden: {
1834
- readonly opacity: 0;
1835
- readonly y: 40;
1836
- };
1837
- readonly visible: {
1838
- readonly opacity: 1;
1839
- readonly y: 0;
1840
- readonly transition: Transition;
1841
- };
1842
- };
1843
- readonly fade: {
1844
- readonly hidden: {
1845
- readonly opacity: 0;
1846
- };
1847
- readonly visible: {
1848
- readonly opacity: 1;
1849
- readonly transition: Transition;
1850
- };
1851
- };
1852
- };
1853
- declare const maximizeTransition: Transition;
1854
- declare const randomWindowPosition: () => {
1855
- x: number;
1856
- y: number;
1857
- };
1858
- declare const centerWindowPosition: (viewportWidth: number, viewportHeight: number, windowWidth: number, windowHeight: number) => {
1859
- x: number;
1860
- y: number;
1861
- };
1862
-
1863
- declare const BREAKPOINTS: {
1864
- readonly MOBILE: 768;
1865
- readonly TABLET: 1024;
1866
- readonly DESKTOP: 1280;
1867
- };
1868
- type Breakpoint = (typeof BREAKPOINTS)[keyof typeof BREAKPOINTS];
1869
-
1870
- declare const TASKBAR_HEIGHT = 48;
1871
- declare const ICON_COLUMN_WIDTH = 80;
1872
- declare const ICON_ROW_HEIGHT = 80;
1873
- declare const ICON_MARGIN = 20;
1874
- declare const DEFAULT_VIEWPORT_WIDTH: 1280;
1875
- declare const DEFAULT_VIEWPORT_HEIGHT: 800;
1876
-
1877
- declare const APP_IDS: {
1878
- readonly WELCOME: "welcome";
1879
- readonly NOTEPAD: "notepad";
1880
- readonly UPLOADER: "uploader";
1881
- readonly FILES: "files";
1882
- readonly SETTINGS: "settings";
1883
- readonly PDF: "pdf";
1884
- readonly CALENDAR: "calendar";
1885
- readonly STORYBOOK: "storybook";
1886
- readonly LINKEDIN: "linkedin";
1887
- readonly GITHUB: "github";
1888
- readonly IMAGE_VIEWER: "image-viewer";
1889
- readonly DOS_EMULATOR: "dos-emulator";
1890
- readonly DOOM: "doom";
1891
- readonly TERMINAL: "terminal";
1892
- readonly CODE_SERVER: "code-server";
1893
- readonly DEVICE_INFO: "device-info";
1894
- readonly MENUEDIT: "menuedit";
1895
- };
1896
- declare const APP_ID_TO_TRANSLATION_KEY: Record<string, string>;
1897
- type AppId = (typeof APP_IDS)[keyof typeof APP_IDS];
1898
- declare const DESKTOP_APPS: AppId[];
1899
-
1900
- declare const EXTRA_APPS: AppEntry[];
1901
- declare const EXTRA_APP_IDS: string[];
1902
-
1903
- declare const PRESET_COLORS: string[];
1904
-
1905
- declare const DEFAULT_THEME_COLORS: Record<ThemeMode, Theme>;
1906
-
1907
- declare const PRESET_ICONS: string[];
1908
-
1909
- declare const CUSTOM_APPS_FOLDER_ID = "launcher-folder-custom-apps";
1910
- declare const PREDEFINED_LAUNCHER_FOLDERS: LauncherFolder[];
1911
- declare const DEFAULT_LAUNCHER_FOLDERS: LauncherFolder[];
1912
-
1913
- declare const APPS: AppEntry[];
1914
- declare const DESKTOP_APPS_ORDER: string[];
1915
- declare function registerCustomApps(apps: AppEntry[]): void;
1916
- declare function registerDesktopApps(appIds: string[]): void;
1917
-
1918
- declare const GITHUB_RELEASES_REPO = "frannunpal/frannunpal.github.io";
1919
- declare const GITHUB_LATEST_RELEASE_URL = "https://api.github.com/repos/frannunpal/frannunpal.github.io/releases/latest";
1920
-
1921
- declare const PROFILE: {
1922
- name: string;
1923
- title: string;
1924
- email: string;
1925
- phone: string;
1926
- location: string;
1927
- linkedin: string;
1928
- github: string;
1929
- cvUrls: {
1930
- en: string;
1931
- es: string;
1932
- };
1933
- };
1934
-
1935
- declare global {
1936
- interface Window {
1937
- __FDE_IN_DOCKER__?: boolean;
1938
- }
1939
- }
1940
- declare const APP_VERSION: string;
1941
-
1942
- declare const getVersionString: () => string;
1943
- declare const getEnvironment: () => string;
1944
- declare const getReleaseType: () => string;
1945
-
1946
- declare class WindowManagerAdapter implements IWindowManager {
1947
- private windows;
1948
- private nextZIndex;
1949
- private assignZIndex;
1950
- reset(): void;
1951
- loadWindows(windows: WindowEntity[]): void;
1952
- getAll(): WindowEntity[];
1953
- getById(id: string): WindowEntity | undefined;
1954
- open(input: WindowInput): WindowEntity;
1955
- close(id: string): void;
1956
- minimize(id: string): void;
1957
- maximize(id: string): void;
1958
- restore(id: string): void;
1959
- focus(id: string): void;
1960
- move(id: string, x: number, y: number): void;
1961
- resize(id: string, width: number, height: number): void;
1962
- private updateWindow;
1963
- }
1964
-
1965
- declare class DefaultThemeProvider implements IThemeProvider {
1966
- private mode;
1967
- private customColors;
1968
- constructor(initialMode?: ThemeMode);
1969
- getTheme(): FdeTheme;
1970
- setMode(mode: ThemeMode): void;
1971
- setCustomColors(colors: CustomThemeColors | null): void;
1972
- toggle(): void;
1973
- }
1974
-
1975
- declare const toMantineTheme: (theme: Theme) => MantineThemeOverride;
1976
-
1977
- declare function initializeFdeApi(): void;
1978
- declare function getFdeApi(): FdeDesktopAPI;
1979
- declare function isFdeApiInitialized(): boolean;
1980
-
1981
- type AppLoader = () => Promise<unknown>;
1982
- declare function prefetchApps(apps: Array<{
1983
- id: string;
1984
- loader: AppLoader;
1985
- }>): void;
1986
-
1987
- /**
1988
- * Storage Migration Utility
1989
- *
1990
- * Migrates legacy storage keys from 'fran-desktop' prefix to 'fde-desktop' prefix.
1991
- * This migration is idempotent and safe to run multiple times.
1992
- *
1993
- * Migration includes:
1994
- * - IndexedDB databases: fran-desktop-fs → fde-desktop-fs, fran-desktop-blobs → fde-desktop-blobs
1995
- * - localStorage keys: fran-desktop:* → fde-desktop:*
1996
- * - Zustand persist key: fran-desktop → fde-desktop
1997
- */
1998
- interface MigrationResult {
1999
- indexedDB: {
2000
- fs: boolean;
2001
- blobs: boolean;
2002
- };
2003
- localStorage: {
2004
- keysMigrated: number;
2005
- };
2006
- version: number;
2007
- }
2008
- /**
2009
- * Runs the complete storage migration
2010
- *
2011
- * @returns MigrationResult with details about what was migrated
2012
- */
2013
- declare function migrateStorage(): Promise<MigrationResult>;
2014
-
2015
- declare const SUPPORTED_LANGUAGES: readonly ["en", "es"];
2016
- type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number];
2017
- declare const DEFAULT_LANGUAGE: SupportedLanguage;
2018
-
2019
- export { ANIMATION_DURATION, APPS, APP_IDS, APP_ID_TO_TRANSLATION_KEY, APP_VERSION, AVAILABLE_FONTS, type AdaptiveDimensions, type AppComponent, AppEmptyState, type AppEntry, type AppFileHandler, AppIcon, type AppId, AppLoading, type AppLoadingProps, AppMenuBar, type AppMenuElement, type AppReadyContextValue, AppReadyProvider, type AppRegistration, type AppRegistryEntry, type AppsManifest, BREAKPOINTS, type Breadcrumb, type Breakpoint, CORE_APPS, CORE_APP_IDS, CORE_REGISTRY, CUSTOM_APPS_FOLDER_ID, CalendarApp, CalendarAppLazy, type ClearBrowserDataOptions, type ClipboardAction, type ClipboardState, CollapsibleSection, ColorPicker, ContextMenu, ContextMenuAnchor, type CreateFolderOptions, CreateItemApp, CreateItemAppLazy, CreateItemContextMenu, CustomAppLoader, CustomAppLoadingScreen, type CustomAppManifest, CustomAppNotSupported, CustomAppOffline, type CustomAppState, type CustomThemeColors, DEFAULT_FDE_THEME, DEFAULT_LANGUAGE, DEFAULT_LAUNCHER_FOLDERS, DEFAULT_THEME_COLORS, DEFAULT_VIEWPORT_HEIGHT, DEFAULT_VIEWPORT_WIDTH, DEFAULT_WINDOW_DIMENSIONS, DESKTOP_APPS, DESKTOP_APPS_ORDER, DefaultThemeProvider, Desktop, type DesktopAreaProps, type DesktopContextMenuProps, DesktopIcon, type DesktopIconEntity, type DesktopIconInput, type DesktopIconProps, type DesktopProps, type DesktopSortMode$1 as DesktopSortMode, type DesktopState, type DesktopTheme, type DeviceInfo, DeviceInfoApp, DeviceInfoAppLazy, DirtyIndicator, DockerFileSystemAdapter, DownloadProgress, type DownloadState, type DownloadStatus, DragDropProvider, type DropTargetType, DynamicMenuBarRenderer, EASE_IN, EASE_OUT, EXTRA_APPS, EXTRA_APP_IDS, ExternalLinkApp, FONT_STACKS, type FSNode, type FdeContextValue, FdeDesktop, type FdeDesktopAPI, type FdeDesktopProps, type FdeEventPayloads, type FdeEventType, FdeProvider, type FdeProviderProps, type FdeTheme, type FileDialogOptions, FileIcon, type FileIconProps, type FileNode, FilePickerApp, FilePickerModal, type FileSystemNode, type FileSystemNodeType, FilesApp, FilesAppLazy, type FolderNode, PickerModal as FolderPicker, type FontDownloadProgress, type FsManifest, type FsManifestFile, GITHUB_LATEST_RELEASE_URL, GITHUB_RELEASES_REPO, GOOGLE_FONTS_HREF, ICON_COLUMN_WIDTH, ICON_MARGIN, ICON_ROW_HEIGHT, type IFileSystem, IMAGE_MIME_TYPES, type ISettingsState, type IThemeProvider, type IWindowManager, IconColorPicker, ImageViewerApp, ImageViewerAppLazy, ImageViewerMenuBar, ImageViewerMenuBarLazy, IndexedDBFileSystem, LanguageFlag, LanguageSelector, Launcher, type LauncherFolder, type LauncherFolderInput, type LauncherProps, type LoadingProgress, type LoadingState, type MenuBarBuilder, type MenuBarComponent, type MenuBarComponentProps, MenuEditApp, MenuEditAppLazy, MenuEditMenuBar, MenuEditMenuBarLazy, type MenuItem, type MenuPosition, type MountedAppState, NotesApp, NotesAppLazy, NotesMenuBar, NotesMenuBarLazy, type NotificationItem, type NotificationOptions, type OpenAppOptions, PREDEFINED_LAUNCHER_FOLDERS, PRESET_COLORS, PRESET_ICONS, PROFILE, type PartialFdeTheme, PdfApp, PdfAppLazy, PdfMenuBar, PdfMenuBarLazy, SETTINGS_SECTIONS, SUPPORTED_LANGUAGES, type SaveDialogOptions, SettingsApp, SettingsAppLazy, SettingsMenuBar, SettingsMenuBarLazy, type SettingsSection$1 as SettingsSection, SettingsSection as SettingsSectionComponent, type SortOption, SortOptions, StorybookApp, type SupportedLanguage$2 as SupportedLanguage, TASKBAR_HEIGHT, TEXT_MIME_TYPES, Taskbar, TaskbarContextMenu, type TaskbarContextMenuProps, type TaskbarMenuType, type TaskbarTheme, type Theme, type ThemeMode, ThemeProvider, type ThemeProviderProps, UploaderApp, UploaderAppLazy, type UseCloseInterceptorOptions, type UseDownloadReturn, type UseIsDirtyOptions, VscIcon, Window, WindowButtonRegistryProvider, type WindowContentProps, type WindowEntity, type WindowInput, type WindowLoading, WindowManagerAdapter, type WindowProps, type WindowState, type WindowTheme, appendDirtyIndicator, buildBreadcrumbs, centerWindowPosition, checkHMREndpointExists, clearBrowserData, clearManifestCache, convertToAppEntry, createDesktopIcon, createEaseIn, createEaseOut, createFile, createFolder, createLauncherFolder, createMaximizeTransition, createMinimizeVariant, createPanelVariants, createPredefinedLauncherFolder, createRestoreVariant, createWindow, createWindowVariants, fetchAppManifest, fileSystem, formatBytes, generateUUID, getAppComponent, getAppIdForMime, getAppName, getBaseUrl, getCachedManifest, getCloseInterceptor, getCustomAppById, getCustomApps, getEnvironment, getFdeApi, getFileExtension, getFourRandomColors, getMenuBarBuilder, getMenuBarComponent, getMimeTypeFromExtension, getPersistedThemeMode, getReleaseType, getRuntime, getVersionString, hashBlob, initRegistry, initializeFdeApi, injectFontLink, isBrowser, isCustomApp, isDev, isDocker, isElectron, isFdeApiInitialized, isLazyApp, isNewerVersion, maximizeTransition, mergeAppsWithCustomApps, migrateStorage, minimizeVariant, openVariants, panelVariants, prefetchApps, randomWindowPosition, registerAppFileHandler, registerCloseInterceptor, registerComponents, registerCustomApps, registerDesktopApps, removeFromManifestCache, resetBaseUrlCache, resetFileSystem, resetHMRState, resetWindowManager, resolveFileUrl, resolveUrl, restoreVariant, setApiBaseUrl, setTestBaseUrl, sortDesktopIcons, sortDesktopIconsByMode, sortNodes, sortNodesByMode, syncWithServer, toMantineTheme, unregisterCloseInterceptor, updateLauncherFolder, updateManifestCache, useAdaptiveDimensions, useAnimationDuration, useAppName, useAppReady, useAppTempMemoryStore, useAppUpdate, useApplyFont, useClock, useCloseInterceptor, useCloseModalStore, useCollapsible, useContextMenu, useCustomAppHMR, useCustomAppLifecycle, useCustomAppStore, useDesktopStore, useDeviceDetection, useDownload, useDragDropState, useDraggableItem, useDroppableArea, useDynamicIcon, useDynamicIconElement, useFcIcon, useFcIconElement, useFdeApi, useFdeContext, useFiIcon, useFiIconElement, useFolderName, useFontDownload, useIsDirty, useLanguageSync, useNotifications, useOpenApp, useResolvedUrl, useSearchFilter, useSettingsStore, useSystemTheme, useTaskbarContextMenu, useTaskbarHeight, useTheme, useThemeContext, useVscIcon, useVscIconElement, useWindowButtonRegistry, waitForContainer, windowVariants };
1
+ import { default as default_2 } from 'react';
2
+ import { FC } from 'react';
3
+ import { FetchStatus } from '@tanstack/react-query';
4
+ import { default as i18n } from 'i18next';
5
+ import { IconBaseProps } from 'react-icons';
6
+ import { IconType } from 'react-icons';
7
+ import { LazyExoticComponent } from 'react';
8
+ import { MantineThemeOverride } from '@mantine/core';
9
+ import { MouseEvent as MouseEvent_2 } from 'react';
10
+ import { NamedExoticComponent } from 'react';
11
+ import { PersistOptions } from 'zustand/middleware';
12
+ import { QueryObserverResult } from '@tanstack/react-query';
13
+ import { ReactElement } from 'react';
14
+ import { ReactNode } from 'react';
15
+ import { RefetchOptions } from '@tanstack/react-query';
16
+ import { RefObject } from 'react';
17
+ import { StoreApi } from 'zustand';
18
+ import { TargetAndTransition } from 'framer-motion';
19
+ import { Transition } from 'framer-motion';
20
+ import { UseBoundStore } from 'zustand';
21
+ import { v4 as uuidv4 } from 'uuid';
22
+ import { Variants } from 'framer-motion';
23
+
24
+ export declare interface AdaptiveDimensions {
25
+ defaultWidth: number;
26
+ defaultHeight: number;
27
+ minWidth: number;
28
+ minHeight: number;
29
+ }
30
+
31
+ export declare const ANIMATION_DURATION = 0.3;
32
+
33
+ export declare const APP_ID_TO_TRANSLATION_KEY: Record<string, string>;
34
+
35
+ export declare const APP_IDS: {
36
+ readonly WELCOME: "welcome";
37
+ readonly NOTEPAD: "notepad";
38
+ readonly UPLOADER: "uploader";
39
+ readonly FILES: "files";
40
+ readonly SETTINGS: "settings";
41
+ readonly PDF: "pdf";
42
+ readonly CALENDAR: "calendar";
43
+ readonly STORYBOOK: "storybook";
44
+ readonly LINKEDIN: "linkedin";
45
+ readonly GITHUB: "github";
46
+ readonly IMAGE_VIEWER: "image-viewer";
47
+ readonly DOS_EMULATOR: "dos-emulator";
48
+ readonly DOOM: "doom";
49
+ readonly TERMINAL: "terminal";
50
+ readonly CODE_SERVER: "code-server";
51
+ readonly DEVICE_INFO: "device-info";
52
+ readonly MENUEDIT: "menuedit";
53
+ };
54
+
55
+ export declare const APP_VERSION: string;
56
+
57
+ export declare type AppComponent = FC<WindowContentProps>;
58
+
59
+ declare type AppComponent_2 = FC<WindowContentProps>;
60
+
61
+ export declare const AppEmptyState: FC<AppEmptyStateProps>;
62
+
63
+ declare interface AppEmptyStateProps {
64
+ label?: string;
65
+ }
66
+
67
+ /**
68
+ * Appends a dirty-indicator element to menu items if dirty.
69
+ * Returns a new array when dirty (immutable), or the original array when not dirty.
70
+ *
71
+ * @param items - The array of menu elements
72
+ * @param isDirty - Whether there are unsaved changes
73
+ * @returns The same array if not dirty, or a new array with dirty-indicator appended
74
+ *
75
+ * @example
76
+ * const items: AppMenuElement[] = [
77
+ * { type: 'menu', label: 'File', items: [...] }
78
+ * ];
79
+ *
80
+ * return appendDirtyIndicator(items, isDirty);
81
+ */
82
+ export declare function appendDirtyIndicator(items: AppMenuElement[], isDirty: boolean): AppMenuElement[];
83
+
84
+ export declare interface AppEntry {
85
+ id: string;
86
+ name: string;
87
+ icon: string;
88
+ fcIcon?: string;
89
+ iconUrl?: string;
90
+ iconColor?: string;
91
+ defaultWidth?: number;
92
+ defaultHeight?: number;
93
+ minWidth?: number | false;
94
+ minHeight?: number | false;
95
+ canMaximize?: boolean;
96
+ alwaysOnTop?: boolean;
97
+ autoLoad?: {
98
+ url: string;
99
+ name?: string;
100
+ };
101
+ hasContextMenu?: boolean;
102
+ singleWindow?: boolean;
103
+ }
104
+
105
+ export declare interface AppFileHandler {
106
+ appId: string;
107
+ mimeTypes: string[] | ((mimeType: string) => boolean);
108
+ transformContentData: (node: FileNode) => Record<string, unknown>;
109
+ }
110
+
111
+ export declare const AppIcon: FC<AppIconProps>;
112
+
113
+ declare interface AppIconProps {
114
+ fcIcon?: string;
115
+ fallback?: string;
116
+ iconUrl?: string;
117
+ size?: number;
118
+ color?: string;
119
+ }
120
+
121
+ export declare type AppId = (typeof APP_IDS)[keyof typeof APP_IDS];
122
+
123
+ declare type AppLoader = () => Promise<unknown>;
124
+
125
+ export declare const AppLoading: FC<AppLoadingProps>;
126
+
127
+ export declare interface AppLoadingProps {
128
+ message?: string;
129
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
130
+ }
131
+
132
+ export declare const AppMenuBar: FC<AppMenuBarProps>;
133
+
134
+ declare interface AppMenuBarProps {
135
+ elements: AppMenuElement[];
136
+ }
137
+
138
+ declare interface AppMenuCombobox {
139
+ type: 'combobox';
140
+ label?: string;
141
+ options: string[];
142
+ value: string;
143
+ onChange: (value: string) => void;
144
+ }
145
+
146
+ declare interface AppMenuDirtyIndicator {
147
+ type: 'dirty-indicator';
148
+ }
149
+
150
+ declare interface AppMenuDropdown {
151
+ type: 'menu';
152
+ label: string;
153
+ icon?: string;
154
+ items: MenuItem[];
155
+ rightSection?: ReactNode;
156
+ }
157
+
158
+ export declare type AppMenuElement = AppMenuDropdown | AppMenuCombobox | AppMenuSwitch | AppMenuSlider | AppMenuTextInput | AppMenuNumberInput | AppMenuSelect | AppMenuDirtyIndicator;
159
+
160
+ declare interface AppMenuNumberInput {
161
+ type: 'number-input';
162
+ label?: string;
163
+ value: number;
164
+ onChange: (value: number) => void;
165
+ min?: number;
166
+ max?: number;
167
+ step?: number;
168
+ placeholder?: string;
169
+ }
170
+
171
+ declare interface AppMenuSelect {
172
+ type: 'select';
173
+ label?: string;
174
+ options: {
175
+ value: string;
176
+ label: string;
177
+ }[];
178
+ value: string;
179
+ onChange: (value: string) => void;
180
+ }
181
+
182
+ declare interface AppMenuSlider {
183
+ type: 'slider';
184
+ label?: string;
185
+ min: number;
186
+ max: number;
187
+ value: number;
188
+ onChange: (value: number) => void;
189
+ marks?: {
190
+ value: number;
191
+ label?: string;
192
+ }[];
193
+ labelFormat?: (value: number) => string;
194
+ }
195
+
196
+ declare interface AppMenuSwitch {
197
+ type: 'switch';
198
+ label: string;
199
+ checked: boolean;
200
+ onChange: (value: boolean) => void;
201
+ }
202
+
203
+ declare interface AppMenuTextInput {
204
+ type: 'text-input';
205
+ placeholder?: string;
206
+ value: string;
207
+ onChange: (value: string) => void;
208
+ }
209
+
210
+ export declare interface AppReadyContextValue {
211
+ notifyReady: (contentData?: Record<string, unknown>) => void;
212
+ getContentData: () => Record<string, unknown> | undefined;
213
+ }
214
+
215
+ export declare const AppReadyProvider: FC<{
216
+ children: ReactNode;
217
+ }>;
218
+
219
+ declare type AppRegisteredCallback = (manifest: CustomAppManifest) => void;
220
+
221
+ export declare interface AppRegistration {
222
+ component: AppComponent_2;
223
+ buildMenuBar?: MenuBarBuilder;
224
+ MenuBarComponent?: MenuBarComponent;
225
+ }
226
+
227
+ export declare interface AppRegistryEntry {
228
+ component?: AppComponent;
229
+ loader?: () => Promise<{
230
+ default: AppComponent;
231
+ }>;
232
+ menuBarLoader?: () => Promise<{
233
+ default: MenuBarComponent;
234
+ }>;
235
+ buildMenuBar?: MenuBarBuilder;
236
+ MenuBarComponent?: MenuBarComponent;
237
+ isLazy?: boolean;
238
+ appName?: string;
239
+ singleWindow?: boolean;
240
+ defaultWidth?: number;
241
+ defaultHeight?: number;
242
+ minWidth?: number | false;
243
+ minHeight?: number | false;
244
+ canMaximize?: boolean;
245
+ alwaysOnTop?: boolean;
246
+ icon?: string;
247
+ fcIcon?: string;
248
+ iconUrl?: string;
249
+ iconColor?: string;
250
+ }
251
+
252
+ declare type AppReloadCallback = (appId: string) => void;
253
+
254
+ export declare const APPS: AppEntry[];
255
+
256
+ export declare interface AppsManifest {
257
+ version: string;
258
+ generated: string;
259
+ apps: CustomAppManifest[];
260
+ }
261
+
262
+ declare interface AppTempMemoryState {
263
+ snapshots: Record<string, unknown>;
264
+ setSnapshot: (appId: string, snapshot: unknown) => void;
265
+ getSnapshot: (appId: string) => unknown | null;
266
+ clearSnapshot: (appId: string) => void;
267
+ }
268
+
269
+ declare type AppUnregisteredCallback = (appId: string) => void;
270
+
271
+ export declare const AVAILABLE_FONTS: {
272
+ value: string;
273
+ label: string;
274
+ stack: string;
275
+ }[];
276
+
277
+ export declare type Breadcrumb = {
278
+ id: string | null;
279
+ name: string;
280
+ };
281
+
282
+ export declare type Breakpoint = (typeof BREAKPOINTS)[keyof typeof BREAKPOINTS];
283
+
284
+ export declare const BREAKPOINTS: {
285
+ readonly MOBILE: 768;
286
+ readonly TABLET: 1024;
287
+ readonly DESKTOP: 1280;
288
+ };
289
+
290
+ export declare const buildBreadcrumbs: (currentFolderId: string | null, fsNodes: FSNode[]) => Breadcrumb[];
291
+
292
+ export declare const CalendarApp: FC<WindowContentProps>;
293
+
294
+ export declare const CalendarAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
295
+
296
+ export declare const centerWindowPosition: (viewportWidth: number, viewportHeight: number, windowWidth: number, windowHeight: number) => {
297
+ x: number;
298
+ y: number;
299
+ };
300
+
301
+ export declare function checkHMREndpointExists(): Promise<boolean>;
302
+
303
+ export declare function clearBrowserData(options?: ClearBrowserDataOptions): Promise<void>;
304
+
305
+ export declare interface ClearBrowserDataOptions {
306
+ keepIndexedDB?: boolean;
307
+ keepServiceWorker?: boolean;
308
+ keepLocalStorage?: boolean;
309
+ keepSessionStorage?: boolean;
310
+ }
311
+
312
+ export declare function clearManifestCache(): void;
313
+
314
+ export declare type ClipboardAction = 'copy' | 'cut' | null;
315
+
316
+ export declare interface ClipboardState {
317
+ content: FSNode[];
318
+ action: ClipboardAction;
319
+ }
320
+
321
+ declare interface CloseModalActions {
322
+ openModal: (windowId: string, onSave: () => void, onDiscard: () => void) => void;
323
+ closeModal: () => void;
324
+ }
325
+
326
+ declare interface CloseModalState {
327
+ isOpen: boolean;
328
+ windowId: string | null;
329
+ onSave: (() => void) | null;
330
+ onDiscard: (() => void) | null;
331
+ }
332
+
333
+ export declare const CollapsibleSection: FC<CollapsibleSectionProps>;
334
+
335
+ declare interface CollapsibleSectionProps {
336
+ title: string;
337
+ fcIcon?: string;
338
+ expanded: boolean;
339
+ onToggle: () => void;
340
+ children: ReactNode;
341
+ className?: string;
342
+ 'aria-label'?: string;
343
+ }
344
+
345
+ export declare const ColorPicker: FC<ColorPickerProps>;
346
+
347
+ declare interface ColorPickerProps {
348
+ value: string;
349
+ onChange: (color: string) => void;
350
+ error?: string;
351
+ disabled?: boolean;
352
+ }
353
+
354
+ export declare const ContextMenu: FC<DesktopContextMenuProps>;
355
+
356
+ export declare const ContextMenuAnchor: FC<MenuPosition>;
357
+
358
+ export declare function convertToAppEntry(manifest: CustomAppManifest): Partial<AppEntry>;
359
+
360
+ export declare const CORE_APP_IDS: string[];
361
+
362
+ export declare const CORE_APPS: AppEntry[];
363
+
364
+ export declare const CORE_REGISTRY: Record<string, AppRegistryEntry>;
365
+
366
+ export declare const createDesktopIcon: (input: DesktopIconInput) => DesktopIconEntity;
367
+
368
+ export declare const createEaseIn: (duration: number) => Transition;
369
+
370
+ export declare const createEaseOut: (duration: number) => Transition;
371
+
372
+ export declare const createFile: (name: string, content: string, parentId?: string | null, mimeType?: string, url?: string) => FileNode;
373
+
374
+ export declare const createFolder: (name: string, parentId?: string | null, options?: CreateFolderOptions) => FolderNode;
375
+
376
+ export declare interface CreateFolderOptions {
377
+ iconName?: string;
378
+ iconColor?: string;
379
+ }
380
+
381
+ export declare const CreateItemApp: FC<WindowContentProps>;
382
+
383
+ export declare const CreateItemAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
384
+
385
+ export declare const CreateItemContextMenu: FC<CreateItemContextMenuProps>;
386
+
387
+ declare interface CreateItemContextMenuProps {
388
+ owner: string;
389
+ parentId: string | null;
390
+ currentPath: string;
391
+ }
392
+
393
+ export declare const createLauncherFolder: (input: LauncherFolderInput) => LauncherFolder;
394
+
395
+ export declare const createMaximizeTransition: (duration: number) => Transition;
396
+
397
+ export declare const createMinimizeVariant: (duration: number) => (deltaX: number, deltaY: number) => TargetAndTransition;
398
+
399
+ export declare const createPanelVariants: (duration: number) => {
400
+ initial: {
401
+ opacity: number;
402
+ y: number;
403
+ scale: number;
404
+ };
405
+ animate: {
406
+ opacity: number;
407
+ y: number;
408
+ scale: number;
409
+ transition: Transition;
410
+ };
411
+ exit: {
412
+ opacity: number;
413
+ y: number;
414
+ scale: number;
415
+ transition: Transition;
416
+ };
417
+ };
418
+
419
+ export declare const createPredefinedLauncherFolder: (input: Omit<LauncherFolderInput, "isPredefined">) => LauncherFolder;
420
+
421
+ export declare const createRestoreVariant: (duration: number) => (deltaX: number, deltaY: number) => TargetAndTransition;
422
+
423
+ export declare const createWindow: (input: WindowInput) => WindowEntity;
424
+
425
+ export declare const createWindowVariants: (duration: number) => Variants;
426
+
427
+ export declare const CUSTOM_APPS_FOLDER_ID = "launcher-folder-custom-apps";
428
+
429
+ export declare const CustomAppLoader: FC<CustomAppLoaderProps>;
430
+
431
+ declare interface CustomAppLoaderProps {
432
+ appId: string;
433
+ windowIcon?: string;
434
+ notifyReady?: WindowContentProps['notifyReady'];
435
+ }
436
+
437
+ export declare const CustomAppLoadingScreen: FC<CustomAppLoadingScreenProps>;
438
+
439
+ declare interface CustomAppLoadingScreenProps {
440
+ progress: LoadingProgress;
441
+ windowIcon?: string;
442
+ }
443
+
444
+ export declare interface CustomAppManifest {
445
+ id: string;
446
+ name: string;
447
+ version: string;
448
+ icon: string;
449
+ iconUrl?: string;
450
+ entry: string;
451
+ window: {
452
+ defaultWidth?: number;
453
+ defaultHeight?: number;
454
+ minWidth?: number | false;
455
+ minHeight?: number | false;
456
+ canMaximize?: boolean;
457
+ alwaysOnTop?: boolean;
458
+ singleWindow?: boolean;
459
+ };
460
+ }
461
+
462
+ export declare const CustomAppNotSupported: FC<CustomAppNotSupportedProps>;
463
+
464
+ declare interface CustomAppNotSupportedProps {
465
+ appId: string;
466
+ }
467
+
468
+ export declare const CustomAppOffline: FC<CustomAppOfflineProps>;
469
+
470
+ declare interface CustomAppOfflineProps {
471
+ appId: string;
472
+ }
473
+
474
+ export declare interface CustomAppState {
475
+ mountedApps: Record<string, MountedAppState>;
476
+ registeredApps: Record<string, CustomAppManifest>;
477
+ hmrConnected: boolean;
478
+ hmrError: string | null;
479
+ devServerOffline: boolean;
480
+ hmrRetryCount: number;
481
+ setAppLoading: (appId: string) => void;
482
+ setAppLoaded: (appId: string) => void;
483
+ setAppReady: (appId: string, instance?: unknown) => void;
484
+ setAppError: (appId: string, error: string) => void;
485
+ clearApp: (appId: string) => void;
486
+ registerApp: (manifest: CustomAppManifest) => void;
487
+ unregisterApp: (appId: string) => void;
488
+ setHmrConnected: (connected: boolean) => void;
489
+ setHmrError: (error: string | null) => void;
490
+ setDevServerOffline: (offline: boolean) => void;
491
+ incrementHmrRetry: () => void;
492
+ resetHmrRetry: () => void;
493
+ }
494
+
495
+ export declare interface CustomThemeColors {
496
+ taskbar: string;
497
+ window: string;
498
+ accent: string;
499
+ }
500
+
501
+ export declare const DEFAULT_FDE_THEME: Record<ThemeMode, FdeTheme>;
502
+
503
+ export declare const DEFAULT_LANGUAGE: SupportedLanguage_3;
504
+
505
+ export declare const DEFAULT_LAUNCHER_FOLDERS: LauncherFolder[];
506
+
507
+ export declare const DEFAULT_THEME_COLORS: Record<ThemeMode, Theme>;
508
+
509
+ export declare const DEFAULT_VIEWPORT_HEIGHT: 800;
510
+
511
+ export declare const DEFAULT_VIEWPORT_WIDTH: 1280;
512
+
513
+ export declare const DEFAULT_WINDOW_DIMENSIONS: {
514
+ readonly defaultWidth: 800;
515
+ readonly defaultHeight: 600;
516
+ readonly minWidth: 640;
517
+ readonly minHeight: 480;
518
+ };
519
+
520
+ export declare class DefaultThemeProvider implements IThemeProvider {
521
+ private mode;
522
+ private customColors;
523
+ constructor(initialMode?: ThemeMode);
524
+ getTheme(): FdeTheme;
525
+ setMode(mode: ThemeMode): void;
526
+ setCustomColors(colors: CustomThemeColors | null): void;
527
+ toggle(): void;
528
+ }
529
+
530
+ export declare const Desktop: FC<DesktopProps>;
531
+
532
+ export declare const DESKTOP_APPS: AppId[];
533
+
534
+ export declare const DESKTOP_APPS_ORDER: string[];
535
+
536
+ export declare interface DesktopAreaProps {
537
+ children?: ReactNode;
538
+ onContextMenu?: (e: MouseEvent_2<HTMLDivElement>) => void;
539
+ }
540
+
541
+ export declare interface DesktopContextMenuProps {
542
+ opened: boolean;
543
+ position: MenuPosition;
544
+ onClose: () => void;
545
+ onOpenApp: (appId: string) => void;
546
+ onToggleTheme: () => void;
547
+ }
548
+
549
+ export declare const DesktopIcon: FC<DesktopIconProps>;
550
+
551
+ export declare interface DesktopIconEntity {
552
+ id: string;
553
+ name: string;
554
+ icon: string;
555
+ iconName?: string;
556
+ iconColor?: string;
557
+ x: number;
558
+ y: number;
559
+ appId: string;
560
+ nodeId?: string;
561
+ }
562
+
563
+ export declare type DesktopIconInput = Omit<DesktopIconEntity, 'id'>;
564
+
565
+ export declare interface DesktopIconProps {
566
+ icon: DesktopIconEntity;
567
+ onDoubleClick: (appId: string, nodeId?: string) => void;
568
+ onContextMenu: (e: React.MouseEvent, nodeId: string) => void;
569
+ }
570
+
571
+ export declare interface DesktopProps extends DesktopAreaProps {
572
+ wallpaper?: string;
573
+ backgroundColor?: string;
574
+ }
575
+
576
+ export declare type DesktopSortMode = 'default' | 'name-asc' | 'name-desc' | 'type';
577
+
578
+ declare type DesktopSortMode_2 = 'default' | 'name-asc' | 'name-desc' | 'type';
579
+
580
+ export declare interface DesktopState {
581
+ windows: WindowEntity[];
582
+ openWindow: (input: WindowInput) => void;
583
+ closeWindow: (id: string) => void;
584
+ minimizeWindow: (id: string) => void;
585
+ maximizeWindow: (id: string) => void;
586
+ restoreWindow: (id: string) => void;
587
+ focusWindow: (id: string) => void;
588
+ moveWindow: (id: string, x: number, y: number) => void;
589
+ resizeWindow: (id: string, width: number, height: number) => void;
590
+ icons: DesktopIconEntity[];
591
+ addIcon: (input: DesktopIconInput) => void;
592
+ removeIcon: (id: string) => void;
593
+ fsNodes: FSNode[];
594
+ desktopFolderId: string | null;
595
+ isFsReady: boolean;
596
+ createFile: (name: string, content: string, parentId: string | null, url?: string) => Promise<FileNode>;
597
+ createFolder: (name: string, parentId: string | null, iconName?: string, iconColor?: string) => Promise<FolderNode>;
598
+ initFs: () => Promise<void>;
599
+ updateFile: (id: string, content: string) => Promise<void>;
600
+ deleteNode: (id: string) => Promise<void>;
601
+ moveNode: (id: string, newParentId: string | null) => Promise<void>;
602
+ setFsNodes: (nodes: FSNode[]) => void;
603
+ syncIcons: () => void;
604
+ clipboard: ClipboardState;
605
+ copyToClipboard: (nodes: FSNode[]) => void;
606
+ cutToClipboard: (nodes: FSNode[]) => void;
607
+ clearClipboard: () => void;
608
+ contextMenu: {
609
+ x: number;
610
+ y: number;
611
+ owner: string | null;
612
+ targetNodeId?: string;
613
+ };
614
+ openContextMenu: (x: number, y: number, owner: string, targetNodeId?: string) => void;
615
+ closeContextMenu: () => void;
616
+ filesCurrentFolderId: string | null;
617
+ setFilesCurrentFolderId: (id: string | null) => void;
618
+ mergeSeed: (manifest: FsManifest) => Promise<void>;
619
+ mergeDesktopApps: (appIds: readonly string[]) => void;
620
+ reorderDesktopApps: (appIds: readonly string[]) => void;
621
+ notifications: NotificationItem[];
622
+ addNotification: (item: NotificationItem) => void;
623
+ removeNotification: (id: string) => void;
624
+ viewportWidth: number;
625
+ viewportHeight: number;
626
+ isViewportInitialized: boolean;
627
+ setViewportSize: (width: number, height: number) => void;
628
+ desktopSortMode: DesktopSortMode;
629
+ filesSortMode: DesktopSortMode;
630
+ setDesktopSortMode: (mode: DesktopSortMode) => void;
631
+ setFilesSortMode: (mode: DesktopSortMode) => void;
632
+ launcherFolders: LauncherFolder[];
633
+ setLauncherFolders: (folders: LauncherFolder[]) => void;
634
+ createLauncherFolder: (input: LauncherFolderInput) => LauncherFolder;
635
+ updateLauncherFolder: (id: string, updates: Partial<Omit<LauncherFolder, 'id' | 'isPredefined'>>) => void;
636
+ deleteLauncherFolder: (id: string) => void;
637
+ moveLauncherFolder: (id: string, newOrder: number) => void;
638
+ addAppToFolder: (appId: string, folderId: string) => void;
639
+ removeAppFromFolder: (appId: string, folderId: string) => void;
640
+ customApps: CustomAppManifest[];
641
+ setCustomApps: (apps: CustomAppManifest[]) => void;
642
+ handleCustomAppRegistered: (manifest: CustomAppManifest) => void;
643
+ handleCustomAppUnregistered: (appId: string) => void;
644
+ }
645
+
646
+ export declare interface DesktopTheme {
647
+ background: string;
648
+ iconSize: number;
649
+ iconSpacing: number;
650
+ }
651
+
652
+ export declare interface DeviceInfo {
653
+ isMobile: boolean;
654
+ isTablet: boolean;
655
+ isDesktop: boolean;
656
+ isPortrait: boolean;
657
+ shouldShowWarning: boolean;
658
+ screenWidth: number;
659
+ screenHeight: number;
660
+ }
661
+
662
+ export declare const DeviceInfoApp: FC<WindowContentProps>;
663
+
664
+ export declare const DeviceInfoAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
665
+
666
+ export declare const DirtyIndicator: FC<DirtyIndicatorProps>;
667
+
668
+ declare interface DirtyIndicatorProps {
669
+ size?: number;
670
+ }
671
+
672
+ export declare class DockerFileSystemAdapter implements IFileSystem {
673
+ private nodes;
674
+ private pathToId;
675
+ private ready;
676
+ private rootFolderId;
677
+ private initPromise;
678
+ constructor();
679
+ initialize(): Promise<void>;
680
+ private doInitialize;
681
+ reinitialize(): Promise<void>;
682
+ isReady(): boolean;
683
+ isEmpty(): boolean;
684
+ getNode(id: string): FSNode | undefined;
685
+ getChildren(folderId: string): FSNode[];
686
+ getRootNodes(): FSNode[];
687
+ getAllNodes(): FSNode[];
688
+ createFile(name: string, content: string, parentId: string | null, url?: string): Promise<FileNode>;
689
+ createFolder(name: string, parentId: string | null, iconName?: string, iconColor?: string): Promise<FolderNode>;
690
+ updateFile(id: string, content: string): Promise<FileNode>;
691
+ move(id: string, newParentId: string | null): Promise<FSNode>;
692
+ delete(id: string): Promise<void>;
693
+ readFile(path: string): Promise<string>;
694
+ writeFile(path: string, content: string): Promise<void>;
695
+ saveBlob(blob: Blob): Promise<string>;
696
+ getBlob(url: string): Promise<Blob | null>;
697
+ toBlobUrl(url: string): Promise<string | null>;
698
+ getManifestSha(): Promise<string | null>;
699
+ saveManifestSha(_sha: string): Promise<void>;
700
+ seed(_manifest: FsManifest): Promise<void>;
701
+ mergeSeed(_manifest: FsManifest): Promise<void>;
702
+ clearAll(): Promise<void>;
703
+ private getMimeType;
704
+ private getPathFromId;
705
+ private deleteRecursive;
706
+ private syncFromEntries;
707
+ private fetchReaddir;
708
+ private writeFileToServer;
709
+ private createDirOnServer;
710
+ private deleteFromServer;
711
+ }
712
+
713
+ export declare const DownloadProgress: FC<DownloadProgressProps>;
714
+
715
+ declare interface DownloadProgressProps {
716
+ state: DownloadState;
717
+ ariaLabel?: string;
718
+ minDisplayTime?: number;
719
+ }
720
+
721
+ export declare interface DownloadState {
722
+ status: DownloadStatus;
723
+ loaded: number;
724
+ total: number | null;
725
+ percent: number | null;
726
+ error: string | null;
727
+ }
728
+
729
+ export declare type DownloadStatus = 'idle' | 'downloading' | 'done' | 'error';
730
+
731
+ declare interface DragDropContextValue {
732
+ activeItem: DragItemData | null;
733
+ overTarget: DropTarget | null;
734
+ }
735
+
736
+ export declare const DragDropProvider: FC<DragDropProviderProps>;
737
+
738
+ declare interface DragDropProviderProps {
739
+ children: ReactNode;
740
+ onDrop: (item: DragItemData, target: DropTarget) => void;
741
+ onCancel?: () => void;
742
+ }
743
+
744
+ declare interface DragItemData {
745
+ type: DragItemType;
746
+ id: string;
747
+ name: string;
748
+ sourceId: string;
749
+ sourceType: DropTargetType;
750
+ metadata?: {
751
+ fcIcon?: string;
752
+ iconUrl?: string;
753
+ icon?: string;
754
+ iconColor?: string;
755
+ };
756
+ }
757
+
758
+ declare type DragItemType = 'app' | 'file' | 'folder';
759
+
760
+ declare interface DropTarget {
761
+ type: DropTargetType;
762
+ id: string;
763
+ name: string;
764
+ accepts: DragItemType[];
765
+ }
766
+
767
+ export declare type DropTargetType = 'launcher-folder' | 'filesystem-folder' | 'desktop' | 'available-apps';
768
+
769
+ export declare const DynamicMenuBarRenderer: FC<DynamicMenuBarRendererProps>;
770
+
771
+ declare interface DynamicMenuBarRendererProps {
772
+ component?: MenuBarComponent;
773
+ windowId: string;
774
+ contentData: Record<string, unknown> | undefined;
775
+ onExit: () => void;
776
+ }
777
+
778
+ export declare const EASE_IN: Transition;
779
+
780
+ export declare const EASE_OUT: Transition;
781
+
782
+ export declare const ExternalLinkApp: FC<WindowContentProps & {
783
+ config: ExternalLinkAppConfig;
784
+ }>;
785
+
786
+ declare interface ExternalLinkAppConfig {
787
+ icon: string;
788
+ iconColor: string;
789
+ title: string;
790
+ url: string;
791
+ buttonLabel: string;
792
+ description?: string;
793
+ }
794
+
795
+ export declare const EXTRA_APP_IDS: string[];
796
+
797
+ export declare const EXTRA_APPS: AppEntry[];
798
+
799
+ export declare interface FdeContextValue {
800
+ fs: IFileSystem | null;
801
+ isReady: boolean;
802
+ error: Error | null;
803
+ theme: FdeTheme;
804
+ setThemeMode: (mode: ThemeMode) => void;
805
+ toggleTheme: () => void;
806
+ }
807
+
808
+ export declare function FdeDesktop({ children, fallback, theme, mantineTheme, fileSystem, initialMode, customApps, onError, defaultWallpaper, initialApp, prefetchLoaders, }: FdeDesktopProps): default_2.ReactElement;
809
+
810
+ export declare interface FdeDesktopAPI {
811
+ openApp: (appId: string, options?: OpenAppOptions) => void;
812
+ closeWindow: (windowId?: string) => void;
813
+ minimizeWindow: (windowId?: string) => void;
814
+ maximizeWindow: (windowId?: string) => void;
815
+ restoreWindow: (windowId?: string) => void;
816
+ focusWindow: (windowId?: string) => void;
817
+ openFile: (path: string, appId?: string) => void;
818
+ openFileDialog: (options?: FileDialogOptions) => Promise<string | null>;
819
+ saveFile: (content: string, options?: SaveDialogOptions) => Promise<boolean>;
820
+ saveFileDialog: (options?: SaveDialogOptions) => Promise<string | null>;
821
+ getTheme: () => Record<string, unknown>;
822
+ setTheme: (theme: Record<string, unknown>) => void;
823
+ showNotification: (options: NotificationOptions_2) => string;
824
+ hideNotification: (notificationId: string) => void;
825
+ getWindows: () => WindowEntity[];
826
+ getActiveWindow: () => WindowEntity | null;
827
+ getWindowById: (windowId: string) => WindowEntity | null;
828
+ fs: IFileSystem;
829
+ on: <T extends FdeEventType>(event: T, callback: (data: FdeEventPayloads[T]) => void) => () => void;
830
+ off: <T extends FdeEventType>(event: T, callback: (data: FdeEventPayloads[T]) => void) => void;
831
+ appReady: (appId: string) => void;
832
+ registerAppInstance: (appId: string, instance: unknown) => void;
833
+ }
834
+
835
+ export declare interface FdeDesktopProps {
836
+ children?: default_2.ReactNode;
837
+ fallback?: default_2.ReactNode;
838
+ theme?: PartialFdeTheme;
839
+ mantineTheme?: MantineThemeOverride;
840
+ fileSystem?: IFileSystem;
841
+ initialMode?: ThemeMode;
842
+ customApps?: Record<string, AppRegistryEntry>;
843
+ onError?: (error: Error) => void;
844
+ /** URL or import of the default wallpaper image */
845
+ defaultWallpaper?: string;
846
+ /** App ID to open on startup */
847
+ initialApp?: string;
848
+ /** Loaders to prefetch in the background after startup */
849
+ prefetchLoaders?: Array<{
850
+ id: string;
851
+ loader: () => Promise<unknown>;
852
+ }>;
853
+ }
854
+
855
+ export declare interface FdeEventPayloads {
856
+ 'window-opened': {
857
+ windowId: string;
858
+ content: string;
859
+ };
860
+ 'window-closed': {
861
+ windowId: string;
862
+ };
863
+ 'window-focused': {
864
+ windowId: string;
865
+ };
866
+ 'window-minimized': {
867
+ windowId: string;
868
+ };
869
+ 'window-maximized': {
870
+ windowId: string;
871
+ };
872
+ 'file-opened': {
873
+ path: string;
874
+ appId?: string;
875
+ };
876
+ 'file-saved': {
877
+ path: string;
878
+ success: boolean;
879
+ };
880
+ 'theme-changed': {
881
+ theme: string;
882
+ };
883
+ 'notification-shown': {
884
+ notificationId: string;
885
+ };
886
+ }
887
+
888
+ export declare type FdeEventType = 'window-opened' | 'window-closed' | 'window-focused' | 'window-minimized' | 'window-maximized' | 'file-opened' | 'file-saved' | 'theme-changed' | 'notification-shown';
889
+
890
+ export declare function FdeProvider({ children, fileSystem, initialMode, theme, mantineTheme, fallback, onError, }: FdeProviderProps): default_2.ReactElement;
891
+
892
+ export declare interface FdeProviderProps {
893
+ children: default_2.ReactNode;
894
+ fileSystem: IFileSystem;
895
+ initialMode?: ThemeMode;
896
+ theme?: PartialFdeTheme;
897
+ mantineTheme?: MantineThemeOverride;
898
+ fallback?: default_2.ReactNode;
899
+ onError?: (error: Error) => void;
900
+ }
901
+
902
+ export declare interface FdeTheme {
903
+ mode: ThemeMode;
904
+ colors: {
905
+ desktop: string;
906
+ taskbar: string;
907
+ window: string;
908
+ accent: string;
909
+ };
910
+ window: WindowTheme;
911
+ taskbar: TaskbarTheme;
912
+ desktop: DesktopTheme;
913
+ }
914
+
915
+ export declare function fetchAppManifest(forceRefresh?: boolean): Promise<AppsManifest | null>;
916
+
917
+ export declare interface FileDialogOptions {
918
+ acceptedMimeTypes?: string[];
919
+ multiple?: boolean;
920
+ defaultPath?: string;
921
+ }
922
+
923
+ export declare const FileIcon: FC<FileIconProps>;
924
+
925
+ export declare interface FileIconProps {
926
+ type: 'file' | 'folder';
927
+ name?: string;
928
+ folderNode?: FolderNode;
929
+ fileNode?: FileNode;
930
+ size?: number;
931
+ iconName?: string;
932
+ }
933
+
934
+ export declare interface FileNode extends FileSystemNode {
935
+ type: 'file';
936
+ content: string;
937
+ mimeType?: string;
938
+ url?: string;
939
+ iconName?: string;
940
+ iconColor?: string;
941
+ }
942
+
943
+ export declare const FilePickerApp: FC<FilePickerAppProps>;
944
+
945
+ declare interface FilePickerAppProps {
946
+ acceptedMimeTypes?: string[];
947
+ onConfirm: (node: FileNode) => void;
948
+ onCancel: () => void;
949
+ }
950
+
951
+ export declare const FilePickerModal: FC<FilePickerModalProps>;
952
+
953
+ declare interface FilePickerModalProps extends FilePickerAppProps {
954
+ opened: boolean;
955
+ }
956
+
957
+ export declare const FilesApp: FC<WindowContentProps>;
958
+
959
+ export declare const FilesAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
960
+
961
+ export declare const fileSystem: IndexedDBFileSystem | DockerFileSystemAdapter;
962
+
963
+ export declare interface FileSystemNode {
964
+ id: string;
965
+ name: string;
966
+ type: FileSystemNodeType;
967
+ parentId: string | null;
968
+ createdAt: Date;
969
+ updatedAt: Date;
970
+ }
971
+
972
+ export declare type FileSystemNodeType = 'file' | 'folder';
973
+
974
+ export declare interface FolderNode extends FileSystemNode {
975
+ type: 'folder';
976
+ children: string[];
977
+ iconName?: string;
978
+ iconColor?: string;
979
+ }
980
+
981
+ export declare const FolderPicker: NamedExoticComponent<PickerModalProps>;
982
+
983
+ export declare const FONT_STACKS: Record<string, string>;
984
+
985
+ export declare interface FontDownloadProgress {
986
+ status: 'idle' | 'downloading' | 'done' | 'error';
987
+ loaded: number;
988
+ total: number | null;
989
+ percent: number | null;
990
+ error: string | null;
991
+ }
992
+
993
+ declare interface FontDownloadResult {
994
+ font: string;
995
+ success: boolean;
996
+ }
997
+
998
+ export declare function formatBytes(bytes: number): string;
999
+
1000
+ export declare interface FsManifest {
1001
+ folders: string[];
1002
+ files: FsManifestFile[];
1003
+ }
1004
+
1005
+ export declare interface FsManifestFile {
1006
+ name: string;
1007
+ folder: string;
1008
+ mimeType: string;
1009
+ url: string;
1010
+ }
1011
+
1012
+ export declare type FSNode = FileNode | FolderNode;
1013
+
1014
+ export declare function generateUUID(): string;
1015
+
1016
+ export declare function getAppComponent(content: string): AppComponent;
1017
+
1018
+ export declare function getAppIdForMime(mimeType: string | undefined): string;
1019
+
1020
+ export declare function getAppIdForMime(node: FileNode): {
1021
+ appId: string;
1022
+ contentData: Record<string, unknown>;
1023
+ } | null;
1024
+
1025
+ export declare function getAppName(content: string): string | undefined;
1026
+
1027
+ export declare function getBaseUrl(): string;
1028
+
1029
+ export declare function getCachedManifest(): AppsManifest | null;
1030
+
1031
+ export declare const getCloseInterceptor: (windowId: string) => (() => boolean) | undefined;
1032
+
1033
+ export declare function getCustomAppById(appId: string): Promise<CustomAppManifest | undefined>;
1034
+
1035
+ export declare function getCustomApps(): Promise<CustomAppManifest[]>;
1036
+
1037
+ export declare const getEnvironment: () => string;
1038
+
1039
+ export declare function getFdeApi(): FdeDesktopAPI;
1040
+
1041
+ export declare const getFileExtension: (name: string) => string;
1042
+
1043
+ export declare function getFourRandomColors(count?: number): string[];
1044
+
1045
+ export declare function getMenuBarBuilder(content: string): MenuBarBuilder | undefined;
1046
+
1047
+ export declare function getMenuBarComponent(content: string): MenuBarComponent | undefined;
1048
+
1049
+ export declare function getMimeTypeFromExtension(filename: string): string | undefined;
1050
+
1051
+ export declare const getPersistedThemeMode: () => ThemeMode | null;
1052
+
1053
+ export declare const getReleaseType: () => string;
1054
+
1055
+ export declare function getRuntime(): Runtime;
1056
+
1057
+ export declare const getVersionString: () => string;
1058
+
1059
+ export declare const GITHUB_LATEST_RELEASE_URL = "https://api.github.com/repos/frannunpal/frannunpal.github.io/releases/latest";
1060
+
1061
+ export declare const GITHUB_RELEASES_REPO = "frannunpal/frannunpal.github.io";
1062
+
1063
+ export declare const GOOGLE_FONTS_HREF: Record<string, string>;
1064
+
1065
+ export declare function hashBlob(blob: Blob): Promise<string>;
1066
+
1067
+ declare interface HMRCallbacks {
1068
+ onReload: AppReloadCallback;
1069
+ onRegistered?: AppRegisteredCallback;
1070
+ onUnregistered?: AppUnregisteredCallback;
1071
+ }
1072
+
1073
+ export { i18n }
1074
+
1075
+ export declare const ICON_COLUMN_WIDTH = 80;
1076
+
1077
+ export declare const ICON_MARGIN = 20;
1078
+
1079
+ export declare const ICON_ROW_HEIGHT = 80;
1080
+
1081
+ export declare const IconColorPicker: FC<IconColorPickerProps>;
1082
+
1083
+ declare interface IconColorPickerProps {
1084
+ selectedIcon: string;
1085
+ selectedColor: string;
1086
+ onIconChange: (icon: string) => void;
1087
+ onColorChange: (color: string) => void;
1088
+ colorError?: string;
1089
+ }
1090
+
1091
+ declare type IconLibrary = 'fi' | 'fc' | 'vsc';
1092
+
1093
+ export declare interface IFileSystem {
1094
+ initialize(): Promise<void>;
1095
+ reinitialize(): Promise<void>;
1096
+ isReady(): boolean;
1097
+ isEmpty(): boolean;
1098
+ getNode(id: string): FSNode | undefined;
1099
+ getChildren(folderId: string): FSNode[];
1100
+ getRootNodes(): FSNode[];
1101
+ getAllNodes(): FSNode[];
1102
+ createFile(name: string, content: string, parentId: string | null, url?: string): Promise<FileNode>;
1103
+ createFolder(name: string, parentId: string | null, iconName?: string, iconColor?: string): Promise<FolderNode>;
1104
+ updateFile(id: string, content: string): Promise<FileNode>;
1105
+ move(id: string, newParentId: string | null): Promise<FSNode>;
1106
+ delete(id: string): Promise<void>;
1107
+ readFile(path: string): Promise<string>;
1108
+ writeFile(path: string, content: string): Promise<void>;
1109
+ saveBlob(blob: Blob): Promise<string>;
1110
+ /** url: `idb://{hash}` for IndexedDB, `/api/fs?action=file&path=...` for Docker */
1111
+ getBlob(url: string): Promise<Blob | null>;
1112
+ toBlobUrl(url: string): Promise<string | null>;
1113
+ seed(manifest: FsManifest): Promise<void>;
1114
+ mergeSeed(manifest: FsManifest): Promise<void>;
1115
+ getManifestSha(): Promise<string | null>;
1116
+ saveManifestSha(sha: string): Promise<void>;
1117
+ clearAll(): Promise<void>;
1118
+ }
1119
+
1120
+ export declare const IMAGE_MIME_TYPES: Set<string>;
1121
+
1122
+ export declare const ImageViewerApp: FC<WindowContentProps>;
1123
+
1124
+ export declare const ImageViewerAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
1125
+
1126
+ export declare const ImageViewerMenuBar: FC<MenuBarComponentProps>;
1127
+
1128
+ export declare const ImageViewerMenuBarLazy: MenuBarComponent;
1129
+
1130
+ export declare class IndexedDBFileSystem implements IFileSystem {
1131
+ private db;
1132
+ private nodes;
1133
+ private ready;
1134
+ private initPromise;
1135
+ private persistQueue;
1136
+ private persistScheduled;
1137
+ initialize(): Promise<void>;
1138
+ private doInitialize;
1139
+ private openDatabase;
1140
+ private loadNodes;
1141
+ private migrateFromLocalStorage;
1142
+ isReady(): boolean;
1143
+ reinitialize(): Promise<void>;
1144
+ private persistAllNodes;
1145
+ private schedulePersist;
1146
+ private flushPersistQueue;
1147
+ private persistNode;
1148
+ private deleteNodeFromPersist;
1149
+ saveBlob(blob: Blob): Promise<string>;
1150
+ getBlob(url: string): Promise<Blob | null>;
1151
+ toBlobUrl(url: string): Promise<string | null>;
1152
+ clearBlobs(): Promise<void>;
1153
+ readFile(_path: string): Promise<string>;
1154
+ writeFile(_path: string, _content: string): Promise<void>;
1155
+ getNode(id: string): FSNode | undefined;
1156
+ getChildren(folderId: string): FSNode[];
1157
+ getRootNodes(): FSNode[];
1158
+ getAllNodes(): FSNode[];
1159
+ isEmpty(): boolean;
1160
+ createFile(name: string, content: string, parentId: string | null, url?: string): Promise<FileNode>;
1161
+ createFolder(name: string, parentId: string | null, iconName?: string, iconColor?: string): Promise<FolderNode>;
1162
+ updateFile(id: string, content: string): Promise<FileNode>;
1163
+ move(id: string, newParentId: string | null): Promise<FSNode>;
1164
+ delete(id: string): Promise<void>;
1165
+ getManifestSha(): Promise<string | null>;
1166
+ saveManifestSha(sha: string): Promise<void>;
1167
+ clearAll(): Promise<void>;
1168
+ seed(manifest: FsManifest): Promise<void>;
1169
+ mergeSeed(manifest: FsManifest): Promise<void>;
1170
+ private buildFolderMapFromManifest;
1171
+ private addChildToFolder;
1172
+ private removeChildFromParent;
1173
+ private deleteRecursive;
1174
+ }
1175
+
1176
+ export declare function initializeFdeApi(): void;
1177
+
1178
+ export declare function initRegistry(registry: Record<string, AppRegistryEntry>): void;
1179
+
1180
+ export declare const injectFontLink: (font: string) => void;
1181
+
1182
+ export declare function isBrowser(): boolean;
1183
+
1184
+ export declare function isCustomApp(appId: string): boolean;
1185
+
1186
+ export declare function isDev(): boolean;
1187
+
1188
+ export declare function isDocker(): boolean;
1189
+
1190
+ export declare function isElectron(): boolean;
1191
+
1192
+ export declare interface ISettingsState {
1193
+ wallpaper: string | null;
1194
+ wallpaperModule: string;
1195
+ launcherIcon: string;
1196
+ font: string;
1197
+ downloadedFonts: string[];
1198
+ fontSize: number;
1199
+ animationDuration: number;
1200
+ theme: FdeTheme;
1201
+ themeSetManually: boolean;
1202
+ customThemeColors: CustomThemeColors | null;
1203
+ language: SupportedLanguage;
1204
+ setWallpaper: (url: string | null) => void;
1205
+ setWallpaperModule: (module: string) => void;
1206
+ setLauncherIcon: (icon: string) => void;
1207
+ setFont: (font: string) => void;
1208
+ markFontDownloaded: (fontName: string) => void;
1209
+ setFontSize: (size: number) => void;
1210
+ setAnimationDuration: (duration: number) => void;
1211
+ setThemeMode: (mode: ThemeMode) => void;
1212
+ toggleTheme: () => void;
1213
+ setThemeAutomatic: () => void;
1214
+ applySystemTheme: (mode: ThemeMode) => void;
1215
+ setCustomThemeColors: (colors: CustomThemeColors | null) => void;
1216
+ setLanguage: (lang: SupportedLanguage) => void;
1217
+ }
1218
+
1219
+ export declare function isFdeApiInitialized(): boolean;
1220
+
1221
+ export declare function isLazyApp(content: string): boolean;
1222
+
1223
+ export declare const isNewerVersion: (latest: string, current: string) => boolean;
1224
+
1225
+ export declare interface IThemeProvider {
1226
+ getTheme(): FdeTheme;
1227
+ setMode(mode: ThemeMode): void;
1228
+ toggle(): void;
1229
+ setCustomColors(colors: CustomThemeColors | null): void;
1230
+ }
1231
+
1232
+ export declare interface IWindowManager {
1233
+ getAll(): WindowEntity[];
1234
+ getById(id: string): WindowEntity | undefined;
1235
+ open(input: WindowInput): WindowEntity;
1236
+ close(id: string): void;
1237
+ minimize(id: string): void;
1238
+ maximize(id: string): void;
1239
+ restore(id: string): void;
1240
+ focus(id: string): void;
1241
+ move(id: string, x: number, y: number): void;
1242
+ resize(id: string, width: number, height: number): void;
1243
+ loadWindows(windows: WindowEntity[]): void;
1244
+ }
1245
+
1246
+ export declare const LanguageFlag: FC<LanguageFlagProps>;
1247
+
1248
+ declare interface LanguageFlagProps {
1249
+ lang: SupportedLanguage_2;
1250
+ size?: number;
1251
+ }
1252
+
1253
+ export declare const LanguageSelector: FC;
1254
+
1255
+ export declare const Launcher: FC<LauncherProps>;
1256
+
1257
+ export declare interface LauncherFolder {
1258
+ id: string;
1259
+ name: string;
1260
+ fcIcon: string;
1261
+ appIds: string[];
1262
+ isExpanded: boolean;
1263
+ isPredefined: boolean;
1264
+ order: number;
1265
+ }
1266
+
1267
+ export declare interface LauncherFolderInput {
1268
+ name: string;
1269
+ fcIcon: string;
1270
+ appIds?: string[];
1271
+ isExpanded?: boolean;
1272
+ isPredefined?: boolean;
1273
+ order?: number;
1274
+ }
1275
+
1276
+ export declare interface LauncherProps {
1277
+ fcIcon?: string;
1278
+ onContextMenu?: (e: React.MouseEvent) => void;
1279
+ }
1280
+
1281
+ export declare interface LoadingProgress {
1282
+ state: LoadingState;
1283
+ progress: number;
1284
+ message?: string;
1285
+ appName?: string;
1286
+ error?: string;
1287
+ }
1288
+
1289
+ export declare type LoadingState = 'idle' | 'fetching' | 'compiling' | 'loading' | 'ready' | 'error';
1290
+
1291
+ export declare const maximizeTransition: Transition;
1292
+
1293
+ export declare type MenuBarBuilder = (window: WindowEntity) => AppMenuElement[] | undefined;
1294
+
1295
+ export declare type MenuBarComponent = FC<MenuBarComponentProps>;
1296
+
1297
+ export declare interface MenuBarComponentProps {
1298
+ windowId: string;
1299
+ onExit: () => void;
1300
+ contentData?: Record<string, unknown>;
1301
+ }
1302
+
1303
+ export declare const MenuEditApp: FC<WindowContentProps>;
1304
+
1305
+ export declare const MenuEditAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
1306
+
1307
+ export declare const MenuEditMenuBar: FC<MenuBarComponentProps>;
1308
+
1309
+ export declare const MenuEditMenuBarLazy: MenuBarComponent;
1310
+
1311
+ export declare type MenuItem = MenuItemAction | MenuItemDivider | MenuItemSlider;
1312
+
1313
+ declare interface MenuItemAction {
1314
+ type: 'item';
1315
+ label: string;
1316
+ icon?: string;
1317
+ onClick: () => void;
1318
+ disabled?: boolean;
1319
+ }
1320
+
1321
+ declare interface MenuItemDivider {
1322
+ type: 'divider';
1323
+ }
1324
+
1325
+ declare interface MenuItemSlider {
1326
+ type: 'slider';
1327
+ label?: string;
1328
+ min: number;
1329
+ max: number;
1330
+ value: number;
1331
+ onChange: (value: number) => void;
1332
+ labelFormat?: (value: number) => string;
1333
+ }
1334
+
1335
+ export declare interface MenuPosition {
1336
+ x: number;
1337
+ y: number;
1338
+ }
1339
+
1340
+ export declare function mergeAppsWithCustomApps(staticApps: AppEntry[], customApps: CustomAppManifest[]): AppEntry[];
1341
+
1342
+ /**
1343
+ * Runs the complete storage migration
1344
+ *
1345
+ * @returns MigrationResult with details about what was migrated
1346
+ */
1347
+ export declare function migrateStorage(): Promise<MigrationResult>;
1348
+
1349
+ /**
1350
+ * Storage Migration Utility
1351
+ *
1352
+ * Migrates legacy storage keys from 'fran-desktop' prefix to 'fde-desktop' prefix.
1353
+ * This migration is idempotent and safe to run multiple times.
1354
+ *
1355
+ * Migration includes:
1356
+ * - IndexedDB databases: fran-desktop-fs → fde-desktop-fs, fran-desktop-blobs → fde-desktop-blobs
1357
+ * - localStorage keys: fran-desktop:* → fde-desktop:*
1358
+ * - Zustand persist key: fran-desktop → fde-desktop
1359
+ */
1360
+ declare interface MigrationResult {
1361
+ indexedDB: {
1362
+ fs: boolean;
1363
+ blobs: boolean;
1364
+ };
1365
+ localStorage: {
1366
+ keysMigrated: number;
1367
+ };
1368
+ version: number;
1369
+ }
1370
+
1371
+ export declare const minimizeVariant: (deltaX: number, deltaY: number) => TargetAndTransition;
1372
+
1373
+ export declare interface MountedAppState {
1374
+ isLoaded: boolean;
1375
+ isLoading: boolean;
1376
+ isReady: boolean;
1377
+ hasError: boolean;
1378
+ error?: string;
1379
+ mountedAt: number;
1380
+ instance?: unknown;
1381
+ }
1382
+
1383
+ export declare const NotesApp: FC<WindowContentProps>;
1384
+
1385
+ export declare const NotesAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
1386
+
1387
+ export declare const NotesMenuBar: FC<MenuBarComponentProps>;
1388
+
1389
+ export declare const NotesMenuBarLazy: MenuBarComponent;
1390
+
1391
+ export declare interface NotificationItem {
1392
+ id: string;
1393
+ title: string;
1394
+ message: string;
1395
+ onClose?: () => void;
1396
+ fcIcon?: string;
1397
+ }
1398
+
1399
+ declare interface NotificationOptions_2 {
1400
+ title: string;
1401
+ message: string;
1402
+ type?: 'info' | 'success' | 'warning' | 'error';
1403
+ duration?: number;
1404
+ }
1405
+ export { NotificationOptions_2 as NotificationOptions }
1406
+
1407
+ export declare interface OpenAppOptions {
1408
+ title?: string;
1409
+ icon?: string;
1410
+ contentData?: Record<string, unknown>;
1411
+ position?: {
1412
+ x?: number;
1413
+ y?: number;
1414
+ };
1415
+ size?: {
1416
+ width?: number;
1417
+ height?: number;
1418
+ };
1419
+ }
1420
+
1421
+ declare type OpenHookOptions = {
1422
+ contentData?: Record<string, unknown>;
1423
+ position?: {
1424
+ x: number;
1425
+ y: number;
1426
+ };
1427
+ };
1428
+
1429
+ export declare const openVariants: {
1430
+ readonly scale: {
1431
+ readonly hidden: {
1432
+ readonly opacity: 0;
1433
+ readonly scale: 0.92;
1434
+ readonly y: 12;
1435
+ };
1436
+ readonly visible: {
1437
+ readonly opacity: 1;
1438
+ readonly scale: 1;
1439
+ readonly y: 0;
1440
+ readonly transition: Transition;
1441
+ };
1442
+ };
1443
+ readonly slide: {
1444
+ readonly hidden: {
1445
+ readonly opacity: 0;
1446
+ readonly y: 40;
1447
+ };
1448
+ readonly visible: {
1449
+ readonly opacity: 1;
1450
+ readonly y: 0;
1451
+ readonly transition: Transition;
1452
+ };
1453
+ };
1454
+ readonly fade: {
1455
+ readonly hidden: {
1456
+ readonly opacity: 0;
1457
+ };
1458
+ readonly visible: {
1459
+ readonly opacity: 1;
1460
+ readonly transition: Transition;
1461
+ };
1462
+ };
1463
+ };
1464
+
1465
+ export declare const panelVariants: {
1466
+ initial: {
1467
+ opacity: number;
1468
+ y: number;
1469
+ scale: number;
1470
+ };
1471
+ animate: {
1472
+ opacity: number;
1473
+ y: number;
1474
+ scale: number;
1475
+ transition: Transition;
1476
+ };
1477
+ exit: {
1478
+ opacity: number;
1479
+ y: number;
1480
+ scale: number;
1481
+ transition: Transition;
1482
+ };
1483
+ };
1484
+
1485
+ export declare interface PartialFdeTheme {
1486
+ mode?: ThemeMode;
1487
+ colors?: Partial<FdeTheme['colors']>;
1488
+ window?: Partial<WindowTheme>;
1489
+ taskbar?: Partial<TaskbarTheme>;
1490
+ desktop?: Partial<DesktopTheme>;
1491
+ }
1492
+
1493
+ export declare const PdfApp: FC<WindowContentProps>;
1494
+
1495
+ export declare const PdfAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
1496
+
1497
+ export declare const PdfMenuBar: FC<MenuBarComponentProps>;
1498
+
1499
+ export declare const PdfMenuBarLazy: MenuBarComponent;
1500
+
1501
+ declare interface PickerModalProps {
1502
+ opened: boolean;
1503
+ children: ReactNode;
1504
+ ariaLabelKey: string;
1505
+ ariaLabelNs?: string;
1506
+ }
1507
+
1508
+ export declare const PREDEFINED_LAUNCHER_FOLDERS: LauncherFolder[];
1509
+
1510
+ export declare function prefetchApps(apps: Array<{
1511
+ id: string;
1512
+ loader: AppLoader;
1513
+ }>): void;
1514
+
1515
+ export declare const PRESET_COLORS: string[];
1516
+
1517
+ export declare const PRESET_ICONS: string[];
1518
+
1519
+ export declare const PROFILE: {
1520
+ name: string;
1521
+ title: string;
1522
+ email: string;
1523
+ phone: string;
1524
+ location: string;
1525
+ linkedin: string;
1526
+ github: string;
1527
+ cvUrls: {
1528
+ en: string;
1529
+ es: string;
1530
+ };
1531
+ };
1532
+
1533
+ export declare const randomWindowPosition: () => {
1534
+ x: number;
1535
+ y: number;
1536
+ };
1537
+
1538
+ export declare const registerAppFileHandler: (handler: AppFileHandler) => void;
1539
+
1540
+ export declare const registerCloseInterceptor: (windowId: string, interceptor: () => boolean) => void;
1541
+
1542
+ export declare function registerComponents(entries: Record<string, AppRegistryEntry>): void;
1543
+
1544
+ export declare function registerCustomApps(apps: AppEntry[]): void;
1545
+
1546
+ export declare function registerDesktopApps(appIds: string[]): void;
1547
+
1548
+ declare interface RegistryContextValue {
1549
+ register: (id: string, rect: DOMRect) => void;
1550
+ unregister: (id: string) => void;
1551
+ getRect: (id: string) => DOMRect | undefined;
1552
+ }
1553
+
1554
+ export declare function removeFromManifestCache(appId: string): void;
1555
+
1556
+ export declare function resetBaseUrlCache(): void;
1557
+
1558
+ export declare const resetFileSystem: () => void;
1559
+
1560
+ /* Excluded from this release type: resetHMRState */
1561
+
1562
+ export declare const resetWindowManager: () => void;
1563
+
1564
+ export declare function resolveFileUrl(url: string, signal?: AbortSignal): Promise<string>;
1565
+
1566
+ export declare function resolveUrl(relativeUrl: string): string;
1567
+
1568
+ export declare const restoreVariant: (deltaX: number, deltaY: number) => TargetAndTransition;
1569
+
1570
+ declare type Runtime = 'browser' | 'docker' | 'electron';
1571
+
1572
+ export declare interface SaveDialogOptions {
1573
+ defaultName?: string;
1574
+ defaultPath?: string;
1575
+ acceptedMimeTypes?: string[];
1576
+ }
1577
+
1578
+ export declare function setApiBaseUrl(url: string): void;
1579
+
1580
+ export declare function setTestBaseUrl(url: string | null): void;
1581
+
1582
+ export declare const SETTINGS_SECTIONS: SettingsSection[];
1583
+
1584
+ export declare const SettingsApp: FC<WindowContentProps>;
1585
+
1586
+ export declare const SettingsAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
1587
+
1588
+ export declare const SettingsMenuBar: FC<MenuBarComponentProps>;
1589
+
1590
+ export declare const SettingsMenuBarLazy: MenuBarComponent;
1591
+
1592
+ export declare interface SettingsSection {
1593
+ id: 'wallpaper' | 'appearance' | 'launcher' | 'font' | 'language' | 'reset';
1594
+ label: string;
1595
+ fcIcon: string;
1596
+ description: string;
1597
+ }
1598
+
1599
+ export declare const SettingsSectionComponent: FC<SettingsSectionProps>;
1600
+
1601
+ declare interface SettingsSectionProps {
1602
+ title: string;
1603
+ description?: string;
1604
+ children: ReactNode;
1605
+ }
1606
+
1607
+ export declare function sortDesktopIcons(icons: DesktopIconEntity[], desktopAppsOrder?: readonly string[]): DesktopIconEntity[];
1608
+
1609
+ export declare const sortDesktopIconsByMode: (icons: DesktopIconEntity[], mode: DesktopSortMode_2) => DesktopIconEntity[];
1610
+
1611
+ export declare const sortNodes: (nodes: FSNode[]) => FSNode[];
1612
+
1613
+ export declare const sortNodesByMode: (nodes: FSNode[], mode: DesktopSortMode_2) => FSNode[];
1614
+
1615
+ export declare type SortOption = (typeof SortOptions)[keyof typeof SortOptions];
1616
+
1617
+ export declare const SortOptions: {
1618
+ readonly BY_TYPE: "byType";
1619
+ readonly BY_NAME: "byName";
1620
+ readonly BY_DATE: "byDate";
1621
+ };
1622
+
1623
+ export declare const StorybookApp: FC<WindowContentProps>;
1624
+
1625
+ export declare const SUPPORTED_LANGUAGES: readonly ["en", "es"];
1626
+
1627
+ declare const SUPPORTED_LANGUAGES_2: readonly ["en", "es"];
1628
+
1629
+ export declare type SupportedLanguage = 'en' | 'es';
1630
+
1631
+ declare type SupportedLanguage_2 = (typeof SUPPORTED_LANGUAGES_2)[number];
1632
+
1633
+ declare type SupportedLanguage_3 = (typeof SUPPORTED_LANGUAGES)[number];
1634
+
1635
+ export declare function syncWithServer(currentRegisteredApps: Record<string, CustomAppManifest>): Promise<{
1636
+ added: CustomAppManifest[];
1637
+ removed: string[];
1638
+ manifest: AppsManifest | null;
1639
+ }>;
1640
+
1641
+ export declare const Taskbar: FC<TaskbarProps>;
1642
+
1643
+ export declare const TASKBAR_HEIGHT = 48;
1644
+
1645
+ export declare const TaskbarContextMenu: FC<TaskbarContextMenuProps>;
1646
+
1647
+ export declare interface TaskbarContextMenuProps {
1648
+ windowMenuOpened: boolean;
1649
+ panelMenuOpened: boolean;
1650
+ launcherMenuOpened: boolean;
1651
+ menuPosition: MenuPosition;
1652
+ targetWindowId: string | null;
1653
+ targetWindowState: string | null;
1654
+ onCloseWindow: (id: string) => void;
1655
+ onMinimizeWindow: (id: string) => void;
1656
+ onMaximizeWindow: (id: string) => void;
1657
+ onRestoreWindow: (id: string) => void;
1658
+ onClose: () => void;
1659
+ }
1660
+
1661
+ export declare type TaskbarMenuType = 'window' | 'panel' | 'launcher' | null;
1662
+
1663
+ declare interface TaskbarProps {
1664
+ calendarSlot?: ReactNode;
1665
+ }
1666
+
1667
+ export declare interface TaskbarTheme {
1668
+ height: number;
1669
+ position: 'bottom' | 'top';
1670
+ background: string;
1671
+ blur: boolean;
1672
+ }
1673
+
1674
+ export declare const TEXT_MIME_TYPES: Set<string>;
1675
+
1676
+ export declare interface Theme {
1677
+ mode: ThemeMode;
1678
+ desktop: string;
1679
+ taskbar: string;
1680
+ window: string;
1681
+ accent: string;
1682
+ }
1683
+
1684
+ export declare type ThemeMode = 'light' | 'dark';
1685
+
1686
+ export declare function ThemeProvider({ children, initialMode, mode: externalMode, theme, }: ThemeProviderProps): default_2.ReactElement;
1687
+
1688
+ export declare interface ThemeProviderProps {
1689
+ children: default_2.ReactNode;
1690
+ initialMode?: ThemeMode;
1691
+ /** External mode override - when provided, syncs internal state with this value */
1692
+ mode?: ThemeMode;
1693
+ theme?: PartialFdeTheme;
1694
+ }
1695
+
1696
+ export declare const toMantineTheme: (theme: Theme) => MantineThemeOverride;
1697
+
1698
+ export declare const unregisterCloseInterceptor: (windowId: string) => void;
1699
+
1700
+ export declare const updateLauncherFolder: (folder: LauncherFolder, updates: Partial<Omit<LauncherFolder, "id" | "isPredefined">>) => LauncherFolder;
1701
+
1702
+ export declare function updateManifestCache(manifest: CustomAppManifest): void;
1703
+
1704
+ export declare const UploaderApp: FC<WindowContentProps>;
1705
+
1706
+ export declare const UploaderAppLazy: LazyExoticComponent<FC<WindowContentProps>>;
1707
+
1708
+ export declare function useAdaptiveDimensions(): AdaptiveDimensions;
1709
+
1710
+ export declare const useAnimationDuration: () => {
1711
+ duration: number;
1712
+ windowVariants: Variants;
1713
+ panelVariants: {
1714
+ initial: {
1715
+ opacity: number;
1716
+ y: number;
1717
+ scale: number;
1718
+ };
1719
+ animate: {
1720
+ opacity: number;
1721
+ y: number;
1722
+ scale: number;
1723
+ transition: Transition;
1724
+ };
1725
+ exit: {
1726
+ opacity: number;
1727
+ y: number;
1728
+ scale: number;
1729
+ transition: Transition;
1730
+ };
1731
+ };
1732
+ minimizeVariant: (deltaX: number, deltaY: number) => TargetAndTransition;
1733
+ restoreVariant: (deltaX: number, deltaY: number) => TargetAndTransition;
1734
+ maximizeTransition: Transition;
1735
+ easeIn: Transition;
1736
+ easeOut: Transition;
1737
+ };
1738
+
1739
+ /**
1740
+ * Applies the currently selected font stack to the document root.
1741
+ * Also re-injects <link> tags for all previously downloaded fonts on mount.
1742
+ */
1743
+ export declare const useApplyFont: () => void;
1744
+
1745
+ export declare function useAppName(appId: string | undefined): string;
1746
+
1747
+ export declare const useAppReady: () => AppReadyContextValue;
1748
+
1749
+ export declare const useAppTempMemoryStore: UseBoundStore<Omit<StoreApi<AppTempMemoryState>, "setState" | "persist"> & {
1750
+ setState(partial: AppTempMemoryState | Partial<AppTempMemoryState> | ((state: AppTempMemoryState) => AppTempMemoryState | Partial<AppTempMemoryState>), replace?: false | undefined): unknown;
1751
+ setState(state: AppTempMemoryState | ((state: AppTempMemoryState) => AppTempMemoryState), replace: true): unknown;
1752
+ persist: {
1753
+ setOptions: (options: Partial<PersistOptions<AppTempMemoryState, unknown, unknown>>) => void;
1754
+ clearStorage: () => void;
1755
+ rehydrate: () => Promise<void> | void;
1756
+ hasHydrated: () => boolean;
1757
+ onHydrate: (fn: (state: AppTempMemoryState) => void) => () => void;
1758
+ onFinishHydration: (fn: (state: AppTempMemoryState) => void) => () => void;
1759
+ getOptions: () => Partial<PersistOptions<AppTempMemoryState, unknown, unknown>>;
1760
+ };
1761
+ }>;
1762
+
1763
+ export declare const useAppUpdate: () => void;
1764
+
1765
+ export declare const useClock: () => string;
1766
+
1767
+ export declare function useCloseInterceptor({ isDirtyGetter, windowId, onDiscard, onSave, }: UseCloseInterceptorOptions): void;
1768
+
1769
+ export declare interface UseCloseInterceptorOptions {
1770
+ isDirtyGetter: () => boolean;
1771
+ windowId?: string;
1772
+ onDiscard?: () => void;
1773
+ onSave?: () => void;
1774
+ }
1775
+
1776
+ export declare const useCloseModalStore: UseBoundStore<StoreApi<CloseModalState & CloseModalActions>>;
1777
+
1778
+ export declare function useCollapsible(initialExpanded?: Set<string>): {
1779
+ expanded: Set<string>;
1780
+ toggle: (id: string) => void;
1781
+ expand: (id: string) => void;
1782
+ collapse: (id: string) => void;
1783
+ expandAll: (ids: string[]) => void;
1784
+ collapseAll: () => void;
1785
+ reset: () => void;
1786
+ isExpanded: (id: string) => boolean;
1787
+ };
1788
+
1789
+ export declare const useContextMenu: (offsetY?: number, appId?: string) => UseContextMenuReturn;
1790
+
1791
+ declare interface UseContextMenuReturn {
1792
+ opened: boolean;
1793
+ position: MenuPosition;
1794
+ open: (e: MouseEvent_2, offsetY?: number) => void;
1795
+ close: () => void;
1796
+ }
1797
+
1798
+ export declare function useCustomAppHMR(callbacksArg: HMRCallbacks): void;
1799
+
1800
+ export declare function useCustomAppLifecycle(): void;
1801
+
1802
+ export declare const useCustomAppStore: UseBoundStore<StoreApi<CustomAppState>>;
1803
+
1804
+ export declare const useDesktopStore: UseBoundStore<Omit<StoreApi<DesktopState>, "setState" | "persist"> & {
1805
+ setState(partial: DesktopState | Partial<DesktopState> | ((state: DesktopState) => DesktopState | Partial<DesktopState>), replace?: false | undefined): unknown;
1806
+ setState(state: DesktopState | ((state: DesktopState) => DesktopState), replace: true): unknown;
1807
+ persist: {
1808
+ setOptions: (options: Partial<PersistOptions<DesktopState, unknown, unknown>>) => void;
1809
+ clearStorage: () => void;
1810
+ rehydrate: () => Promise<void> | void;
1811
+ hasHydrated: () => boolean;
1812
+ onHydrate: (fn: (state: DesktopState) => void) => () => void;
1813
+ onFinishHydration: (fn: (state: DesktopState) => void) => () => void;
1814
+ getOptions: () => Partial<PersistOptions<DesktopState, unknown, unknown>>;
1815
+ };
1816
+ }>;
1817
+
1818
+ export declare function useDeviceDetection(): DeviceInfo;
1819
+
1820
+ export declare const useDownload: () => UseDownloadReturn;
1821
+
1822
+ export declare interface UseDownloadReturn extends DownloadState {
1823
+ download: (url: string) => Promise<string | null>;
1824
+ reset: () => void;
1825
+ }
1826
+
1827
+ export declare function useDragDropState(): DragDropContextValue;
1828
+
1829
+ export declare function useDraggableItem(options: UseDraggableItemOptions): UseDraggableItemReturn;
1830
+
1831
+ declare interface UseDraggableItemOptions {
1832
+ item: DragItemData;
1833
+ disabled?: boolean;
1834
+ }
1835
+
1836
+ declare interface UseDraggableItemReturn {
1837
+ attributes: React.HTMLAttributes<HTMLElement>;
1838
+ listeners: Record<string, unknown> | undefined;
1839
+ setNodeRef: (node: HTMLElement | null) => void;
1840
+ isDragging: boolean;
1841
+ transform: {
1842
+ x: number;
1843
+ y: number;
1844
+ } | null;
1845
+ style: React.CSSProperties;
1846
+ }
1847
+
1848
+ export declare function useDroppableArea(options: UseDroppableAreaOptions): UseDroppableAreaReturn;
1849
+
1850
+ declare interface UseDroppableAreaOptions {
1851
+ target: DropTarget;
1852
+ disabled?: boolean;
1853
+ }
1854
+
1855
+ declare interface UseDroppableAreaReturn {
1856
+ setNodeRef: (node: HTMLElement | null) => void;
1857
+ isOver: boolean;
1858
+ active: DragItemData | null;
1859
+ }
1860
+
1861
+ export declare const useDynamicIcon: (name: string, library: IconLibrary) => IconType | null;
1862
+
1863
+ export declare const useDynamicIconElement: (name: string, library: IconLibrary, props?: IconBaseProps) => ReactElement | null;
1864
+
1865
+ export declare const useFcIcon: (name: string) => IconType | null;
1866
+
1867
+ export declare const useFcIconElement: (name: string, props?: IconBaseProps) => ReactElement | null;
1868
+
1869
+ export declare function useFdeApi(): FdeDesktopAPI | null;
1870
+
1871
+ export declare function useFdeContext(): FdeContextValue;
1872
+
1873
+ export declare const useFiIcon: (name: string) => IconType | null;
1874
+
1875
+ export declare const useFiIconElement: (name: string, props?: IconBaseProps) => ReactElement | null;
1876
+
1877
+ export declare function useFolderName(folder: {
1878
+ id: string;
1879
+ name: string;
1880
+ isPredefined: boolean;
1881
+ }): string;
1882
+
1883
+ export declare const useFontDownload: (font: string | null) => {
1884
+ progress: FontDownloadProgress;
1885
+ isDownloaded: boolean;
1886
+ reset: () => void;
1887
+ data: FontDownloadResult;
1888
+ error: Error;
1889
+ isError: true;
1890
+ isPending: false;
1891
+ isLoading: false;
1892
+ isLoadingError: false;
1893
+ isRefetchError: true;
1894
+ isSuccess: false;
1895
+ isPlaceholderData: false;
1896
+ status: "error";
1897
+ dataUpdatedAt: number;
1898
+ errorUpdatedAt: number;
1899
+ failureCount: number;
1900
+ failureReason: Error | null;
1901
+ errorUpdateCount: number;
1902
+ isFetched: boolean;
1903
+ isFetchedAfterMount: boolean;
1904
+ isFetching: boolean;
1905
+ isInitialLoading: boolean;
1906
+ isPaused: boolean;
1907
+ isRefetching: boolean;
1908
+ isStale: boolean;
1909
+ isEnabled: boolean;
1910
+ refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<FontDownloadResult, Error>>;
1911
+ fetchStatus: FetchStatus;
1912
+ promise: Promise<FontDownloadResult>;
1913
+ } | {
1914
+ progress: FontDownloadProgress;
1915
+ isDownloaded: boolean;
1916
+ reset: () => void;
1917
+ data: FontDownloadResult;
1918
+ error: null;
1919
+ isError: false;
1920
+ isPending: false;
1921
+ isLoading: false;
1922
+ isLoadingError: false;
1923
+ isRefetchError: false;
1924
+ isSuccess: true;
1925
+ isPlaceholderData: false;
1926
+ status: "success";
1927
+ dataUpdatedAt: number;
1928
+ errorUpdatedAt: number;
1929
+ failureCount: number;
1930
+ failureReason: Error | null;
1931
+ errorUpdateCount: number;
1932
+ isFetched: boolean;
1933
+ isFetchedAfterMount: boolean;
1934
+ isFetching: boolean;
1935
+ isInitialLoading: boolean;
1936
+ isPaused: boolean;
1937
+ isRefetching: boolean;
1938
+ isStale: boolean;
1939
+ isEnabled: boolean;
1940
+ refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<FontDownloadResult, Error>>;
1941
+ fetchStatus: FetchStatus;
1942
+ promise: Promise<FontDownloadResult>;
1943
+ } | {
1944
+ progress: FontDownloadProgress;
1945
+ isDownloaded: boolean;
1946
+ reset: () => void;
1947
+ data: undefined;
1948
+ error: Error;
1949
+ isError: true;
1950
+ isPending: false;
1951
+ isLoading: false;
1952
+ isLoadingError: true;
1953
+ isRefetchError: false;
1954
+ isSuccess: false;
1955
+ isPlaceholderData: false;
1956
+ status: "error";
1957
+ dataUpdatedAt: number;
1958
+ errorUpdatedAt: number;
1959
+ failureCount: number;
1960
+ failureReason: Error | null;
1961
+ errorUpdateCount: number;
1962
+ isFetched: boolean;
1963
+ isFetchedAfterMount: boolean;
1964
+ isFetching: boolean;
1965
+ isInitialLoading: boolean;
1966
+ isPaused: boolean;
1967
+ isRefetching: boolean;
1968
+ isStale: boolean;
1969
+ isEnabled: boolean;
1970
+ refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<FontDownloadResult, Error>>;
1971
+ fetchStatus: FetchStatus;
1972
+ promise: Promise<FontDownloadResult>;
1973
+ } | {
1974
+ progress: FontDownloadProgress;
1975
+ isDownloaded: boolean;
1976
+ reset: () => void;
1977
+ data: undefined;
1978
+ error: null;
1979
+ isError: false;
1980
+ isPending: true;
1981
+ isLoading: true;
1982
+ isLoadingError: false;
1983
+ isRefetchError: false;
1984
+ isSuccess: false;
1985
+ isPlaceholderData: false;
1986
+ status: "pending";
1987
+ dataUpdatedAt: number;
1988
+ errorUpdatedAt: number;
1989
+ failureCount: number;
1990
+ failureReason: Error | null;
1991
+ errorUpdateCount: number;
1992
+ isFetched: boolean;
1993
+ isFetchedAfterMount: boolean;
1994
+ isFetching: boolean;
1995
+ isInitialLoading: boolean;
1996
+ isPaused: boolean;
1997
+ isRefetching: boolean;
1998
+ isStale: boolean;
1999
+ isEnabled: boolean;
2000
+ refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<FontDownloadResult, Error>>;
2001
+ fetchStatus: FetchStatus;
2002
+ promise: Promise<FontDownloadResult>;
2003
+ } | {
2004
+ progress: FontDownloadProgress;
2005
+ isDownloaded: boolean;
2006
+ reset: () => void;
2007
+ data: undefined;
2008
+ error: null;
2009
+ isError: false;
2010
+ isPending: true;
2011
+ isLoadingError: false;
2012
+ isRefetchError: false;
2013
+ isSuccess: false;
2014
+ isPlaceholderData: false;
2015
+ status: "pending";
2016
+ dataUpdatedAt: number;
2017
+ errorUpdatedAt: number;
2018
+ failureCount: number;
2019
+ failureReason: Error | null;
2020
+ errorUpdateCount: number;
2021
+ isFetched: boolean;
2022
+ isFetchedAfterMount: boolean;
2023
+ isFetching: boolean;
2024
+ isLoading: boolean;
2025
+ isInitialLoading: boolean;
2026
+ isPaused: boolean;
2027
+ isRefetching: boolean;
2028
+ isStale: boolean;
2029
+ isEnabled: boolean;
2030
+ refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<FontDownloadResult, Error>>;
2031
+ fetchStatus: FetchStatus;
2032
+ promise: Promise<FontDownloadResult>;
2033
+ } | {
2034
+ progress: FontDownloadProgress;
2035
+ isDownloaded: boolean;
2036
+ reset: () => void;
2037
+ data: FontDownloadResult;
2038
+ isError: false;
2039
+ error: null;
2040
+ isPending: false;
2041
+ isLoading: false;
2042
+ isLoadingError: false;
2043
+ isRefetchError: false;
2044
+ isSuccess: true;
2045
+ isPlaceholderData: true;
2046
+ status: "success";
2047
+ dataUpdatedAt: number;
2048
+ errorUpdatedAt: number;
2049
+ failureCount: number;
2050
+ failureReason: Error | null;
2051
+ errorUpdateCount: number;
2052
+ isFetched: boolean;
2053
+ isFetchedAfterMount: boolean;
2054
+ isFetching: boolean;
2055
+ isInitialLoading: boolean;
2056
+ isPaused: boolean;
2057
+ isRefetching: boolean;
2058
+ isStale: boolean;
2059
+ isEnabled: boolean;
2060
+ refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<FontDownloadResult, Error>>;
2061
+ fetchStatus: FetchStatus;
2062
+ promise: Promise<FontDownloadResult>;
2063
+ };
2064
+
2065
+ export declare function useIsDirty<T>({ snapshotRef, getCurrentState, initialSnapshot, onChange, appId, }: UseIsDirtyOptions<T>): {
2066
+ isDirty: boolean;
2067
+ takeSnapshot: () => void;
2068
+ reset: () => void;
2069
+ };
2070
+
2071
+ export declare interface UseIsDirtyOptions<T> {
2072
+ /** Mutable ref that holds the snapshot (used internally). */
2073
+ snapshotRef: React.MutableRefObject<T | null>;
2074
+ /** Function that returns the current state of the app. */
2075
+ getCurrentState: () => T;
2076
+ /** Optional initial snapshot – used when no stored snapshot exists. */
2077
+ initialSnapshot?: T;
2078
+ /** Optional callback invoked when the dirty flag changes. */
2079
+ onChange?: (isDirty: boolean) => void;
2080
+ /** Unique identifier for the app – used to persist the snapshot in the global store. */
2081
+ appId?: string;
2082
+ }
2083
+
2084
+ export declare function useLanguageSync(): void;
2085
+
2086
+ export declare const useNotifications: () => {
2087
+ notifications: NotificationItem[];
2088
+ notify: (title: string, message: string, options?: {
2089
+ fcIcon?: string;
2090
+ onClose?: () => void;
2091
+ }) => string;
2092
+ dismiss: (id: string) => void;
2093
+ addNotification: (item: NotificationItem) => void;
2094
+ removeNotification: (id: string) => void;
2095
+ };
2096
+
2097
+ export declare const useOpenApp: () => (appId: string, { contentData, position }?: OpenHookOptions) => void;
2098
+
2099
+ export declare function useResolvedUrl(url: string | undefined): string | undefined;
2100
+
2101
+ export declare function useSearchFilter<T>(items: T[], searchQuery: string, getSearchableText: (item: T) => string | string[]): T[];
2102
+
2103
+ export declare const useSettingsStore: UseBoundStore<Omit<StoreApi<ISettingsState>, "setState" | "persist"> & {
2104
+ setState(partial: ISettingsState | Partial<ISettingsState> | ((state: ISettingsState) => ISettingsState | Partial<ISettingsState>), replace?: false | undefined): unknown;
2105
+ setState(state: ISettingsState | ((state: ISettingsState) => ISettingsState), replace: true): unknown;
2106
+ persist: {
2107
+ setOptions: (options: Partial<PersistOptions<ISettingsState, unknown, unknown>>) => void;
2108
+ clearStorage: () => void;
2109
+ rehydrate: () => Promise<void> | void;
2110
+ hasHydrated: () => boolean;
2111
+ onHydrate: (fn: (state: ISettingsState) => void) => () => void;
2112
+ onFinishHydration: (fn: (state: ISettingsState) => void) => () => void;
2113
+ getOptions: () => Partial<PersistOptions<ISettingsState, unknown, unknown>>;
2114
+ };
2115
+ }>;
2116
+
2117
+ export declare const useSystemTheme: () => void;
2118
+
2119
+ export declare const useTaskbarContextMenu: () => UseTaskbarContextMenuReturn;
2120
+
2121
+ declare interface UseTaskbarContextMenuReturn {
2122
+ activeMenu: TaskbarMenuType;
2123
+ position: MenuPosition;
2124
+ targetWindowId: string | null;
2125
+ windowMenuOpened: boolean;
2126
+ panelMenuOpened: boolean;
2127
+ launcherMenuOpened: boolean;
2128
+ openWindowMenu: (e: React.MouseEvent, windowId: string) => void;
2129
+ openPanelMenu: (e: React.MouseEvent) => void;
2130
+ openLauncherMenu: (e: React.MouseEvent) => void;
2131
+ closeMenu: () => void;
2132
+ }
2133
+
2134
+ export declare const useTaskbarHeight: (opened: boolean) => {
2135
+ menuRef: RefObject<HTMLDivElement | null>;
2136
+ menuHeight: number;
2137
+ };
2138
+
2139
+ export declare function useTheme(): FdeTheme;
2140
+
2141
+ export declare function useThemeContext(): IThemeProvider;
2142
+
2143
+ export declare const useVscIcon: (name: string) => IconType | null;
2144
+
2145
+ export declare const useVscIconElement: (name: string, props?: IconBaseProps) => ReactElement | null;
2146
+
2147
+ export declare const useWindowButtonRegistry: () => RegistryContextValue;
2148
+
2149
+ export { uuidv4 }
2150
+
2151
+ export declare const VscIcon: FC<VscIconProps>;
2152
+
2153
+ declare interface VscIconProps {
2154
+ name: string;
2155
+ size?: number;
2156
+ color?: string;
2157
+ }
2158
+
2159
+ export declare function waitForContainer(containerId: string, timeout?: number): Promise<HTMLElement>;
2160
+
2161
+ declare const Window_2: FC<WindowProps>;
2162
+ export { Window_2 as Window }
2163
+
2164
+ export declare const WindowButtonRegistryProvider: FC<{
2165
+ children: ReactNode;
2166
+ }>;
2167
+
2168
+ export declare interface WindowContentProps {
2169
+ window?: WindowEntity;
2170
+ notifyReady?: (contentData?: Record<string, unknown>) => void;
2171
+ }
2172
+
2173
+ export declare interface WindowEntity {
2174
+ id: string;
2175
+ title: string;
2176
+ content: string;
2177
+ x: number;
2178
+ y: number;
2179
+ width: number;
2180
+ height: number;
2181
+ minWidth?: number;
2182
+ minHeight?: number;
2183
+ isOpen: boolean;
2184
+ state: WindowState;
2185
+ zIndex: number;
2186
+ icon?: string;
2187
+ fcIcon?: string;
2188
+ iconUrl?: string;
2189
+ iconColor?: string;
2190
+ canMaximize?: boolean;
2191
+ alwaysOnTop?: boolean;
2192
+ contentData?: Record<string, unknown>;
2193
+ closeInterceptor?: () => boolean;
2194
+ }
2195
+
2196
+ export declare type WindowInput<T = Record<string, unknown>> = {
2197
+ title: string;
2198
+ content: string;
2199
+ x: number;
2200
+ y: number;
2201
+ width: number;
2202
+ height: number;
2203
+ minWidth?: number;
2204
+ minHeight?: number;
2205
+ icon?: string;
2206
+ fcIcon?: string;
2207
+ iconUrl?: string;
2208
+ iconColor?: string;
2209
+ canMaximize?: boolean;
2210
+ alwaysOnTop?: boolean;
2211
+ contentData?: T;
2212
+ };
2213
+
2214
+ export declare interface WindowLoading extends LoadingProgress {
2215
+ windowId: string;
2216
+ }
2217
+
2218
+ export declare class WindowManagerAdapter implements IWindowManager {
2219
+ private windows;
2220
+ private nextZIndex;
2221
+ private assignZIndex;
2222
+ reset(): void;
2223
+ loadWindows(windows: WindowEntity[]): void;
2224
+ getAll(): WindowEntity[];
2225
+ getById(id: string): WindowEntity | undefined;
2226
+ open(input: WindowInput): WindowEntity;
2227
+ close(id: string): void;
2228
+ minimize(id: string): void;
2229
+ maximize(id: string): void;
2230
+ restore(id: string): void;
2231
+ focus(id: string): void;
2232
+ move(id: string, x: number, y: number): void;
2233
+ resize(id: string, width: number, height: number): void;
2234
+ private updateWindow;
2235
+ }
2236
+
2237
+ export declare interface WindowProps {
2238
+ window: WindowEntity;
2239
+ menuBar?: AppMenuElement[];
2240
+ children?: ReactNode;
2241
+ closeInterceptor?: () => boolean;
2242
+ }
2243
+
2244
+ export declare type WindowState = 'normal' | 'minimized' | 'maximized';
2245
+
2246
+ export declare interface WindowTheme {
2247
+ borderRadius: string;
2248
+ headerHeight: number;
2249
+ minWidth: number;
2250
+ minHeight: number;
2251
+ defaultWidth: number;
2252
+ defaultHeight: number;
2253
+ shadow: string;
2254
+ }
2255
+
2256
+ export declare const windowVariants: Variants;
2257
+
2258
+ export { }