@atomazing-org/design-system 1.0.60 → 1.0.62
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 +9 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";var Ie=Object.create;var k=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,
|
|
1
|
+
"use strict";var Ie=Object.create;var k=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty;var Fe=(e,r)=>{for(var t in r)k(e,t,{get:r[t],enumerable:!0})},H=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ee(r))!De.call(e,i)&&i!==t&&k(e,i,{get:()=>r[i],enumerable:!(o=Pe(r,i))||o.enumerable});return e};var d=(e,r,t)=>(t=e!=null?Ie(Oe(e)):{},H(r||!e||!e.__esModule?k(t,"default",{value:e,enumerable:!0}):t,e)),Ae=e=>H(k({},"__esModule",{value:!0}),e);var We={};Fe(We,{ColorPalette:()=>m,DialogBtn:()=>G,ErrorBoundary:()=>v,GlobalStyles:()=>E,Loading:()=>J,PathName:()=>Q,ThemeProviderWrapper:()=>Ce,commonComponentProps:()=>C,createCustomTheme:()=>y,darkModeOptions:()=>ne,displayGreeting:()=>be,fadeIn:()=>de,fadeInLeft:()=>le,getDayIdentifier:()=>ye,getFontColor:()=>b,installAppAnimation:()=>ge,isDarkMode:()=>R,isFontLight:()=>q,isHexColor:()=>N,logoutAnimation:()=>fe,progressPulse:()=>xe,pulseAnimation:()=>he,scale:()=>ue,slideIn:()=>me,slideInBottom:()=>ce,systemInfo:()=>ke,themeConfig:()=>M,themes:()=>x,timeAgo:()=>ve,timeAgoFromStart:()=>Te,useResponsiveDisplay:()=>Se,useSystemTheme:()=>F,useThemeSettings:()=>Z});module.exports=Ae(We);var U=d(require("@emotion/styled")),Y=require("@mui/material"),G=(0,U.default)(Y.Button)`
|
|
2
2
|
padding: 10px 16px;
|
|
3
3
|
border-radius: 16px;
|
|
4
4
|
font-size: 16px;
|
|
5
5
|
margin: 8px;
|
|
6
|
-
`;var
|
|
6
|
+
`;var V=d(require("react")),$=d(require("@emotion/styled")),B=d(require("@mui/icons-material/ErrorOutlineRounded")),f=require("@mui/material"),s=require("react/jsx-runtime"),v=class extends V.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,s.jsxs)(Le,{children:[(0,s.jsx)(Be,{children:(0,s.jsx)(f.Box,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),(0,s.jsxs)("h3",{children:[(0,s.jsxs)(f.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,s.jsx)(B.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",(0,s.jsxs)(f.Box,{translate:"no",children:["[",(o=r.error)==null?void 0:o.name,"] ",(i=r.error)==null?void 0:i.message]}),(0,s.jsxs)(f.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,s.jsx)(B.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",(0,s.jsxs)(f.Box,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):t.children}},Le=$.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 T=require("react"),
|
|
27
|
+
`;var T=require("react"),X=d(require("@emotion/styled")),S=require("@mui/material"),h=require("react/jsx-runtime"),J=()=>{let[e,r]=(0,T.useState)(!1);return(0,T.useEffect)(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),(0,h.jsx)($e,{children:e&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(S.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,h.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},$e=(0,X.default)(S.Box)`
|
|
28
28
|
position: absolute;
|
|
29
29
|
top: 50%;
|
|
30
30
|
left: 50%;
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
flex-direction: column;
|
|
36
36
|
text-align: center;
|
|
37
37
|
gap: 8px;
|
|
38
|
-
`;var
|
|
38
|
+
`;var j=d(require("@emotion/styled")),Q=j.default.code`
|
|
39
39
|
background: #000000c8;
|
|
40
40
|
color: white;
|
|
41
41
|
padding: 4px 6px;
|
|
42
42
|
border-radius: 8px;
|
|
43
|
-
`;var w=require("react"),z=(0,w.createContext)(void 0),
|
|
43
|
+
`;var w=require("react"),z=(0,w.createContext)(void 0),Z=()=>{let e=(0,w.useContext)(z);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var u=require("react"),we=require("@emotion/react"),Me=require("@mui/material/styles");var m={fontDark:"#101727",fontLight:"#f0f0f0",purple:"#440850",lavender:"#9FA9EA",carrot:"#F3503A",pistachio:"#62ED97"},M={Main:{primaryColor:"#9FA9EA",secondaryColor:"#f2f2f2"}};var N=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),b=e=>{if(!N(e))return console.error("Invalid hex color provided:",e),m.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?m.fontDark:m.fontLight},q=e=>b(e)===m.fontLight;var C={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:{defaultProps:{variant:"outlined"},styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiOutlinedInput:{styleOverrides:{root:({theme:e})=>({color:e.palette.primary.main,"& fieldset":{borderColor:e.palette.primary.main},"&:hover fieldset":{borderColor:e.palette.primary.dark},"&.Mui-focused fieldset":{borderColor:e.palette.primary.main}})}},MuiInputLabel:{styleOverrides:{root:({theme:e})=>({color:e.palette.primary.main,"&.Mui-focused":{color:e.palette.primary.main}})}},MuiFormHelperText:{styleOverrides:{root:({theme:e})=>({color:e.palette.error.main})}},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"})}},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 W=require("@mui/material");var K={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",header_2xl_regular:"h1",header_xl_regular:"h2",header_lg_regular:"h3",header_md_regular:"h4",header_sm_regular:"h5",header_xs_regular:"h6",header_2xl_bold:"h1",header_xl_bold:"h2",header_lg_bold:"h3",header_md_bold:"h4",header_sm_bold:"h5",header_xs_bold:"h6"}}},ee={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"},header_2xl_regular:{font:"400 48px/60px inherit inherit"},header_xl_regular:{font:"400 42px/54px inherit inherit"},header_lg_regular:{font:"400 36px/46px inherit inherit"},header_md_regular:{font:"400 30px/38px inherit inherit"},header_sm_regular:{font:"400 26px/34px inherit inherit"},header_xs_regular:{font:"400 22px/30px inherit inherit"},header_2xl_bold:{font:"700 48px/60px inherit inherit"},header_xl_bold:{font:"700 42px/54px inherit inherit"},header_lg_bold:{font:"700 36px/46px inherit inherit"},header_md_bold:{font:"700 30px/38px inherit inherit"},header_sm_bold:{font:"700 26px/34px inherit inherit"},header_xs_bold:{font:"700 22px/30px inherit inherit"}};var y=(e,r="dark")=>{let t=r==="dark",o=(0,W.createTheme)({palette:{mode:r}});return(0,W.createTheme)(o,{palette:{primary:{...o.palette.primary,main:e},error:{...o.palette.error,main:m.carrot},warning:{...o.palette.warning,main:m.carrot},background:t?{...o.palette.background,default:"#1C1C1E",paper:"#2C2C2E"}:{...o.palette.background,default:"#F2F2F7",paper:"#FFFFFF"},divider:t?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.12)"},components:{...C,MuiTypography:K},typography:ee,shape:{borderRadius:24}})},x=Object.entries(M).map(([e,r])=>({name:e,MuiTheme:y(r.primaryColor)})),R=(e,r)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";default:return!1}};var re=d(require("@mui/icons-material/BrightnessAutoRounded")),te=d(require("@mui/icons-material/DarkModeRounded")),oe=d(require("@mui/icons-material/LightModeRounded")),ie=d(require("@mui/icons-material/PersonalVideoRounded")),_=require("react/jsx-runtime"),I=32,ne=[{label:"Auto",value:"auto",icon:(0,_.jsx)(re.default,{color:"inherit",sx:{fontSize:I}})},{label:"System",value:"system",icon:(0,_.jsx)(ie.default,{color:"inherit",sx:{fontSize:I}})},{label:"Light",value:"light",icon:(0,_.jsx)(oe.default,{color:"inherit",sx:{fontSize:I}})},{label:"Dark",value:"dark",icon:(0,_.jsx)(te.default,{color:"inherit",sx:{fontSize:I}})}];var ae=require("react"),P=require("@emotion/react"),se=require("@mui/material/styles");var pe=require("react/jsx-runtime"),E=()=>{let e=(0,se.useTheme)(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.background.default,i=(0,ae.useMemo)(()=>b(t),[t]);return(0,pe.jsx)(P.Global,{styles:P.css`
|
|
44
44
|
* {
|
|
45
45
|
font-family:
|
|
46
46
|
"Mulish",
|
|
@@ -80,7 +80,6 @@
|
|
|
80
80
|
line-height: 1.5;
|
|
81
81
|
font-weight: 400;
|
|
82
82
|
color-scheme: ${r?"dark":"light"};
|
|
83
|
-
color: ${n};
|
|
84
83
|
font-synthesis: none;
|
|
85
84
|
text-rendering: optimizeLegibility;
|
|
86
85
|
-webkit-font-smoothing: antialiased;
|
|
@@ -185,7 +184,7 @@
|
|
|
185
184
|
margin-top: 3px;
|
|
186
185
|
}
|
|
187
186
|
}
|
|
188
|
-
`})};var c=require("@emotion/react"),
|
|
187
|
+
`})};var c=require("@emotion/react"),le=c.keyframes`
|
|
189
188
|
from {
|
|
190
189
|
opacity: 0;
|
|
191
190
|
transform: translateX(-40px);
|
|
@@ -215,14 +214,14 @@
|
|
|
215
214
|
to {
|
|
216
215
|
transform: translateY(0);
|
|
217
216
|
}
|
|
218
|
-
`,
|
|
217
|
+
`,ue=c.keyframes`
|
|
219
218
|
from {
|
|
220
219
|
transform: scale(0);
|
|
221
220
|
}
|
|
222
221
|
to {
|
|
223
222
|
transform: scale(1);
|
|
224
223
|
}
|
|
225
|
-
`,
|
|
224
|
+
`,he=(e,r=12)=>c.keyframes`
|
|
226
225
|
0% {
|
|
227
226
|
transform: scale(0.95);
|
|
228
227
|
box-shadow: 0 0 0 0 ${e}b2;
|
|
@@ -274,5 +273,5 @@
|
|
|
274
273
|
100% {
|
|
275
274
|
transform: translateY(0);
|
|
276
275
|
}
|
|
277
|
-
`;var be=()=>{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 ye=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"},ke={os:ze(),browser:Ne()};var ve=(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),
|
|
276
|
+
`;var be=()=>{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 ye=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"},ke={os:ze(),browser:Ne()};var ve=(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")}`,l=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${L} ${l}`}let A=Math.floor(a/86400);return p.format(A,"day")};var O=require("react"),Se=(e=768)=>{let[r,t]=(0,O.useState)(!1);return(0,O.useEffect)(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};var D=require("react"),F=()=>{let[e,r]=(0,D.useState)("unknown");return(0,D.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 g=require("react/jsx-runtime"),Ce=({children:e})=>{let r=F(),[t,o]=(0,u.useState)(()=>{let l=localStorage.getItem("appSettings");return l&&JSON.parse(l).theme||"system"}),[i,n]=(0,u.useState)(()=>{let l=localStorage.getItem("appSettings");return l&&JSON.parse(l).darkMode||"auto"});(0,u.useEffect)(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=(0,u.useMemo)(()=>{var l;return r==="unknown"?x[0].MuiTheme:t==="system"?r==="dark"?x[0].MuiTheme:x[0].MuiTheme:((l=x.find(Re=>Re.name===t))==null?void 0:l.MuiTheme)||x[0].MuiTheme},[r,t]),p=(0,u.useMemo)(()=>R(i,r)?"dark":"light",[i,r,a]),A=(0,u.useMemo)(()=>y(a.palette.primary.main,p),[a,p]),L=(0,u.useMemo)(()=>({darkMode:p==="dark"}),[p]);return(0,g.jsx)(z.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:(0,g.jsx)(Me.ThemeProvider,{theme:A,children:(0,g.jsxs)(we.ThemeProvider,{theme:L,children:[(0,g.jsx)(E,{}),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});
|
|
278
277
|
//# 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>Ошибка. </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, GlobalStyles } 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 () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () => createCustomTheme(selectedTheme.palette.primary.main, mode),\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 <GlobalStyles />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n purple: \"#440850\",\n lavender: \"#9FA9EA\",\n carrot: \"#F3503A\",\n pistachio: \"#62ED97\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Main: {\n primaryColor: \"#9FA9EA\",\n secondaryColor: \"#f2f2f2\",\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 defaultProps: {\n variant: \"outlined\", // по умолчанию, если нужно\n },\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiOutlinedInput: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"& fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n \"&:hover fieldset\": {\n borderColor: theme.palette.primary.dark,\n },\n \"&.Mui-focused fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n }),\n },\n },\n\n MuiInputLabel: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"&.Mui-focused\": {\n color: theme.palette.primary.main,\n },\n }),\n },\n },\n MuiFormHelperText: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.error.main,\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 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 { 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 mode: PaletteMode = \"dark\",\n): Theme => {\n const isDark = mode === \"dark\";\n\n // 1) БАЗА MUI по выбранному режиму — даёт корректные text, action, grey и т.д.\n const base = createTheme({\n palette: { mode },\n });\n\n // 2) ТОЧЕЧНЫЕ ОВЕРРАЙДЫ поверх базы\n return createTheme(base, {\n palette: {\n primary: { ...base.palette.primary, main: primaryColor },\n error: { ...base.palette.error, main: ColorPalette.carrot },\n warning: { ...base.palette.warning, main: ColorPalette.carrot },\n\n background: isDark\n ? { ...base.palette.background, default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { ...base.palette.background, default: \"#F2F2F7\", paper: \"#FFFFFF\" },\n\n divider: isDark ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\",\n },\n\n // Остальные ваши настройки — без изменений\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\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),\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): 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 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 // HEADER REGULAR\n header_2xl_regular: \"h1\",\n header_xl_regular: \"h2\",\n header_lg_regular: \"h3\",\n header_md_regular: \"h4\",\n header_sm_regular: \"h5\",\n header_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n header_2xl_bold: \"h1\",\n header_xl_bold: \"h2\",\n header_lg_bold: \"h3\",\n header_md_bold: \"h4\",\n header_sm_bold: \"h5\",\n header_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions with adjusted display sizes.\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 header_2xl_regular: { font: \"400 48px/60px inherit inherit\" },\n header_xl_regular: { font: \"400 42px/54px inherit inherit\" },\n header_lg_regular: { font: \"400 36px/46px inherit inherit\" },\n header_md_regular: { font: \"400 30px/38px inherit inherit\" },\n header_sm_regular: { font: \"400 26px/34px inherit inherit\" },\n header_xs_regular: { font: \"400 22px/30px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 48px/60px inherit inherit\" },\n header_xl_bold: { font: \"700 42px/54px inherit inherit\" },\n header_lg_bold: { font: \"700 36px/46px inherit inherit\" },\n header_md_bold: { font: \"700 30px/38px inherit inherit\" },\n header_sm_bold: { font: \"700 26px/34px inherit inherit\" },\n header_xs_bold: { font: \"700 22px/30px 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:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n html,\n body,\n #root {\n height: 100%;\n margin: 0;\n }\n\n :root {\n height: 100%;\n --font-family:\n \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial,\n sans-serif;\n font-family:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n 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 --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 overflow: auto;\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","mode","isDark","base","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","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","GlobalStyles"]}
|
|
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>Ошибка. </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, GlobalStyles } 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[0].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () => createCustomTheme(selectedTheme.palette.primary.main, mode),\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 <GlobalStyles />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n purple: \"#440850\",\n lavender: \"#9FA9EA\",\n carrot: \"#F3503A\",\n pistachio: \"#62ED97\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Main: {\n primaryColor: \"#9FA9EA\",\n secondaryColor: \"#f2f2f2\",\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 defaultProps: {\n variant: \"outlined\", // по умолчанию, если нужно\n },\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiOutlinedInput: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"& fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n \"&:hover fieldset\": {\n borderColor: theme.palette.primary.dark,\n },\n \"&.Mui-focused fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n }),\n },\n },\n\n MuiInputLabel: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"&.Mui-focused\": {\n color: theme.palette.primary.main,\n },\n }),\n },\n },\n MuiFormHelperText: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.error.main,\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 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 { 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 mode: PaletteMode = \"dark\",\n): Theme => {\n const isDark = mode === \"dark\";\n\n // 1) БАЗА MUI по выбранному режиму — даёт корректные text, action, grey и т.д.\n const base = createTheme({\n palette: { mode },\n });\n\n // 2) ТОЧЕЧНЫЕ ОВЕРРАЙДЫ поверх базы\n return createTheme(base, {\n palette: {\n primary: { ...base.palette.primary, main: primaryColor },\n error: { ...base.palette.error, main: ColorPalette.carrot },\n warning: { ...base.palette.warning, main: ColorPalette.carrot },\n\n background: isDark\n ? { ...base.palette.background, default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { ...base.palette.background, default: \"#F2F2F7\", paper: \"#FFFFFF\" },\n\n divider: isDark ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\",\n },\n\n // Остальные ваши настройки — без изменений\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\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),\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): 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 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 // HEADER REGULAR\n header_2xl_regular: \"h1\",\n header_xl_regular: \"h2\",\n header_lg_regular: \"h3\",\n header_md_regular: \"h4\",\n header_sm_regular: \"h5\",\n header_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n header_2xl_bold: \"h1\",\n header_xl_bold: \"h2\",\n header_lg_bold: \"h3\",\n header_md_bold: \"h4\",\n header_sm_bold: \"h5\",\n header_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions with adjusted display sizes.\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 header_2xl_regular: { font: \"400 48px/60px inherit inherit\" },\n header_xl_regular: { font: \"400 42px/54px inherit inherit\" },\n header_lg_regular: { font: \"400 36px/46px inherit inherit\" },\n header_md_regular: { font: \"400 30px/38px inherit inherit\" },\n header_sm_regular: { font: \"400 26px/34px inherit inherit\" },\n header_xs_regular: { font: \"400 22px/30px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 48px/60px inherit inherit\" },\n header_xl_bold: { font: \"700 42px/54px inherit inherit\" },\n header_lg_bold: { font: \"700 36px/46px inherit inherit\" },\n header_md_bold: { font: \"700 30px/38px inherit inherit\" },\n header_sm_bold: { font: \"700 26px/34px inherit inherit\" },\n header_xs_bold: { font: \"700 22px/30px 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 backgroundDefault = theme.palette.background.default;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n html,\n body,\n #root {\n height: 100%;\n margin: 0;\n }\n\n :root {\n height: 100%;\n --font-family:\n \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial,\n sans-serif;\n font-family:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\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 --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 overflow: auto;\n touch-action: manipulation;\n background: ${backgroundDefault};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${backgroundDefault};\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: ${backgroundDefault};\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","mode","isDark","base","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","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","backgroundDefault","primaryFontColor","getFontColor","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","GlobalStyles"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import N from"@emotion/styled";import{Button as W}from"@mui/material";var H=N(W)`
|
|
2
2
|
padding: 10px 16px;
|
|
3
3
|
border-radius: 16px;
|
|
4
4
|
font-size: 16px;
|
|
5
5
|
margin: 8px;
|
|
6
|
-
`;import
|
|
6
|
+
`;import U from"react";import O from"@emotion/styled";import E from"@mui/icons-material/ErrorOutlineRounded";import{Box as u}from"@mui/material";import{jsx as h,jsxs as c}from"react/jsx-runtime";var v=class extends U.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:[h(G,{children:h(u,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),c("h3",{children:[c(u,{style:{color:"#ff3131",display:"inline-block"},children:[h(E,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",c(u,{translate:"no",children:["[",(o=r.error)==null?void 0:o.name,"] ",(i=r.error)==null?void 0:i.message]}),c(u,{style:{color:"#ff3131",display:"inline-block"},children:[h(E,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",c(u,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):t.children}},Y=O.div`
|
|
7
7
|
margin: 0 8vw;
|
|
8
8
|
@media (max-width: 768px) {
|
|
9
9
|
margin: 0;
|
|
10
10
|
}
|
|
11
|
-
`,
|
|
11
|
+
`,G=O.h1`
|
|
12
12
|
margin-top: 32px;
|
|
13
13
|
margin-bottom: 32px;
|
|
14
14
|
font-size: 36px;
|
|
@@ -24,7 +24,7 @@ import W from"@emotion/styled";import{Button as H}from"@mui/material";var U=W(H)
|
|
|
24
24
|
margin-top: 0;
|
|
25
25
|
margin-bottom: 0;
|
|
26
26
|
}
|
|
27
|
-
`;import{useEffect as
|
|
27
|
+
`;import{useEffect as V,useState as X}from"react";import J from"@emotion/styled";import{Box as j,CircularProgress as Q}from"@mui/material";import{Fragment as K,jsx as T,jsxs as ee}from"react/jsx-runtime";var Z=()=>{let[e,r]=X(!1);return V(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),T(q,{children:e&&ee(K,{children:[T(Q,{"aria-label":"loading",size:80,thickness:4}),T("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},q=J(j)`
|
|
28
28
|
position: absolute;
|
|
29
29
|
top: 50%;
|
|
30
30
|
left: 50%;
|
|
@@ -35,12 +35,12 @@ import W from"@emotion/styled";import{Button as H}from"@mui/material";var U=W(H)
|
|
|
35
35
|
flex-direction: column;
|
|
36
36
|
text-align: center;
|
|
37
37
|
gap: 8px;
|
|
38
|
-
`;import
|
|
38
|
+
`;import re from"@emotion/styled";var te=re.code`
|
|
39
39
|
background: #000000c8;
|
|
40
40
|
color: white;
|
|
41
41
|
padding: 4px 6px;
|
|
42
42
|
border-radius: 8px;
|
|
43
|
-
`;import{createContext as
|
|
43
|
+
`;import{createContext as oe,useContext as ie}from"react";var S=oe(void 0),ne=()=>{let e=ie(S);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as y,useState as $,useEffect as $e}from"react";import{ThemeProvider as ze}from"@emotion/react";import{ThemeProvider as Ne}from"@mui/material/styles";var l={fontDark:"#101727",fontLight:"#f0f0f0",purple:"#440850",lavender:"#9FA9EA",carrot:"#F3503A",pistachio:"#62ED97"},w={Main:{primaryColor:"#9FA9EA",secondaryColor:"#f2f2f2"}};var D=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),x=e=>{if(!D(e))return console.error("Invalid hex color provided:",e),l.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(s=>s+s).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?l.fontDark:l.fontLight},ae=e=>x(e)===l.fontLight;var M={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:{defaultProps:{variant:"outlined"},styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiOutlinedInput:{styleOverrides:{root:({theme:e})=>({color:e.palette.primary.main,"& fieldset":{borderColor:e.palette.primary.main},"&:hover fieldset":{borderColor:e.palette.primary.dark},"&.Mui-focused fieldset":{borderColor:e.palette.primary.main}})}},MuiInputLabel:{styleOverrides:{root:({theme:e})=>({color:e.palette.primary.main,"&.Mui-focused":{color:e.palette.primary.main}})}},MuiFormHelperText:{styleOverrides:{root:({theme:e})=>({color:e.palette.error.main})}},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"})}},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 L}from"@mui/material";var F={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",header_2xl_regular:"h1",header_xl_regular:"h2",header_lg_regular:"h3",header_md_regular:"h4",header_sm_regular:"h5",header_xs_regular:"h6",header_2xl_bold:"h1",header_xl_bold:"h2",header_lg_bold:"h3",header_md_bold:"h4",header_sm_bold:"h5",header_xs_bold:"h6"}}},A={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"},header_2xl_regular:{font:"400 48px/60px inherit inherit"},header_xl_regular:{font:"400 42px/54px inherit inherit"},header_lg_regular:{font:"400 36px/46px inherit inherit"},header_md_regular:{font:"400 30px/38px inherit inherit"},header_sm_regular:{font:"400 26px/34px inherit inherit"},header_xs_regular:{font:"400 22px/30px inherit inherit"},header_2xl_bold:{font:"700 48px/60px inherit inherit"},header_xl_bold:{font:"700 42px/54px inherit inherit"},header_lg_bold:{font:"700 36px/46px inherit inherit"},header_md_bold:{font:"700 30px/38px inherit inherit"},header_sm_bold:{font:"700 26px/34px inherit inherit"},header_xs_bold:{font:"700 22px/30px inherit inherit"}};var f=(e,r="dark")=>{let t=r==="dark",o=L({palette:{mode:r}});return L(o,{palette:{primary:{...o.palette.primary,main:e},error:{...o.palette.error,main:l.carrot},warning:{...o.palette.warning,main:l.carrot},background:t?{...o.palette.background,default:"#1C1C1E",paper:"#2C2C2E"}:{...o.palette.background,default:"#F2F2F7",paper:"#FFFFFF"},divider:t?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.12)"},components:{...M,MuiTypography:F},typography:A,shape:{borderRadius:24}})},m=Object.entries(w).map(([e,r])=>({name:e,MuiTheme:f(r.primaryColor)})),C=(e,r)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";default:return!1}};import se from"@mui/icons-material/BrightnessAutoRounded";import pe from"@mui/icons-material/DarkModeRounded";import le from"@mui/icons-material/LightModeRounded";import de from"@mui/icons-material/PersonalVideoRounded";import{jsx as b}from"react/jsx-runtime";var g=32,me=[{label:"Auto",value:"auto",icon:b(se,{color:"inherit",sx:{fontSize:g}})},{label:"System",value:"system",icon:b(de,{color:"inherit",sx:{fontSize:g}})},{label:"Light",value:"light",icon:b(le,{color:"inherit",sx:{fontSize:g}})},{label:"Dark",value:"dark",icon:b(pe,{color:"inherit",sx:{fontSize:g}})}];import{useMemo as ce}from"react";import{Global as ue,css as he}from"@emotion/react";import{useTheme as xe}from"@mui/material/styles";import{jsx as fe}from"react/jsx-runtime";var R=()=>{let e=xe(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.background.default,i=ce(()=>x(t),[t]);return fe(ue,{styles:he`
|
|
44
44
|
* {
|
|
45
45
|
font-family:
|
|
46
46
|
"Mulish",
|
|
@@ -80,7 +80,6 @@ import W from"@emotion/styled";import{Button as H}from"@mui/material";var U=W(H)
|
|
|
80
80
|
line-height: 1.5;
|
|
81
81
|
font-weight: 400;
|
|
82
82
|
color-scheme: ${r?"dark":"light"};
|
|
83
|
-
color: ${n};
|
|
84
83
|
font-synthesis: none;
|
|
85
84
|
text-rendering: optimizeLegibility;
|
|
86
85
|
-webkit-font-smoothing: antialiased;
|
|
@@ -274,5 +273,5 @@ import W from"@emotion/styled";import{Button as H}from"@mui/material";var U=W(H)
|
|
|
274
273
|
100% {
|
|
275
274
|
transform: translateY(0);
|
|
276
275
|
}
|
|
277
|
-
`;var Me=()=>{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 Ce=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
|
|
276
|
+
`;var Me=()=>{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 Ce=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,Re=()=>{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"},Ie=()=>{let e=B.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Pe={os:Re(),browser:Ie()};var Ee=(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")},Oe=(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),s=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return s.format(a,"second");if(i===0&&n<60)return s.format(n,"minute");if(i<24){let k=`${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`${k} ${p}`}let _=Math.floor(a/86400);return s.format(_,"day")};import{useEffect as De,useState as Fe}from"react";var Ae=(e=768)=>{let[r,t]=Fe(!1);return De(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};import{useState as Le,useEffect as Be}from"react";var I=()=>{let[e,r]=Le("unknown");return Be(()=>{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 P,jsxs as He}from"react/jsx-runtime";var We=({children:e})=>{let r=I(),[t,o]=$(()=>{let p=localStorage.getItem("appSettings");return p&&JSON.parse(p).theme||"system"}),[i,n]=$(()=>{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=y(()=>{var p;return r==="unknown"?m[0].MuiTheme:t==="system"?r==="dark"?m[0].MuiTheme:m[0].MuiTheme:((p=m.find(z=>z.name===t))==null?void 0:p.MuiTheme)||m[0].MuiTheme},[r,t]),s=y(()=>C(i,r)?"dark":"light",[i,r,a]),_=y(()=>f(a.palette.primary.main,s),[a,s]),k=y(()=>({darkMode:s==="dark"}),[s]);return P(S.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:P(Ne,{theme:_,children:He(ze,{theme:k,children:[P(R,{}),e]})})})};export{l as ColorPalette,H as DialogBtn,v as ErrorBoundary,R as GlobalStyles,Z as Loading,te as PathName,We as ThemeProviderWrapper,M as commonComponentProps,f as createCustomTheme,me as darkModeOptions,Me as displayGreeting,be as fadeIn,ge as fadeInLeft,Ce as getDayIdentifier,x as getFontColor,we as installAppAnimation,C as isDarkMode,ae as isFontLight,D as isHexColor,Se as logoutAnimation,Te as progressPulse,ve as pulseAnimation,ke as scale,ye as slideIn,_e as slideInBottom,Pe as systemInfo,w as themeConfig,m as themes,Ee as timeAgo,Oe as timeAgoFromStart,Ae as useResponsiveDisplay,I as useSystemTheme,ne as useThemeSettings};
|
|
278
277
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -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>Ошибка. </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, GlobalStyles } 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 () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () => createCustomTheme(selectedTheme.palette.primary.main, mode),\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 <GlobalStyles />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n purple: \"#440850\",\n lavender: \"#9FA9EA\",\n carrot: \"#F3503A\",\n pistachio: \"#62ED97\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Main: {\n primaryColor: \"#9FA9EA\",\n secondaryColor: \"#f2f2f2\",\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 defaultProps: {\n variant: \"outlined\", // по умолчанию, если нужно\n },\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiOutlinedInput: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"& fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n \"&:hover fieldset\": {\n borderColor: theme.palette.primary.dark,\n },\n \"&.Mui-focused fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n }),\n },\n },\n\n MuiInputLabel: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"&.Mui-focused\": {\n color: theme.palette.primary.main,\n },\n }),\n },\n },\n MuiFormHelperText: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.error.main,\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 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 { 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 mode: PaletteMode = \"dark\",\n): Theme => {\n const isDark = mode === \"dark\";\n\n // 1) БАЗА MUI по выбранному режиму — даёт корректные text, action, grey и т.д.\n const base = createTheme({\n palette: { mode },\n });\n\n // 2) ТОЧЕЧНЫЕ ОВЕРРАЙДЫ поверх базы\n return createTheme(base, {\n palette: {\n primary: { ...base.palette.primary, main: primaryColor },\n error: { ...base.palette.error, main: ColorPalette.carrot },\n warning: { ...base.palette.warning, main: ColorPalette.carrot },\n\n background: isDark\n ? { ...base.palette.background, default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { ...base.palette.background, default: \"#F2F2F7\", paper: \"#FFFFFF\" },\n\n divider: isDark ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\",\n },\n\n // Остальные ваши настройки — без изменений\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\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),\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): 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 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 // HEADER REGULAR\n header_2xl_regular: \"h1\",\n header_xl_regular: \"h2\",\n header_lg_regular: \"h3\",\n header_md_regular: \"h4\",\n header_sm_regular: \"h5\",\n header_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n header_2xl_bold: \"h1\",\n header_xl_bold: \"h2\",\n header_lg_bold: \"h3\",\n header_md_bold: \"h4\",\n header_sm_bold: \"h5\",\n header_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions with adjusted display sizes.\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 header_2xl_regular: { font: \"400 48px/60px inherit inherit\" },\n header_xl_regular: { font: \"400 42px/54px inherit inherit\" },\n header_lg_regular: { font: \"400 36px/46px inherit inherit\" },\n header_md_regular: { font: \"400 30px/38px inherit inherit\" },\n header_sm_regular: { font: \"400 26px/34px inherit inherit\" },\n header_xs_regular: { font: \"400 22px/30px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 48px/60px inherit inherit\" },\n header_xl_bold: { font: \"700 42px/54px inherit inherit\" },\n header_lg_bold: { font: \"700 36px/46px inherit inherit\" },\n header_md_bold: { font: \"700 30px/38px inherit inherit\" },\n header_sm_bold: { font: \"700 26px/34px inherit inherit\" },\n header_xs_bold: { font: \"700 22px/30px 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:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n html,\n body,\n #root {\n height: 100%;\n margin: 0;\n }\n\n :root {\n height: 100%;\n --font-family:\n \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial,\n sans-serif;\n font-family:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n 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 --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 overflow: auto;\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","mode","isDark","base","createTheme","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","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","jsxs","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","useState","stored","darkMode","setDarkMode","useEffect","selectedTheme","useMemo","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider","GlobalStyles"]}
|
|
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>Ошибка. </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, GlobalStyles } 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[0].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () => createCustomTheme(selectedTheme.palette.primary.main, mode),\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 <GlobalStyles />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n purple: \"#440850\",\n lavender: \"#9FA9EA\",\n carrot: \"#F3503A\",\n pistachio: \"#62ED97\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Main: {\n primaryColor: \"#9FA9EA\",\n secondaryColor: \"#f2f2f2\",\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 defaultProps: {\n variant: \"outlined\", // по умолчанию, если нужно\n },\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiOutlinedInput: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"& fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n \"&:hover fieldset\": {\n borderColor: theme.palette.primary.dark,\n },\n \"&.Mui-focused fieldset\": {\n borderColor: theme.palette.primary.main,\n },\n }),\n },\n },\n\n MuiInputLabel: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.primary.main,\n \"&.Mui-focused\": {\n color: theme.palette.primary.main,\n },\n }),\n },\n },\n MuiFormHelperText: {\n styleOverrides: {\n root: ({ theme }) => ({\n color: theme.palette.error.main,\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 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 { 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 mode: PaletteMode = \"dark\",\n): Theme => {\n const isDark = mode === \"dark\";\n\n // 1) БАЗА MUI по выбранному режиму — даёт корректные text, action, grey и т.д.\n const base = createTheme({\n palette: { mode },\n });\n\n // 2) ТОЧЕЧНЫЕ ОВЕРРАЙДЫ поверх базы\n return createTheme(base, {\n palette: {\n primary: { ...base.palette.primary, main: primaryColor },\n error: { ...base.palette.error, main: ColorPalette.carrot },\n warning: { ...base.palette.warning, main: ColorPalette.carrot },\n\n background: isDark\n ? { ...base.palette.background, default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { ...base.palette.background, default: \"#F2F2F7\", paper: \"#FFFFFF\" },\n\n divider: isDark ? \"rgba(255,255,255,0.12)\" : \"rgba(0,0,0,0.12)\",\n },\n\n // Остальные ваши настройки — без изменений\n components: {\n ...commonComponentProps,\n MuiTypography: muiTypography,\n },\n typography: typographyVariants,\n shape: { borderRadius: 24 },\n });\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),\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): 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 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 // HEADER REGULAR\n header_2xl_regular: \"h1\",\n header_xl_regular: \"h2\",\n header_lg_regular: \"h3\",\n header_md_regular: \"h4\",\n header_sm_regular: \"h5\",\n header_xs_regular: \"h6\",\n\n // DISPLAY BOLD\n header_2xl_bold: \"h1\",\n header_xl_bold: \"h2\",\n header_lg_bold: \"h3\",\n header_md_bold: \"h4\",\n header_sm_bold: \"h5\",\n header_xs_bold: \"h6\",\n },\n },\n};\n\n/**\n * Custom typography variant definitions with adjusted display sizes.\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 header_2xl_regular: { font: \"400 48px/60px inherit inherit\" },\n header_xl_regular: { font: \"400 42px/54px inherit inherit\" },\n header_lg_regular: { font: \"400 36px/46px inherit inherit\" },\n header_md_regular: { font: \"400 30px/38px inherit inherit\" },\n header_sm_regular: { font: \"400 26px/34px inherit inherit\" },\n header_xs_regular: { font: \"400 22px/30px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 48px/60px inherit inherit\" },\n header_xl_bold: { font: \"700 42px/54px inherit inherit\" },\n header_lg_bold: { font: \"700 36px/46px inherit inherit\" },\n header_md_bold: { font: \"700 30px/38px inherit inherit\" },\n header_sm_bold: { font: \"700 26px/34px inherit inherit\" },\n header_xs_bold: { font: \"700 22px/30px 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 backgroundDefault = theme.palette.background.default;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n html,\n body,\n #root {\n height: 100%;\n margin: 0;\n }\n\n :root {\n height: 100%;\n --font-family:\n \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial,\n sans-serif;\n font-family:\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\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 --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 overflow: auto;\n touch-action: manipulation;\n background: ${backgroundDefault};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${backgroundDefault};\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: ${backgroundDefault};\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","mode","isDark","base","createTheme","ColorPalette","commonComponentProps","muiTypography","typographyVariants","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","BrightnessAutoRoundedIcon","DarkModeRoundedIcon","LightModeRoundedIcon","PersonalVideoRoundedIcon","jsx","OPTION_ICON_SIZE","darkModeOptions","useMemo","Global","css","useTheme","jsx","GlobalStyles","theme","useTheme","isDarkMode","primaryColor","backgroundDefault","primaryFontColor","useMemo","getFontColor","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","jsxs","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","useState","stored","darkMode","setDarkMode","useEffect","selectedTheme","useMemo","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider","GlobalStyles"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomazing-org/design-system",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.62",
|
|
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",
|