@fde-desktop/fde-core 0.4.13 → 0.4.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/{AppEmptyState-Boej96TB.js → AppEmptyState-BVfKZU-h.js} +1 -1
  2. package/dist/AppEmptyState-Z8_Cviti.cjs +1 -0
  3. package/dist/AppIcon-Czrtau6A.cjs +1 -0
  4. package/dist/{AppIcon-mtEoyzOb.js → AppIcon-aFNw89J2.js} +1 -1
  5. package/dist/AppMenuBar-38QtFTPk.cjs +1 -0
  6. package/dist/AppTempMemory-DAC62jiS.cjs +1 -0
  7. package/dist/AppTempMemory-DgUW6GaF.js +23 -0
  8. package/dist/CalendarApp-BYTyu089.js +9 -0
  9. package/dist/CalendarApp-DPOK4mqg.cjs +1 -0
  10. package/dist/{ColorPicker-WCeD3Wjf.js → ColorPicker-B76rCS2H.js} +1 -1
  11. package/dist/ColorPicker-BZqsPh3X.cjs +1 -0
  12. package/dist/CreateItemApp-B0IHL16b.cjs +1 -0
  13. package/dist/CreateItemApp-UUP2HAu2.js +149 -0
  14. package/dist/DeviceInfoApp-BPQyeVSd.js +162 -0
  15. package/dist/DeviceInfoApp-D2mS2OT-.cjs +1 -0
  16. package/dist/DownloadProgress-CpJguS8g.cjs +1 -0
  17. package/dist/FilePickerApp-ClmPw6lk.cjs +1 -0
  18. package/dist/{FilePickerApp-ClHuhm6Z.js → FilePickerApp-D7fERKbp.js} +1 -1
  19. package/dist/FilesApp-DhJbO8wg.js +191 -0
  20. package/dist/FilesApp-LbwRRR1i.cjs +1 -0
  21. package/dist/IconColorPicker-7rWNAiNQ.cjs +1 -0
  22. package/dist/IconColorPicker-DUIXSb5E.js +58 -0
  23. package/dist/ImageViewerApp-9T-V8uP5.cjs +1 -0
  24. package/dist/ImageViewerApp-ihqIwJ-L.js +68 -0
  25. package/dist/ImageViewerMenuBar-DmvZoZ03.cjs +1 -0
  26. package/dist/{ImageViewerMenuBar-BIsUokxV.js → ImageViewerMenuBar-ZeIKHdA-.js} +18 -19
  27. package/dist/MenuEditApp-DRKfmSIZ.js +361 -0
  28. package/dist/MenuEditApp-U7EqB5Rl.cjs +1 -0
  29. package/dist/MenuEditMenuBar-BE_cXaoG.cjs +1 -0
  30. package/dist/MenuEditMenuBar-Df1je7F6.js +59 -0
  31. package/dist/NotesApp-DZfNQ8mN.cjs +1 -0
  32. package/dist/NotesApp-rwAeXyJy.js +344 -0
  33. package/dist/{NotesMenuBar-DILZTjnT.js → NotesMenuBar-C503t5pu.js} +12 -13
  34. package/dist/NotesMenuBar-CwgZ9dHy.cjs +1 -0
  35. package/dist/PdfApp-DNZaSXbF.cjs +1 -0
  36. package/dist/PdfApp-K1Z612o3.js +38 -0
  37. package/dist/PdfMenuBar-BPzP_JUO.cjs +1 -0
  38. package/dist/PdfMenuBar-DEUKgKTE.js +38 -0
  39. package/dist/SettingsApp-DdWqiYFE.cjs +1 -0
  40. package/dist/SettingsApp-ghc3RaMv.js +875 -0
  41. package/dist/SettingsMenuBar-C4KAPoBs.js +41 -0
  42. package/dist/SettingsMenuBar-CgmaF9_B.cjs +1 -0
  43. package/dist/{UploaderApp-Bboc4KZ1.js → UploaderApp-D9vfOR0S.js} +28 -40
  44. package/dist/UploaderApp-omSY-NSn.cjs +1 -0
  45. package/dist/VscIcon-CeELixwP.cjs +1 -0
  46. package/dist/buildBreadcrumbs-C2c2a4R3.cjs +1 -0
  47. package/dist/desktopStore-LSQweOqZ.cjs +1 -0
  48. package/dist/{desktopStore-8cSZlj7s.js → desktopStore-xnNbYaYm.js} +263 -263
  49. package/dist/formatBytes-Bv1bQPKQ.cjs +1 -0
  50. package/dist/formatBytes-CaP80WnM.js +14 -0
  51. package/dist/i18nConstants-DgbKSBIK.cjs +1 -0
  52. package/dist/i18nConstants-Nzpf2IFp.js +611 -0
  53. package/dist/imageViewerStore-CYt4R4e4.cjs +1 -0
  54. package/dist/index.cjs +1 -1
  55. package/dist/index.css +1 -1
  56. package/dist/index.d.ts +50 -29
  57. package/dist/index.js +698 -650
  58. package/dist/menuEditStore-sU6qaF2j.cjs +1 -0
  59. package/dist/notesStore-BnMXBRaV.cjs +1 -0
  60. package/dist/settingsAppStore-CQ4JHd7Q.cjs +1 -0
  61. package/dist/useAdaptiveDimensions-BDZxP4E3.cjs +1 -0
  62. package/dist/{useAdaptiveDimensions-DxNLJ7R5.js → useAdaptiveDimensions-sv9lwqF_.js} +1 -1
  63. package/dist/useCloseInterceptor-AzfjUZgz.cjs +1 -0
  64. package/dist/{useCloseInterceptor-CIxhOZx1.js → useCloseInterceptor-Bwm4I0O8.js} +1 -1
  65. package/dist/useDeviceDetection-B9jjlate.js +37 -0
  66. package/dist/useDeviceDetection-CnxnQWIq.cjs +1 -0
  67. package/dist/useDragDrop-Bdwzk6VO.cjs +1 -0
  68. package/dist/useDragDrop-D2LtOEYC.js +139 -0
  69. package/dist/useDynamicIcon-Cg3B_Aeq.cjs +1 -0
  70. package/dist/useNotifications-CR9JLjtC.js +26 -0
  71. package/dist/useNotifications-rwLmJ7fI.cjs +1 -0
  72. package/dist/useOpenApp-BBZ_B7Pr.cjs +1 -0
  73. package/dist/{useOpenApp-uguTLkyl.js → useOpenApp-DdEbOVby.js} +3 -3
  74. package/dist/useResolvedUrl-CgqjNxzw.js +389 -0
  75. package/dist/useResolvedUrl-Dz2AhrDV.cjs +1 -0
  76. package/package.json +1 -1
  77. package/dist/AppEmptyState-CLc00OOG.cjs +0 -1
  78. package/dist/AppIcon-C8vHUVcb.cjs +0 -1
  79. package/dist/AppMenuBar-CAlkNHjj.cjs +0 -1
  80. package/dist/CalendarApp-DOmjWbpl.js +0 -10
  81. package/dist/CalendarApp-Z0bCCYsK.cjs +0 -1
  82. package/dist/ColorPicker-CQRRwY-y.cjs +0 -1
  83. package/dist/CreateItemApp-BkFFFdX1.cjs +0 -1
  84. package/dist/CreateItemApp-DR8Y4bwo.js +0 -202
  85. package/dist/DeviceInfoApp-BXQ9uOwF.cjs +0 -1
  86. package/dist/DeviceInfoApp-I63mJRWy.js +0 -195
  87. package/dist/DownloadProgress-CkTGTf0z.cjs +0 -1
  88. package/dist/FilePickerApp-By6-vbag.cjs +0 -1
  89. package/dist/FilesApp-BRK2OqkQ.cjs +0 -1
  90. package/dist/FilesApp-BuoFP_KA.js +0 -212
  91. package/dist/ImageViewerApp-B1niWF75.cjs +0 -1
  92. package/dist/ImageViewerApp-iojtyFEf.js +0 -69
  93. package/dist/ImageViewerMenuBar-BgzgSF3v.cjs +0 -1
  94. package/dist/MenuEditApp-BHptoJbz.cjs +0 -1
  95. package/dist/MenuEditApp-CJUbJaqh.js +0 -492
  96. package/dist/MenuEditMenuBar-CCOSPAUe.cjs +0 -1
  97. package/dist/MenuEditMenuBar-DnCL-kaZ.js +0 -60
  98. package/dist/NotesApp-BmQIBtJ2.cjs +0 -1
  99. package/dist/NotesApp-DJ2dGt4-.js +0 -364
  100. package/dist/NotesMenuBar-BzojwMtH.cjs +0 -1
  101. package/dist/PdfApp-IjY_GtnW.js +0 -39
  102. package/dist/PdfApp-krW8UI97.cjs +0 -1
  103. package/dist/PdfMenuBar-Bd5MTZcZ.js +0 -39
  104. package/dist/PdfMenuBar-DWD0Qa3F.cjs +0 -1
  105. package/dist/SettingsApp-BE22l5UP.cjs +0 -1
  106. package/dist/SettingsApp-BTFtTFY_.js +0 -1228
  107. package/dist/SettingsMenuBar-CZE2evG2.cjs +0 -1
  108. package/dist/SettingsMenuBar-ktC0viTd.js +0 -42
  109. package/dist/UploaderApp-Dr1mF7oj.cjs +0 -1
  110. package/dist/VscIcon-BYb_Soyy.cjs +0 -1
  111. package/dist/buildBreadcrumbs-Ccd8i11b.cjs +0 -1
  112. package/dist/desktopStore-C1jR6Fdb.cjs +0 -1
  113. package/dist/imageViewerStore-Dfylg59V.cjs +0 -1
  114. package/dist/menuEditStore-CYwtfD6H.cjs +0 -1
  115. package/dist/notesStore-CrWTO6oB.cjs +0 -1
  116. package/dist/rolldown-runtime-CAFD8bLK.js +0 -11
  117. package/dist/settingsAppStore-DuYZNeFf.cjs +0 -1
  118. package/dist/useAdaptiveDimensions-3Lz4X0Tc.cjs +0 -1
  119. package/dist/useCloseInterceptor-CdX-09Ib.cjs +0 -1
  120. package/dist/useDynamicIcon-CK6SjEv5.cjs +0 -1
  121. package/dist/useOpenApp-ChDhsL9h.cjs +0 -1
  122. package/dist/useResolvedUrl-B6x4xy0x.js +0 -29
  123. package/dist/useResolvedUrl-Bb39DpVy.cjs +0 -1
  124. /package/dist/{Colors-CuABn2W4.js → Colors-BIj4g0eH.js} +0 -0
  125. /package/dist/{Colors-CNJbU7oq.cjs → Colors-PNt4eyR6.cjs} +0 -0
  126. /package/dist/{DownloadProgress-DnVASsv5.js → DownloadProgress-DBFA58C5.js} +0 -0
  127. /package/dist/{imageViewerStore-COrD02Zu.js → imageViewerStore-C6UgceP-.js} +0 -0
  128. /package/dist/{menuEditStore-CxsgLiQu.js → menuEditStore-DPqViGva.js} +0 -0
  129. /package/dist/{notesStore-Dgah46U5.js → notesStore-KZDXN6zx.js} +0 -0
  130. /package/dist/{settingsAppStore-DHZhi6Rl.js → settingsAppStore-Y7x3r6pV.js} +0 -0
  131. /package/dist/{useMenuBarUtils-DAap0ukp.cjs → useMenuBarUtils-BOnQYtKU.cjs} +0 -0
  132. /package/dist/{useMenuBarUtils-ChAfI7OA.js → useMenuBarUtils-DTPFK0IN.js} +0 -0
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);var e=(0,require(`zustand`).create)((e,t)=>({windows:{},reset:t=>{e(e=>({windows:{...e.windows,[t]:{isDirty:!1,snapshot:null}}}))},setIsDirty:(t,n)=>{e(e=>{let r=e.windows[t];return r?.isDirty===n?e:{windows:{...e.windows,[t]:{...r,isDirty:n}}}})},takeSnapshot:(t,n)=>{e(e=>({windows:{...e.windows,[t]:{isDirty:!1,snapshot:n}}}))},getSnapshot:e=>t().windows[e]?.snapshot??null})),t=t=>e(e=>e.windows[t]?.isDirty??!1);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);let e=require(`zustand`);var t={isDirty:!1,contentLoaded:!1},n=(0,e.create)((e,n)=>({states:{},getIsDirty:e=>n().states[e]?.isDirty??!1,setIsDirty:(r,i)=>{(n().states[r]?.isDirty??!1)!==i&&e(e=>({states:{...e.states,[r]:{...e.states[r]??t,isDirty:i}}}))},getContentLoaded:e=>n().states[e]?.contentLoaded??!1,setContentLoaded:(n,r)=>{e(e=>({states:{...e.states,[n]:{...e.states[n]??t,contentLoaded:r}}}))},reset:n=>{e(e=>({states:{...e.states,[n]:t}}))}})),r=e=>n(t=>t.states[e]?.isDirty??!1);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);let e=require(`zustand`);function t(){let t={isDirty:!1};return(0,e.create)((e,n)=>({states:{},getIsDirty:e=>n().states[e]?.isDirty??!1,setIsDirty:(r,i)=>{(n().states[r]?.isDirty??!1)!==i&&e(e=>({states:{...e.states,[r]:{...e.states[r]??t,isDirty:i}}}))},reset:n=>{e(e=>({states:{...e.states,[n]:t}}))}}))}var n=t(),r=e=>n(t=>t.states[e]?.isDirty??!1);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);const e=require(`./desktopStore-LSQweOqZ.cjs`);let t=require(`react`);var n={mobile:{defaultWidth:300,defaultHeight:500,minWidth:280,minHeight:400},tablet:{defaultWidth:600,defaultHeight:450,minWidth:400,minHeight:350},desktop:{defaultWidth:800,defaultHeight:600,minWidth:640,minHeight:480},largeDesktop:{defaultWidth:1e3,defaultHeight:700,minWidth:800,minHeight:600}},r=1440,i=()=>{let t=window.innerWidth;return t<e.p.MOBILE?n.mobile:t<e.p.TABLET?n.tablet:t<r?n.desktop:n.largeDesktop};function a(){let[e,n]=(0,t.useState)(()=>i()),r=(0,t.useCallback)(()=>{n(i())},[]);return(0,t.useEffect)(()=>(window.addEventListener(`resize`,r),()=>window.removeEventListener(`resize`,r)),[r]),e}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
@@ -1,4 +1,4 @@
1
- import { p as e } from "./desktopStore-8cSZlj7s.js";
1
+ import { p as e } from "./desktopStore-xnNbYaYm.js";
2
2
  import { useCallback as t, useEffect as n, useState as r } from "react";
3
3
  //#region src/hooks/useAdaptiveDimensions.ts
4
4
  var i = {
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);const e=require(`./desktopStore-LSQweOqZ.cjs`);let t=require(`react`);var n=(0,require(`zustand`).create)()(e=>({isOpen:!1,windowId:null,onSave:null,onDiscard:null,openModal:(t,n,r)=>e({isOpen:!0,windowId:t,onSave:n,onDiscard:r}),closeModal:()=>e({isOpen:!1,windowId:null,onSave:null,onDiscard:null})})),r=new Map,i=(e,t)=>{r.set(e,t)},a=e=>{r.delete(e)},o=e=>r.get(e);function s({isDirtyGetter:r,windowId:o,onDiscard:s,onSave:c}){let l=e.o(e=>e.windows),u=e.o(e=>e.closeWindow),d=n(e=>e.openModal),f=o??l.find(e=>e.isOpen)?.id,p=(0,t.useRef)(r),m=(0,t.useRef)(!1),h=(0,t.useRef)(s),g=(0,t.useRef)(c);(0,t.useEffect)(()=>{p.current=r,h.current=s,g.current=c},[r,s,c]);let _=(0,t.useCallback)(()=>{f&&(h.current?.(),u(f))},[f,u]),v=(0,t.useCallback)(()=>{f&&(g.current?.(),u(f))},[f,u]);(0,t.useEffect)(()=>f?(m.current=!0,i(f,()=>m.current&&p.current()?(d(f,v,_),!1):!0),()=>{m.current=!1,a(f)}):void 0,[f,d,v,_])}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
@@ -1,4 +1,4 @@
1
- import { o as e } from "./desktopStore-8cSZlj7s.js";
1
+ import { o as e } from "./desktopStore-xnNbYaYm.js";
2
2
  import { useCallback as t, useEffect as n, useRef as r } from "react";
3
3
  import { create as i } from "zustand";
4
4
  //#region src/stores/closeModalStore.ts
@@ -0,0 +1,37 @@
1
+ import { p as e } from "./desktopStore-xnNbYaYm.js";
2
+ import { useCallback as t, useEffect as n, useState as r } from "react";
3
+ //#region src/hooks/useDeviceDetection.ts
4
+ var i = () => {
5
+ let t = window.innerWidth, n = window.matchMedia("(pointer: coarse)").matches;
6
+ return t < e.MOBILE || n;
7
+ }, a = () => {
8
+ let t = window.innerWidth;
9
+ return t >= e.MOBILE && t < e.TABLET;
10
+ }, o = () => window.innerWidth >= e.TABLET, s = () => screen.orientation ? screen.orientation.type.includes("portrait") : window.innerHeight > window.innerWidth;
11
+ function c() {
12
+ let [e, c] = r(() => ({
13
+ isMobile: i(),
14
+ isTablet: a(),
15
+ isDesktop: o(),
16
+ isPortrait: s(),
17
+ shouldShowWarning: i() && s(),
18
+ screenWidth: window.innerWidth,
19
+ screenHeight: window.innerHeight
20
+ })), l = t(() => {
21
+ let e = i(), t = s();
22
+ c({
23
+ isMobile: e,
24
+ isTablet: a(),
25
+ isDesktop: o(),
26
+ isPortrait: t,
27
+ shouldShowWarning: e && t,
28
+ screenWidth: window.innerWidth,
29
+ screenHeight: window.innerHeight
30
+ });
31
+ }, []);
32
+ return n(() => (window.addEventListener("resize", l), screen.orientation?.addEventListener?.("change", l), () => {
33
+ window.removeEventListener("resize", l), screen.orientation?.removeEventListener?.("change", l);
34
+ }), [l]), e;
35
+ }
36
+ //#endregion
37
+ export { c as t };
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);const e=require(`./desktopStore-LSQweOqZ.cjs`);let t=require(`react`);var n=()=>{let t=window.innerWidth,n=window.matchMedia(`(pointer: coarse)`).matches;return t<e.p.MOBILE||n},r=()=>{let t=window.innerWidth;return t>=e.p.MOBILE&&t<e.p.TABLET},i=()=>window.innerWidth>=e.p.TABLET,a=()=>screen.orientation?screen.orientation.type.includes(`portrait`):window.innerHeight>window.innerWidth;function o(){let[e,o]=(0,t.useState)(()=>({isMobile:n(),isTablet:r(),isDesktop:i(),isPortrait:a(),shouldShowWarning:n()&&a(),screenWidth:window.innerWidth,screenHeight:window.innerHeight})),s=(0,t.useCallback)(()=>{let e=n(),t=a();o({isMobile:e,isTablet:r(),isDesktop:i(),isPortrait:t,shouldShowWarning:e&&t,screenWidth:window.innerWidth,screenHeight:window.innerHeight})},[]);return(0,t.useEffect)(()=>(window.addEventListener(`resize`,s),screen.orientation?.addEventListener?.(`change`,s),()=>{window.removeEventListener(`resize`,s),screen.orientation?.removeEventListener?.(`change`,s)}),[s]),e}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);const e=require(`./AppIcon-Czrtau6A.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`),r=require(`@mantine/core`),i=require(`react-i18next`),a=require(`@dnd-kit/core`);var o={"launcher-folder-social-links":`socialLinks`,"launcher-folder-office":`office`,"launcher-folder-programming":`programming`,"launcher-folder-games":`games`,"launcher-folder-custom-apps":`customApps`};function s(e){let{t}=(0,i.useTranslation)(`apps`);if(!e.isPredefined)return e.name;let n=o[e.id];return n?t(`folders.${n}`,e.name):e.name}var c=(0,t.createContext)(null),l=({children:e,onDrop:r,onCancel:i})=>{let[o,s]=(0,t.useState)(null),[l,u]=(0,t.useState)(null),d=(0,t.useCallback)(e=>{let t=e.active.data.current;t&&s(t)},[]),f=(0,t.useCallback)(e=>{if(e.over){let t=e.over.data.current;t&&u(t)}else u(null)},[]),p=(0,t.useCallback)(e=>{let{active:t,over:n}=e;if(n&&t.data.current){let e=t.data.current,i=n.data.current;i.accepts.includes(e.type)&&r(e,i)}else !n&&i&&i();s(null),u(null)},[r,i]),m=(0,t.useMemo)(()=>({activeItem:o,overTarget:l}),[o,l]);return(0,n.jsx)(c.Provider,{value:m,children:(0,n.jsx)(a.DndContext,{onDragStart:d,onDragOver:f,onDragEnd:p,collisionDetection:a.pointerWithin,children:e})})};function u(e){let{item:t,disabled:n=!1}=e,{attributes:r,listeners:i,setNodeRef:o,transform:s,isDragging:c}=(0,a.useDraggable)({id:`${t.sourceId}-${t.id}`,data:t,disabled:n}),l={opacity:c?0:1,cursor:n?`default`:`grab`};return{attributes:r,listeners:i,setNodeRef:o,isDragging:c,transform:s?{x:s.x,y:s.y}:null,style:l}}function d(e){let{target:n,disabled:r=!1}=e,i=(0,t.useContext)(c),{setNodeRef:o,isOver:s}=(0,a.useDroppable)({id:n.id,data:n,disabled:r});return{setNodeRef:o,isOver:s,active:i?.activeItem??null}}function f(){let e=(0,t.useContext)(c);if(!e)throw Error(`useDragDropState must be used within a DragDropProvider`);return e}var p=({activatorEvent:e,transform:t,draggingNodeRect:n})=>{if(!e||!n)return t;let r=e,i=0,a=0;`touches`in r&&r.touches.length>0?(i=r.touches[0].clientX,a=r.touches[0].clientY):`clientX`in r&&(i=r.clientX,a=r.clientY);let o=i-n.left-n.width/2,s=a-n.top-n.height/2;return{...t,x:t.x+o,y:t.y+s}},m={dragOverlay:`_dragOverlay_myknw_1`},h=()=>{let{activeItem:t}=f();return t?(0,n.jsx)(a.DragOverlay,{dropAnimation:a.defaultDropAnimation,modifiers:[p],children:(0,n.jsxs)(r.Box,{className:m.dragOverlay,children:[(0,n.jsx)(e.t,{fcIcon:t.metadata?.fcIcon,iconUrl:t.metadata?.iconUrl,fallback:t.metadata?.icon,size:20}),(0,n.jsx)(r.Text,{size:`xs`,children:t.name})]})}):null},g={"launcher-folder":[`app`],"filesystem-folder":[`file`,`folder`],desktop:[`file`,`folder`,`app`],"available-apps":[`app`]};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}});
@@ -0,0 +1,139 @@
1
+ import { t as e } from "./AppIcon-aFNw89J2.js";
2
+ import { createContext as t, useCallback as n, useContext as r, useMemo as i, useState as a } from "react";
3
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
+ import { Box as c, Text as l } from "@mantine/core";
5
+ import { useTranslation as u } from "react-i18next";
6
+ import { DndContext as d, DragOverlay as f, defaultDropAnimation as p, pointerWithin as m, useDraggable as h, useDroppable as g } from "@dnd-kit/core";
7
+ //#region src/hooks/useFolderName.ts
8
+ var _ = {
9
+ "launcher-folder-social-links": "socialLinks",
10
+ "launcher-folder-office": "office",
11
+ "launcher-folder-programming": "programming",
12
+ "launcher-folder-games": "games",
13
+ "launcher-folder-custom-apps": "customApps"
14
+ };
15
+ function v(e) {
16
+ let { t } = u("apps");
17
+ if (!e.isPredefined) return e.name;
18
+ let n = _[e.id];
19
+ return n ? t(`folders.${n}`, e.name) : e.name;
20
+ }
21
+ //#endregion
22
+ //#region src/hooks/useDragDrop/DragDropStateContext.tsx
23
+ var y = t(null), b = ({ children: e, onDrop: t, onCancel: r }) => {
24
+ let [s, c] = a(null), [l, u] = a(null), f = n((e) => {
25
+ let t = e.active.data.current;
26
+ t && c(t);
27
+ }, []), p = n((e) => {
28
+ if (e.over) {
29
+ let t = e.over.data.current;
30
+ t && u(t);
31
+ } else u(null);
32
+ }, []), h = n((e) => {
33
+ let { active: n, over: i } = e;
34
+ if (i && n.data.current) {
35
+ let e = n.data.current, r = i.data.current;
36
+ r.accepts.includes(e.type) && t(e, r);
37
+ } else !i && r && r();
38
+ c(null), u(null);
39
+ }, [t, r]), g = i(() => ({
40
+ activeItem: s,
41
+ overTarget: l
42
+ }), [s, l]);
43
+ return /* @__PURE__ */ o(y.Provider, {
44
+ value: g,
45
+ children: /* @__PURE__ */ o(d, {
46
+ onDragStart: f,
47
+ onDragOver: p,
48
+ onDragEnd: h,
49
+ collisionDetection: m,
50
+ children: e
51
+ })
52
+ });
53
+ };
54
+ //#endregion
55
+ //#region src/hooks/useDragDrop/useDraggableItem.ts
56
+ function x(e) {
57
+ let { item: t, disabled: n = !1 } = e, { attributes: r, listeners: i, setNodeRef: a, transform: o, isDragging: s } = h({
58
+ id: `${t.sourceId}-${t.id}`,
59
+ data: t,
60
+ disabled: n
61
+ }), c = {
62
+ opacity: s ? 0 : 1,
63
+ cursor: n ? "default" : "grab"
64
+ };
65
+ return {
66
+ attributes: r,
67
+ listeners: i,
68
+ setNodeRef: a,
69
+ isDragging: s,
70
+ transform: o ? {
71
+ x: o.x,
72
+ y: o.y
73
+ } : null,
74
+ style: c
75
+ };
76
+ }
77
+ //#endregion
78
+ //#region src/hooks/useDragDrop/useDroppableArea.ts
79
+ function S(e) {
80
+ let { target: t, disabled: n = !1 } = e, i = r(y), { setNodeRef: a, isOver: o } = g({
81
+ id: t.id,
82
+ data: t,
83
+ disabled: n
84
+ });
85
+ return {
86
+ setNodeRef: a,
87
+ isOver: o,
88
+ active: i?.activeItem ?? null
89
+ };
90
+ }
91
+ //#endregion
92
+ //#region src/hooks/useDragDrop/useDragDropState.ts
93
+ function C() {
94
+ let e = r(y);
95
+ if (!e) throw Error("useDragDropState must be used within a DragDropProvider");
96
+ return e;
97
+ }
98
+ //#endregion
99
+ //#region src/hooks/useDragDrop/modifiers/snapCenterToCursor.ts
100
+ var w = ({ activatorEvent: e, transform: t, draggingNodeRect: n }) => {
101
+ if (!e || !n) return t;
102
+ let r = e, i = 0, a = 0;
103
+ "touches" in r && r.touches.length > 0 ? (i = r.touches[0].clientX, a = r.touches[0].clientY) : "clientX" in r && (i = r.clientX, a = r.clientY);
104
+ let o = i - n.left - n.width / 2, s = a - n.top - n.height / 2;
105
+ return {
106
+ ...t,
107
+ x: t.x + o,
108
+ y: t.y + s
109
+ };
110
+ }, T = { dragOverlay: "_dragOverlay_myknw_1" }, E = () => {
111
+ let { activeItem: t } = C();
112
+ return t ? /* @__PURE__ */ o(f, {
113
+ dropAnimation: p,
114
+ modifiers: [w],
115
+ children: /* @__PURE__ */ s(c, {
116
+ className: T.dragOverlay,
117
+ children: [/* @__PURE__ */ o(e, {
118
+ fcIcon: t.metadata?.fcIcon,
119
+ iconUrl: t.metadata?.iconUrl,
120
+ fallback: t.metadata?.icon,
121
+ size: 20
122
+ }), /* @__PURE__ */ o(l, {
123
+ size: "xs",
124
+ children: t.name
125
+ })]
126
+ })
127
+ }) : null;
128
+ }, D = {
129
+ "launcher-folder": ["app"],
130
+ "filesystem-folder": ["file", "folder"],
131
+ desktop: [
132
+ "file",
133
+ "folder",
134
+ "app"
135
+ ],
136
+ "available-apps": ["app"]
137
+ };
138
+ //#endregion
139
+ export { x as a, S as i, E as n, b as o, C as r, v as s, D as t };
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);let e=require(`react`);var t=(t,n)=>{let[r,i]=(0,e.useState)(null);return(0,e.useEffect)(()=>{if(!t||typeof window>`u`)return;let e=!1;return(async()=>{try{let r;r=n===`fi`?await import(`react-icons/fi`):n===`vsc`?await import(`react-icons/vsc`):await import(`react-icons/fc`),e||i(()=>r[t]??null)}catch{}})(),()=>{e=!0}},[t,n]),r},n=(n,r,i)=>{let a=t(n,r);return a?(0,e.createElement)(a,i):null},r=e=>t(e,`fi`),i=e=>t(e,`fc`),a=e=>t(e,`vsc`),o=(e,t)=>n(e,`fi`,t),s=(e,t)=>n(e,`fc`,t),c=(e,t)=>n(e,`vsc`,t);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
@@ -0,0 +1,26 @@
1
+ import { o as e, ot as t } from "./desktopStore-xnNbYaYm.js";
2
+ import { useCallback as n } from "react";
3
+ //#region src/hooks/useNotifications.ts
4
+ var r = () => {
5
+ let r = e((e) => e.notifications), i = e((e) => e.addNotification), a = e((e) => e.removeNotification);
6
+ return {
7
+ notifications: r,
8
+ notify: n((e, n, r) => {
9
+ let a = {
10
+ id: t(),
11
+ title: e,
12
+ message: n,
13
+ fcIcon: r?.fcIcon,
14
+ onClose: r?.onClose
15
+ };
16
+ return i(a), a.id;
17
+ }, [i]),
18
+ dismiss: n((e) => {
19
+ a(e);
20
+ }, [a]),
21
+ addNotification: i,
22
+ removeNotification: a
23
+ };
24
+ };
25
+ //#endregion
26
+ export { r as t };
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);const e=require(`./desktopStore-LSQweOqZ.cjs`);let t=require(`react`);var n=()=>{let n=e.o(e=>e.notifications),r=e.o(e=>e.addNotification),i=e.o(e=>e.removeNotification);return{notifications:n,notify:(0,t.useCallback)((t,n,i)=>{let a={id:e.ot(),title:t,message:n,fcIcon:i?.fcIcon,onClose:i?.onClose};return r(a),a.id},[r]),dismiss:(0,t.useCallback)(e=>{i(e)},[i]),addNotification:r,removeNotification:i}};Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
@@ -0,0 +1 @@
1
+ require(`./AppTempMemory-DAC62jiS.cjs`);const e=require(`./desktopStore-LSQweOqZ.cjs`),t=require(`./useAdaptiveDimensions-BDZxP4E3.cjs`);let n=require(`react`);var r=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./FilesApp-LbwRRR1i.cjs`))),i=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./NotesApp-DZfNQ8mN.cjs`))),a=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./ImageViewerApp-9T-V8uP5.cjs`))),o=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./PdfApp-DNZaSXbF.cjs`))),s=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./MenuEditApp-U7EqB5Rl.cjs`))),c=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./UploaderApp-omSY-NSn.cjs`))),l=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./SettingsApp-DdWqiYFE.cjs`))),u=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./DeviceInfoApp-D2mS2OT-.cjs`))),d=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./CalendarApp-DPOK4mqg.cjs`))),f=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./CreateItemApp-B0IHL16b.cjs`))),p=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./NotesMenuBar-CwgZ9dHy.cjs`)).then(e=>({default:e.NotesMenuBar}))),m=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./MenuEditMenuBar-BE_cXaoG.cjs`)).then(e=>({default:e.MenuEditMenuBar}))),h=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./SettingsMenuBar-CgmaF9_B.cjs`)).then(e=>({default:e.SettingsMenuBar}))),g=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./PdfMenuBar-BPzP_JUO.cjs`)).then(e=>({default:e.PdfMenuBar}))),_=(0,n.lazy)(()=>Promise.resolve().then(()=>require(`./ImageViewerMenuBar-DmvZoZ03.cjs`)).then(e=>({default:e.ImageViewerMenuBar}))),v=null,y=(()=>null);function b(e){return{...e,component:e.component??(e.loader?(0,n.lazy)(e.loader):void 0),MenuBarComponent:e.MenuBarComponent??(e.menuBarLoader?(0,n.lazy)(e.menuBarLoader):void 0)}}function x(e){v={};for(let[t,n]of Object.entries(e))v[t]=b(n)}function S(e){return v?v[e]?.component||(console.warn(`[AppRegistry] App not found: ${e}`),y):(console.warn(`[AppRegistry] Registry not initialized, requested app: ${e}`),y)}function C(e){return v?.[e]?.buildMenuBar}function w(e){return v?.[e]?.MenuBarComponent}function T(e){return v?.[e]?.isLazy??!1}function E(e){return v?.[e]?.appName}function D(e){return v?.[e]}function O(e){v||={};for(let[t,n]of Object.entries(e))v[t]=b(n)}var k={};function A(){let e={files:{component:r,appName:`Files`,isLazy:!0},settings:{component:l,MenuBarComponent:h,appName:`Settings`,isLazy:!0},pdf:{component:o,MenuBarComponent:g,appName:`PDF`,isLazy:!0},"image-viewer":{component:a,MenuBarComponent:_,appName:`Image Viewer`,isLazy:!0},uploader:{component:c,appName:`Uploader`,isLazy:!0},createItem:{component:f,appName:`Create Item`,isLazy:!0},"device-info":{component:u,appName:`Device Info`,isLazy:!0},menuedit:{component:s,MenuBarComponent:m,appName:`Menu Editor`,isLazy:!0},notepad:{component:i,MenuBarComponent:p,appName:`Notepad`,isLazy:!0},calendar:{component:d,appName:`Calendar`,isLazy:!0}};Object.assign(k,e),O(e)}var j=.3,M=e=>({duration:e,ease:`easeIn`}),N=e=>({duration:e,ease:`easeOut`}),P=e=>({hidden:{opacity:0,scale:.92,y:12},visible:{opacity:1,scale:1,y:0,transition:N(e)},exit:{opacity:0,scale:.92,y:12,transition:M(e)}}),F=e=>({initial:{opacity:0,y:8,scale:.96},animate:{opacity:1,y:0,scale:1,transition:N(e)},exit:{opacity:0,y:8,scale:.96,transition:M(e)}}),I=e=>(t,n)=>({opacity:0,scale:.1,x:t,y:n,transition:{duration:e,ease:[.4,0,1,1]}}),L=e=>(t,n)=>({opacity:[0,1],scale:[.1,1],x:[t,0],y:[n,0],transition:{duration:e,ease:[0,0,.2,1]}}),R=e=>({duration:e,ease:`easeOut`}),z={duration:j,ease:`easeIn`},B={duration:j,ease:`easeOut`},V=P(j),H=F(j),U=I(.3),W=L(.3),G={scale:{hidden:{opacity:0,scale:.92,y:12},visible:{opacity:1,scale:1,y:0,transition:B}},slide:{hidden:{opacity:0,y:40},visible:{opacity:1,y:0,transition:B}},fade:{hidden:{opacity:0},visible:{opacity:1,transition:B}}},K={duration:.25,ease:`easeOut`},q=()=>({x:150+Math.random()*200,y:80+Math.random()*100}),J=(e,t,n,r)=>({x:Math.round((e-n)/2),y:Math.round((t-r)/2)}),Y=()=>{let r=e.o(e=>e.openWindow),i=e.o(e=>e.focusWindow),a=e.o(e=>e.windows),o=e.o(e=>e.customApps),s=t.t();return(0,n.useCallback)((t,{contentData:n,position:c}={})=>{let l=e.st.find(e=>e.id===t),u=o.find(e=>e.id===t),d=D(t);if(l?.singleWindow===!0||u?.window?.singleWindow===!0||d?.singleWindow===!0){let e=a.find(e=>e.content===t);if(e){i(e.id);return}}let{x:f,y:p}=c??q();r({title:l?.name??d?.appName??u?.name??t.charAt(0).toUpperCase()+t.slice(1),content:t,icon:l?.icon??d?.icon??u?.icon,fcIcon:l?.fcIcon??d?.fcIcon,iconUrl:l?.iconUrl??d?.iconUrl,iconColor:l?.iconColor??d?.iconColor,canMaximize:l?.canMaximize??d?.canMaximize??u?.window?.canMaximize,x:f,y:p,width:l?.defaultWidth??d?.defaultWidth??u?.window?.defaultWidth??s.defaultWidth,height:l?.defaultHeight??d?.defaultHeight??u?.window?.defaultHeight??s.defaultHeight,minWidth:l?.minWidth===!1||d?.minWidth===!1||u?.window?.minWidth===!1?void 0:l?.minWidth??d?.minWidth??u?.window?.minWidth??s.minWidth,minHeight:l?.minHeight===!1||d?.minHeight===!1||u?.window?.minHeight===!1?void 0:l?.minHeight??d?.minHeight??u?.window?.minHeight??s.minHeight,contentData:{...n,...l?.autoLoad?{autoLoad:l.autoLoad}:{}},alwaysOnTop:l?.alwaysOnTop??d?.alwaysOnTop})},[r,i,a,o,s])};Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return o}});
@@ -1,8 +1,8 @@
1
- import { ct as e, o as t } from "./desktopStore-8cSZlj7s.js";
2
- import { t as n } from "./useAdaptiveDimensions-DxNLJ7R5.js";
1
+ import { ct as e, o as t } from "./desktopStore-xnNbYaYm.js";
2
+ import { t as n } from "./useAdaptiveDimensions-sv9lwqF_.js";
3
3
  import { lazy as r, useCallback as i } from "react";
4
4
  //#region src/components/Window/lazyApps.ts
5
- var a = r(() => import("./FilesApp-BuoFP_KA.js").then((e) => e.n)), o = r(() => import("./NotesApp-DJ2dGt4-.js").then((e) => e.n)), s = r(() => import("./ImageViewerApp-iojtyFEf.js").then((e) => e.n)), c = r(() => import("./PdfApp-IjY_GtnW.js").then((e) => e.n)), l = r(() => import("./MenuEditApp-CJUbJaqh.js").then((e) => e.n)), u = r(() => import("./UploaderApp-Bboc4KZ1.js").then((e) => e.n)), d = r(() => import("./SettingsApp-BTFtTFY_.js").then((e) => e.n)), f = r(() => import("./DeviceInfoApp-I63mJRWy.js").then((e) => e.n)), p = r(() => import("./CalendarApp-DOmjWbpl.js").then((e) => e.n)), m = r(() => import("./CreateItemApp-DR8Y4bwo.js").then((e) => e.n)), h = r(() => import("./NotesMenuBar-DILZTjnT.js").then((e) => e.n).then((e) => ({ default: e.NotesMenuBar }))), g = r(() => import("./MenuEditMenuBar-DnCL-kaZ.js").then((e) => e.n).then((e) => ({ default: e.MenuEditMenuBar }))), _ = r(() => import("./SettingsMenuBar-ktC0viTd.js").then((e) => e.n).then((e) => ({ default: e.SettingsMenuBar }))), v = r(() => import("./PdfMenuBar-Bd5MTZcZ.js").then((e) => e.n).then((e) => ({ default: e.PdfMenuBar }))), y = r(() => import("./ImageViewerMenuBar-BIsUokxV.js").then((e) => e.n).then((e) => ({ default: e.ImageViewerMenuBar }))), b = null, x = (() => null);
5
+ var a = r(() => import("./FilesApp-DhJbO8wg.js")), o = r(() => import("./NotesApp-rwAeXyJy.js")), s = r(() => import("./ImageViewerApp-ihqIwJ-L.js")), c = r(() => import("./PdfApp-K1Z612o3.js")), l = r(() => import("./MenuEditApp-DRKfmSIZ.js")), u = r(() => import("./UploaderApp-D9vfOR0S.js")), d = r(() => import("./SettingsApp-ghc3RaMv.js")), f = r(() => import("./DeviceInfoApp-BPQyeVSd.js")), p = r(() => import("./CalendarApp-BYTyu089.js")), m = r(() => import("./CreateItemApp-UUP2HAu2.js")), h = r(() => import("./NotesMenuBar-C503t5pu.js").then((e) => ({ default: e.NotesMenuBar }))), g = r(() => import("./MenuEditMenuBar-Df1je7F6.js").then((e) => ({ default: e.MenuEditMenuBar }))), _ = r(() => import("./SettingsMenuBar-C4KAPoBs.js").then((e) => ({ default: e.SettingsMenuBar }))), v = r(() => import("./PdfMenuBar-DEUKgKTE.js").then((e) => ({ default: e.PdfMenuBar }))), y = r(() => import("./ImageViewerMenuBar-ZeIKHdA-.js").then((e) => ({ default: e.ImageViewerMenuBar }))), b = null, x = (() => null);
6
6
  function S(e) {
7
7
  return {
8
8
  ...e,