@atomazing-org/design-system 1.0.33 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";var De=Object.create;var _=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var Ee=Object.getPrototypeOf,Oe=Object.prototype.hasOwnProperty;var Fe=(e,r)=>{for(var o in r)_(e,o,{get:r[o],enumerable:!0})},W=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ie(r))!Oe.call(e,i)&&i!==o&&_(e,i,{get:()=>r[i],enumerable:!(t=Re(r,i))||t.enumerable});return e};var m=(e,r,o)=>(o=e!=null?De(Ee(e)):{},W(r||!e||!e.__esModule?_(o,"default",{value:e,enumerable:!0}):o,e)),Le=e=>W(_({},"__esModule",{value:!0}),e);var We={};Fe(We,{ColorPalette:()=>s,DialogBtn:()=>Y,ErrorBoundary:()=>C,GlobalStyles:()=>se,Loading:()=>X,PathName:()=>j,ThemeProviderWrapper:()=>Me,commonComponentProps:()=>w,createCustomTheme:()=>y,darkModeOptions:()=>ne,displayGreeting:()=>ye,fadeIn:()=>de,fadeInLeft:()=>pe,getDayIdentifier:()=>be,getFontColor:()=>u,installAppAnimation:()=>ge,isDarkMode:()=>M,isFontLight:()=>Z,isHexColor:()=>z,logoutAnimation:()=>he,progressPulse:()=>ue,pulseAnimation:()=>xe,scale:()=>ce,slideIn:()=>me,slideInBottom:()=>fe,systemInfo:()=>Ce,themeConfig:()=>S,themes:()=>h,timeAgo:()=>ke,timeAgoFromStart:()=>Te,useResponsiveDisplay:()=>ve,useSystemTheme:()=>E,useThemeSettings:()=>Q});module.exports=Le(We);var H=m(require("@emotion/styled")),G=require("@mui/material"),Y=(0,H.default)(G.Button)`
1
+ "use strict";var De=Object.create;var _=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var Ee=Object.getPrototypeOf,Oe=Object.prototype.hasOwnProperty;var Fe=(e,r)=>{for(var t in r)_(e,t,{get:r[t],enumerable:!0})},W=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ie(r))!Oe.call(e,i)&&i!==t&&_(e,i,{get:()=>r[i],enumerable:!(o=Re(r,i))||o.enumerable});return e};var m=(e,r,t)=>(t=e!=null?De(Ee(e)):{},W(r||!e||!e.__esModule?_(t,"default",{value:e,enumerable:!0}):t,e)),Le=e=>W(_({},"__esModule",{value:!0}),e);var We={};Fe(We,{ColorPalette:()=>s,DialogBtn:()=>G,ErrorBoundary:()=>C,GlobalStyles:()=>se,Loading:()=>X,PathName:()=>j,ThemeProviderWrapper:()=>Me,commonComponentProps:()=>S,createCustomTheme:()=>y,darkModeOptions:()=>ne,displayGreeting:()=>ye,fadeIn:()=>de,fadeInLeft:()=>pe,getDayIdentifier:()=>be,getFontColor:()=>u,installAppAnimation:()=>ge,isDarkMode:()=>M,isFontLight:()=>Z,isHexColor:()=>z,logoutAnimation:()=>he,progressPulse:()=>ue,pulseAnimation:()=>xe,scale:()=>ce,slideIn:()=>me,slideInBottom:()=>fe,systemInfo:()=>Ce,themeConfig:()=>w,themes:()=>h,timeAgo:()=>ke,timeAgoFromStart:()=>Te,useResponsiveDisplay:()=>ve,useSystemTheme:()=>E,useThemeSettings:()=>Q});module.exports=Le(We);var H=m(require("@emotion/styled")),Y=require("@mui/material"),G=(0,H.default)(Y.Button)`
2
2
  padding: 10px 16px;
3
3
  border-radius: 16px;
4
4
  font-size: 16px;
5
5
  margin: 8px;
6
- `;var U=m(require("react")),A=m(require("@emotion/styled")),B=m(require("@mui/icons-material/ErrorOutlineRounded")),g=require("@mui/material"),l=require("react/jsx-runtime"),C=class extends U.default.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,o){console.error("Error:",r),console.error("Error Info:",o)}render(){var t,i,n;let{state:r,props:o}=this;return r.hasError?(0,l.jsxs)(Be,{children:[(0,l.jsx)(Ae,{children:(0,l.jsx)(g.Box,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),(0,l.jsxs)("h3",{children:[(0,l.jsxs)(g.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,l.jsx)(B.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",(0,l.jsxs)(g.Box,{translate:"no",children:["[",(t=r.error)==null?void 0:t.name,"] ",(i=r.error)==null?void 0:i.message]}),(0,l.jsxs)(g.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,l.jsx)(B.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",(0,l.jsxs)(g.Box,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):o.children}},Be=A.default.div`
6
+ `;var U=m(require("react")),A=m(require("@emotion/styled")),B=m(require("@mui/icons-material/ErrorOutlineRounded")),g=require("@mui/material"),l=require("react/jsx-runtime"),C=class extends U.default.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,t){console.error("Error:",r),console.error("Error Info:",t)}render(){var o,i,n;let{state:r,props:t}=this;return r.hasError?(0,l.jsxs)(Be,{children:[(0,l.jsx)(Ae,{children:(0,l.jsx)(g.Box,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),(0,l.jsxs)("h3",{children:[(0,l.jsxs)(g.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,l.jsx)(B.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",(0,l.jsxs)(g.Box,{translate:"no",children:["[",(o=r.error)==null?void 0:o.name,"] ",(i=r.error)==null?void 0:i.message]}),(0,l.jsxs)(g.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,l.jsx)(B.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",(0,l.jsxs)(g.Box,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):t.children}},Be=A.default.div`
7
7
  margin: 0 8vw;
8
8
  @media (max-width: 768px) {
9
9
  margin: 0;
@@ -24,7 +24,7 @@
24
24
  margin-top: 0;
25
25
  margin-bottom: 0;
26
26
  }
27
- `;var k=require("react"),V=m(require("@emotion/styled")),T=require("@mui/material"),x=require("react/jsx-runtime"),X=()=>{let[e,r]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let o=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(o)},[]),(0,x.jsx)($e,{children:e&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(T.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,x.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},$e=(0,V.default)(T.Box)`
27
+ `;var k=require("react"),V=m(require("@emotion/styled")),T=require("@mui/material"),x=require("react/jsx-runtime"),X=()=>{let[e,r]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),(0,x.jsx)($e,{children:e&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(T.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,x.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},$e=(0,V.default)(T.Box)`
28
28
  position: absolute;
29
29
  top: 50%;
30
30
  left: 50%;
@@ -40,12 +40,12 @@
40
40
  color: white;
41
41
  padding: 4px 6px;
42
42
  border-radius: 8px;
43
- `;var v=require("react"),$=(0,v.createContext)(void 0),Q=()=>{let e=(0,v.useContext)($);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var c=require("react"),Se=require("@emotion/react"),we=require("@mui/material/styles");var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},S={Lanit:{primaryColor:"#33ccff",secondaryColor:"#f7f7f7"},BPM:{primaryColor:"#203959",secondaryColor:"#ffffff"},Pampa:{primaryColor:"#ffe22e",secondaryColor:"#fafafa"},Hurma:{primaryColor:"#f6883d",secondaryColor:"#ffffff"},"Neo Mint":{primaryColor:"#00f5d4",secondaryColor:"#e4fff8"},"Cyber Grape":{primaryColor:"#4b0082",secondaryColor:"#f4f0fa"},"Coral Glass":{primaryColor:"#ff6f61",secondaryColor:"#fef2f2"},"Space Gray":{primaryColor:"#2d2e32",secondaryColor:"#1e1f23"},"Blueberry Ice":{primaryColor:"#3f51b5",secondaryColor:"#e8eaf6"},"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var z=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),u=e=>{if(!z(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),o=r.length===3?r.split("").map(p=>p+p).join(""):r,t=Number.parseInt(o.slice(0,2),16),i=Number.parseInt(o.slice(2,4),16),n=Number.parseInt(o.slice(4,6),16);return Math.round((t*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},Z=e=>u(e)===s.fontLight;var w={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiSvgIcon:{defaultProps:{color:"primary"}},MuiDialogContent:{styleOverrides:{root:{padding:0}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};var ee=require("@mui/material");var q={defaultProps:{variantMapping:{text_xl_regular:"p",text_lg_regular:"p",text_md_regular:"p",text_sm_regular:"p",text_xs_regular:"p",text_2xs_regular:"p",text_xl_bold:"p",text_lg_bold:"p",text_md_bold:"p",text_sm_bold:"p",text_xs_bold:"p",text_2xs_bold:"p",text_xl_semibold:"p",text_lg_semibold:"p",text_md_semibold:"p",text_sm_semibold:"p",text_xs_semibold:"p",text_2xs_semibold:"p",text_xl_thin:"p",text_lg_thin:"p",text_md_thin:"p",text_sm_thin:"p",text_xs_thin:"p",text_2xs_thin:"p",display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}},K={text_xl_regular:{font:"400 20px/30px inherit inherit"},text_lg_regular:{font:"400 18px/28px inherit inherit"},text_md_regular:{font:"400 16px/24px inherit inherit"},text_sm_regular:{font:"400 14px/20px inherit inherit"},text_xs_regular:{font:"400 12px/18px inherit inherit"},text_2xs_regular:{font:"400 10px/14px inherit inherit"},text_xl_bold:{font:"700 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var y=(e,r="#232e58",o="dark")=>(0,ee.createTheme)({palette:{primary:{main:e},secondary:{main:r},warning:{main:o==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:o},components:{...w,MuiTypography:q},typography:K,shape:{borderRadius:24}}),h=Object.entries(S).map(([e,r])=>({name:e,MuiTheme:y(r.primaryColor,r.secondaryColor)})),M=(e,r,o)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return u(o)===s.fontLight;default:return!1}};var re=m(require("@mui/icons-material/BrightnessAutoRounded")),oe=m(require("@mui/icons-material/DarkModeRounded")),te=m(require("@mui/icons-material/LightModeRounded")),ie=m(require("@mui/icons-material/PersonalVideoRounded")),b=require("react/jsx-runtime"),P=32,ne=[{label:"Auto",value:"auto",icon:(0,b.jsx)(re.default,{sx:{fontSize:P}})},{label:"System",value:"system",icon:(0,b.jsx)(ie.default,{sx:{fontSize:P}})},{label:"Light",value:"light",icon:(0,b.jsx)(te.default,{sx:{fontSize:P}})},{label:"Dark",value:"dark",icon:(0,b.jsx)(oe.default,{sx:{fontSize:P}})}];var N=require("react"),D=require("@emotion/react"),ae=require("@mui/material/styles");var le=require("react/jsx-runtime"),se=()=>{let e=(0,ae.useTheme)(),r=e.palette.mode==="dark",o=e.palette.primary.main,t=e.palette.secondary.main,i=(0,N.useMemo)(()=>u(o),[o]),n=(0,N.useMemo)(()=>u(t),[t]);return(0,le.jsx)(D.Global,{styles:D.css`
43
+ `;var v=require("react"),$=(0,v.createContext)(void 0),Q=()=>{let e=(0,v.useContext)($);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var c=require("react"),we=require("@emotion/react"),Se=require("@mui/material/styles");var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},w={Lanit:{primaryColor:"#33ccff",secondaryColor:"#f7f7f7"},BPM:{primaryColor:"#203959",secondaryColor:"#ffffff"},Pampa:{primaryColor:"#ffe22e",secondaryColor:"#fafafa"},Hurma:{primaryColor:"#f6883d",secondaryColor:"#ffffff"},"Neo Mint":{primaryColor:"#00f5d4",secondaryColor:"#e4fff8"},"Cyber Grape":{primaryColor:"#4b0082",secondaryColor:"#f4f0fa"},"Coral Glass":{primaryColor:"#ff6f61",secondaryColor:"#fef2f2"},"Blueberry Ice":{primaryColor:"#3f51b5",secondaryColor:"#e8eaf6"},"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var z=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),u=e=>{if(!z(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(p=>p+p).join(""):r,o=Number.parseInt(t.slice(0,2),16),i=Number.parseInt(t.slice(2,4),16),n=Number.parseInt(t.slice(4,6),16);return Math.round((o*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},Z=e=>u(e)===s.fontLight;var S={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiSvgIcon:{defaultProps:{color:"primary"}},MuiDialogContent:{styleOverrides:{root:{padding:0}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};var ee=require("@mui/material");var q={defaultProps:{variantMapping:{text_xl_regular:"p",text_lg_regular:"p",text_md_regular:"p",text_sm_regular:"p",text_xs_regular:"p",text_2xs_regular:"p",text_xl_bold:"p",text_lg_bold:"p",text_md_bold:"p",text_sm_bold:"p",text_xs_bold:"p",text_2xs_bold:"p",text_xl_semibold:"p",text_lg_semibold:"p",text_md_semibold:"p",text_sm_semibold:"p",text_xs_semibold:"p",text_2xs_semibold:"p",text_xl_thin:"p",text_lg_thin:"p",text_md_thin:"p",text_sm_thin:"p",text_xs_thin:"p",text_2xs_thin:"p",display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}},K={text_xl_regular:{font:"400 20px/30px inherit inherit"},text_lg_regular:{font:"400 18px/28px inherit inherit"},text_md_regular:{font:"400 16px/24px inherit inherit"},text_sm_regular:{font:"400 14px/20px inherit inherit"},text_xs_regular:{font:"400 12px/18px inherit inherit"},text_2xs_regular:{font:"400 10px/14px inherit inherit"},text_xl_bold:{font:"700 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var y=(e,r="#232e58",t="dark")=>(0,ee.createTheme)({palette:{primary:{main:e},secondary:{main:r},warning:{main:t==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:t},components:{...S,MuiTypography:q},typography:K,shape:{borderRadius:24}}),h=Object.entries(w).map(([e,r])=>({name:e,MuiTheme:y(r.primaryColor,r.secondaryColor)})),M=(e,r,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return u(t)===s.fontLight;default:return!1}};var re=m(require("@mui/icons-material/BrightnessAutoRounded")),te=m(require("@mui/icons-material/DarkModeRounded")),oe=m(require("@mui/icons-material/LightModeRounded")),ie=m(require("@mui/icons-material/PersonalVideoRounded")),b=require("react/jsx-runtime"),P=32,ne=[{label:"Auto",value:"auto",icon:(0,b.jsx)(re.default,{color:"inherit",sx:{fontSize:P}})},{label:"System",value:"system",icon:(0,b.jsx)(ie.default,{color:"inherit",sx:{fontSize:P}})},{label:"Light",value:"light",icon:(0,b.jsx)(oe.default,{color:"inherit",sx:{fontSize:P}})},{label:"Dark",value:"dark",icon:(0,b.jsx)(te.default,{color:"inherit",sx:{fontSize:P}})}];var N=require("react"),D=require("@emotion/react"),ae=require("@mui/material/styles");var le=require("react/jsx-runtime"),se=()=>{let e=(0,ae.useTheme)(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.secondary.main,i=(0,N.useMemo)(()=>u(t),[t]),n=(0,N.useMemo)(()=>u(o),[o]);return(0,le.jsx)(D.Global,{styles:D.css`
44
44
  * {
45
45
  font-family: "Poppins", sans-serif !important;
46
46
  -webkit-tap-highlight-color: transparent;
47
47
  &::selection {
48
- background-color: ${`${o}e1`};
48
+ background-color: ${`${t}e1`};
49
49
  color: ${i};
50
50
  }
51
51
  }
@@ -71,25 +71,25 @@
71
71
  margin: 0;
72
72
  height: 100%;
73
73
  touch-action: manipulation;
74
- background: ${t};
74
+ background: ${o};
75
75
  background-attachment: fixed;
76
76
  background-size: cover;
77
77
  transition: 0.3s background;
78
78
 
79
79
  ::-webkit-scrollbar {
80
80
  width: 8px;
81
- background-color: ${t};
81
+ background-color: ${o};
82
82
  }
83
83
  ::-webkit-scrollbar-thumb {
84
- background-color: ${o};
84
+ background-color: ${t};
85
85
  border-radius: 64px;
86
86
  }
87
87
  ::-webkit-scrollbar-thumb:hover {
88
- background-color: ${`${o}d8`};
88
+ background-color: ${`${t}d8`};
89
89
  }
90
90
  ::-webkit-scrollbar-track {
91
91
  border-radius: 64px;
92
- background-color: ${t};
92
+ background-color: ${o};
93
93
  }
94
94
  }
95
95
 
@@ -250,5 +250,5 @@
250
250
  100% {
251
251
  transform: translateY(0);
252
252
  }
253
- `;var ye=()=>{let r=new Date().getHours(),o;return r<12&&r>=5?o="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?o="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":o="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",o};var be=e=>{let r=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),t=String(e.getDate()).padStart(2,"0");return`${r}-${o}-${t}`};var{userAgent:_e}=globalThis.navigator,ze=()=>{let e=_e.toLowerCase();return e.includes("windows nt")?"Windows":e.includes("iphone")||e.includes("ipad")||e.includes("ipod")?"iOS":e.includes("mac")?"macOS":e.includes("android")?"Android":e.includes("linux")?"Linux":"Unknown"},Ne=()=>{let e=_e.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Ce={os:ze(),browser:Ne()};var ke=(e,r=navigator.language||"en-US")=>{let o=new Date;e=new Date(e);let t=Math.floor((o.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(t<60)return i.format(-t,"second");if(t<3600){let a=Math.floor(t/60);return i.format(-a,"minute")}if(t<86400){let a=Math.floor(t/3600);return i.format(-a,"hour")}let n=Math.floor(t/86400);return i.format(-n,"day")},Te=(e,r=navigator.language||"en-US")=>{let o=new Date;e=new Date(e);let t=(e.getTime()-o.getTime())/1e3,i=Math.floor(t/(60*60)),n=Math.floor((t-60*60*i)/60),a=Math.floor(t-60*60*i-60*n),p=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return p.format(a,"second");if(i===0&&n<60)return p.format(n,"minute");if(i<24){let L=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,d=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${L} ${d}`}let F=Math.floor(a/86400);return p.format(F,"day")};var R=require("react"),ve=(e=768)=>{let[r,o]=(0,R.useState)(!1);return(0,R.useEffect)(()=>{let t=()=>{o(window.innerWidth<e)};t();let i=()=>t();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};var I=require("react"),E=()=>{let[e,r]=(0,I.useState)("unknown");return(0,I.useEffect)(()=>{let o=i=>{r(i.matches?"dark":"light")},t=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(t.matches?"dark":"light"),t.addEventListener("change",o),()=>{t.removeEventListener("change",o)}},[]),e};var O=require("react/jsx-runtime"),Me=({children:e})=>{let r=E(),[o,t]=(0,c.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).theme||"system"}),[i,n]=(0,c.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).darkMode||"auto"});(0,c.useEffect)(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:o,darkMode:i}))},[o,i]);let a=(0,c.useMemo)(()=>{var d;return r==="unknown"?h[0].MuiTheme:o==="system"?r==="dark"?h[0].MuiTheme:h[1].MuiTheme:((d=h.find(Pe=>Pe.name===o))==null?void 0:d.MuiTheme)||h[0].MuiTheme},[r,o]),p=(0,c.useMemo)(()=>M(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),F=(0,c.useMemo)(()=>y(a.palette.primary.main,a.palette.secondary.main,p),[a,p]),L=(0,c.useMemo)(()=>({darkMode:p==="dark"}),[p]);return(0,O.jsx)($.Provider,{value:{theme:o,darkMode:i,setTheme:t,setDarkMode:n},children:(0,O.jsx)(we.ThemeProvider,{theme:F,children:(0,O.jsx)(Se.ThemeProvider,{theme:L,children:e})})})};0&&(module.exports={ColorPalette,DialogBtn,ErrorBoundary,GlobalStyles,Loading,PathName,ThemeProviderWrapper,commonComponentProps,createCustomTheme,darkModeOptions,displayGreeting,fadeIn,fadeInLeft,getDayIdentifier,getFontColor,installAppAnimation,isDarkMode,isFontLight,isHexColor,logoutAnimation,progressPulse,pulseAnimation,scale,slideIn,slideInBottom,systemInfo,themeConfig,themes,timeAgo,timeAgoFromStart,useResponsiveDisplay,useSystemTheme,useThemeSettings});
253
+ `;var ye=()=>{let r=new Date().getHours(),t;return r<12&&r>=5?t="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",t};var be=e=>{let r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`};var{userAgent:_e}=globalThis.navigator,ze=()=>{let e=_e.toLowerCase();return e.includes("windows nt")?"Windows":e.includes("iphone")||e.includes("ipad")||e.includes("ipod")?"iOS":e.includes("mac")?"macOS":e.includes("android")?"Android":e.includes("linux")?"Linux":"Unknown"},Ne=()=>{let e=_e.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Ce={os:ze(),browser:Ne()};var ke=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=Math.floor((t.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return i.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return i.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return i.format(-a,"hour")}let n=Math.floor(o/86400);return i.format(-n,"day")},Te=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=(e.getTime()-t.getTime())/1e3,i=Math.floor(o/(60*60)),n=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*n),p=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return p.format(a,"second");if(i===0&&n<60)return p.format(n,"minute");if(i<24){let L=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,d=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${L} ${d}`}let F=Math.floor(a/86400);return p.format(F,"day")};var R=require("react"),ve=(e=768)=>{let[r,t]=(0,R.useState)(!1);return(0,R.useEffect)(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};var I=require("react"),E=()=>{let[e,r]=(0,I.useState)("unknown");return(0,I.useEffect)(()=>{let t=i=>{r(i.matches?"dark":"light")},o=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(o.matches?"dark":"light"),o.addEventListener("change",t),()=>{o.removeEventListener("change",t)}},[]),e};var O=require("react/jsx-runtime"),Me=({children:e})=>{let r=E(),[t,o]=(0,c.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).theme||"system"}),[i,n]=(0,c.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).darkMode||"auto"});(0,c.useEffect)(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=(0,c.useMemo)(()=>{var d;return r==="unknown"?h[0].MuiTheme:t==="system"?r==="dark"?h[0].MuiTheme:h[1].MuiTheme:((d=h.find(Pe=>Pe.name===t))==null?void 0:d.MuiTheme)||h[0].MuiTheme},[r,t]),p=(0,c.useMemo)(()=>M(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),F=(0,c.useMemo)(()=>y(a.palette.primary.main,a.palette.secondary.main,p),[a,p]),L=(0,c.useMemo)(()=>({darkMode:p==="dark"}),[p]);return(0,O.jsx)($.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:(0,O.jsx)(Se.ThemeProvider,{theme:F,children:(0,O.jsx)(we.ThemeProvider,{theme:L,children:e})})})};0&&(module.exports={ColorPalette,DialogBtn,ErrorBoundary,GlobalStyles,Loading,PathName,ThemeProviderWrapper,commonComponentProps,createCustomTheme,darkModeOptions,displayGreeting,fadeIn,fadeInLeft,getDayIdentifier,getFontColor,installAppAnimation,isDarkMode,isFontLight,isHexColor,logoutAnimation,progressPulse,pulseAnimation,scale,slideIn,slideInBottom,systemInfo,themeConfig,themes,timeAgo,timeAgoFromStart,useResponsiveDisplay,useSystemTheme,useThemeSettings});
254
254
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/typography.ts","../src/styles/darkModeOptions.tsx","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./context\";\nexport * from \"./styles\";\nexport * from \"./utils\";\nexport * from \"./models\";\n","import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Lanit: {\n primaryColor: \"#33ccff\",\n secondaryColor: \"#f7f7f7\",\n },\n BPM: {\n primaryColor: \"#203959\",\n secondaryColor: \"#ffffff\",\n },\n Pampa: {\n primaryColor: \"#ffe22e\",\n secondaryColor: \"#fafafa\",\n },\n Hurma: {\n primaryColor: \"#f6883d\",\n secondaryColor: \"#ffffff\",\n },\n \"Neo Mint\": {\n primaryColor: \"#00f5d4\",\n secondaryColor: \"#e4fff8\",\n },\n \"Cyber Grape\": {\n primaryColor: \"#4b0082\",\n secondaryColor: \"#f4f0fa\",\n },\n \"Coral Glass\": {\n primaryColor: \"#ff6f61\",\n secondaryColor: \"#fef2f2\",\n },\n \"Space Gray\": {\n primaryColor: \"#2d2e32\",\n secondaryColor: \"#1e1f23\",\n },\n \"Blueberry Ice\": {\n primaryColor: \"#3f51b5\",\n secondaryColor: \"#e8eaf6\",\n },\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiSvgIcon: {\n defaultProps: {\n color: 'primary'\n }\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: 0,\n },\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import type {\n Components,\n Theme,\n TypographyVariantsOptions,\n} from \"@mui/material\";\n\n/**\n * Mapping of custom typography variants to corresponding HTML elements.\n */\nexport const muiTypography: Components<Theme>[\"MuiTypography\"] = {\n defaultProps: {\n variantMapping: {\n // TEXT REGULAR\n text_xl_regular: \"p\",\n text_lg_regular: \"p\",\n text_md_regular: \"p\",\n text_sm_regular: \"p\",\n text_xs_regular: \"p\",\n text_2xs_regular: \"p\",\n\n // TEXT BOLD\n text_xl_bold: \"p\",\n text_lg_bold: \"p\",\n text_md_bold: \"p\",\n text_sm_bold: \"p\",\n text_xs_bold: \"p\",\n text_2xs_bold: \"p\",\n\n // TEXT SEMIBOLD\n text_xl_semibold: \"p\",\n text_lg_semibold: \"p\",\n text_md_semibold: \"p\",\n text_sm_semibold: \"p\",\n text_xs_semibold: \"p\",\n text_2xs_semibold: \"p\",\n\n // TEXT THIN\n text_xl_thin: \"p\",\n text_lg_thin: \"p\",\n text_md_thin: \"p\",\n text_sm_thin: \"p\",\n text_xs_thin: \"p\",\n text_2xs_thin: \"p\",\n\n // DISPLAY REGULAR\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n text_xl_regular: { font: \"400 20px/30px inherit inherit\" },\n text_lg_regular: { font: \"400 18px/28px inherit inherit\" },\n text_md_regular: { font: \"400 16px/24px inherit inherit\" },\n text_sm_regular: { font: \"400 14px/20px inherit inherit\" },\n text_xs_regular: { font: \"400 12px/18px inherit inherit\" },\n text_2xs_regular: { font: \"400 10px/14px inherit inherit\" },\n\n text_xl_bold: { font: \"700 20px/30px inherit inherit\" },\n text_lg_bold: { font: \"700 18px/28px inherit inherit\" },\n text_md_bold: { font: \"700 16px/24px inherit inherit\" },\n text_sm_bold: { font: \"700 14px/20px inherit inherit\" },\n text_xs_bold: { font: \"700 12px/18px inherit inherit\" },\n text_2xs_bold: { font: \"700 10px/14px inherit inherit\" },\n\n text_xl_semibold: { font: \"600 20px/30px inherit inherit\" },\n text_lg_semibold: { font: \"600 18px/28px inherit inherit\" },\n text_md_semibold: { font: \"600 16px/24px inherit inherit\" },\n text_sm_semibold: { font: \"600 14px/20px inherit inherit\" },\n text_xs_semibold: { font: \"600 12px/18px inherit inherit\" },\n text_2xs_semibold: { font: \"600 10px/14px inherit inherit\" },\n\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","import BrightnessAutoRoundedIcon from \"@mui/icons-material/BrightnessAutoRounded\";\nimport DarkModeRoundedIcon from \"@mui/icons-material/DarkModeRounded\";\nimport LightModeRoundedIcon from \"@mui/icons-material/LightModeRounded\";\nimport PersonalVideoRoundedIcon from \"@mui/icons-material/PersonalVideoRounded\";\n\nimport type { OptionItem } from \"../models\";\n\nconst OPTION_ICON_SIZE = 32;\n\nexport const darkModeOptions: OptionItem[] = [\n {\n label: \"Auto\",\n value: \"auto\",\n icon: <BrightnessAutoRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n {\n label: \"System\",\n value: \"system\",\n icon: <PersonalVideoRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n {\n label: \"Light\",\n value: \"light\",\n icon: <LightModeRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n {\n label: \"Dark\",\n value: \"dark\",\n icon: <DarkModeRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n];\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["index_exports","__export","ColorPalette","DialogBtn","ErrorBoundary","GlobalStyles","Loading","PathName","ThemeProviderWrapper","commonComponentProps","createCustomTheme","darkModeOptions","displayGreeting","fadeIn","fadeInLeft","getDayIdentifier","getFontColor","installAppAnimation","isDarkMode","isFontLight","isHexColor","logoutAnimation","progressPulse","pulseAnimation","scale","slideIn","slideInBottom","systemInfo","themeConfig","themes","timeAgo","timeAgoFromStart","useResponsiveDisplay","useSystemTheme","useThemeSettings","__toCommonJS","import_styled","import_material","DialogBtn","styled","import_react","import_styled","import_ErrorOutlineRounded","import_material","import_jsx_runtime","ErrorBoundary","React","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","ErrorOutlineRounded","styled","import_react","import_styled","import_material","import_jsx_runtime","Loading","showLoading","setShowLoading","timer","Container","styled","import_styled","PathName","styled","import_react","ThemeContext","useThemeSettings","context","import_react","import_styles","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","import_material","muiTypography","typographyVariants","createCustomTheme","primaryColor","backgroundColor","mode","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","import_BrightnessAutoRounded","import_DarkModeRounded","import_LightModeRounded","import_PersonalVideoRounded","import_jsx_runtime","OPTION_ICON_SIZE","darkModeOptions","BrightnessAutoRoundedIcon","PersonalVideoRoundedIcon","LightModeRoundedIcon","DarkModeRoundedIcon","import_react","import_styles","import_jsx_runtime","GlobalStyles","theme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","getFontColor","secondaryFontColor","import_react","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","import_react","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","import_react","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","import_jsx_runtime","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","stored","darkMode","setDarkMode","selectedTheme","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/typography.ts","../src/styles/darkModeOptions.tsx","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./context\";\nexport * from \"./styles\";\nexport * from \"./utils\";\nexport * from \"./models\";\n","import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Lanit: {\n primaryColor: \"#33ccff\",\n secondaryColor: \"#f7f7f7\",\n },\n BPM: {\n primaryColor: \"#203959\",\n secondaryColor: \"#ffffff\",\n },\n Pampa: {\n primaryColor: \"#ffe22e\",\n secondaryColor: \"#fafafa\",\n },\n Hurma: {\n primaryColor: \"#f6883d\",\n secondaryColor: \"#ffffff\",\n },\n \"Neo Mint\": {\n primaryColor: \"#00f5d4\",\n secondaryColor: \"#e4fff8\",\n },\n \"Cyber Grape\": {\n primaryColor: \"#4b0082\",\n secondaryColor: \"#f4f0fa\",\n },\n \"Coral Glass\": {\n primaryColor: \"#ff6f61\",\n secondaryColor: \"#fef2f2\",\n },\n \"Blueberry Ice\": {\n primaryColor: \"#3f51b5\",\n secondaryColor: \"#e8eaf6\",\n },\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiSvgIcon: {\n defaultProps: {\n color: \"primary\",\n },\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: 0,\n },\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import type {\n Components,\n Theme,\n TypographyVariantsOptions,\n} from \"@mui/material\";\n\n/**\n * Mapping of custom typography variants to corresponding HTML elements.\n */\nexport const muiTypography: Components<Theme>[\"MuiTypography\"] = {\n defaultProps: {\n variantMapping: {\n // TEXT REGULAR\n text_xl_regular: \"p\",\n text_lg_regular: \"p\",\n text_md_regular: \"p\",\n text_sm_regular: \"p\",\n text_xs_regular: \"p\",\n text_2xs_regular: \"p\",\n\n // TEXT BOLD\n text_xl_bold: \"p\",\n text_lg_bold: \"p\",\n text_md_bold: \"p\",\n text_sm_bold: \"p\",\n text_xs_bold: \"p\",\n text_2xs_bold: \"p\",\n\n // TEXT SEMIBOLD\n text_xl_semibold: \"p\",\n text_lg_semibold: \"p\",\n text_md_semibold: \"p\",\n text_sm_semibold: \"p\",\n text_xs_semibold: \"p\",\n text_2xs_semibold: \"p\",\n\n // TEXT THIN\n text_xl_thin: \"p\",\n text_lg_thin: \"p\",\n text_md_thin: \"p\",\n text_sm_thin: \"p\",\n text_xs_thin: \"p\",\n text_2xs_thin: \"p\",\n\n // DISPLAY REGULAR\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n text_xl_regular: { font: \"400 20px/30px inherit inherit\" },\n text_lg_regular: { font: \"400 18px/28px inherit inherit\" },\n text_md_regular: { font: \"400 16px/24px inherit inherit\" },\n text_sm_regular: { font: \"400 14px/20px inherit inherit\" },\n text_xs_regular: { font: \"400 12px/18px inherit inherit\" },\n text_2xs_regular: { font: \"400 10px/14px inherit inherit\" },\n\n text_xl_bold: { font: \"700 20px/30px inherit inherit\" },\n text_lg_bold: { font: \"700 18px/28px inherit inherit\" },\n text_md_bold: { font: \"700 16px/24px inherit inherit\" },\n text_sm_bold: { font: \"700 14px/20px inherit inherit\" },\n text_xs_bold: { font: \"700 12px/18px inherit inherit\" },\n text_2xs_bold: { font: \"700 10px/14px inherit inherit\" },\n\n text_xl_semibold: { font: \"600 20px/30px inherit inherit\" },\n text_lg_semibold: { font: \"600 18px/28px inherit inherit\" },\n text_md_semibold: { font: \"600 16px/24px inherit inherit\" },\n text_sm_semibold: { font: \"600 14px/20px inherit inherit\" },\n text_xs_semibold: { font: \"600 12px/18px inherit inherit\" },\n text_2xs_semibold: { font: \"600 10px/14px inherit inherit\" },\n\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","import BrightnessAutoRoundedIcon from \"@mui/icons-material/BrightnessAutoRounded\";\nimport DarkModeRoundedIcon from \"@mui/icons-material/DarkModeRounded\";\nimport LightModeRoundedIcon from \"@mui/icons-material/LightModeRounded\";\nimport PersonalVideoRoundedIcon from \"@mui/icons-material/PersonalVideoRounded\";\n\nimport type { OptionItem } from \"../models\";\n\nconst OPTION_ICON_SIZE = 32;\n\nexport const darkModeOptions: OptionItem[] = [\n {\n label: \"Auto\",\n value: \"auto\",\n icon: (\n <BrightnessAutoRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n {\n label: \"System\",\n value: \"system\",\n icon: (\n <PersonalVideoRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n {\n label: \"Light\",\n value: \"light\",\n icon: (\n <LightModeRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n {\n label: \"Dark\",\n value: \"dark\",\n icon: (\n <DarkModeRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n];\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,EAAA,cAAAC,EAAA,kBAAAC,EAAA,iBAAAC,GAAA,YAAAC,EAAA,aAAAC,EAAA,yBAAAC,GAAA,yBAAAC,EAAA,sBAAAC,EAAA,oBAAAC,GAAA,oBAAAC,GAAA,WAAAC,GAAA,eAAAC,GAAA,qBAAAC,GAAA,iBAAAC,EAAA,wBAAAC,GAAA,eAAAC,EAAA,gBAAAC,EAAA,eAAAC,EAAA,oBAAAC,GAAA,kBAAAC,GAAA,mBAAAC,GAAA,UAAAC,GAAA,YAAAC,GAAA,kBAAAC,GAAA,eAAAC,GAAA,gBAAAC,EAAA,WAAAC,EAAA,YAAAC,GAAA,qBAAAC,GAAA,yBAAAC,GAAA,mBAAAC,EAAA,qBAAAC,IAAA,eAAAC,GAAAnC,ICAA,IAAAoC,EAAmB,8BACnBC,EAAuB,yBAEVC,KAAY,EAAAC,SAAO,QAAM;AAAA;AAAA;AAAA;AAAA;ECFtC,IAAAC,EAAkB,oBAClBC,EAAmB,8BACnBC,EAAgC,sDAChCC,EAAoB,yBAgDRC,EAAA,6BA/BCC,EAAN,cAA4B,EAAAC,QAAM,SAGvC,CACA,YAAYC,EAA2B,CACrC,MAAMA,CAAK,EACX,KAAK,MAAQ,CACX,SAAU,EACZ,CACF,CAEA,OAAO,yBAAyBC,EAAkC,CAChE,MAAO,CACL,SAAU,GACV,MAAAA,CACF,CACF,CAEA,kBAAkBA,EAAcC,EAA4B,CAE1D,QAAQ,MAAM,SAAUD,CAAK,EAE7B,QAAQ,MAAM,cAAeC,CAAS,CACxC,CAEA,QAAS,CA9CX,IAAAC,EAAAC,EAAAC,EA+CI,GAAM,CAAE,MAAAC,EAAO,MAAAN,CAAM,EAAI,KACzB,OAAIM,EAAM,YAEN,QAACC,GAAA,CACC,oBAACC,GAAA,CACC,mBAAC,OAAI,qDAAa,EACpB,KACA,QAAC,MACC,qBAAC,OAAI,MAAO,CAAE,MAAO,UAAW,QAAS,cAAe,EACtD,oBAAC,EAAAC,QAAA,CACC,GAAI,CAAE,cAAe,SAAU,GAAI,KAAM,EAC3C,EAAG,IAAI,UAET,EAAO,OACP,QAAC,OAAI,UAAU,KAAK,eAChBN,EAAAG,EAAM,QAAN,YAAAH,EAAa,KAAK,MAAGC,EAAAE,EAAM,QAAN,YAAAF,EAAa,SACtC,KACA,QAAC,OAAI,MAAO,CAAE,MAAO,UAAW,QAAS,cAAe,EACtD,oBAAC,EAAAK,QAAA,CACC,GAAI,CAAE,cAAe,SAAU,GAAI,KAAM,EAC3C,EAAG,IAAI,UAET,EAAO,OACP,QAAC,OAAI,UAAU,KAAK,eAAEJ,EAAAC,EAAM,QAAN,YAAAD,EAAa,MAAM,KAAC,GAC5C,GACF,EAIGL,EAAM,QACf,CACF,EAEMO,GAAY,EAAAG,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnBF,GAAc,EAAAE,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECvF3B,IAAAC,EAAoC,iBACpCC,EAAmB,8BACnBC,EAAsC,yBAgB9BC,EAAA,6BAdKC,EAAU,IAAM,CAC3B,GAAM,CAACC,EAAaC,CAAc,KAAI,YAAkB,EAAK,EAE7D,sBAAU,IAAM,CACd,IAAMC,EAAQ,WAAW,IAAM,CAC7BD,EAAe,EAAI,CACrB,EAAG,GAAG,EAEN,MAAO,IAAM,aAAaC,CAAK,CACjC,EAAG,CAAC,CAAC,KAGH,OAACC,GAAA,CACE,SAAAH,MACC,oBACE,oBAAC,oBAAiB,aAAW,UAAU,KAAM,GAAI,UAAW,EAAG,KAC/D,OAAC,MAAG,MAAO,CAAE,QAAS,EAAI,EAAG,2BAAe,GAC9C,EAEJ,CAEJ,EAEMG,MAAY,EAAAC,SAAO,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EC3B5B,IAAAC,EAAmB,8BAENC,EAAW,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;ECF/B,IAAAC,EAA0C,iBAI7BC,KAAe,iBAC1B,MACF,EAEaC,EAAmB,IAAyB,CACvD,IAAMC,KAAU,cAAWF,CAAY,EACvC,GAAI,CAACE,EACH,MAAM,IAAI,MACR,2DACF,EACF,OAAOA,CACT,ECdA,IAAAC,EAA6C,iBAC7CA,GAAsD,0BACtDC,GAAkD,gCCH3C,IAAMC,EAAe,CAC1B,SAAU,UACV,UAAW,UACX,SAAU,UACV,UAAW,UACX,OAAQ,UACR,IAAK,UACL,OAAQ,UACR,WAAY,SACd,EAEaC,EAGT,CACF,MAAO,CACL,aAAc,UACd,eAAgB,SAClB,EACA,IAAK,CACH,aAAc,UACd,eAAgB,SAClB,EACA,MAAO,CACL,aAAc,UACd,eAAgB,SAClB,EACA,MAAO,CACL,aAAc,UACd,eAAgB,SAClB,EACA,WAAY,CACV,aAAc,UACd,eAAgB,SAClB,EACA,cAAe,CACb,aAAc,UACd,eAAgB,SAClB,EACA,cAAe,CACb,aAAc,UACd,eAAgB,SAClB,EACA,gBAAiB,CACf,aAAc,UACd,eAAgB,SAClB,EACA,cAAe,CAEb,aAAcD,EAAa,MAC7B,EACA,eAAgB,CAEd,aAAcA,EAAa,OAC3B,eAAgB,SAClB,EACA,YAAa,CACX,aAAc,UACd,eAAgB,SAClB,EACA,aAAc,CACZ,aAAc,UACd,eAAgB,SAClB,EACA,YAAa,CACX,aAAc,UACd,eAAgB,SAClB,EACA,aAAc,CACZ,aAAc,UACd,eAAgB,SAClB,EACA,gBAAiB,CACf,aAAc,UACd,eAAgB,SAClB,EACA,WAAY,CACV,aAAc,UACd,eAAgB,SAClB,EACA,eAAgB,CACd,aAAc,UACd,eAAgB,SAClB,EACA,cAAe,CACb,aAAc,UACd,eAAgB,SAClB,EACA,eAAgB,CACd,aAAc,UACd,eAAgB,SAClB,EACA,OAAQ,CACN,aAAc,UACd,eAAgB,SAClB,CACF,ECxFO,IAAME,EAAcC,GACzB,mCAAmC,KAAKA,CAAK,EAUlCC,EAAgBC,GAAoC,CAC/D,GAAI,CAACH,EAAWG,CAAe,EAE7B,eAAQ,MAAM,8BAA+BA,CAAe,EACrDC,EAAa,SAGtB,IAAMC,EAAMF,EAAgB,MAAM,CAAC,EAE7BG,EACJD,EAAI,SAAW,EACXA,EACG,MAAM,EAAE,EACR,IAAKE,GAAMA,EAAIA,CAAC,EAChB,KAAK,EAAE,EACVF,EAEAG,EAAI,OAAO,SAASF,EAAQ,MAAM,EAAG,CAAC,EAAG,EAAE,EAC3CG,EAAI,OAAO,SAASH,EAAQ,MAAM,EAAG,CAAC,EAAG,EAAE,EAC3CI,EAAI,OAAO,SAASJ,EAAQ,MAAM,EAAG,CAAC,EAAG,EAAE,EAIjD,OAFmB,KAAK,OAAOE,EAAI,IAAMC,EAAI,IAAMC,EAAI,KAAO,GAAI,EAE9C,IAAMN,EAAa,SAAWA,EAAa,SACjE,EAQaO,EAAeC,GAC1BV,EAAaU,CAAK,IAAMR,EAAa,UC9ChC,IAAMS,EAA4C,CACvD,WAAY,CACV,aAAc,CACZ,mBAAoB,EACtB,EACA,eAAgB,CACd,QAAS,CAAC,CAAE,MAAAC,CAAM,KAAO,CACvB,MAAOA,EAAM,QAAQ,OAAS,OAAS,OAAS,OAChD,gBACEA,EAAM,QAAQ,OAAS,OAAS,YAAc,YAChD,eAAgB,YAChB,qBAAsB,YACtB,QAAS,WACT,aAAcA,EAAM,MAAM,aAC1B,SAAU,MACZ,EACF,CACF,EAEA,UAAW,CACT,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,QAAS,YACT,aAAcA,EAAM,MAAM,YAC5B,GACA,UAAW,CACT,UAAW,MACb,CACF,CACF,EAEA,YAAa,CACX,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,YAC5B,EACF,CACF,EAEA,UAAW,CACT,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,YAC5B,GACA,OAAQ,CACN,QAAS,OACT,eAAgB,aAChB,WAAY,SACZ,IAAK,KACP,CACF,CACF,EAEA,UAAW,CACT,aAAc,CACZ,UAAW,CACT,MAAO,CACL,MAAO,CACL,QAAS,OACT,aAAc,GACd,SAAU,OACZ,CACF,CACF,CACF,EACA,eAAgB,CACd,KAAM,CACJ,yBAA0B,CACxB,eAAgB,WAClB,CACF,CACF,CACF,EAEA,UAAW,CACT,eAAgB,CACd,KAAM,CACJ,WAAY,IACZ,MAAO,MACT,CACF,CACF,EAEA,SAAU,CACR,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,YAC5B,EACF,CACF,EAEA,aAAc,CACZ,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,uBAAwB,CACtB,aAAcA,EAAM,MAAM,YAC5B,CACF,EACF,CACF,EAEA,SAAU,CACR,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,YAC5B,GACA,WAAY,CAAC,CAAE,MAAAA,CAAM,KAAO,CAC1B,aAAcA,EAAM,MAAM,YAC5B,EACF,CACF,EAEA,YAAa,CACX,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,YAC5B,EACF,CACF,EAEA,0BAA2B,CACzB,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,aAC1B,QAAS,OACT,OAAQ,EACR,UAAW,MACb,EACF,CACF,EAEA,WAAY,CACV,aAAc,CACZ,MAAO,SACT,CACF,EAEA,iBAAkB,CAChB,eAAgB,CACd,KAAM,CACJ,QAAS,CACX,CACF,CACF,EAEA,UAAW,CACT,eAAgB,CACd,WAAY,CAAC,CAAE,MAAAA,CAAM,KAAO,CAC1B,aAAcA,EAAM,MAAM,aAC1B,QAAS,WACT,MAAOA,EAAM,QAAQ,OAAS,OAAS,OAAS,OAChD,gBACEA,EAAM,QAAQ,OAAS,OAAS,YAAc,YAChD,sBAAuB,CACrB,QAAS,MACX,CACF,EACF,CACF,EAEA,oBAAqB,CACnB,eAAgB,CACd,OAAQ,CACN,cAAe,OACjB,CACF,CACF,EAEA,OAAQ,CACN,eAAgB,CACd,KAAM,CAAC,CAAE,MAAAA,CAAM,KAAO,CACpB,aAAcA,EAAM,MAAM,YAC5B,EACF,CACF,EAEA,aAAc,CACZ,eAAgB,CACd,KAAM,CACJ,YAAa,CACX,QAAS,MACX,CACF,CACF,CACF,CACF,EC/LA,IAAAC,GAA4B,yBCSrB,IAAMC,EAAoD,CAC/D,aAAc,CACZ,eAAgB,CAEd,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,iBAAkB,IAGlB,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,cAAe,IAGf,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,kBAAmB,IAGnB,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,cAAe,IAGf,oBAAqB,KACrB,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KACpB,mBAAoB,KAGpB,iBAAkB,KAClB,gBAAiB,KACjB,gBAAiB,KACjB,gBAAiB,KACjB,gBAAiB,KACjB,gBAAiB,IACnB,CACF,CACF,EAKaC,EAAgD,CAC3D,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,iBAAkB,CAAE,KAAM,+BAAgC,EAE1D,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,cAAe,CAAE,KAAM,+BAAgC,EAEvD,iBAAkB,CAAE,KAAM,+BAAgC,EAC1D,iBAAkB,CAAE,KAAM,+BAAgC,EAC1D,iBAAkB,CAAE,KAAM,+BAAgC,EAC1D,iBAAkB,CAAE,KAAM,+BAAgC,EAC1D,iBAAkB,CAAE,KAAM,+BAAgC,EAC1D,kBAAmB,CAAE,KAAM,+BAAgC,EAE3D,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,aAAc,CAAE,KAAM,+BAAgC,EACtD,cAAe,CAAE,KAAM,+BAAgC,EAEvD,oBAAqB,CAAE,KAAM,+BAAgC,EAC7D,mBAAoB,CAAE,KAAM,+BAAgC,EAC5D,mBAAoB,CAAE,KAAM,+BAAgC,EAC5D,mBAAoB,CAAE,KAAM,+BAAgC,EAC5D,mBAAoB,CAAE,KAAM,+BAAgC,EAC5D,mBAAoB,CAAE,KAAM,+BAAgC,EAE5D,iBAAkB,CAAE,KAAM,+BAAgC,EAC1D,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,EACzD,gBAAiB,CAAE,KAAM,+BAAgC,CAC3D,EDlGO,IAAMC,EAAoB,CAC/BC,EACAC,EAAkB,UAClBC,EAAoB,YAEpB,gBAAY,CACV,QAAS,CACP,QAAS,CAAE,KAAMF,CAAa,EAC9B,UAAW,CAAE,KAAMC,CAAgB,EACnC,QAAS,CACP,KAAMC,IAAS,OAASC,EAAa,OAASA,EAAa,UAC7D,EACA,MAAO,CAAE,KAAMA,EAAa,GAAI,EAChC,KAAAD,CACF,EACA,WAAY,CACV,GAAGE,EACH,cAAeC,CACjB,EACA,WAAYC,EACZ,MAAO,CAAE,aAAc,EAAG,CAC5B,CAAC,EAKUC,EAA8C,OAAO,QAChEC,CACF,EAAE,IAAI,CAAC,CAACC,EAAMC,CAAM,KAAO,CACzB,KAAAD,EACA,SAAUV,EAAkBW,EAAO,aAAcA,EAAO,cAAc,CACxE,EAAE,EAUWC,EAAa,CACxBC,EACAC,EACAZ,IACY,CACZ,OAAQW,EAAU,CAChB,IAAK,QACH,MAAO,GAET,IAAK,OACH,MAAO,GAET,IAAK,SACH,OAAOC,IAAgB,OAEzB,IAAK,OACH,OAAOC,EAAab,CAAe,IAAME,EAAa,UAExD,QACE,MAAO,EAEX,CACF,EEzEA,IAAAY,GAAsC,wDACtCC,GAAgC,kDAChCC,GAAiC,mDACjCC,GAAqC,uDAW/BC,EAAA,6BAPAC,EAAmB,GAEZC,GAAgC,CAC3C,CACE,MAAO,OACP,MAAO,OACP,QACE,OAAC,GAAAC,QAAA,CACC,MAAM,UACN,GAAI,CAAE,SAAUF,CAAiB,EACnC,CAEJ,EACA,CACE,MAAO,SACP,MAAO,SACP,QACE,OAAC,GAAAG,QAAA,CACC,MAAM,UACN,GAAI,CAAE,SAAUH,CAAiB,EACnC,CAEJ,EACA,CACE,MAAO,QACP,MAAO,QACP,QACE,OAAC,GAAAI,QAAA,CACC,MAAM,UACN,GAAI,CAAE,SAAUJ,CAAiB,EACnC,CAEJ,EACA,CACE,MAAO,OACP,MAAO,OACP,QACE,OAAC,GAAAK,QAAA,CACC,MAAM,UACN,GAAI,CAAE,SAAUL,CAAiB,EACnC,CAEJ,CACF,EClDA,IAAAM,EAAwB,iBACxBA,EAA4B,0BAC5BC,GAAyB,gCA8BrB,IAAAC,GAAA,6BAjBSC,GAAmB,IAAM,CACpC,IAAMC,KAAQ,aAAS,EACjBC,EAAaD,EAAM,QAAQ,OAAS,OAEpCE,EAAeF,EAAM,QAAQ,QAAQ,KACrCG,EAAiBH,EAAM,QAAQ,UAAU,KAEzCI,KAAmB,WACvB,IAAMC,EAAaH,CAAY,EAC/B,CAACA,CAAY,CACf,EACMI,KAAqB,WACzB,IAAMD,EAAaF,CAAc,EACjC,CAACA,CAAc,CACjB,EAEA,SACE,QAAC,UACC,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKkB,GAAGD,CAAY,IAAI;AAAA,qBAC9BE,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BASXH,EAAa,OAAS,OAAO;AAAA,mBACpCK,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAQdL,EAAa,UAAY,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOjCE,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAONA,CAAc;AAAA;AAAA;AAAA,gCAGdD,CAAY;AAAA;AAAA;AAAA;AAAA,gCAIZ,GAAGA,CAAY,IAAI;AAAA;AAAA;AAAA;AAAA,gCAInBC,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAoEpBF,EAAa,UAAY,SAAS;AAAA;AAAA;AAAA;AAAA,QAKxD,CAEJ,EC7JA,IAAAM,EAA0B,0BAKbC,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcbC,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYTC,GAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYVC,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYhBC,GAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBRC,GAAiB,CAACC,EAAaC,EAAa,KAAO;AAAA;AAAA;AAAA,0BAGtCD,CAAG;AAAA;AAAA;AAAA;AAAA,wBAILC,CAAU,MAAMD,CAAG;AAAA;AAAA;AAAA;AAAA,0BAIjBA,CAAG;AAAA;AAAA,EAWhBE,GAAiBF,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,mCAKXA,CAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAUzBG,GAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBlBC,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EC3H5B,IAAMC,GAAkB,IAAc,CAE3C,IAAMC,EADc,IAAI,KAAK,EACG,SAAS,EACrCC,EACJ,OAAID,EAAc,IAAMA,GAAe,EACrCC,EAAW,iEACFD,EAAc,IAAMA,EAAc,GAC3CC,EAAW,iEAEXA,EAAW,uEAGNA,CACT,ECdO,IAAMC,GAAoBC,GAAe,CAC9C,IAAMC,EAAOD,EAAK,YAAY,EACxBE,EAAQ,OAAOF,EAAK,SAAS,EAAI,CAAC,EAAE,SAAS,EAAG,GAAG,EACnDG,EAAM,OAAOH,EAAK,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,EAClD,MAAO,GAAGC,CAAI,IAAIC,CAAK,IAAIC,CAAG,EAChC,ECQA,GAAM,CAAE,UAAAC,EAAU,EAAI,WAAW,UAOpBC,GAAqB,IAAuB,CACvD,IAAMC,EAAKF,GAAU,YAAY,EAEjC,OAAIE,EAAG,SAAS,YAAY,EAAU,UAClCA,EAAG,SAAS,QAAQ,GAAKA,EAAG,SAAS,MAAM,GAAKA,EAAG,SAAS,MAAM,EAC7D,MACLA,EAAG,SAAS,KAAK,EAAU,QAC3BA,EAAG,SAAS,SAAS,EAAU,UAC/BA,EAAG,SAAS,OAAO,EAAU,QAE1B,SACT,EAOaC,GAAa,IAAe,CACvC,IAAMD,EAAKF,GAAU,YAAY,EAGjC,OAAIE,EAAG,SAAS,KAAK,EAAU,OAC3BA,EAAG,SAAS,QAAQ,EAAU,SAC9BA,EAAG,SAAS,SAAS,EAAU,UAC/BA,EAAG,SAAS,QAAQ,EAAU,SAE3B,SACT,EAKaE,GAAa,CACxB,GAAIH,GAAmB,EACvB,QAASE,GAAW,CACtB,ECpDO,IAAME,GAAU,CACrBC,EACAC,EAAO,UAAU,UAAY,UAClB,CAEX,IAAMC,EAAM,IAAI,KAChBF,EAAO,IAAI,KAAKA,CAAI,EAEpB,IAAMG,EAAgB,KAAK,OAAOD,EAAI,QAAQ,EAAIF,EAAK,QAAQ,GAAK,GAAI,EAGlEI,EAAM,IAAI,KAAK,mBAAmBH,EAAM,CAAE,QAAS,MAAO,CAAC,EAGjE,GAAIE,EAAgB,GAClB,OAAOC,EAAI,OAAO,CAACD,EAAe,QAAQ,EAE5C,GAAIA,EAAgB,KAAM,CACxB,IAAME,EAAU,KAAK,MAAMF,EAAgB,EAAE,EAC7C,OAAOC,EAAI,OAAO,CAACC,EAAS,QAAQ,CACtC,CACA,GAAIF,EAAgB,MAAQ,CAC1B,IAAMG,EAAQ,KAAK,MAAMH,EAAgB,IAAI,EAC7C,OAAOC,EAAI,OAAO,CAACE,EAAO,MAAM,CAClC,CACA,IAAMC,EAAO,KAAK,MAAMJ,EAAgB,KAAM,EAC9C,OAAOC,EAAI,OAAO,CAACG,EAAM,KAAK,CAChC,EAEaC,GAAmB,CAC9BR,EACAC,EAAO,UAAU,UAAY,UAClB,CACX,IAAMC,EAAM,IAAI,KAChBF,EAAO,IAAI,KAAKA,CAAI,EACpB,IAAMS,GAAcT,EAAK,QAAQ,EAAIE,EAAI,QAAQ,GAAK,IAChDQ,EAAkB,KAAK,MAAMD,GAAc,GAAK,GAAG,EACnDE,EAAoB,KAAK,OAC5BF,EAAa,GAAK,GAAKC,GAAmB,EAC7C,EACMP,EAAgB,KAAK,MACzBM,EAAa,GAAK,GAAKC,EAAkB,GAAKC,CAChD,EAEMP,EAAM,IAAI,KAAK,mBAAmBH,EAAM,CAAE,QAAS,MAAO,CAAC,EAEjE,GAAIU,IAAsB,GAAKR,EAAgB,GAC7C,OAAOC,EAAI,OAAOD,EAAe,QAAQ,EAE3C,GAAIO,IAAoB,GAAKC,EAAoB,GAC/C,OAAOP,EAAI,OAAOO,EAAmB,QAAQ,EAE/C,GAAID,EAAkB,GAAI,CACxB,IAAMJ,EAAQ,GAAG,IAAI,KAAK,mBAAmBL,EAAM,CACjD,QAAS,MACX,CAAC,EAAE,OAAOS,EAAiB,MAAM,CAAC,GAC5BL,EAAU,IAAI,IAAI,KAAK,mBAAmBJ,EAAM,CACpD,cAAe,SACf,QAAS,SACT,MAAO,MACT,CAAC,EAAE,OAAOU,EAAmB,QAAQ,CAAC,GAAG,QAAQ,OAAQ,EAAE,EAC3D,MAAO,GAAGL,CAAK,IAAID,CAAO,EAC5B,CAEA,IAAME,EAAO,KAAK,MAAMJ,EAAgB,KAAM,EAC9C,OAAOC,EAAI,OAAOG,EAAM,KAAK,CAC/B,ECzEA,IAAAK,EAAoC,iBAQvBC,GAAuB,CAACC,EAAa,MAAiB,CACjE,GAAM,CAACC,EAAiBC,CAAkB,KAAI,YAAkB,EAAK,EAErE,sBAAU,IAAM,CACd,IAAMC,EAAkB,IAAM,CAC5BD,EAAmB,OAAO,WAAaF,CAAU,CACnD,EACAG,EAAgB,EAChB,IAAMC,EAAe,IAAMD,EAAgB,EAC3C,cAAO,iBAAiB,SAAUC,CAAY,EACvC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAY,CACnD,CACF,EAAG,CAACJ,CAAU,CAAC,EAERC,CACT,ECxBA,IAAAI,EAAoC,iBAQvBC,EAAiB,IAAmB,CAC/C,GAAM,CAACC,EAAOC,CAAQ,KAAI,YAAsB,SAAS,EACzD,sBAAU,IAAM,CACd,IAAMC,EAAsBC,GAA2B,CACrDF,EAASE,EAAE,QAAU,OAAS,OAAO,CACvC,EAEMC,EAAoB,WAAW,WACnC,8BACF,EACA,OAAAH,EAASG,EAAkB,QAAU,OAAS,OAAO,EAGrDA,EAAkB,iBAAiB,SAAUF,CAAkB,EAExD,IAAM,CACXE,EAAkB,oBAAoB,SAAUF,CAAkB,CACpE,CACF,EAAG,CAAC,CAAC,EAEEF,CACT,EdiCQ,IAAAK,EAAA,6BAlDKC,GAA8C,CAAC,CAAE,SAAAC,CAAS,IAAM,CAC3E,IAAMC,EAAcC,EAAe,EAE7B,CAACC,EAAOC,CAAQ,KAAI,YAAiB,IAAM,CAC/C,IAAMC,EAAS,aAAa,QAAQ,aAAa,EACjD,OAAOA,GAAS,KAAK,MAAMA,CAAM,EAAE,OAAS,QAC9C,CAAC,EAEK,CAACC,EAAUC,CAAW,KAAI,YAE9B,IAAM,CACN,IAAMF,EAAS,aAAa,QAAQ,aAAa,EACjD,OAAOA,GAAS,KAAK,MAAMA,CAAM,EAAE,UAAY,MACjD,CAAC,KAED,aAAU,IAAM,CACd,aAAa,QAAQ,cAAe,KAAK,UAAU,CAAE,MAAAF,EAAO,SAAAG,CAAS,CAAC,CAAC,CACzE,EAAG,CAACH,EAAOG,CAAQ,CAAC,EAEpB,IAAME,KAAgB,WAAQ,IAAM,CA/BtC,IAAAC,EAgCI,OAAIR,IAAgB,UAAkBS,EAAO,CAAC,EAAE,SAC5CP,IAAU,SACLF,IAAgB,OAASS,EAAO,CAAC,EAAE,SAAWA,EAAO,CAAC,EAAE,WAE1DD,EAAAC,EAAO,KAAMC,IAAMA,GAAE,OAASR,CAAK,IAAnC,YAAAM,EAAsC,WAAYC,EAAO,CAAC,EAAE,QACrE,EAAG,CAACT,EAAaE,CAAK,CAAC,EAEjBS,KAAO,WACX,IACEC,EAAWP,EAAUL,EAAaO,EAAc,QAAQ,UAAU,IAAI,EAClE,OACA,QACN,CAACF,EAAUL,EAAaO,CAAa,CACvC,EAEMM,KAAW,WACf,IACEC,EACEP,EAAc,QAAQ,QAAQ,KAC9BA,EAAc,QAAQ,UAAU,KAChCI,CACF,EACF,CAACJ,EAAeI,CAAI,CACtB,EAEMI,KAAe,WAAQ,KAAO,CAAE,SAAUJ,IAAS,MAAO,GAAI,CAACA,CAAI,CAAC,EAE1E,SACE,OAACK,EAAa,SAAb,CAAsB,MAAO,CAAE,MAAAd,EAAO,SAAAG,EAAU,SAAAF,EAAU,YAAAG,CAAY,EACrE,mBAAC,GAAAW,cAAA,CAAiB,MAAOJ,EACvB,mBAAC,GAAAK,cAAA,CAAqB,MAAOH,EAC1B,SAAAhB,EACH,EACF,EACF,CAEJ","names":["index_exports","__export","ColorPalette","DialogBtn","ErrorBoundary","GlobalStyles","Loading","PathName","ThemeProviderWrapper","commonComponentProps","createCustomTheme","darkModeOptions","displayGreeting","fadeIn","fadeInLeft","getDayIdentifier","getFontColor","installAppAnimation","isDarkMode","isFontLight","isHexColor","logoutAnimation","progressPulse","pulseAnimation","scale","slideIn","slideInBottom","systemInfo","themeConfig","themes","timeAgo","timeAgoFromStart","useResponsiveDisplay","useSystemTheme","useThemeSettings","__toCommonJS","import_styled","import_material","DialogBtn","styled","import_react","import_styled","import_ErrorOutlineRounded","import_material","import_jsx_runtime","ErrorBoundary","React","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","ErrorOutlineRounded","styled","import_react","import_styled","import_material","import_jsx_runtime","Loading","showLoading","setShowLoading","timer","Container","styled","import_styled","PathName","styled","import_react","ThemeContext","useThemeSettings","context","import_react","import_styles","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","import_material","muiTypography","typographyVariants","createCustomTheme","primaryColor","backgroundColor","mode","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","import_BrightnessAutoRounded","import_DarkModeRounded","import_LightModeRounded","import_PersonalVideoRounded","import_jsx_runtime","OPTION_ICON_SIZE","darkModeOptions","BrightnessAutoRoundedIcon","PersonalVideoRoundedIcon","LightModeRoundedIcon","DarkModeRoundedIcon","import_react","import_styles","import_jsx_runtime","GlobalStyles","theme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","getFontColor","secondaryFontColor","import_react","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","import_react","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","import_react","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","import_jsx_runtime","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","stored","darkMode","setDarkMode","selectedTheme","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
package/dist/index.mjs CHANGED
@@ -3,12 +3,12 @@ import z from"@emotion/styled";import{Button as N}from"@mui/material";var W=z(N)
3
3
  border-radius: 16px;
4
4
  font-size: 16px;
5
5
  margin: 8px;
6
- `;import H from"react";import I from"@emotion/styled";import R from"@mui/icons-material/ErrorOutlineRounded";import{Box as x}from"@mui/material";import{jsx as u,jsxs as c}from"react/jsx-runtime";var k=class extends H.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,o){console.error("Error:",r),console.error("Error Info:",o)}render(){var t,i,n;let{state:r,props:o}=this;return r.hasError?c(G,{children:[u(Y,{children:u(x,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),c("h3",{children:[c(x,{style:{color:"#ff3131",display:"inline-block"},children:[u(R,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",c(x,{translate:"no",children:["[",(t=r.error)==null?void 0:t.name,"] ",(i=r.error)==null?void 0:i.message]}),c(x,{style:{color:"#ff3131",display:"inline-block"},children:[u(R,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",c(x,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):o.children}},G=I.div`
6
+ `;import H from"react";import I from"@emotion/styled";import R from"@mui/icons-material/ErrorOutlineRounded";import{Box as x}from"@mui/material";import{jsx as u,jsxs as c}from"react/jsx-runtime";var k=class extends H.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,t){console.error("Error:",r),console.error("Error Info:",t)}render(){var o,i,n;let{state:r,props:t}=this;return r.hasError?c(Y,{children:[u(G,{children:u(x,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),c("h3",{children:[c(x,{style:{color:"#ff3131",display:"inline-block"},children:[u(R,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",c(x,{translate:"no",children:["[",(o=r.error)==null?void 0:o.name,"] ",(i=r.error)==null?void 0:i.message]}),c(x,{style:{color:"#ff3131",display:"inline-block"},children:[u(R,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",c(x,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):t.children}},Y=I.div`
7
7
  margin: 0 8vw;
8
8
  @media (max-width: 768px) {
9
9
  margin: 0;
10
10
  }
11
- `,Y=I.h1`
11
+ `,G=I.h1`
12
12
  margin-top: 32px;
13
13
  margin-bottom: 32px;
14
14
  font-size: 36px;
@@ -24,7 +24,7 @@ import z from"@emotion/styled";import{Button as N}from"@mui/material";var W=z(N)
24
24
  margin-top: 0;
25
25
  margin-bottom: 0;
26
26
  }
27
- `;import{useEffect as U,useState as V}from"react";import X from"@emotion/styled";import{Box as J,CircularProgress as j}from"@mui/material";import{Fragment as q,jsx as T,jsxs as K}from"react/jsx-runtime";var Q=()=>{let[e,r]=V(!1);return U(()=>{let o=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(o)},[]),T(Z,{children:e&&K(q,{children:[T(j,{"aria-label":"loading",size:80,thickness:4}),T("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},Z=X(J)`
27
+ `;import{useEffect as U,useState as V}from"react";import X from"@emotion/styled";import{Box as J,CircularProgress as j}from"@mui/material";import{Fragment as q,jsx as T,jsxs as K}from"react/jsx-runtime";var Q=()=>{let[e,r]=V(!1);return U(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),T(Z,{children:e&&K(q,{children:[T(j,{"aria-label":"loading",size:80,thickness:4}),T("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},Z=X(J)`
28
28
  position: absolute;
29
29
  top: 50%;
30
30
  left: 50%;
@@ -40,12 +40,12 @@ import z from"@emotion/styled";import{Button as N}from"@mui/material";var W=z(N)
40
40
  color: white;
41
41
  padding: 4px 6px;
42
42
  border-radius: 8px;
43
- `;import{createContext as oe,useContext as te}from"react";var v=oe(void 0),ie=()=>{let e=te(v);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as b,useState as A,useEffect as $e}from"react";import{ThemeProvider as ze}from"@emotion/react";import{ThemeProvider as Ne}from"@mui/material/styles";var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},S={Lanit:{primaryColor:"#33ccff",secondaryColor:"#f7f7f7"},BPM:{primaryColor:"#203959",secondaryColor:"#ffffff"},Pampa:{primaryColor:"#ffe22e",secondaryColor:"#fafafa"},Hurma:{primaryColor:"#f6883d",secondaryColor:"#ffffff"},"Neo Mint":{primaryColor:"#00f5d4",secondaryColor:"#e4fff8"},"Cyber Grape":{primaryColor:"#4b0082",secondaryColor:"#f4f0fa"},"Coral Glass":{primaryColor:"#ff6f61",secondaryColor:"#fef2f2"},"Space Gray":{primaryColor:"#2d2e32",secondaryColor:"#1e1f23"},"Blueberry Ice":{primaryColor:"#3f51b5",secondaryColor:"#e8eaf6"},"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var E=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),m=e=>{if(!E(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),o=r.length===3?r.split("").map(l=>l+l).join(""):r,t=Number.parseInt(o.slice(0,2),16),i=Number.parseInt(o.slice(2,4),16),n=Number.parseInt(o.slice(4,6),16);return Math.round((t*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},ne=e=>m(e)===s.fontLight;var w={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiSvgIcon:{defaultProps:{color:"primary"}},MuiDialogContent:{styleOverrides:{root:{padding:0}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};import{createTheme as ae}from"@mui/material";var O={defaultProps:{variantMapping:{text_xl_regular:"p",text_lg_regular:"p",text_md_regular:"p",text_sm_regular:"p",text_xs_regular:"p",text_2xs_regular:"p",text_xl_bold:"p",text_lg_bold:"p",text_md_bold:"p",text_sm_bold:"p",text_xs_bold:"p",text_2xs_bold:"p",text_xl_semibold:"p",text_lg_semibold:"p",text_md_semibold:"p",text_sm_semibold:"p",text_xs_semibold:"p",text_2xs_semibold:"p",text_xl_thin:"p",text_lg_thin:"p",text_md_thin:"p",text_sm_thin:"p",text_xs_thin:"p",text_2xs_thin:"p",display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}},F={text_xl_regular:{font:"400 20px/30px inherit inherit"},text_lg_regular:{font:"400 18px/28px inherit inherit"},text_md_regular:{font:"400 16px/24px inherit inherit"},text_sm_regular:{font:"400 14px/20px inherit inherit"},text_xs_regular:{font:"400 12px/18px inherit inherit"},text_2xs_regular:{font:"400 10px/14px inherit inherit"},text_xl_bold:{font:"700 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var h=(e,r="#232e58",o="dark")=>ae({palette:{primary:{main:e},secondary:{main:r},warning:{main:o==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:o},components:{...w,MuiTypography:O},typography:F,shape:{borderRadius:24}}),f=Object.entries(S).map(([e,r])=>({name:e,MuiTheme:h(r.primaryColor,r.secondaryColor)})),M=(e,r,o)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return m(o)===s.fontLight;default:return!1}};import se from"@mui/icons-material/BrightnessAutoRounded";import le from"@mui/icons-material/DarkModeRounded";import pe from"@mui/icons-material/LightModeRounded";import de from"@mui/icons-material/PersonalVideoRounded";import{jsx as y}from"react/jsx-runtime";var g=32,me=[{label:"Auto",value:"auto",icon:y(se,{sx:{fontSize:g}})},{label:"System",value:"system",icon:y(de,{sx:{fontSize:g}})},{label:"Light",value:"light",icon:y(pe,{sx:{fontSize:g}})},{label:"Dark",value:"dark",icon:y(le,{sx:{fontSize:g}})}];import{useMemo as L}from"react";import{Global as fe,css as ce}from"@emotion/react";import{useTheme as xe}from"@mui/material/styles";import{jsx as he}from"react/jsx-runtime";var ue=()=>{let e=xe(),r=e.palette.mode==="dark",o=e.palette.primary.main,t=e.palette.secondary.main,i=L(()=>m(o),[o]),n=L(()=>m(t),[t]);return he(fe,{styles:ce`
43
+ `;import{createContext as te,useContext as oe}from"react";var v=te(void 0),ie=()=>{let e=oe(v);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as b,useState as A,useEffect as $e}from"react";import{ThemeProvider as ze}from"@emotion/react";import{ThemeProvider as Ne}from"@mui/material/styles";var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},w={Lanit:{primaryColor:"#33ccff",secondaryColor:"#f7f7f7"},BPM:{primaryColor:"#203959",secondaryColor:"#ffffff"},Pampa:{primaryColor:"#ffe22e",secondaryColor:"#fafafa"},Hurma:{primaryColor:"#f6883d",secondaryColor:"#ffffff"},"Neo Mint":{primaryColor:"#00f5d4",secondaryColor:"#e4fff8"},"Cyber Grape":{primaryColor:"#4b0082",secondaryColor:"#f4f0fa"},"Coral Glass":{primaryColor:"#ff6f61",secondaryColor:"#fef2f2"},"Blueberry Ice":{primaryColor:"#3f51b5",secondaryColor:"#e8eaf6"},"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var E=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),m=e=>{if(!E(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(l=>l+l).join(""):r,o=Number.parseInt(t.slice(0,2),16),i=Number.parseInt(t.slice(2,4),16),n=Number.parseInt(t.slice(4,6),16);return Math.round((o*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},ne=e=>m(e)===s.fontLight;var S={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiSvgIcon:{defaultProps:{color:"primary"}},MuiDialogContent:{styleOverrides:{root:{padding:0}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};import{createTheme as ae}from"@mui/material";var O={defaultProps:{variantMapping:{text_xl_regular:"p",text_lg_regular:"p",text_md_regular:"p",text_sm_regular:"p",text_xs_regular:"p",text_2xs_regular:"p",text_xl_bold:"p",text_lg_bold:"p",text_md_bold:"p",text_sm_bold:"p",text_xs_bold:"p",text_2xs_bold:"p",text_xl_semibold:"p",text_lg_semibold:"p",text_md_semibold:"p",text_sm_semibold:"p",text_xs_semibold:"p",text_2xs_semibold:"p",text_xl_thin:"p",text_lg_thin:"p",text_md_thin:"p",text_sm_thin:"p",text_xs_thin:"p",text_2xs_thin:"p",display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}},F={text_xl_regular:{font:"400 20px/30px inherit inherit"},text_lg_regular:{font:"400 18px/28px inherit inherit"},text_md_regular:{font:"400 16px/24px inherit inherit"},text_sm_regular:{font:"400 14px/20px inherit inherit"},text_xs_regular:{font:"400 12px/18px inherit inherit"},text_2xs_regular:{font:"400 10px/14px inherit inherit"},text_xl_bold:{font:"700 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var h=(e,r="#232e58",t="dark")=>ae({palette:{primary:{main:e},secondary:{main:r},warning:{main:t==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:t},components:{...S,MuiTypography:O},typography:F,shape:{borderRadius:24}}),f=Object.entries(w).map(([e,r])=>({name:e,MuiTheme:h(r.primaryColor,r.secondaryColor)})),M=(e,r,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return m(t)===s.fontLight;default:return!1}};import se from"@mui/icons-material/BrightnessAutoRounded";import le from"@mui/icons-material/DarkModeRounded";import pe from"@mui/icons-material/LightModeRounded";import de from"@mui/icons-material/PersonalVideoRounded";import{jsx as y}from"react/jsx-runtime";var g=32,me=[{label:"Auto",value:"auto",icon:y(se,{color:"inherit",sx:{fontSize:g}})},{label:"System",value:"system",icon:y(de,{color:"inherit",sx:{fontSize:g}})},{label:"Light",value:"light",icon:y(pe,{color:"inherit",sx:{fontSize:g}})},{label:"Dark",value:"dark",icon:y(le,{color:"inherit",sx:{fontSize:g}})}];import{useMemo as L}from"react";import{Global as fe,css as ce}from"@emotion/react";import{useTheme as xe}from"@mui/material/styles";import{jsx as he}from"react/jsx-runtime";var ue=()=>{let e=xe(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.secondary.main,i=L(()=>m(t),[t]),n=L(()=>m(o),[o]);return he(fe,{styles:ce`
44
44
  * {
45
45
  font-family: "Poppins", sans-serif !important;
46
46
  -webkit-tap-highlight-color: transparent;
47
47
  &::selection {
48
- background-color: ${`${o}e1`};
48
+ background-color: ${`${t}e1`};
49
49
  color: ${i};
50
50
  }
51
51
  }
@@ -71,25 +71,25 @@ import z from"@emotion/styled";import{Button as N}from"@mui/material";var W=z(N)
71
71
  margin: 0;
72
72
  height: 100%;
73
73
  touch-action: manipulation;
74
- background: ${t};
74
+ background: ${o};
75
75
  background-attachment: fixed;
76
76
  background-size: cover;
77
77
  transition: 0.3s background;
78
78
 
79
79
  ::-webkit-scrollbar {
80
80
  width: 8px;
81
- background-color: ${t};
81
+ background-color: ${o};
82
82
  }
83
83
  ::-webkit-scrollbar-thumb {
84
- background-color: ${o};
84
+ background-color: ${t};
85
85
  border-radius: 64px;
86
86
  }
87
87
  ::-webkit-scrollbar-thumb:hover {
88
- background-color: ${`${o}d8`};
88
+ background-color: ${`${t}d8`};
89
89
  }
90
90
  ::-webkit-scrollbar-track {
91
91
  border-radius: 64px;
92
- background-color: ${t};
92
+ background-color: ${o};
93
93
  }
94
94
  }
95
95
 
@@ -234,7 +234,7 @@ import z from"@emotion/styled";import{Button as N}from"@mui/material";var W=z(N)
234
234
  transform: scale(1);
235
235
  opacity: 1;
236
236
  }
237
- `,Se=d`
237
+ `,we=d`
238
238
  0% {
239
239
  transform: translateY(0);
240
240
  }
@@ -250,5 +250,5 @@ import z from"@emotion/styled";import{Button as N}from"@mui/material";var W=z(N)
250
250
  100% {
251
251
  transform: translateY(0);
252
252
  }
253
- `;var we=()=>{let r=new Date().getHours(),o;return r<12&&r>=5?o="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?o="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":o="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",o};var Me=e=>{let r=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),t=String(e.getDate()).padStart(2,"0");return`${r}-${o}-${t}`};var{userAgent:B}=globalThis.navigator,Pe=()=>{let e=B.toLowerCase();return e.includes("windows nt")?"Windows":e.includes("iphone")||e.includes("ipad")||e.includes("ipod")?"iOS":e.includes("mac")?"macOS":e.includes("android")?"Android":e.includes("linux")?"Linux":"Unknown"},De=()=>{let e=B.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Re={os:Pe(),browser:De()};var Ie=(e,r=navigator.language||"en-US")=>{let o=new Date;e=new Date(e);let t=Math.floor((o.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(t<60)return i.format(-t,"second");if(t<3600){let a=Math.floor(t/60);return i.format(-a,"minute")}if(t<86400){let a=Math.floor(t/3600);return i.format(-a,"hour")}let n=Math.floor(t/86400);return i.format(-n,"day")},Ee=(e,r=navigator.language||"en-US")=>{let o=new Date;e=new Date(e);let t=(e.getTime()-o.getTime())/1e3,i=Math.floor(t/(60*60)),n=Math.floor((t-60*60*i)/60),a=Math.floor(t-60*60*i-60*n),l=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return l.format(a,"second");if(i===0&&n<60)return l.format(n,"minute");if(i<24){let C=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,p=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${C} ${p}`}let _=Math.floor(a/86400);return l.format(_,"day")};import{useEffect as Oe,useState as Fe}from"react";var Le=(e=768)=>{let[r,o]=Fe(!1);return Oe(()=>{let t=()=>{o(window.innerWidth<e)};t();let i=()=>t();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};import{useState as Be,useEffect as Ae}from"react";var P=()=>{let[e,r]=Be("unknown");return Ae(()=>{let o=i=>{r(i.matches?"dark":"light")},t=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(t.matches?"dark":"light"),t.addEventListener("change",o),()=>{t.removeEventListener("change",o)}},[]),e};import{jsx as D}from"react/jsx-runtime";var We=({children:e})=>{let r=P(),[o,t]=A(()=>{let p=localStorage.getItem("appSettings");return p&&JSON.parse(p).theme||"system"}),[i,n]=A(()=>{let p=localStorage.getItem("appSettings");return p&&JSON.parse(p).darkMode||"auto"});$e(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:o,darkMode:i}))},[o,i]);let a=b(()=>{var p;return r==="unknown"?f[0].MuiTheme:o==="system"?r==="dark"?f[0].MuiTheme:f[1].MuiTheme:((p=f.find($=>$.name===o))==null?void 0:p.MuiTheme)||f[0].MuiTheme},[r,o]),l=b(()=>M(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),_=b(()=>h(a.palette.primary.main,a.palette.secondary.main,l),[a,l]),C=b(()=>({darkMode:l==="dark"}),[l]);return D(v.Provider,{value:{theme:o,darkMode:i,setTheme:t,setDarkMode:n},children:D(Ne,{theme:_,children:D(ze,{theme:C,children:e})})})};export{s as ColorPalette,W as DialogBtn,k as ErrorBoundary,ue as GlobalStyles,Q as Loading,re as PathName,We as ThemeProviderWrapper,w as commonComponentProps,h as createCustomTheme,me as darkModeOptions,we as displayGreeting,ye as fadeIn,ge as fadeInLeft,Me as getDayIdentifier,m as getFontColor,Se as installAppAnimation,M as isDarkMode,ne as isFontLight,E as isHexColor,ve as logoutAnimation,Te as progressPulse,ke as pulseAnimation,Ce as scale,be as slideIn,_e as slideInBottom,Re as systemInfo,S as themeConfig,f as themes,Ie as timeAgo,Ee as timeAgoFromStart,Le as useResponsiveDisplay,P as useSystemTheme,ie as useThemeSettings};
253
+ `;var Se=()=>{let r=new Date().getHours(),t;return r<12&&r>=5?t="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",t};var Me=e=>{let r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`};var{userAgent:B}=globalThis.navigator,Pe=()=>{let e=B.toLowerCase();return e.includes("windows nt")?"Windows":e.includes("iphone")||e.includes("ipad")||e.includes("ipod")?"iOS":e.includes("mac")?"macOS":e.includes("android")?"Android":e.includes("linux")?"Linux":"Unknown"},De=()=>{let e=B.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Re={os:Pe(),browser:De()};var Ie=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=Math.floor((t.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return i.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return i.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return i.format(-a,"hour")}let n=Math.floor(o/86400);return i.format(-n,"day")},Ee=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=(e.getTime()-t.getTime())/1e3,i=Math.floor(o/(60*60)),n=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*n),l=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return l.format(a,"second");if(i===0&&n<60)return l.format(n,"minute");if(i<24){let C=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,p=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${C} ${p}`}let _=Math.floor(a/86400);return l.format(_,"day")};import{useEffect as Oe,useState as Fe}from"react";var Le=(e=768)=>{let[r,t]=Fe(!1);return Oe(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};import{useState as Be,useEffect as Ae}from"react";var P=()=>{let[e,r]=Be("unknown");return Ae(()=>{let t=i=>{r(i.matches?"dark":"light")},o=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(o.matches?"dark":"light"),o.addEventListener("change",t),()=>{o.removeEventListener("change",t)}},[]),e};import{jsx as D}from"react/jsx-runtime";var We=({children:e})=>{let r=P(),[t,o]=A(()=>{let p=localStorage.getItem("appSettings");return p&&JSON.parse(p).theme||"system"}),[i,n]=A(()=>{let p=localStorage.getItem("appSettings");return p&&JSON.parse(p).darkMode||"auto"});$e(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=b(()=>{var p;return r==="unknown"?f[0].MuiTheme:t==="system"?r==="dark"?f[0].MuiTheme:f[1].MuiTheme:((p=f.find($=>$.name===t))==null?void 0:p.MuiTheme)||f[0].MuiTheme},[r,t]),l=b(()=>M(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),_=b(()=>h(a.palette.primary.main,a.palette.secondary.main,l),[a,l]),C=b(()=>({darkMode:l==="dark"}),[l]);return D(v.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:D(Ne,{theme:_,children:D(ze,{theme:C,children:e})})})};export{s as ColorPalette,W as DialogBtn,k as ErrorBoundary,ue as GlobalStyles,Q as Loading,re as PathName,We as ThemeProviderWrapper,S as commonComponentProps,h as createCustomTheme,me as darkModeOptions,Se as displayGreeting,ye as fadeIn,ge as fadeInLeft,Me as getDayIdentifier,m as getFontColor,we as installAppAnimation,M as isDarkMode,ne as isFontLight,E as isHexColor,ve as logoutAnimation,Te as progressPulse,ke as pulseAnimation,Ce as scale,be as slideIn,_e as slideInBottom,Re as systemInfo,w as themeConfig,f as themes,Ie as timeAgo,Ee as timeAgoFromStart,Le as useResponsiveDisplay,P as useSystemTheme,ie as useThemeSettings};
254
254
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/typography.ts","../src/styles/darkModeOptions.tsx","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Lanit: {\n primaryColor: \"#33ccff\",\n secondaryColor: \"#f7f7f7\",\n },\n BPM: {\n primaryColor: \"#203959\",\n secondaryColor: \"#ffffff\",\n },\n Pampa: {\n primaryColor: \"#ffe22e\",\n secondaryColor: \"#fafafa\",\n },\n Hurma: {\n primaryColor: \"#f6883d\",\n secondaryColor: \"#ffffff\",\n },\n \"Neo Mint\": {\n primaryColor: \"#00f5d4\",\n secondaryColor: \"#e4fff8\",\n },\n \"Cyber Grape\": {\n primaryColor: \"#4b0082\",\n secondaryColor: \"#f4f0fa\",\n },\n \"Coral Glass\": {\n primaryColor: \"#ff6f61\",\n secondaryColor: \"#fef2f2\",\n },\n \"Space Gray\": {\n primaryColor: \"#2d2e32\",\n secondaryColor: \"#1e1f23\",\n },\n \"Blueberry Ice\": {\n primaryColor: \"#3f51b5\",\n secondaryColor: \"#e8eaf6\",\n },\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiSvgIcon: {\n defaultProps: {\n color: 'primary'\n }\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: 0,\n },\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import type {\n Components,\n Theme,\n TypographyVariantsOptions,\n} from \"@mui/material\";\n\n/**\n * Mapping of custom typography variants to corresponding HTML elements.\n */\nexport const muiTypography: Components<Theme>[\"MuiTypography\"] = {\n defaultProps: {\n variantMapping: {\n // TEXT REGULAR\n text_xl_regular: \"p\",\n text_lg_regular: \"p\",\n text_md_regular: \"p\",\n text_sm_regular: \"p\",\n text_xs_regular: \"p\",\n text_2xs_regular: \"p\",\n\n // TEXT BOLD\n text_xl_bold: \"p\",\n text_lg_bold: \"p\",\n text_md_bold: \"p\",\n text_sm_bold: \"p\",\n text_xs_bold: \"p\",\n text_2xs_bold: \"p\",\n\n // TEXT SEMIBOLD\n text_xl_semibold: \"p\",\n text_lg_semibold: \"p\",\n text_md_semibold: \"p\",\n text_sm_semibold: \"p\",\n text_xs_semibold: \"p\",\n text_2xs_semibold: \"p\",\n\n // TEXT THIN\n text_xl_thin: \"p\",\n text_lg_thin: \"p\",\n text_md_thin: \"p\",\n text_sm_thin: \"p\",\n text_xs_thin: \"p\",\n text_2xs_thin: \"p\",\n\n // DISPLAY REGULAR\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n text_xl_regular: { font: \"400 20px/30px inherit inherit\" },\n text_lg_regular: { font: \"400 18px/28px inherit inherit\" },\n text_md_regular: { font: \"400 16px/24px inherit inherit\" },\n text_sm_regular: { font: \"400 14px/20px inherit inherit\" },\n text_xs_regular: { font: \"400 12px/18px inherit inherit\" },\n text_2xs_regular: { font: \"400 10px/14px inherit inherit\" },\n\n text_xl_bold: { font: \"700 20px/30px inherit inherit\" },\n text_lg_bold: { font: \"700 18px/28px inherit inherit\" },\n text_md_bold: { font: \"700 16px/24px inherit inherit\" },\n text_sm_bold: { font: \"700 14px/20px inherit inherit\" },\n text_xs_bold: { font: \"700 12px/18px inherit inherit\" },\n text_2xs_bold: { font: \"700 10px/14px inherit inherit\" },\n\n text_xl_semibold: { font: \"600 20px/30px inherit inherit\" },\n text_lg_semibold: { font: \"600 18px/28px inherit inherit\" },\n text_md_semibold: { font: \"600 16px/24px inherit inherit\" },\n text_sm_semibold: { font: \"600 14px/20px inherit inherit\" },\n text_xs_semibold: { font: \"600 12px/18px inherit inherit\" },\n text_2xs_semibold: { font: \"600 10px/14px inherit inherit\" },\n\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","import BrightnessAutoRoundedIcon from \"@mui/icons-material/BrightnessAutoRounded\";\nimport DarkModeRoundedIcon from \"@mui/icons-material/DarkModeRounded\";\nimport LightModeRoundedIcon from \"@mui/icons-material/LightModeRounded\";\nimport PersonalVideoRoundedIcon from \"@mui/icons-material/PersonalVideoRounded\";\n\nimport type { OptionItem } from \"../models\";\n\nconst OPTION_ICON_SIZE = 32;\n\nexport const darkModeOptions: OptionItem[] = [\n {\n label: \"Auto\",\n value: \"auto\",\n icon: <BrightnessAutoRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n {\n label: \"System\",\n value: \"system\",\n icon: <PersonalVideoRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n {\n label: \"Light\",\n value: \"light\",\n icon: <LightModeRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n {\n label: \"Dark\",\n value: \"dark\",\n icon: <DarkModeRoundedIcon sx={{ fontSize: OPTION_ICON_SIZE }} />,\n },\n];\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["styled","Button","DialogBtn","React","styled","ErrorOutlineRounded","Box","jsx","jsxs","ErrorBoundary","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","useEffect","useState","styled","Box","CircularProgress","Fragment","jsx","jsxs","Loading","showLoading","setShowLoading","timer","Container","styled","PathName","createContext","useContext","ThemeContext","useThemeSettings","context","useMemo","useState","useEffect","EmotionThemeProvider","MuiThemeProvider","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","createTheme","muiTypography","typographyVariants","createCustomTheme","primaryColor","backgroundColor","mode","createTheme","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","BrightnessAutoRoundedIcon","DarkModeRoundedIcon","LightModeRoundedIcon","PersonalVideoRoundedIcon","jsx","OPTION_ICON_SIZE","darkModeOptions","useMemo","Global","css","useTheme","jsx","GlobalStyles","theme","useTheme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","useMemo","getFontColor","secondaryFontColor","Global","css","keyframes","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","useEffect","useState","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","useState","useEffect","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","jsx","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","useState","stored","darkMode","setDarkMode","useEffect","selectedTheme","useMemo","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
1
+ {"version":3,"sources":["../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/typography.ts","../src/styles/darkModeOptions.tsx","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Lanit: {\n primaryColor: \"#33ccff\",\n secondaryColor: \"#f7f7f7\",\n },\n BPM: {\n primaryColor: \"#203959\",\n secondaryColor: \"#ffffff\",\n },\n Pampa: {\n primaryColor: \"#ffe22e\",\n secondaryColor: \"#fafafa\",\n },\n Hurma: {\n primaryColor: \"#f6883d\",\n secondaryColor: \"#ffffff\",\n },\n \"Neo Mint\": {\n primaryColor: \"#00f5d4\",\n secondaryColor: \"#e4fff8\",\n },\n \"Cyber Grape\": {\n primaryColor: \"#4b0082\",\n secondaryColor: \"#f4f0fa\",\n },\n \"Coral Glass\": {\n primaryColor: \"#ff6f61\",\n secondaryColor: \"#fef2f2\",\n },\n \"Blueberry Ice\": {\n primaryColor: \"#3f51b5\",\n secondaryColor: \"#e8eaf6\",\n },\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiSvgIcon: {\n defaultProps: {\n color: \"primary\",\n },\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: 0,\n },\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import type {\n Components,\n Theme,\n TypographyVariantsOptions,\n} from \"@mui/material\";\n\n/**\n * Mapping of custom typography variants to corresponding HTML elements.\n */\nexport const muiTypography: Components<Theme>[\"MuiTypography\"] = {\n defaultProps: {\n variantMapping: {\n // TEXT REGULAR\n text_xl_regular: \"p\",\n text_lg_regular: \"p\",\n text_md_regular: \"p\",\n text_sm_regular: \"p\",\n text_xs_regular: \"p\",\n text_2xs_regular: \"p\",\n\n // TEXT BOLD\n text_xl_bold: \"p\",\n text_lg_bold: \"p\",\n text_md_bold: \"p\",\n text_sm_bold: \"p\",\n text_xs_bold: \"p\",\n text_2xs_bold: \"p\",\n\n // TEXT SEMIBOLD\n text_xl_semibold: \"p\",\n text_lg_semibold: \"p\",\n text_md_semibold: \"p\",\n text_sm_semibold: \"p\",\n text_xs_semibold: \"p\",\n text_2xs_semibold: \"p\",\n\n // TEXT THIN\n text_xl_thin: \"p\",\n text_lg_thin: \"p\",\n text_md_thin: \"p\",\n text_sm_thin: \"p\",\n text_xs_thin: \"p\",\n text_2xs_thin: \"p\",\n\n // DISPLAY REGULAR\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n text_xl_regular: { font: \"400 20px/30px inherit inherit\" },\n text_lg_regular: { font: \"400 18px/28px inherit inherit\" },\n text_md_regular: { font: \"400 16px/24px inherit inherit\" },\n text_sm_regular: { font: \"400 14px/20px inherit inherit\" },\n text_xs_regular: { font: \"400 12px/18px inherit inherit\" },\n text_2xs_regular: { font: \"400 10px/14px inherit inherit\" },\n\n text_xl_bold: { font: \"700 20px/30px inherit inherit\" },\n text_lg_bold: { font: \"700 18px/28px inherit inherit\" },\n text_md_bold: { font: \"700 16px/24px inherit inherit\" },\n text_sm_bold: { font: \"700 14px/20px inherit inherit\" },\n text_xs_bold: { font: \"700 12px/18px inherit inherit\" },\n text_2xs_bold: { font: \"700 10px/14px inherit inherit\" },\n\n text_xl_semibold: { font: \"600 20px/30px inherit inherit\" },\n text_lg_semibold: { font: \"600 18px/28px inherit inherit\" },\n text_md_semibold: { font: \"600 16px/24px inherit inherit\" },\n text_sm_semibold: { font: \"600 14px/20px inherit inherit\" },\n text_xs_semibold: { font: \"600 12px/18px inherit inherit\" },\n text_2xs_semibold: { font: \"600 10px/14px inherit inherit\" },\n\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","import BrightnessAutoRoundedIcon from \"@mui/icons-material/BrightnessAutoRounded\";\nimport DarkModeRoundedIcon from \"@mui/icons-material/DarkModeRounded\";\nimport LightModeRoundedIcon from \"@mui/icons-material/LightModeRounded\";\nimport PersonalVideoRoundedIcon from \"@mui/icons-material/PersonalVideoRounded\";\n\nimport type { OptionItem } from \"../models\";\n\nconst OPTION_ICON_SIZE = 32;\n\nexport const darkModeOptions: OptionItem[] = [\n {\n label: \"Auto\",\n value: \"auto\",\n icon: (\n <BrightnessAutoRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n {\n label: \"System\",\n value: \"system\",\n icon: (\n <PersonalVideoRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n {\n label: \"Light\",\n value: \"light\",\n icon: (\n <LightModeRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n {\n label: \"Dark\",\n value: \"dark\",\n icon: (\n <DarkModeRoundedIcon\n color=\"inherit\"\n sx={{ fontSize: OPTION_ICON_SIZE }}\n />\n ),\n },\n];\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["styled","Button","DialogBtn","React","styled","ErrorOutlineRounded","Box","jsx","jsxs","ErrorBoundary","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","useEffect","useState","styled","Box","CircularProgress","Fragment","jsx","jsxs","Loading","showLoading","setShowLoading","timer","Container","styled","PathName","createContext","useContext","ThemeContext","useThemeSettings","context","useMemo","useState","useEffect","EmotionThemeProvider","MuiThemeProvider","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","createTheme","muiTypography","typographyVariants","createCustomTheme","primaryColor","backgroundColor","mode","createTheme","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","BrightnessAutoRoundedIcon","DarkModeRoundedIcon","LightModeRoundedIcon","PersonalVideoRoundedIcon","jsx","OPTION_ICON_SIZE","darkModeOptions","useMemo","Global","css","useTheme","jsx","GlobalStyles","theme","useTheme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","useMemo","getFontColor","secondaryFontColor","Global","css","keyframes","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","useEffect","useState","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","useState","useEffect","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","jsx","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","useState","stored","darkMode","setDarkMode","useEffect","selectedTheme","useMemo","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomazing-org/design-system",
3
- "version": "1.0.33",
3
+ "version": "1.0.34",
4
4
  "private": false,
5
5
  "description": "A library providing a set of useful utils, MUI style extensions, and components to build your application.",
6
6
  "author": "PonomarevBPM + MarkSinD",