@atomazing-org/design-system 1.0.67 → 1.0.68

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.d.mts CHANGED
@@ -473,4 +473,15 @@ declare const useResponsiveDisplay: (breakpoint?: number) => boolean;
473
473
  */
474
474
  declare const useSystemTheme: () => SystemTheme;
475
475
 
476
+ declare module "@mui/material/styles" {
477
+ interface TypographyVariants extends CustomTypographyVariants {
478
+ }
479
+ interface TypographyVariantsOptions extends Partial<CustomTypographyVariants> {
480
+ }
481
+ }
482
+ declare module "@mui/material/Typography" {
483
+ interface TypographyPropsVariantOverrides extends Record<keyof CustomTypographyVariants, true> {
484
+ }
485
+ }
486
+
476
487
  export { type AppSettings, ColorPalette, type ColorPaletteType, type CustomTypographyVariants, type DarkModeOptions, DialogBtn, ErrorBoundary, GlobalStyles, Loading, type OptionItem, PathName, type SystemTheme, type ThemeContextProps, ThemeProviderWrapper, commonComponentProps, createCustomTheme, darkModeOptions, defaultColorPalette, displayGreeting, fadeIn, fadeInLeft, getColorPalette, getDayIdentifier, getFontColor, installAppAnimation, isDarkMode, isFontLight, isHexColor, logoutAnimation, progressPulse, pulseAnimation, scale, setColorPaletteOverride, slideIn, slideInBottom, systemInfo, timeAgo, timeAgoFromStart, useResponsiveDisplay, useSystemTheme, useThemeSettings };
package/dist/index.d.ts CHANGED
@@ -473,4 +473,15 @@ declare const useResponsiveDisplay: (breakpoint?: number) => boolean;
473
473
  */
474
474
  declare const useSystemTheme: () => SystemTheme;
475
475
 
476
+ declare module "@mui/material/styles" {
477
+ interface TypographyVariants extends CustomTypographyVariants {
478
+ }
479
+ interface TypographyVariantsOptions extends Partial<CustomTypographyVariants> {
480
+ }
481
+ }
482
+ declare module "@mui/material/Typography" {
483
+ interface TypographyPropsVariantOverrides extends Record<keyof CustomTypographyVariants, true> {
484
+ }
485
+ }
486
+
476
487
  export { type AppSettings, ColorPalette, type ColorPaletteType, type CustomTypographyVariants, type DarkModeOptions, DialogBtn, ErrorBoundary, GlobalStyles, Loading, type OptionItem, PathName, type SystemTheme, type ThemeContextProps, ThemeProviderWrapper, commonComponentProps, createCustomTheme, darkModeOptions, defaultColorPalette, displayGreeting, fadeIn, fadeInLeft, getColorPalette, getDayIdentifier, getFontColor, installAppAnimation, isDarkMode, isFontLight, isHexColor, logoutAnimation, progressPulse, pulseAnimation, scale, setColorPaletteOverride, slideIn, slideInBottom, systemInfo, timeAgo, timeAgoFromStart, useResponsiveDisplay, useSystemTheme, useThemeSettings };
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- "use strict";var Ee=Object.create;var S=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,$e=Object.prototype.hasOwnProperty;var ze=(e,t)=>{for(var r in t)S(e,r,{get:t[r],enumerable:!0})},V=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Be(t))!$e.call(e,o)&&o!==r&&S(e,o,{get:()=>t[o],enumerable:!(i=Ae(t,o))||i.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Ee(Le(e)):{},V(t||!e||!e.__esModule?S(r,"default",{value:e,enumerable:!0}):r,e)),We=e=>V(S({},"__esModule",{value:!0}),e);var Ve={};ze(Ve,{ColorPalette:()=>se,DialogBtn:()=>Q,ErrorBoundary:()=>P,GlobalStyles:()=>W,Loading:()=>q,PathName:()=>ee,ThemeProviderWrapper:()=>Fe,commonComponentProps:()=>I,createCustomTheme:()=>E,darkModeOptions:()=>ie,defaultColorPalette:()=>C,displayGreeting:()=>me,fadeIn:()=>ve,fadeInLeft:()=>_e,getColorPalette:()=>s,getDayIdentifier:()=>ue,getFontColor:()=>T,installAppAnimation:()=>Me,isDarkMode:()=>A,isFontLight:()=>de,isHexColor:()=>Y,logoutAnimation:()=>Pe,progressPulse:()=>Se,pulseAnimation:()=>Te,scale:()=>Ce,setColorPaletteOverride:()=>O,slideIn:()=>ke,slideInBottom:()=>we,systemInfo:()=>fe,timeAgo:()=>ce,timeAgoFromStart:()=>he,useResponsiveDisplay:()=>xe,useSystemTheme:()=>$,useThemeSettings:()=>ae});module.exports=We(Ve);var X=u(require("@emotion/styled")),J=require("@mui/material"),Q=(0,X.default)(J.Button)`
1
+ "use strict";var Ee=Object.create;var S=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,$e=Object.prototype.hasOwnProperty;var ze=(e,t)=>{for(var r in t)S(e,r,{get:t[r],enumerable:!0})},Y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Be(t))!$e.call(e,o)&&o!==r&&S(e,o,{get:()=>t[o],enumerable:!(n=Ae(t,o))||n.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Ee(Le(e)):{},Y(t||!e||!e.__esModule?S(r,"default",{value:e,enumerable:!0}):r,e)),We=e=>Y(S({},"__esModule",{value:!0}),e);var Ye={};ze(Ye,{ColorPalette:()=>se,DialogBtn:()=>Q,ErrorBoundary:()=>P,GlobalStyles:()=>W,Loading:()=>q,PathName:()=>ee,ThemeProviderWrapper:()=>De,commonComponentProps:()=>F,createCustomTheme:()=>E,darkModeOptions:()=>ne,defaultColorPalette:()=>C,displayGreeting:()=>me,fadeIn:()=>ve,fadeInLeft:()=>_e,getColorPalette:()=>s,getDayIdentifier:()=>ue,getFontColor:()=>w,installAppAnimation:()=>Me,isDarkMode:()=>A,isFontLight:()=>de,isHexColor:()=>H,logoutAnimation:()=>Pe,progressPulse:()=>Se,pulseAnimation:()=>we,scale:()=>Ce,setColorPaletteOverride:()=>I,slideIn:()=>ke,slideInBottom:()=>Te,systemInfo:()=>fe,timeAgo:()=>ce,timeAgoFromStart:()=>he,useResponsiveDisplay:()=>xe,useSystemTheme:()=>$,useThemeSettings:()=>ae});module.exports=We(Ye);var X=u(require("@emotion/styled")),J=require("@mui/material"),Q=(0,X.default)(J.Button)`
2
2
  padding: 10px 16px;
3
3
  border-radius: 16px;
4
4
  font-size: 16px;
5
5
  margin: 8px;
6
- `;var j=u(require("react")),N=u(require("@emotion/styled")),G=u(require("@mui/icons-material/ErrorOutlineRounded")),v=require("@mui/material"),d=require("react/jsx-runtime"),P=class extends j.default.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,r){console.error("Error:",t),console.error("Error Info:",r)}render(){var i,o,n;let{state:t,props:r}=this;return t.hasError?(0,d.jsxs)(Ge,{children:[(0,d.jsx)(Ne,{children:(0,d.jsx)(v.Box,{children:"Something went wrong.\xA0"})}),(0,d.jsxs)("h3",{children:[(0,d.jsxs)(v.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,d.jsx)(G.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",(0,d.jsxs)(v.Box,{translate:"no",children:["[",(i=t.error)==null?void 0:i.name,"] ",(o=t.error)==null?void 0:o.message]}),(0,d.jsxs)(v.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,d.jsx)(G.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",(0,d.jsxs)(v.Box,{translate:"no",children:["[",(n=t.error)==null?void 0:n.stack,"]"]})]})]}):r.children}},Ge=N.default.div`
6
+ `;var j=u(require("react")),G=u(require("@emotion/styled")),V=u(require("@mui/icons-material/ErrorOutlineRounded")),v=require("@mui/material"),d=require("react/jsx-runtime"),P=class extends j.default.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,r){console.error("Error:",t),console.error("Error Info:",r)}render(){var n,o,i;let{state:t,props:r}=this;return t.hasError?(0,d.jsxs)(Ve,{children:[(0,d.jsx)(Ge,{children:(0,d.jsx)(v.Box,{children:"Something went wrong.\xA0"})}),(0,d.jsxs)("h3",{children:[(0,d.jsxs)(v.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,d.jsx)(V.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",(0,d.jsxs)(v.Box,{translate:"no",children:["[",(n=t.error)==null?void 0:n.name,"] ",(o=t.error)==null?void 0:o.message]}),(0,d.jsxs)(v.Box,{style:{color:"#ff3131",display:"inline-block"},children:[(0,d.jsx)(V.default,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",(0,d.jsxs)(v.Box,{translate:"no",children:["[",(i=t.error)==null?void 0:i.stack,"]"]})]})]}):r.children}},Ve=G.default.div`
7
7
  margin: 0 8vw;
8
8
  @media (max-width: 768px) {
9
9
  margin: 0;
10
10
  }
11
- `,Ne=N.default.h1`
11
+ `,Ge=G.default.h1`
12
12
  margin-top: 32px;
13
13
  margin-bottom: 32px;
14
14
  font-size: 36px;
@@ -24,7 +24,7 @@
24
24
  margin-top: 0;
25
25
  margin-bottom: 0;
26
26
  }
27
- `;var M=require("react"),Z=u(require("@emotion/styled")),R=require("@mui/material"),x=require("react/jsx-runtime"),q=()=>{let[e,t]=(0,M.useState)(!1);return(0,M.useEffect)(()=>{let r=setTimeout(()=>{t(!0)},100);return()=>clearTimeout(r)},[]),(0,x.jsx)(Ue,{"aria-live":"polite",role:"status",children:e&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(R.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,x.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},Ue=(0,Z.default)(R.Box)`
27
+ `;var M=require("react"),Z=u(require("@emotion/styled")),R=require("@mui/material"),x=require("react/jsx-runtime"),q=()=>{let[e,t]=(0,M.useState)(!1);return(0,M.useEffect)(()=>{let r=setTimeout(()=>{t(!0)},100);return()=>clearTimeout(r)},[]),(0,x.jsx)(Ne,{"aria-live":"polite",role:"status",children:e&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(R.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,x.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},Ne=(0,Z.default)(R.Box)`
28
28
  position: absolute;
29
29
  top: 50%;
30
30
  left: 50%;
@@ -40,7 +40,7 @@
40
40
  color: white;
41
41
  padding: 4px 6px;
42
42
  border-radius: 8px;
43
- `;var te=u(require("@mui/icons-material/BrightnessAutoRounded")),re=u(require("@mui/icons-material/DarkModeRounded")),oe=u(require("@mui/icons-material/LightModeRounded")),ne=u(require("@mui/icons-material/PersonalVideoRounded")),w=require("react/jsx-runtime"),D=32,ie=[{label:"Auto",value:"auto",icon:(0,w.jsx)(te.default,{color:"inherit",sx:{fontSize:D}})},{label:"System",value:"system",icon:(0,w.jsx)(ne.default,{color:"inherit",sx:{fontSize:D}})},{label:"Light",value:"light",icon:(0,w.jsx)(oe.default,{color:"inherit",sx:{fontSize:D}})},{label:"Dark",value:"dark",icon:(0,w.jsx)(re.default,{color:"inherit",sx:{fontSize:D}})}];var C={fontDark:"#101727",fontLight:"#f0f0f0",brand:"#9FA9EA",accent:"#F3503A",muted:"#64748B",success:"#2E7D32",info:"#0288D1",warning:"#ED6C02",error:"#D32F2F",neutral:"#64748B"};var F=require("react"),U=(0,F.createContext)(void 0),ae=()=>{let e=(0,F.useContext)(U);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var p=require("react"),Re=require("@emotion/react"),De=require("@mui/material/styles");var I={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({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}}},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","&::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 H=require("@mui/material");var m={...C},s=()=>m,O=e=>{m={...C,...e}},se={get fontDark(){return m.fontDark},get fontLight(){return m.fontLight},get brand(){return m.brand},get accent(){return m.accent},get muted(){return m.muted},get success(){return m.success},get info(){return m.info},get warning(){return m.warning},get error(){return m.error},get neutral(){return m.neutral}};var le={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",header_2xl_semibold:"h1",header_xl_semibold:"h2",header_lg_semibold:"h3",header_md_semibold:"h4",header_sm_semibold:"h5",header_xs_semibold:"h6"}}},pe={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 34px/42px inherit inherit"},header_xl_regular:{font:"400 32px/40px inherit inherit"},header_lg_regular:{font:"400 28px/36px inherit inherit"},header_md_regular:{font:"400 24px/32px inherit inherit"},header_sm_regular:{font:"400 20px/28px inherit inherit"},header_xs_regular:{font:"400 18px/26px inherit inherit"},header_2xl_bold:{font:"700 34px/42px inherit inherit"},header_xl_bold:{font:"700 32px/40px inherit inherit"},header_lg_bold:{font:"700 28px/36px inherit inherit"},header_md_bold:{font:"700 24px/32px inherit inherit"},header_sm_bold:{font:"700 20px/28px inherit inherit"},header_xs_bold:{font:"700 18px/26px inherit inherit"},header_2xl_semibold:{font:"600 34px/42px inherit inherit"},header_xl_semibold:{font:"600 32px/40px inherit inherit"},header_lg_semibold:{font:"600 28px/36px inherit inherit"},header_md_semibold:{font:"600 24px/32px inherit inherit"},header_sm_semibold:{font:"600 20px/28px inherit inherit"},header_xs_semibold:{font:"600 18px/26px inherit inherit"}};var E=(e,t="light",r,i)=>{let o=t==="dark",n=(0,H.createTheme)({palette:{mode:t}});return(0,H.createTheme)(n,{palette:{primary:{...n.palette.primary,main:e},brand:n.palette.augmentColor({color:{main:e}}),neutral:n.palette.augmentColor({color:{main:s().neutral}}),accent:n.palette.augmentColor({color:{main:s().accent}}),muted:n.palette.augmentColor({color:{main:s().muted}}),...r?{secondary:{...n.palette.secondary,main:r}}:{},error:{...n.palette.error,main:s().error},warning:{...n.palette.warning,main:s().warning},success:{...n.palette.success,main:s().success},info:{...n.palette.info,main:s().info},background:(()=>{let l=o?{default:"#1C1C1E",paper:"#2C2C2E"}:{default:"#F2F2F7",paper:"#FFFFFF"};return{...n.palette.background,...l,...i}})(),divider:o?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.12)"},components:{...I,MuiTypography:le},typography:{...pe,fontFamily:'var(--app-font-family, "Mulish", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif)'},shape:{borderRadius:24}})};var ge=require("react"),z=require("@emotion/react"),be=require("@mui/material/styles");var Y=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),T=e=>{if(!Y(e))return console.error("Invalid hex color provided:",e),s().fontDark;let t=e.slice(1),r=t.length===3?t.split("").map(c=>c+c).join(""):t,i=Number.parseInt(r.slice(0,2),16),o=Number.parseInt(r.slice(2,4),16),n=Number.parseInt(r.slice(4,6),16),l=Math.round((i*299+o*587+n*114)/1e3),a=s();return l>128?a.fontDark:a.fontLight},de=e=>T(e)===s().fontLight;var me=()=>{let e=new Date().getHours();return e>=5&&e<12?"Good morning":e>12&&e<18?"Good afternoon":"Good evening"};var ue=e=>{let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${i}`};var He=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).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"},Ye=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},fe={os:typeof navigator=="undefined"?"Unknown":He(),browser:typeof navigator=="undefined"?"Unknown":Ye()};var A=(e,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return t==="dark";default:return!1}};var ce=(e,t)=>{let r=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,i=new Date;e=new Date(e);let o=Math.floor((i.getTime()-e.getTime())/1e3),n=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return n.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return n.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return n.format(-a,"hour")}let l=Math.floor(o/86400);return n.format(-l,"day")},he=(e,t)=>{let r=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,i=new Date;e=new Date(e);let o=(e.getTime()-i.getTime())/1e3,n=Math.floor(o/(60*60)),l=Math.floor((o-60*60*n)/60),a=Math.floor(o-60*60*n-60*l),c=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(l===0&&a<60)return c.format(a,"second");if(n===0&&l<60)return c.format(l,"minute");if(n<24){let _=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(n,"hour")}`,g=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(l,"minute")}`.replace(/^\D+/,"");return`${_} ${g}`}let y=Math.floor(a/86400);return c.format(y,"day")};var B=require("react"),xe=(e=768)=>{let[t,r]=(0,B.useState)(!1);return(0,B.useEffect)(()=>{let i=()=>{r(window.innerWidth<e)};i();let o=()=>i();return window.addEventListener("resize",o),()=>{window.removeEventListener("resize",o)}},[e]),t};var L=require("react"),$=()=>{let[e,t]=(0,L.useState)("unknown");return(0,L.useEffect)(()=>{let r=o=>{t(o.matches?"dark":"light")},i=globalThis.matchMedia("(prefers-color-scheme: dark)");return t(i.matches?"dark":"light"),i.addEventListener("change",r),()=>{i.removeEventListener("change",r)}},[]),e};var ye=require("react/jsx-runtime"),W=({fontFamily:e})=>{let t=(0,be.useTheme)(),r=t.palette.mode==="dark",i=t.palette.primary.main,o=t.palette.background.default,n=(0,ge.useMemo)(()=>T(i),[i]);return(0,ye.jsx)(z.Global,{styles:z.css`
43
+ `;var te=u(require("@mui/icons-material/BrightnessAutoRounded")),re=u(require("@mui/icons-material/DarkModeRounded")),oe=u(require("@mui/icons-material/LightModeRounded")),ie=u(require("@mui/icons-material/PersonalVideoRounded")),T=require("react/jsx-runtime"),O=32,ne=[{label:"Auto",value:"auto",icon:(0,T.jsx)(te.default,{color:"inherit",sx:{fontSize:O}})},{label:"System",value:"system",icon:(0,T.jsx)(ie.default,{color:"inherit",sx:{fontSize:O}})},{label:"Light",value:"light",icon:(0,T.jsx)(oe.default,{color:"inherit",sx:{fontSize:O}})},{label:"Dark",value:"dark",icon:(0,T.jsx)(re.default,{color:"inherit",sx:{fontSize:O}})}];var C={fontDark:"#101727",fontLight:"#f0f0f0",brand:"#9FA9EA",accent:"#F3503A",muted:"#64748B",success:"#2E7D32",info:"#0288D1",warning:"#ED6C02",error:"#D32F2F",neutral:"#64748B"};var D=require("react"),N=(0,D.createContext)(void 0),ae=()=>{let e=(0,D.useContext)(N);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var p=require("react"),Re=require("@emotion/react"),Oe=require("@mui/material/styles");var F={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({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}}},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","&::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 U=require("@mui/material");var m={...C},s=()=>m,I=e=>{m={...C,...e}},se={get fontDark(){return m.fontDark},get fontLight(){return m.fontLight},get brand(){return m.brand},get accent(){return m.accent},get muted(){return m.muted},get success(){return m.success},get info(){return m.info},get warning(){return m.warning},get error(){return m.error},get neutral(){return m.neutral}};var le={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",header_2xl_semibold:"h1",header_xl_semibold:"h2",header_lg_semibold:"h3",header_md_semibold:"h4",header_sm_semibold:"h5",header_xs_semibold:"h6"}}},pe={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 34px/42px inherit inherit"},header_xl_regular:{font:"400 32px/40px inherit inherit"},header_lg_regular:{font:"400 28px/36px inherit inherit"},header_md_regular:{font:"400 24px/32px inherit inherit"},header_sm_regular:{font:"400 20px/28px inherit inherit"},header_xs_regular:{font:"400 18px/26px inherit inherit"},header_2xl_bold:{font:"700 34px/42px inherit inherit"},header_xl_bold:{font:"700 32px/40px inherit inherit"},header_lg_bold:{font:"700 28px/36px inherit inherit"},header_md_bold:{font:"700 24px/32px inherit inherit"},header_sm_bold:{font:"700 20px/28px inherit inherit"},header_xs_bold:{font:"700 18px/26px inherit inherit"},header_2xl_semibold:{font:"600 34px/42px inherit inherit"},header_xl_semibold:{font:"600 32px/40px inherit inherit"},header_lg_semibold:{font:"600 28px/36px inherit inherit"},header_md_semibold:{font:"600 24px/32px inherit inherit"},header_sm_semibold:{font:"600 20px/28px inherit inherit"},header_xs_semibold:{font:"600 18px/26px inherit inherit"}};var E=(e,t="light",r,n)=>{let o=t==="dark",i=(0,U.createTheme)({palette:{mode:t}});return(0,U.createTheme)(i,{palette:{primary:{...i.palette.primary,main:e},brand:i.palette.augmentColor({color:{main:e}}),neutral:i.palette.augmentColor({color:{main:s().neutral}}),accent:i.palette.augmentColor({color:{main:s().accent}}),muted:i.palette.augmentColor({color:{main:s().muted}}),...r?{secondary:{...i.palette.secondary,main:r}}:{},error:{...i.palette.error,main:s().error},warning:{...i.palette.warning,main:s().warning},success:{...i.palette.success,main:s().success},info:{...i.palette.info,main:s().info},background:(()=>{let l=o?{default:"#1C1C1E",paper:"#2C2C2E"}:{default:"#F2F2F7",paper:"#FFFFFF"};return{...i.palette.background,...l,...n}})(),divider:o?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.12)"},components:{...F,MuiTypography:le},typography:{...pe,fontFamily:'var(--app-font-family, "Mulish", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif)'},shape:{borderRadius:24}})};var ge=require("react"),z=require("@emotion/react"),ye=require("@mui/material/styles");var H=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),w=e=>{if(!H(e))return console.error("Invalid hex color provided:",e),s().fontDark;let t=e.slice(1),r=t.length===3?t.split("").map(c=>c+c).join(""):t,n=Number.parseInt(r.slice(0,2),16),o=Number.parseInt(r.slice(2,4),16),i=Number.parseInt(r.slice(4,6),16),l=Math.round((n*299+o*587+i*114)/1e3),a=s();return l>128?a.fontDark:a.fontLight},de=e=>w(e)===s().fontLight;var me=()=>{let e=new Date().getHours();return e>=5&&e<12?"Good morning":e>12&&e<18?"Good afternoon":"Good evening"};var ue=e=>{let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${n}`};var Ue=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).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"},He=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},fe={os:typeof navigator=="undefined"?"Unknown":Ue(),browser:typeof navigator=="undefined"?"Unknown":He()};var A=(e,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return t==="dark";default:return!1}};var ce=(e,t)=>{let r=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,n=new Date;e=new Date(e);let o=Math.floor((n.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 l=Math.floor(o/86400);return i.format(-l,"day")},he=(e,t)=>{let r=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,n=new Date;e=new Date(e);let o=(e.getTime()-n.getTime())/1e3,i=Math.floor(o/(60*60)),l=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*l),c=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(l===0&&a<60)return c.format(a,"second");if(i===0&&l<60)return c.format(l,"minute");if(i<24){let _=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,g=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(l,"minute")}`.replace(/^\D+/,"");return`${_} ${g}`}let b=Math.floor(a/86400);return c.format(b,"day")};var B=require("react"),xe=(e=768)=>{let[t,r]=(0,B.useState)(!1);return(0,B.useEffect)(()=>{let n=()=>{r(window.innerWidth<e)};n();let o=()=>n();return window.addEventListener("resize",o),()=>{window.removeEventListener("resize",o)}},[e]),t};var L=require("react"),$=()=>{let[e,t]=(0,L.useState)("unknown");return(0,L.useEffect)(()=>{let r=o=>{t(o.matches?"dark":"light")},n=globalThis.matchMedia("(prefers-color-scheme: dark)");return t(n.matches?"dark":"light"),n.addEventListener("change",r),()=>{n.removeEventListener("change",r)}},[]),e};var be=require("react/jsx-runtime"),W=({fontFamily:e})=>{let t=(0,ye.useTheme)(),r=t.palette.mode==="dark",n=t.palette.primary.main,o=t.palette.background.default,i=(0,ge.useMemo)(()=>w(n),[n]);return(0,be.jsx)(z.Global,{styles:z.css`
44
44
  /* Allow application to control font via CSS var or prop */
45
45
  :root {
46
46
  ${e?`--app-font-family: ${e};`:""}
@@ -59,8 +59,8 @@
59
59
  sans-serif !important;
60
60
  -webkit-tap-highlight-color: transparent;
61
61
  &::selection {
62
- background-color: ${`${i}e1`};
63
- color: ${n};
62
+ background-color: ${`${n}e1`};
63
+ color: ${i};
64
64
  }
65
65
  }
66
66
 
@@ -110,11 +110,11 @@
110
110
  background-color: ${o};
111
111
  }
112
112
  ::-webkit-scrollbar-thumb {
113
- background-color: ${i};
113
+ background-color: ${n};
114
114
  border-radius: 64px;
115
115
  }
116
116
  ::-webkit-scrollbar-thumb:hover {
117
- background-color: ${`${i}d8`};
117
+ background-color: ${`${n}d8`};
118
118
  }
119
119
  ::-webkit-scrollbar-track {
120
120
  border-radius: 64px;
@@ -154,11 +154,11 @@
154
154
  background-color: ${o};
155
155
  }
156
156
  ::-webkit-scrollbar-thumb {
157
- background-color: ${i};
157
+ background-color: ${n};
158
158
  border-radius: 64px;
159
159
  }
160
160
  ::-webkit-scrollbar-thumb:hover {
161
- background-color: ${`${i}d8`};
161
+ background-color: ${`${n}d8`};
162
162
  }
163
163
  ::-webkit-scrollbar-track {
164
164
  border-radius: 64px;
@@ -194,7 +194,7 @@
194
194
  to {
195
195
  transform: translateX(0);
196
196
  }
197
- `,we=f.keyframes`
197
+ `,Te=f.keyframes`
198
198
  from {
199
199
  transform: translateY(100%);
200
200
  }
@@ -208,7 +208,7 @@
208
208
  to {
209
209
  transform: scale(1);
210
210
  }
211
- `,Te=(e,t=12)=>f.keyframes`
211
+ `,we=(e,t=12)=>f.keyframes`
212
212
  0% {
213
213
  transform: scale(0.95);
214
214
  box-shadow: 0 0 0 0 ${e}b2;
@@ -260,5 +260,5 @@
260
260
  100% {
261
261
  transform: translateY(0);
262
262
  }
263
- `;var k=require("react/jsx-runtime"),Fe=({children:e,fontFamily:t,themes:r,colorPaletteOverride:i})=>{let o=$();(0,p.useEffect)(()=>{O(i)},[i]);let[n,l]=(0,p.useState)("system"),[a,c]=(0,p.useState)("auto");(0,p.useEffect)(()=>{if(globalThis.window!==void 0)try{let h=globalThis.localStorage.getItem("appSettings");if(h){let b=JSON.parse(h);b.theme&&l(b.theme),b.darkMode&&c(b.darkMode)}}catch(h){}},[]),(0,p.useEffect)(()=>{if(globalThis.window!==void 0)try{globalThis.localStorage.setItem("appSettings",JSON.stringify({theme:n,darkMode:a}))}catch(h){}},[n,a]);let y=(0,p.useMemo)(()=>r&&r.length>0?r:[{name:"Default",primaryColor:s().brand}],[r,i]),_=(0,p.useMemo)(()=>n==="system"||o==="unknown"?y[0]:y.find(h=>h.name===n)||y[0],[o,n,y]),g=(0,p.useMemo)(()=>A(a,o)?"dark":"light",[a,o]),Ie=(0,p.useMemo)(()=>{var b;let h=(b=_.background)==null?void 0:b[g];return E(_.primaryColor,g,_.secondaryColor,h)},[_,g]),Oe=(0,p.useMemo)(()=>({darkMode:g==="dark"}),[g]);return(0,k.jsx)(U.Provider,{value:{theme:n,darkMode:a,setTheme:l,setDarkMode:c},children:(0,k.jsx)(De.ThemeProvider,{theme:Ie,children:(0,k.jsxs)(Re.ThemeProvider,{theme:Oe,children:[(0,k.jsx)(W,{fontFamily:t}),e]})})})};0&&(module.exports={ColorPalette,DialogBtn,ErrorBoundary,GlobalStyles,Loading,PathName,ThemeProviderWrapper,commonComponentProps,createCustomTheme,darkModeOptions,defaultColorPalette,displayGreeting,fadeIn,fadeInLeft,getColorPalette,getDayIdentifier,getFontColor,installAppAnimation,isDarkMode,isFontLight,isHexColor,logoutAnimation,progressPulse,pulseAnimation,scale,setColorPaletteOverride,slideIn,slideInBottom,systemInfo,timeAgo,timeAgoFromStart,useResponsiveDisplay,useSystemTheme,useThemeSettings});
263
+ `;var k=require("react/jsx-runtime"),De=({children:e,fontFamily:t,themes:r,colorPaletteOverride:n})=>{let o=$();(0,p.useEffect)(()=>{I(n)},[n]);let[i,l]=(0,p.useState)("system"),[a,c]=(0,p.useState)("auto");(0,p.useEffect)(()=>{if(globalThis.window!==void 0)try{let h=globalThis.localStorage.getItem("appSettings");if(h){let y=JSON.parse(h);y.theme&&l(y.theme),y.darkMode&&c(y.darkMode)}}catch(h){}},[]),(0,p.useEffect)(()=>{if(globalThis.window!==void 0)try{globalThis.localStorage.setItem("appSettings",JSON.stringify({theme:i,darkMode:a}))}catch(h){}},[i,a]);let b=(0,p.useMemo)(()=>r&&r.length>0?r:[{name:"Default",primaryColor:s().brand}],[r]),_=(0,p.useMemo)(()=>i==="system"||o==="unknown"?b[0]:b.find(h=>h.name===i)||b[0],[o,i,b]),g=(0,p.useMemo)(()=>A(a,o)?"dark":"light",[a,o]),Fe=(0,p.useMemo)(()=>{var y;let h=(y=_.background)==null?void 0:y[g];return E(_.primaryColor,g,_.secondaryColor,h)},[_,g]),Ie=(0,p.useMemo)(()=>({darkMode:g==="dark"}),[g]);return(0,k.jsx)(N.Provider,{value:{theme:i,darkMode:a,setTheme:l,setDarkMode:c},children:(0,k.jsx)(Oe.ThemeProvider,{theme:Fe,children:(0,k.jsxs)(Re.ThemeProvider,{theme:Ie,children:[(0,k.jsx)(W,{fontFamily:t}),e]})})})};0&&(module.exports={ColorPalette,DialogBtn,ErrorBoundary,GlobalStyles,Loading,PathName,ThemeProviderWrapper,commonComponentProps,createCustomTheme,darkModeOptions,defaultColorPalette,displayGreeting,fadeIn,fadeInLeft,getColorPalette,getDayIdentifier,getFontColor,installAppAnimation,isDarkMode,isFontLight,isHexColor,logoutAnimation,progressPulse,pulseAnimation,scale,setColorPaletteOverride,slideIn,slideInBottom,systemInfo,timeAgo,timeAgoFromStart,useResponsiveDisplay,useSystemTheme,useThemeSettings});
264
264
  //# 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/constants/darkModeOptions.tsx","../src/constants/defaultColorPalette.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/themeConfig.ts","../src/styles/typography.ts","../src/styles/GlobalStyles.tsx","../src/utils/colorUtils.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/isDarkMode.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts","../src/styles/keyframes.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./constants\";\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 */\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 -- Allow console output for error reporting\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Allow console output for error reporting\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>Something went wrong.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container aria-live=\"polite\" role=\"status\">\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 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 type { ColorPaletteType } from \"../models\";\n\nexport const defaultColorPalette: ColorPaletteType = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n // Generic tokens\n brand: \"#9FA9EA\",\n accent: \"#F3503A\",\n muted: \"#64748B\",\n // MUI-like defaults\n success: \"#2E7D32\",\n info: \"#0288D1\",\n warning: \"#ED6C02\",\n error: \"#D32F2F\",\n neutral: \"#64748B\",\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","import { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport {\n createCustomTheme,\n GlobalStyles,\n setColorPaletteOverride,\n getColorPalette,\n} from \"../styles\";\nimport { isDarkMode, useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { ColorPaletteType } from \"../models\";\nimport type { FC, PropsWithChildren } from \"react\";\n\ntype ThemeProviderWrapperProps = PropsWithChildren<{\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n /**\n * Optional dynamic list of themes.\n * Takes precedence over static defaults when provided.\n */\n themes?: {\n name: string;\n primaryColor: string;\n secondaryColor?: string;\n background?: {\n light?: { default?: string; paper?: string };\n dark?: { default?: string; paper?: string };\n };\n }[];\n /** Optional color palette override (e.g., fontLight/fontDark/accent colors). */\n colorPaletteOverride?: Partial<ColorPaletteType>;\n}>;\n\nexport const ThemeProviderWrapper: FC<ThemeProviderWrapperProps> = ({\n children,\n fontFamily,\n themes: themesInput,\n colorPaletteOverride,\n}) => {\n const systemTheme = useSystemTheme();\n\n // Apply palette overrides when provided (no-op otherwise)\n useEffect(() => {\n setColorPaletteOverride(colorPaletteOverride);\n }, [colorPaletteOverride]);\n\n // SSR-safe initial settings\n const [theme, setTheme] = useState<string>(\"system\");\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(\"auto\");\n\n // Hydrate from localStorage on client\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n const storedRaw = globalThis.localStorage.getItem(\"appSettings\");\n if (storedRaw) {\n const stored = JSON.parse(storedRaw);\n if (stored.theme) setTheme(stored.theme);\n if (stored.darkMode) setDarkMode(stored.darkMode);\n }\n } catch {\n /* empty */\n }\n }, []);\n\n // Persist settings\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n globalThis.localStorage.setItem(\n \"appSettings\",\n JSON.stringify({ theme, darkMode }),\n );\n } catch {\n /* empty */\n }\n }, [theme, darkMode]);\n\n const themesSource = useMemo(() => {\n if (themesInput && themesInput.length > 0) {\n return themesInput;\n }\n // Fallback: single default theme based on palette brand\n const defaultPrimary = getColorPalette().brand;\n return [\n {\n name: \"Default\",\n primaryColor: defaultPrimary,\n },\n ];\n }, [themesInput, colorPaletteOverride]);\n\n const selectedTheme = useMemo(() => {\n if (theme === \"system\" || systemTheme === \"unknown\") {\n return themesSource[0];\n }\n return themesSource.find((t) => t.name === theme) || themesSource[0];\n }, [systemTheme, theme, themesSource]);\n\n const mode = useMemo(\n () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme],\n );\n\n const muiTheme = useMemo(() => {\n const bg = selectedTheme.background?.[mode];\n return createCustomTheme(\n selectedTheme.primaryColor,\n mode,\n selectedTheme.secondaryColor,\n bg,\n );\n }, [selectedTheme, mode]);\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 fontFamily={fontFamily} />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\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 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 },\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 \"&::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 { getColorPalette } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n mode: PaletteMode = \"light\",\n secondaryColor?: string,\n background?: { default?: string; paper?: string },\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 // Brand follows active theme primary\n brand: base.palette.augmentColor({ color: { main: primaryColor } }),\n neutral: base.palette.augmentColor({\n color: { main: getColorPalette().neutral },\n }),\n accent: base.palette.augmentColor({\n color: { main: getColorPalette().accent },\n }),\n muted: base.palette.augmentColor({\n color: { main: getColorPalette().muted },\n }),\n ...(secondaryColor\n ? { secondary: { ...base.palette.secondary, main: secondaryColor } }\n : {}),\n error: { ...base.palette.error, main: getColorPalette().error },\n warning: { ...base.palette.warning, main: getColorPalette().warning },\n success: { ...base.palette.success, main: getColorPalette().success },\n info: { ...base.palette.info, main: getColorPalette().info },\n\n background: (() => {\n const baseBg = isDark\n ? { default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { default: \"#F2F2F7\", paper: \"#FFFFFF\" };\n return { ...base.palette.background, ...baseBg, ...background };\n })(),\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: {\n ...typographyVariants,\n // Let application control font via CSS variable; default to Mulish stack\n fontFamily:\n 'var(--app-font-family, \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial, sans-serif)',\n } as any,\n shape: { borderRadius: 24 },\n });\n};\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\n// No static theme list export — themes are provided dynamically via ThemeProviderWrapper.\n","import { defaultColorPalette } from \"../constants\";\n\nimport type { ColorPaletteType } from \"../models\";\n\nlet currentColorPalette: ColorPaletteType = { ...defaultColorPalette };\n\n/** Returns the active color palette, allowing app-level overrides. */\nexport const getColorPalette = (): ColorPaletteType => currentColorPalette;\n\n/**\n * Overrides the active color palette with app-provided values.\n * Pass `undefined` or empty to reset to defaults.\n */\nexport const setColorPaletteOverride = (\n override?: Partial<ColorPaletteType>,\n): void => {\n currentColorPalette = { ...defaultColorPalette, ...override };\n};\n\n/** Backward-compatible live view of the active palette. */\nexport const ColorPalette: Readonly<ColorPaletteType> = {\n get fontDark() {\n return currentColorPalette.fontDark;\n },\n get fontLight() {\n return currentColorPalette.fontLight;\n },\n get brand() {\n return currentColorPalette.brand;\n },\n get accent() {\n return currentColorPalette.accent;\n },\n get muted() {\n return currentColorPalette.muted;\n },\n get success() {\n return currentColorPalette.success;\n },\n get info() {\n return currentColorPalette.info;\n },\n get warning() {\n return currentColorPalette.warning;\n },\n get error() {\n return currentColorPalette.error;\n },\n get neutral() {\n return currentColorPalette.neutral;\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 // HEADER SEMIBOLD\n header_2xl_semibold: \"h1\",\n header_xl_semibold: \"h2\",\n header_lg_semibold: \"h3\",\n header_md_semibold: \"h4\",\n header_sm_semibold: \"h5\",\n header_xs_semibold: \"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 34px/42px inherit inherit\" },\n header_xl_regular: { font: \"400 32px/40px inherit inherit\" },\n header_lg_regular: { font: \"400 28px/36px inherit inherit\" },\n header_md_regular: { font: \"400 24px/32px inherit inherit\" },\n header_sm_regular: { font: \"400 20px/28px inherit inherit\" },\n header_xs_regular: { font: \"400 18px/26px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 34px/42px inherit inherit\" },\n header_xl_bold: { font: \"700 32px/40px inherit inherit\" },\n header_lg_bold: { font: \"700 28px/36px inherit inherit\" },\n header_md_bold: { font: \"700 24px/32px inherit inherit\" },\n header_sm_bold: { font: \"700 20px/28px inherit inherit\" },\n header_xs_bold: { font: \"700 18px/26px inherit inherit\" },\n\n // HEADER SEMIBOLD\n header_2xl_semibold: { font: \"600 34px/42px inherit inherit\" },\n header_xl_semibold: { font: \"600 32px/40px inherit inherit\" },\n header_lg_semibold: { font: \"600 28px/36px inherit inherit\" },\n header_md_semibold: { font: \"600 24px/32px inherit inherit\" },\n header_sm_semibold: { font: \"600 20px/28px inherit inherit\" },\n header_xs_semibold: { font: \"600 18px/26px inherit inherit\" },\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"../utils\";\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 */\ninterface GlobalStylesProps {\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n}\n\nexport const GlobalStyles: FC<GlobalStylesProps> = ({ fontFamily }) => {\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 /* Allow application to control font via CSS var or prop */\n :root {\n ${fontFamily ? `--app-font-family: ${fontFamily};` : \"\"}\n }\n * {\n font-family:\n var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial\n ),\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 /* default fallback font; apps can override via --app-font-family */\n font-family: var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif\n )\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 }\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 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 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 /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n `}\n />\n );\n};\n","import { getColorPalette } from \"../styles/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 getColorPalette().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 const palette = getColorPalette();\n return brightness > 128 ? palette.fontDark : palette.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) === getColorPalette().fontLight;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentHour = new Date().getHours();\n if (currentHour >= 5 && currentHour < 12) return \"Good morning\";\n if (currentHour > 12 && currentHour < 18) return \"Good afternoon\";\n return \"Good evening\";\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\n/**\n * Detects the user's operating system based on the user agent string.\n * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getBrowser = (): Browser => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: resolves to Unknown values on server.\n */\nexport const systemInfo = {\n os:\n typeof navigator === \"undefined\"\n ? (\"Unknown\" as OperatingSystem)\n : getOperatingSystem(),\n browser:\n typeof navigator === \"undefined\" ? (\"Unknown\" as Browser) : getBrowser(),\n};\n","import type { AppSettings, SystemTheme } from \"../models\";\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","/**\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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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(locale, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(locale, {\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","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"],"mappings":"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","names":["index_exports","__export","ColorPalette","DialogBtn","ErrorBoundary","GlobalStyles","Loading","PathName","ThemeProviderWrapper","commonComponentProps","createCustomTheme","darkModeOptions","defaultColorPalette","displayGreeting","fadeIn","fadeInLeft","getColorPalette","getDayIdentifier","getFontColor","installAppAnimation","isDarkMode","isFontLight","isHexColor","logoutAnimation","progressPulse","pulseAnimation","scale","setColorPaletteOverride","slideIn","slideInBottom","systemInfo","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_BrightnessAutoRounded","import_DarkModeRounded","import_LightModeRounded","import_PersonalVideoRounded","import_jsx_runtime","OPTION_ICON_SIZE","darkModeOptions","BrightnessAutoRoundedIcon","PersonalVideoRoundedIcon","LightModeRoundedIcon","DarkModeRoundedIcon","defaultColorPalette","import_react","ThemeContext","useThemeSettings","context","import_react","import_styles","commonComponentProps","theme","import_material","currentColorPalette","defaultColorPalette","getColorPalette","setColorPaletteOverride","override","ColorPalette","muiTypography","typographyVariants","createCustomTheme","primaryColor","mode","secondaryColor","background","isDark","base","getColorPalette","baseBg","commonComponentProps","muiTypography","typographyVariants","import_react","import_styles","isHexColor","value","getFontColor","backgroundColor","getColorPalette","hex","fullHex","r","g","b","brightness","palette","isFontLight","color","displayGreeting","currentHour","getDayIdentifier","date","year","month","day","getOperatingSystem","ua","getBrowser","systemInfo","isDarkMode","darkMode","systemTheme","timeAgo","date","lang","locale","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","GlobalStyles","fontFamily","theme","isDarkMode","primaryColor","backgroundDefault","primaryFontColor","getFontColor","import_react","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","import_jsx_runtime","ThemeProviderWrapper","children","fontFamily","themesInput","colorPaletteOverride","systemTheme","useSystemTheme","setColorPaletteOverride","theme","setTheme","darkMode","setDarkMode","storedRaw","stored","e","themesSource","getColorPalette","selectedTheme","t","mode","isDarkMode","muiTheme","_a","bg","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/constants/darkModeOptions.tsx","../src/constants/defaultColorPalette.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/themeConfig.ts","../src/styles/typography.ts","../src/styles/GlobalStyles.tsx","../src/utils/colorUtils.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/isDarkMode.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts","../src/styles/keyframes.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./constants\";\nexport * from \"./context\";\nexport * from \"./styles\";\nexport * from \"./utils\";\nexport * from \"./models\";\n\n// Ensure MUI Typography variant augmentations are visible to consumers.\n// This import has no runtime cost and only affects type augmentation.\nimport \"./styles/typography-augmentations\";\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 */\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 -- Allow console output for error reporting\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Allow console output for error reporting\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>Something went wrong.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container aria-live=\"polite\" role=\"status\">\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 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 type { ColorPaletteType } from \"../models\";\n\nexport const defaultColorPalette: ColorPaletteType = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n // Generic tokens\n brand: \"#9FA9EA\",\n accent: \"#F3503A\",\n muted: \"#64748B\",\n // MUI-like defaults\n success: \"#2E7D32\",\n info: \"#0288D1\",\n warning: \"#ED6C02\",\n error: \"#D32F2F\",\n neutral: \"#64748B\",\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","import { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport {\n createCustomTheme,\n GlobalStyles,\n setColorPaletteOverride,\n getColorPalette,\n} from \"../styles\";\nimport { isDarkMode, useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { ColorPaletteType } from \"../models\";\nimport type { FC, PropsWithChildren } from \"react\";\n\ntype ThemeProviderWrapperProps = PropsWithChildren<{\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n /**\n * Optional dynamic list of themes.\n * Takes precedence over static defaults when provided.\n */\n themes?: {\n name: string;\n primaryColor: string;\n secondaryColor?: string;\n background?: {\n light?: { default?: string; paper?: string };\n dark?: { default?: string; paper?: string };\n };\n }[];\n /** Optional color palette override (e.g., fontLight/fontDark/accent colors). */\n colorPaletteOverride?: Partial<ColorPaletteType>;\n}>;\n\nexport const ThemeProviderWrapper: FC<ThemeProviderWrapperProps> = ({\n children,\n fontFamily,\n themes: themesInput,\n colorPaletteOverride,\n}) => {\n const systemTheme = useSystemTheme();\n\n // Apply palette overrides when provided (no-op otherwise)\n useEffect(() => {\n setColorPaletteOverride(colorPaletteOverride);\n }, [colorPaletteOverride]);\n\n // SSR-safe initial settings\n const [theme, setTheme] = useState<string>(\"system\");\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(\"auto\");\n\n // Hydrate from localStorage on client\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n const storedRaw = globalThis.localStorage.getItem(\"appSettings\");\n if (storedRaw) {\n const stored = JSON.parse(storedRaw);\n if (stored.theme) setTheme(stored.theme);\n if (stored.darkMode) setDarkMode(stored.darkMode);\n }\n } catch {\n /* empty */\n }\n }, []);\n\n // Persist settings\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n globalThis.localStorage.setItem(\n \"appSettings\",\n JSON.stringify({ theme, darkMode }),\n );\n } catch {\n /* empty */\n }\n }, [theme, darkMode]);\n\n const themesSource = useMemo(() => {\n if (themesInput && themesInput.length > 0) {\n return themesInput;\n }\n // Fallback: single default theme based on palette brand\n const defaultPrimary = getColorPalette().brand;\n return [\n {\n name: \"Default\",\n primaryColor: defaultPrimary,\n },\n ];\n }, [themesInput]);\n\n const selectedTheme = useMemo(() => {\n if (theme === \"system\" || systemTheme === \"unknown\") {\n return themesSource[0];\n }\n return themesSource.find((t) => t.name === theme) || themesSource[0];\n }, [systemTheme, theme, themesSource]);\n\n const mode = useMemo(\n () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme],\n );\n\n const muiTheme = useMemo(() => {\n const bg = selectedTheme.background?.[mode];\n return createCustomTheme(\n selectedTheme.primaryColor,\n mode,\n selectedTheme.secondaryColor,\n bg,\n );\n }, [selectedTheme, mode]);\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 fontFamily={fontFamily} />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\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 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 },\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 \"&::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 { getColorPalette } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n mode: PaletteMode = \"light\",\n secondaryColor?: string,\n background?: { default?: string; paper?: string },\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 // Brand follows active theme primary\n brand: base.palette.augmentColor({ color: { main: primaryColor } }),\n neutral: base.palette.augmentColor({\n color: { main: getColorPalette().neutral },\n }),\n accent: base.palette.augmentColor({\n color: { main: getColorPalette().accent },\n }),\n muted: base.palette.augmentColor({\n color: { main: getColorPalette().muted },\n }),\n ...(secondaryColor\n ? { secondary: { ...base.palette.secondary, main: secondaryColor } }\n : {}),\n error: { ...base.palette.error, main: getColorPalette().error },\n warning: { ...base.palette.warning, main: getColorPalette().warning },\n success: { ...base.palette.success, main: getColorPalette().success },\n info: { ...base.palette.info, main: getColorPalette().info },\n\n background: (() => {\n const baseBg = isDark\n ? { default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { default: \"#F2F2F7\", paper: \"#FFFFFF\" };\n return { ...base.palette.background, ...baseBg, ...background };\n })(),\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: {\n ...typographyVariants,\n // Let application control font via CSS variable; default to Mulish stack\n fontFamily:\n 'var(--app-font-family, \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial, sans-serif)',\n } as any,\n shape: { borderRadius: 24 },\n });\n};\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\n// No static theme list export — themes are provided dynamically via ThemeProviderWrapper.\n","import { defaultColorPalette } from \"../constants\";\n\nimport type { ColorPaletteType } from \"../models\";\n\nlet currentColorPalette: ColorPaletteType = { ...defaultColorPalette };\n\n/** Returns the active color palette, allowing app-level overrides. */\nexport const getColorPalette = (): ColorPaletteType => currentColorPalette;\n\n/**\n * Overrides the active color palette with app-provided values.\n * Pass `undefined` or empty to reset to defaults.\n */\nexport const setColorPaletteOverride = (\n override?: Partial<ColorPaletteType>,\n): void => {\n currentColorPalette = { ...defaultColorPalette, ...override };\n};\n\n/** Backward-compatible live view of the active palette. */\nexport const ColorPalette: Readonly<ColorPaletteType> = {\n get fontDark() {\n return currentColorPalette.fontDark;\n },\n get fontLight() {\n return currentColorPalette.fontLight;\n },\n get brand() {\n return currentColorPalette.brand;\n },\n get accent() {\n return currentColorPalette.accent;\n },\n get muted() {\n return currentColorPalette.muted;\n },\n get success() {\n return currentColorPalette.success;\n },\n get info() {\n return currentColorPalette.info;\n },\n get warning() {\n return currentColorPalette.warning;\n },\n get error() {\n return currentColorPalette.error;\n },\n get neutral() {\n return currentColorPalette.neutral;\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 // HEADER SEMIBOLD\n header_2xl_semibold: \"h1\",\n header_xl_semibold: \"h2\",\n header_lg_semibold: \"h3\",\n header_md_semibold: \"h4\",\n header_sm_semibold: \"h5\",\n header_xs_semibold: \"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 34px/42px inherit inherit\" },\n header_xl_regular: { font: \"400 32px/40px inherit inherit\" },\n header_lg_regular: { font: \"400 28px/36px inherit inherit\" },\n header_md_regular: { font: \"400 24px/32px inherit inherit\" },\n header_sm_regular: { font: \"400 20px/28px inherit inherit\" },\n header_xs_regular: { font: \"400 18px/26px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 34px/42px inherit inherit\" },\n header_xl_bold: { font: \"700 32px/40px inherit inherit\" },\n header_lg_bold: { font: \"700 28px/36px inherit inherit\" },\n header_md_bold: { font: \"700 24px/32px inherit inherit\" },\n header_sm_bold: { font: \"700 20px/28px inherit inherit\" },\n header_xs_bold: { font: \"700 18px/26px inherit inherit\" },\n\n // HEADER SEMIBOLD\n header_2xl_semibold: { font: \"600 34px/42px inherit inherit\" },\n header_xl_semibold: { font: \"600 32px/40px inherit inherit\" },\n header_lg_semibold: { font: \"600 28px/36px inherit inherit\" },\n header_md_semibold: { font: \"600 24px/32px inherit inherit\" },\n header_sm_semibold: { font: \"600 20px/28px inherit inherit\" },\n header_xs_semibold: { font: \"600 18px/26px inherit inherit\" },\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"../utils\";\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 */\ninterface GlobalStylesProps {\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n}\n\nexport const GlobalStyles: FC<GlobalStylesProps> = ({ fontFamily }) => {\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 /* Allow application to control font via CSS var or prop */\n :root {\n ${fontFamily ? `--app-font-family: ${fontFamily};` : \"\"}\n }\n * {\n font-family:\n var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial\n ),\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 /* default fallback font; apps can override via --app-font-family */\n font-family: var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif\n )\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 }\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 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 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 /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n `}\n />\n );\n};\n","import { getColorPalette } from \"../styles/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 getColorPalette().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 const palette = getColorPalette();\n return brightness > 128 ? palette.fontDark : palette.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) === getColorPalette().fontLight;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentHour = new Date().getHours();\n if (currentHour >= 5 && currentHour < 12) return \"Good morning\";\n if (currentHour > 12 && currentHour < 18) return \"Good afternoon\";\n return \"Good evening\";\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\n/**\n * Detects the user's operating system based on the user agent string.\n * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getBrowser = (): Browser => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: resolves to Unknown values on server.\n */\nexport const systemInfo = {\n os:\n typeof navigator === \"undefined\"\n ? (\"Unknown\" as OperatingSystem)\n : getOperatingSystem(),\n browser:\n typeof navigator === \"undefined\" ? (\"Unknown\" as Browser) : getBrowser(),\n};\n","import type { AppSettings, SystemTheme } from \"../models\";\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","/**\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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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(locale, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(locale, {\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","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"],"mappings":"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","names":["index_exports","__export","ColorPalette","DialogBtn","ErrorBoundary","GlobalStyles","Loading","PathName","ThemeProviderWrapper","commonComponentProps","createCustomTheme","darkModeOptions","defaultColorPalette","displayGreeting","fadeIn","fadeInLeft","getColorPalette","getDayIdentifier","getFontColor","installAppAnimation","isDarkMode","isFontLight","isHexColor","logoutAnimation","progressPulse","pulseAnimation","scale","setColorPaletteOverride","slideIn","slideInBottom","systemInfo","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_BrightnessAutoRounded","import_DarkModeRounded","import_LightModeRounded","import_PersonalVideoRounded","import_jsx_runtime","OPTION_ICON_SIZE","darkModeOptions","BrightnessAutoRoundedIcon","PersonalVideoRoundedIcon","LightModeRoundedIcon","DarkModeRoundedIcon","defaultColorPalette","import_react","ThemeContext","useThemeSettings","context","import_react","import_styles","commonComponentProps","theme","import_material","currentColorPalette","defaultColorPalette","getColorPalette","setColorPaletteOverride","override","ColorPalette","muiTypography","typographyVariants","createCustomTheme","primaryColor","mode","secondaryColor","background","isDark","base","getColorPalette","baseBg","commonComponentProps","muiTypography","typographyVariants","import_react","import_styles","isHexColor","value","getFontColor","backgroundColor","getColorPalette","hex","fullHex","r","g","b","brightness","palette","isFontLight","color","displayGreeting","currentHour","getDayIdentifier","date","year","month","day","getOperatingSystem","ua","getBrowser","systemInfo","isDarkMode","darkMode","systemTheme","timeAgo","date","lang","locale","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","GlobalStyles","fontFamily","theme","isDarkMode","primaryColor","backgroundDefault","primaryFontColor","getFontColor","import_react","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","import_jsx_runtime","ThemeProviderWrapper","children","fontFamily","themesInput","colorPaletteOverride","systemTheme","useSystemTheme","setColorPaletteOverride","theme","setTheme","darkMode","setDarkMode","storedRaw","stored","e","themesSource","getColorPalette","selectedTheme","t","mode","isDarkMode","muiTheme","_a","bg","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider","GlobalStyles"]}
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)`
1
+ import H from"@emotion/styled";import{Button as Y}from"@mui/material";var X=H(Y)`
2
2
  padding: 10px 16px;
3
3
  border-radius: 16px;
4
4
  font-size: 16px;
5
5
  margin: 8px;
6
- `;import J from"react";import L from"@emotion/styled";import B from"@mui/icons-material/ErrorOutlineRounded";import{Box as b}from"@mui/material";import{jsx as _,jsxs as g}from"react/jsx-runtime";var T=class extends J.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("Error:",t),console.error("Error Info:",n)}render(){var i,o,r;let{state:t,props:n}=this;return t.hasError?g(Q,{children:[_(j,{children:_(b,{children:"Something went wrong.\xA0"})}),g("h3",{children:[g(b,{style:{color:"#ff3131",display:"inline-block"},children:[_(B,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",g(b,{translate:"no",children:["[",(i=t.error)==null?void 0:i.name,"] ",(o=t.error)==null?void 0:o.message]}),g(b,{style:{color:"#ff3131",display:"inline-block"},children:[_(B,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",g(b,{translate:"no",children:["[",(r=t.error)==null?void 0:r.stack,"]"]})]})]}):n.children}},Q=L.div`
6
+ `;import J from"react";import L from"@emotion/styled";import B from"@mui/icons-material/ErrorOutlineRounded";import{Box as y}from"@mui/material";import{jsx as _,jsxs as g}from"react/jsx-runtime";var w=class extends J.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,i){console.error("Error:",t),console.error("Error Info:",i)}render(){var n,o,r;let{state:t,props:i}=this;return t.hasError?g(Q,{children:[_(j,{children:_(y,{children:"Something went wrong.\xA0"})}),g("h3",{children:[g(y,{style:{color:"#ff3131",display:"inline-block"},children:[_(B,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",g(y,{translate:"no",children:["[",(n=t.error)==null?void 0:n.name,"] ",(o=t.error)==null?void 0:o.message]}),g(y,{style:{color:"#ff3131",display:"inline-block"},children:[_(B,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",g(y,{translate:"no",children:["[",(r=t.error)==null?void 0:r.stack,"]"]})]})]}):i.children}},Q=L.div`
7
7
  margin: 0 8vw;
8
8
  @media (max-width: 768px) {
9
9
  margin: 0;
@@ -24,7 +24,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
24
24
  margin-top: 0;
25
25
  margin-bottom: 0;
26
26
  }
27
- `;import{useEffect as Z,useState as q}from"react";import K from"@emotion/styled";import{Box as ee,CircularProgress as te}from"@mui/material";import{Fragment as ne,jsx as S,jsxs as ie}from"react/jsx-runtime";var re=()=>{let[e,t]=q(!1);return Z(()=>{let n=setTimeout(()=>{t(!0)},100);return()=>clearTimeout(n)},[]),S(oe,{"aria-live":"polite",role:"status",children:e&&ie(ne,{children:[S(te,{"aria-label":"loading",size:80,thickness:4}),S("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},oe=K(ee)`
27
+ `;import{useEffect as Z,useState as q}from"react";import K from"@emotion/styled";import{Box as ee,CircularProgress as te}from"@mui/material";import{Fragment as ie,jsx as S,jsxs as ne}from"react/jsx-runtime";var re=()=>{let[e,t]=q(!1);return Z(()=>{let i=setTimeout(()=>{t(!0)},100);return()=>clearTimeout(i)},[]),S(oe,{"aria-live":"polite",role:"status",children:e&&ne(ie,{children:[S(te,{"aria-label":"loading",size:80,thickness:4}),S("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},oe=K(ee)`
28
28
  position: absolute;
29
29
  top: 50%;
30
30
  left: 50%;
@@ -40,7 +40,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
40
40
  color: white;
41
41
  padding: 4px 6px;
42
42
  border-radius: 8px;
43
- `;import le from"@mui/icons-material/BrightnessAutoRounded";import pe from"@mui/icons-material/DarkModeRounded";import de from"@mui/icons-material/LightModeRounded";import me from"@mui/icons-material/PersonalVideoRounded";import{jsx as k}from"react/jsx-runtime";var v=32,ue=[{label:"Auto",value:"auto",icon:k(le,{color:"inherit",sx:{fontSize:v}})},{label:"System",value:"system",icon:k(me,{color:"inherit",sx:{fontSize:v}})},{label:"Light",value:"light",icon:k(de,{color:"inherit",sx:{fontSize:v}})},{label:"Dark",value:"dark",icon:k(pe,{color:"inherit",sx:{fontSize:v}})}];var w={fontDark:"#101727",fontLight:"#f0f0f0",brand:"#9FA9EA",accent:"#F3503A",muted:"#64748B",success:"#2E7D32",info:"#0288D1",warning:"#ED6C02",error:"#D32F2F",neutral:"#64748B"};import{createContext as fe,useContext as ce}from"react";var P=fe(void 0),he=()=>{let e=ce(P);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as y,useState as N,useEffect as E}from"react";import{ThemeProvider as He}from"@emotion/react";import{ThemeProvider as Ye}from"@mui/material/styles";var M={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({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}}},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","&::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 W}from"@mui/material";var p={...w},s=()=>p,R=e=>{p={...w,...e}},xe={get fontDark(){return p.fontDark},get fontLight(){return p.fontLight},get brand(){return p.brand},get accent(){return p.accent},get muted(){return p.muted},get success(){return p.success},get info(){return p.info},get warning(){return p.warning},get error(){return p.error},get neutral(){return p.neutral}};var $={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",header_2xl_semibold:"h1",header_xl_semibold:"h2",header_lg_semibold:"h3",header_md_semibold:"h4",header_sm_semibold:"h5",header_xs_semibold:"h6"}}},z={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 34px/42px inherit inherit"},header_xl_regular:{font:"400 32px/40px inherit inherit"},header_lg_regular:{font:"400 28px/36px inherit inherit"},header_md_regular:{font:"400 24px/32px inherit inherit"},header_sm_regular:{font:"400 20px/28px inherit inherit"},header_xs_regular:{font:"400 18px/26px inherit inherit"},header_2xl_bold:{font:"700 34px/42px inherit inherit"},header_xl_bold:{font:"700 32px/40px inherit inherit"},header_lg_bold:{font:"700 28px/36px inherit inherit"},header_md_bold:{font:"700 24px/32px inherit inherit"},header_sm_bold:{font:"700 20px/28px inherit inherit"},header_xs_bold:{font:"700 18px/26px inherit inherit"},header_2xl_semibold:{font:"600 34px/42px inherit inherit"},header_xl_semibold:{font:"600 32px/40px inherit inherit"},header_lg_semibold:{font:"600 28px/36px inherit inherit"},header_md_semibold:{font:"600 24px/32px inherit inherit"},header_sm_semibold:{font:"600 20px/28px inherit inherit"},header_xs_semibold:{font:"600 18px/26px inherit inherit"}};var D=(e,t="light",n,i)=>{let o=t==="dark",r=W({palette:{mode:t}});return W(r,{palette:{primary:{...r.palette.primary,main:e},brand:r.palette.augmentColor({color:{main:e}}),neutral:r.palette.augmentColor({color:{main:s().neutral}}),accent:r.palette.augmentColor({color:{main:s().accent}}),muted:r.palette.augmentColor({color:{main:s().muted}}),...n?{secondary:{...r.palette.secondary,main:n}}:{},error:{...r.palette.error,main:s().error},warning:{...r.palette.warning,main:s().warning},success:{...r.palette.success,main:s().success},info:{...r.palette.info,main:s().info},background:(()=>{let l=o?{default:"#1C1C1E",paper:"#2C2C2E"}:{default:"#F2F2F7",paper:"#FFFFFF"};return{...r.palette.background,...l,...i}})(),divider:o?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.12)"},components:{...M,MuiTypography:$},typography:{...z,fontFamily:'var(--app-font-family, "Mulish", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif)'},shape:{borderRadius:24}})};import{useMemo as De}from"react";import{Global as Fe,css as Ie}from"@emotion/react";import{useTheme as Oe}from"@mui/material/styles";var G=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),C=e=>{if(!G(e))return console.error("Invalid hex color provided:",e),s().fontDark;let t=e.slice(1),n=t.length===3?t.split("").map(d=>d+d).join(""):t,i=Number.parseInt(n.slice(0,2),16),o=Number.parseInt(n.slice(2,4),16),r=Number.parseInt(n.slice(4,6),16),l=Math.round((i*299+o*587+r*114)/1e3),a=s();return l>128?a.fontDark:a.fontLight},ge=e=>C(e)===s().fontLight;var be=()=>{let e=new Date().getHours();return e>=5&&e<12?"Good morning":e>12&&e<18?"Good afternoon":"Good evening"};var ye=e=>{let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${i}`};var _e=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).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"},ve=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},ke={os:typeof navigator=="undefined"?"Unknown":_e(),browser:typeof navigator=="undefined"?"Unknown":ve()};var F=(e,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return t==="dark";default:return!1}};var we=(e,t)=>{let n=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,i=new Date;e=new Date(e);let o=Math.floor((i.getTime()-e.getTime())/1e3),r=new Intl.RelativeTimeFormat(n,{numeric:"auto"});if(o<60)return r.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return r.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return r.format(-a,"hour")}let l=Math.floor(o/86400);return r.format(-l,"day")},Ce=(e,t)=>{let n=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,i=new Date;e=new Date(e);let o=(e.getTime()-i.getTime())/1e3,r=Math.floor(o/(60*60)),l=Math.floor((o-60*60*r)/60),a=Math.floor(o-60*60*r-60*l),d=new Intl.RelativeTimeFormat(n,{numeric:"auto"});if(l===0&&a<60)return d.format(a,"second");if(r===0&&l<60)return d.format(l,"minute");if(r<24){let x=`${new Intl.RelativeTimeFormat(n,{numeric:"auto"}).format(r,"hour")}`,f=` ${new Intl.RelativeTimeFormat(n,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(l,"minute")}`.replace(/^\D+/,"");return`${x} ${f}`}let h=Math.floor(a/86400);return d.format(h,"day")};import{useEffect as Te,useState as Se}from"react";var Pe=(e=768)=>{let[t,n]=Se(!1);return Te(()=>{let i=()=>{n(window.innerWidth<e)};i();let o=()=>i();return window.addEventListener("resize",o),()=>{window.removeEventListener("resize",o)}},[e]),t};import{useState as Me,useEffect as Re}from"react";var I=()=>{let[e,t]=Me("unknown");return Re(()=>{let n=o=>{t(o.matches?"dark":"light")},i=globalThis.matchMedia("(prefers-color-scheme: dark)");return t(i.matches?"dark":"light"),i.addEventListener("change",n),()=>{i.removeEventListener("change",n)}},[]),e};import{jsx as Ee}from"react/jsx-runtime";var O=({fontFamily:e})=>{let t=Oe(),n=t.palette.mode==="dark",i=t.palette.primary.main,o=t.palette.background.default,r=De(()=>C(i),[i]);return Ee(Fe,{styles:Ie`
43
+ `;import le from"@mui/icons-material/BrightnessAutoRounded";import pe from"@mui/icons-material/DarkModeRounded";import de from"@mui/icons-material/LightModeRounded";import me from"@mui/icons-material/PersonalVideoRounded";import{jsx as k}from"react/jsx-runtime";var v=32,ue=[{label:"Auto",value:"auto",icon:k(le,{color:"inherit",sx:{fontSize:v}})},{label:"System",value:"system",icon:k(me,{color:"inherit",sx:{fontSize:v}})},{label:"Light",value:"light",icon:k(de,{color:"inherit",sx:{fontSize:v}})},{label:"Dark",value:"dark",icon:k(pe,{color:"inherit",sx:{fontSize:v}})}];var T={fontDark:"#101727",fontLight:"#f0f0f0",brand:"#9FA9EA",accent:"#F3503A",muted:"#64748B",success:"#2E7D32",info:"#0288D1",warning:"#ED6C02",error:"#D32F2F",neutral:"#64748B"};import{createContext as fe,useContext as ce}from"react";var P=fe(void 0),he=()=>{let e=ce(P);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as b,useState as G,useEffect as E}from"react";import{ThemeProvider as Ue}from"@emotion/react";import{ThemeProvider as He}from"@mui/material/styles";var M={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({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}}},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","&::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 W}from"@mui/material";var p={...T},s=()=>p,R=e=>{p={...T,...e}},xe={get fontDark(){return p.fontDark},get fontLight(){return p.fontLight},get brand(){return p.brand},get accent(){return p.accent},get muted(){return p.muted},get success(){return p.success},get info(){return p.info},get warning(){return p.warning},get error(){return p.error},get neutral(){return p.neutral}};var $={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",header_2xl_semibold:"h1",header_xl_semibold:"h2",header_lg_semibold:"h3",header_md_semibold:"h4",header_sm_semibold:"h5",header_xs_semibold:"h6"}}},z={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 34px/42px inherit inherit"},header_xl_regular:{font:"400 32px/40px inherit inherit"},header_lg_regular:{font:"400 28px/36px inherit inherit"},header_md_regular:{font:"400 24px/32px inherit inherit"},header_sm_regular:{font:"400 20px/28px inherit inherit"},header_xs_regular:{font:"400 18px/26px inherit inherit"},header_2xl_bold:{font:"700 34px/42px inherit inherit"},header_xl_bold:{font:"700 32px/40px inherit inherit"},header_lg_bold:{font:"700 28px/36px inherit inherit"},header_md_bold:{font:"700 24px/32px inherit inherit"},header_sm_bold:{font:"700 20px/28px inherit inherit"},header_xs_bold:{font:"700 18px/26px inherit inherit"},header_2xl_semibold:{font:"600 34px/42px inherit inherit"},header_xl_semibold:{font:"600 32px/40px inherit inherit"},header_lg_semibold:{font:"600 28px/36px inherit inherit"},header_md_semibold:{font:"600 24px/32px inherit inherit"},header_sm_semibold:{font:"600 20px/28px inherit inherit"},header_xs_semibold:{font:"600 18px/26px inherit inherit"}};var O=(e,t="light",i,n)=>{let o=t==="dark",r=W({palette:{mode:t}});return W(r,{palette:{primary:{...r.palette.primary,main:e},brand:r.palette.augmentColor({color:{main:e}}),neutral:r.palette.augmentColor({color:{main:s().neutral}}),accent:r.palette.augmentColor({color:{main:s().accent}}),muted:r.palette.augmentColor({color:{main:s().muted}}),...i?{secondary:{...r.palette.secondary,main:i}}:{},error:{...r.palette.error,main:s().error},warning:{...r.palette.warning,main:s().warning},success:{...r.palette.success,main:s().success},info:{...r.palette.info,main:s().info},background:(()=>{let l=o?{default:"#1C1C1E",paper:"#2C2C2E"}:{default:"#F2F2F7",paper:"#FFFFFF"};return{...r.palette.background,...l,...n}})(),divider:o?"rgba(255,255,255,0.12)":"rgba(0,0,0,0.12)"},components:{...M,MuiTypography:$},typography:{...z,fontFamily:'var(--app-font-family, "Mulish", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif)'},shape:{borderRadius:24}})};import{useMemo as Oe}from"react";import{Global as De,css as Fe}from"@emotion/react";import{useTheme as Ie}from"@mui/material/styles";var V=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),C=e=>{if(!V(e))return console.error("Invalid hex color provided:",e),s().fontDark;let t=e.slice(1),i=t.length===3?t.split("").map(d=>d+d).join(""):t,n=Number.parseInt(i.slice(0,2),16),o=Number.parseInt(i.slice(2,4),16),r=Number.parseInt(i.slice(4,6),16),l=Math.round((n*299+o*587+r*114)/1e3),a=s();return l>128?a.fontDark:a.fontLight},ge=e=>C(e)===s().fontLight;var ye=()=>{let e=new Date().getHours();return e>=5&&e<12?"Good morning":e>12&&e<18?"Good afternoon":"Good evening"};var be=e=>{let t=e.getFullYear(),i=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${t}-${i}-${n}`};var _e=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).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"},ve=()=>{let e=(typeof navigator=="undefined"?"":navigator.userAgent).toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},ke={os:typeof navigator=="undefined"?"Unknown":_e(),browser:typeof navigator=="undefined"?"Unknown":ve()};var D=(e,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return t==="dark";default:return!1}};var Te=(e,t)=>{let i=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,n=new Date;e=new Date(e);let o=Math.floor((n.getTime()-e.getTime())/1e3),r=new Intl.RelativeTimeFormat(i,{numeric:"auto"});if(o<60)return r.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return r.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return r.format(-a,"hour")}let l=Math.floor(o/86400);return r.format(-l,"day")},Ce=(e,t)=>{let i=t!=null?t:typeof navigator=="undefined"?"en-US":navigator.language,n=new Date;e=new Date(e);let o=(e.getTime()-n.getTime())/1e3,r=Math.floor(o/(60*60)),l=Math.floor((o-60*60*r)/60),a=Math.floor(o-60*60*r-60*l),d=new Intl.RelativeTimeFormat(i,{numeric:"auto"});if(l===0&&a<60)return d.format(a,"second");if(r===0&&l<60)return d.format(l,"minute");if(r<24){let x=`${new Intl.RelativeTimeFormat(i,{numeric:"auto"}).format(r,"hour")}`,f=` ${new Intl.RelativeTimeFormat(i,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(l,"minute")}`.replace(/^\D+/,"");return`${x} ${f}`}let h=Math.floor(a/86400);return d.format(h,"day")};import{useEffect as we,useState as Se}from"react";var Pe=(e=768)=>{let[t,i]=Se(!1);return we(()=>{let n=()=>{i(window.innerWidth<e)};n();let o=()=>n();return window.addEventListener("resize",o),()=>{window.removeEventListener("resize",o)}},[e]),t};import{useState as Me,useEffect as Re}from"react";var F=()=>{let[e,t]=Me("unknown");return Re(()=>{let i=o=>{t(o.matches?"dark":"light")},n=globalThis.matchMedia("(prefers-color-scheme: dark)");return t(n.matches?"dark":"light"),n.addEventListener("change",i),()=>{n.removeEventListener("change",i)}},[]),e};import{jsx as Ee}from"react/jsx-runtime";var I=({fontFamily:e})=>{let t=Ie(),i=t.palette.mode==="dark",n=t.palette.primary.main,o=t.palette.background.default,r=Oe(()=>C(n),[n]);return Ee(De,{styles:Fe`
44
44
  /* Allow application to control font via CSS var or prop */
45
45
  :root {
46
46
  ${e?`--app-font-family: ${e};`:""}
@@ -59,7 +59,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
59
59
  sans-serif !important;
60
60
  -webkit-tap-highlight-color: transparent;
61
61
  &::selection {
62
- background-color: ${`${i}e1`};
62
+ background-color: ${`${n}e1`};
63
63
  color: ${r};
64
64
  }
65
65
  }
@@ -87,7 +87,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
87
87
  sans-serif;
88
88
  line-height: 1.5;
89
89
  font-weight: 400;
90
- color-scheme: ${n?"dark":"light"};
90
+ color-scheme: ${i?"dark":"light"};
91
91
  font-synthesis: none;
92
92
  text-rendering: optimizeLegibility;
93
93
  -webkit-font-smoothing: antialiased;
@@ -110,11 +110,11 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
110
110
  background-color: ${o};
111
111
  }
112
112
  ::-webkit-scrollbar-thumb {
113
- background-color: ${i};
113
+ background-color: ${n};
114
114
  border-radius: 64px;
115
115
  }
116
116
  ::-webkit-scrollbar-thumb:hover {
117
- background-color: ${`${i}d8`};
117
+ background-color: ${`${n}d8`};
118
118
  }
119
119
  ::-webkit-scrollbar-track {
120
120
  border-radius: 64px;
@@ -154,11 +154,11 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
154
154
  background-color: ${o};
155
155
  }
156
156
  ::-webkit-scrollbar-thumb {
157
- background-color: ${i};
157
+ background-color: ${n};
158
158
  border-radius: 64px;
159
159
  }
160
160
  ::-webkit-scrollbar-thumb:hover {
161
- background-color: ${`${i}d8`};
161
+ background-color: ${`${n}d8`};
162
162
  }
163
163
  ::-webkit-scrollbar-track {
164
164
  border-radius: 64px;
@@ -221,7 +221,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
221
221
  transform: scale(0.95);
222
222
  box-shadow: 0 0 0 0 ${e}00;
223
223
  }
224
- `,Ge=e=>u`
224
+ `,Ve=e=>u`
225
225
  0% {
226
226
  filter: none;
227
227
  }
@@ -231,7 +231,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
231
231
  100% {
232
232
  filter: none;
233
233
  }
234
- `,Ne=u`
234
+ `,Ge=u`
235
235
  0% {
236
236
  transform: scale(1);
237
237
  opacity: 1;
@@ -244,7 +244,7 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
244
244
  transform: scale(1);
245
245
  opacity: 1;
246
246
  }
247
- `,Ue=u`
247
+ `,Ne=u`
248
248
  0% {
249
249
  transform: translateY(0);
250
250
  }
@@ -260,5 +260,5 @@ import Y from"@emotion/styled";import{Button as V}from"@mui/material";var X=Y(V)
260
260
  100% {
261
261
  transform: translateY(0);
262
262
  }
263
- `;import{jsx as A,jsxs as Xe}from"react/jsx-runtime";var Ve=({children:e,fontFamily:t,themes:n,colorPaletteOverride:i})=>{let o=I();E(()=>{R(i)},[i]);let[r,l]=N("system"),[a,d]=N("auto");E(()=>{if(globalThis.window!==void 0)try{let m=globalThis.localStorage.getItem("appSettings");if(m){let c=JSON.parse(m);c.theme&&l(c.theme),c.darkMode&&d(c.darkMode)}}catch(m){}},[]),E(()=>{if(globalThis.window!==void 0)try{globalThis.localStorage.setItem("appSettings",JSON.stringify({theme:r,darkMode:a}))}catch(m){}},[r,a]);let h=y(()=>n&&n.length>0?n:[{name:"Default",primaryColor:s().brand}],[n,i]),x=y(()=>r==="system"||o==="unknown"?h[0]:h.find(m=>m.name===r)||h[0],[o,r,h]),f=y(()=>F(a,o)?"dark":"light",[a,o]),U=y(()=>{var c;let m=(c=x.background)==null?void 0:c[f];return D(x.primaryColor,f,x.secondaryColor,m)},[x,f]),H=y(()=>({darkMode:f==="dark"}),[f]);return A(P.Provider,{value:{theme:r,darkMode:a,setTheme:l,setDarkMode:d},children:A(Ye,{theme:U,children:Xe(He,{theme:H,children:[A(O,{fontFamily:t}),e]})})})};export{xe as ColorPalette,X as DialogBtn,T as ErrorBoundary,O as GlobalStyles,re as Loading,se as PathName,Ve as ThemeProviderWrapper,M as commonComponentProps,D as createCustomTheme,ue as darkModeOptions,w as defaultColorPalette,be as displayGreeting,Be as fadeIn,Ae as fadeInLeft,s as getColorPalette,ye as getDayIdentifier,C as getFontColor,Ue as installAppAnimation,F as isDarkMode,ge as isFontLight,G as isHexColor,Ne as logoutAnimation,Ge as progressPulse,We as pulseAnimation,ze as scale,R as setColorPaletteOverride,Le as slideIn,$e as slideInBottom,ke as systemInfo,we as timeAgo,Ce as timeAgoFromStart,Pe as useResponsiveDisplay,I as useSystemTheme,he as useThemeSettings};
263
+ `;import{jsx as A,jsxs as Xe}from"react/jsx-runtime";var Ye=({children:e,fontFamily:t,themes:i,colorPaletteOverride:n})=>{let o=F();E(()=>{R(n)},[n]);let[r,l]=G("system"),[a,d]=G("auto");E(()=>{if(globalThis.window!==void 0)try{let m=globalThis.localStorage.getItem("appSettings");if(m){let c=JSON.parse(m);c.theme&&l(c.theme),c.darkMode&&d(c.darkMode)}}catch(m){}},[]),E(()=>{if(globalThis.window!==void 0)try{globalThis.localStorage.setItem("appSettings",JSON.stringify({theme:r,darkMode:a}))}catch(m){}},[r,a]);let h=b(()=>i&&i.length>0?i:[{name:"Default",primaryColor:s().brand}],[i]),x=b(()=>r==="system"||o==="unknown"?h[0]:h.find(m=>m.name===r)||h[0],[o,r,h]),f=b(()=>D(a,o)?"dark":"light",[a,o]),N=b(()=>{var c;let m=(c=x.background)==null?void 0:c[f];return O(x.primaryColor,f,x.secondaryColor,m)},[x,f]),U=b(()=>({darkMode:f==="dark"}),[f]);return A(P.Provider,{value:{theme:r,darkMode:a,setTheme:l,setDarkMode:d},children:A(He,{theme:N,children:Xe(Ue,{theme:U,children:[A(I,{fontFamily:t}),e]})})})};export{xe as ColorPalette,X as DialogBtn,w as ErrorBoundary,I as GlobalStyles,re as Loading,se as PathName,Ye as ThemeProviderWrapper,M as commonComponentProps,O as createCustomTheme,ue as darkModeOptions,T as defaultColorPalette,ye as displayGreeting,Be as fadeIn,Ae as fadeInLeft,s as getColorPalette,be as getDayIdentifier,C as getFontColor,Ne as installAppAnimation,D as isDarkMode,ge as isFontLight,V as isHexColor,Ge as logoutAnimation,Ve as progressPulse,We as pulseAnimation,ze as scale,R as setColorPaletteOverride,Le as slideIn,$e as slideInBottom,ke as systemInfo,Te as timeAgo,Ce as timeAgoFromStart,Pe as useResponsiveDisplay,F as useSystemTheme,he as useThemeSettings};
264
264
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/constants/darkModeOptions.tsx","../src/constants/defaultColorPalette.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/themeConfig.ts","../src/styles/typography.ts","../src/styles/GlobalStyles.tsx","../src/utils/colorUtils.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/isDarkMode.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts","../src/styles/keyframes.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 */\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 -- Allow console output for error reporting\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Allow console output for error reporting\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>Something went wrong.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container aria-live=\"polite\" role=\"status\">\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 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 type { ColorPaletteType } from \"../models\";\n\nexport const defaultColorPalette: ColorPaletteType = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n // Generic tokens\n brand: \"#9FA9EA\",\n accent: \"#F3503A\",\n muted: \"#64748B\",\n // MUI-like defaults\n success: \"#2E7D32\",\n info: \"#0288D1\",\n warning: \"#ED6C02\",\n error: \"#D32F2F\",\n neutral: \"#64748B\",\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","import { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport {\n createCustomTheme,\n GlobalStyles,\n setColorPaletteOverride,\n getColorPalette,\n} from \"../styles\";\nimport { isDarkMode, useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { ColorPaletteType } from \"../models\";\nimport type { FC, PropsWithChildren } from \"react\";\n\ntype ThemeProviderWrapperProps = PropsWithChildren<{\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n /**\n * Optional dynamic list of themes.\n * Takes precedence over static defaults when provided.\n */\n themes?: {\n name: string;\n primaryColor: string;\n secondaryColor?: string;\n background?: {\n light?: { default?: string; paper?: string };\n dark?: { default?: string; paper?: string };\n };\n }[];\n /** Optional color palette override (e.g., fontLight/fontDark/accent colors). */\n colorPaletteOverride?: Partial<ColorPaletteType>;\n}>;\n\nexport const ThemeProviderWrapper: FC<ThemeProviderWrapperProps> = ({\n children,\n fontFamily,\n themes: themesInput,\n colorPaletteOverride,\n}) => {\n const systemTheme = useSystemTheme();\n\n // Apply palette overrides when provided (no-op otherwise)\n useEffect(() => {\n setColorPaletteOverride(colorPaletteOverride);\n }, [colorPaletteOverride]);\n\n // SSR-safe initial settings\n const [theme, setTheme] = useState<string>(\"system\");\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(\"auto\");\n\n // Hydrate from localStorage on client\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n const storedRaw = globalThis.localStorage.getItem(\"appSettings\");\n if (storedRaw) {\n const stored = JSON.parse(storedRaw);\n if (stored.theme) setTheme(stored.theme);\n if (stored.darkMode) setDarkMode(stored.darkMode);\n }\n } catch {\n /* empty */\n }\n }, []);\n\n // Persist settings\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n globalThis.localStorage.setItem(\n \"appSettings\",\n JSON.stringify({ theme, darkMode }),\n );\n } catch {\n /* empty */\n }\n }, [theme, darkMode]);\n\n const themesSource = useMemo(() => {\n if (themesInput && themesInput.length > 0) {\n return themesInput;\n }\n // Fallback: single default theme based on palette brand\n const defaultPrimary = getColorPalette().brand;\n return [\n {\n name: \"Default\",\n primaryColor: defaultPrimary,\n },\n ];\n }, [themesInput, colorPaletteOverride]);\n\n const selectedTheme = useMemo(() => {\n if (theme === \"system\" || systemTheme === \"unknown\") {\n return themesSource[0];\n }\n return themesSource.find((t) => t.name === theme) || themesSource[0];\n }, [systemTheme, theme, themesSource]);\n\n const mode = useMemo(\n () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme],\n );\n\n const muiTheme = useMemo(() => {\n const bg = selectedTheme.background?.[mode];\n return createCustomTheme(\n selectedTheme.primaryColor,\n mode,\n selectedTheme.secondaryColor,\n bg,\n );\n }, [selectedTheme, mode]);\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 fontFamily={fontFamily} />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\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 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 },\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 \"&::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 { getColorPalette } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n mode: PaletteMode = \"light\",\n secondaryColor?: string,\n background?: { default?: string; paper?: string },\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 // Brand follows active theme primary\n brand: base.palette.augmentColor({ color: { main: primaryColor } }),\n neutral: base.palette.augmentColor({\n color: { main: getColorPalette().neutral },\n }),\n accent: base.palette.augmentColor({\n color: { main: getColorPalette().accent },\n }),\n muted: base.palette.augmentColor({\n color: { main: getColorPalette().muted },\n }),\n ...(secondaryColor\n ? { secondary: { ...base.palette.secondary, main: secondaryColor } }\n : {}),\n error: { ...base.palette.error, main: getColorPalette().error },\n warning: { ...base.palette.warning, main: getColorPalette().warning },\n success: { ...base.palette.success, main: getColorPalette().success },\n info: { ...base.palette.info, main: getColorPalette().info },\n\n background: (() => {\n const baseBg = isDark\n ? { default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { default: \"#F2F2F7\", paper: \"#FFFFFF\" };\n return { ...base.palette.background, ...baseBg, ...background };\n })(),\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: {\n ...typographyVariants,\n // Let application control font via CSS variable; default to Mulish stack\n fontFamily:\n 'var(--app-font-family, \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial, sans-serif)',\n } as any,\n shape: { borderRadius: 24 },\n });\n};\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\n// No static theme list export — themes are provided dynamically via ThemeProviderWrapper.\n","import { defaultColorPalette } from \"../constants\";\n\nimport type { ColorPaletteType } from \"../models\";\n\nlet currentColorPalette: ColorPaletteType = { ...defaultColorPalette };\n\n/** Returns the active color palette, allowing app-level overrides. */\nexport const getColorPalette = (): ColorPaletteType => currentColorPalette;\n\n/**\n * Overrides the active color palette with app-provided values.\n * Pass `undefined` or empty to reset to defaults.\n */\nexport const setColorPaletteOverride = (\n override?: Partial<ColorPaletteType>,\n): void => {\n currentColorPalette = { ...defaultColorPalette, ...override };\n};\n\n/** Backward-compatible live view of the active palette. */\nexport const ColorPalette: Readonly<ColorPaletteType> = {\n get fontDark() {\n return currentColorPalette.fontDark;\n },\n get fontLight() {\n return currentColorPalette.fontLight;\n },\n get brand() {\n return currentColorPalette.brand;\n },\n get accent() {\n return currentColorPalette.accent;\n },\n get muted() {\n return currentColorPalette.muted;\n },\n get success() {\n return currentColorPalette.success;\n },\n get info() {\n return currentColorPalette.info;\n },\n get warning() {\n return currentColorPalette.warning;\n },\n get error() {\n return currentColorPalette.error;\n },\n get neutral() {\n return currentColorPalette.neutral;\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 // HEADER SEMIBOLD\n header_2xl_semibold: \"h1\",\n header_xl_semibold: \"h2\",\n header_lg_semibold: \"h3\",\n header_md_semibold: \"h4\",\n header_sm_semibold: \"h5\",\n header_xs_semibold: \"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 34px/42px inherit inherit\" },\n header_xl_regular: { font: \"400 32px/40px inherit inherit\" },\n header_lg_regular: { font: \"400 28px/36px inherit inherit\" },\n header_md_regular: { font: \"400 24px/32px inherit inherit\" },\n header_sm_regular: { font: \"400 20px/28px inherit inherit\" },\n header_xs_regular: { font: \"400 18px/26px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 34px/42px inherit inherit\" },\n header_xl_bold: { font: \"700 32px/40px inherit inherit\" },\n header_lg_bold: { font: \"700 28px/36px inherit inherit\" },\n header_md_bold: { font: \"700 24px/32px inherit inherit\" },\n header_sm_bold: { font: \"700 20px/28px inherit inherit\" },\n header_xs_bold: { font: \"700 18px/26px inherit inherit\" },\n\n // HEADER SEMIBOLD\n header_2xl_semibold: { font: \"600 34px/42px inherit inherit\" },\n header_xl_semibold: { font: \"600 32px/40px inherit inherit\" },\n header_lg_semibold: { font: \"600 28px/36px inherit inherit\" },\n header_md_semibold: { font: \"600 24px/32px inherit inherit\" },\n header_sm_semibold: { font: \"600 20px/28px inherit inherit\" },\n header_xs_semibold: { font: \"600 18px/26px inherit inherit\" },\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"../utils\";\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 */\ninterface GlobalStylesProps {\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n}\n\nexport const GlobalStyles: FC<GlobalStylesProps> = ({ fontFamily }) => {\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 /* Allow application to control font via CSS var or prop */\n :root {\n ${fontFamily ? `--app-font-family: ${fontFamily};` : \"\"}\n }\n * {\n font-family:\n var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial\n ),\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 /* default fallback font; apps can override via --app-font-family */\n font-family: var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif\n )\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 }\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 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 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 /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n `}\n />\n );\n};\n","import { getColorPalette } from \"../styles/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 getColorPalette().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 const palette = getColorPalette();\n return brightness > 128 ? palette.fontDark : palette.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) === getColorPalette().fontLight;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentHour = new Date().getHours();\n if (currentHour >= 5 && currentHour < 12) return \"Good morning\";\n if (currentHour > 12 && currentHour < 18) return \"Good afternoon\";\n return \"Good evening\";\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\n/**\n * Detects the user's operating system based on the user agent string.\n * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getBrowser = (): Browser => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: resolves to Unknown values on server.\n */\nexport const systemInfo = {\n os:\n typeof navigator === \"undefined\"\n ? (\"Unknown\" as OperatingSystem)\n : getOperatingSystem(),\n browser:\n typeof navigator === \"undefined\" ? (\"Unknown\" as Browser) : getBrowser(),\n};\n","import type { AppSettings, SystemTheme } from \"../models\";\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","/**\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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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(locale, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(locale, {\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","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"],"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","BrightnessAutoRoundedIcon","DarkModeRoundedIcon","LightModeRoundedIcon","PersonalVideoRoundedIcon","jsx","OPTION_ICON_SIZE","darkModeOptions","defaultColorPalette","createContext","useContext","ThemeContext","useThemeSettings","context","useMemo","useState","useEffect","EmotionThemeProvider","MuiThemeProvider","commonComponentProps","theme","createTheme","currentColorPalette","defaultColorPalette","getColorPalette","setColorPaletteOverride","override","ColorPalette","muiTypography","typographyVariants","createCustomTheme","primaryColor","mode","secondaryColor","background","isDark","base","createTheme","getColorPalette","baseBg","commonComponentProps","muiTypography","typographyVariants","useMemo","Global","css","useTheme","isHexColor","value","getFontColor","backgroundColor","getColorPalette","hex","fullHex","c","r","g","b","brightness","palette","isFontLight","color","displayGreeting","currentHour","getDayIdentifier","date","year","month","day","getOperatingSystem","ua","getBrowser","systemInfo","isDarkMode","darkMode","systemTheme","timeAgo","date","lang","locale","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","GlobalStyles","fontFamily","theme","useTheme","isDarkMode","primaryColor","backgroundDefault","primaryFontColor","useMemo","getFontColor","Global","css","keyframes","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","jsx","jsxs","ThemeProviderWrapper","children","fontFamily","themesInput","colorPaletteOverride","systemTheme","useSystemTheme","useEffect","setColorPaletteOverride","theme","setTheme","useState","darkMode","setDarkMode","storedRaw","stored","e","themesSource","useMemo","getColorPalette","selectedTheme","t","mode","isDarkMode","muiTheme","_a","bg","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/constants/darkModeOptions.tsx","../src/constants/defaultColorPalette.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/themeConfig.ts","../src/styles/typography.ts","../src/styles/GlobalStyles.tsx","../src/utils/colorUtils.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/isDarkMode.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts","../src/styles/keyframes.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 */\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 -- Allow console output for error reporting\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Allow console output for error reporting\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>Something went wrong.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container aria-live=\"polite\" role=\"status\">\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 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 type { ColorPaletteType } from \"../models\";\n\nexport const defaultColorPalette: ColorPaletteType = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n // Generic tokens\n brand: \"#9FA9EA\",\n accent: \"#F3503A\",\n muted: \"#64748B\",\n // MUI-like defaults\n success: \"#2E7D32\",\n info: \"#0288D1\",\n warning: \"#ED6C02\",\n error: \"#D32F2F\",\n neutral: \"#64748B\",\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","import { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport {\n createCustomTheme,\n GlobalStyles,\n setColorPaletteOverride,\n getColorPalette,\n} from \"../styles\";\nimport { isDarkMode, useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { ColorPaletteType } from \"../models\";\nimport type { FC, PropsWithChildren } from \"react\";\n\ntype ThemeProviderWrapperProps = PropsWithChildren<{\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n /**\n * Optional dynamic list of themes.\n * Takes precedence over static defaults when provided.\n */\n themes?: {\n name: string;\n primaryColor: string;\n secondaryColor?: string;\n background?: {\n light?: { default?: string; paper?: string };\n dark?: { default?: string; paper?: string };\n };\n }[];\n /** Optional color palette override (e.g., fontLight/fontDark/accent colors). */\n colorPaletteOverride?: Partial<ColorPaletteType>;\n}>;\n\nexport const ThemeProviderWrapper: FC<ThemeProviderWrapperProps> = ({\n children,\n fontFamily,\n themes: themesInput,\n colorPaletteOverride,\n}) => {\n const systemTheme = useSystemTheme();\n\n // Apply palette overrides when provided (no-op otherwise)\n useEffect(() => {\n setColorPaletteOverride(colorPaletteOverride);\n }, [colorPaletteOverride]);\n\n // SSR-safe initial settings\n const [theme, setTheme] = useState<string>(\"system\");\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(\"auto\");\n\n // Hydrate from localStorage on client\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n const storedRaw = globalThis.localStorage.getItem(\"appSettings\");\n if (storedRaw) {\n const stored = JSON.parse(storedRaw);\n if (stored.theme) setTheme(stored.theme);\n if (stored.darkMode) setDarkMode(stored.darkMode);\n }\n } catch {\n /* empty */\n }\n }, []);\n\n // Persist settings\n useEffect(() => {\n if (globalThis.window === undefined) return;\n try {\n globalThis.localStorage.setItem(\n \"appSettings\",\n JSON.stringify({ theme, darkMode }),\n );\n } catch {\n /* empty */\n }\n }, [theme, darkMode]);\n\n const themesSource = useMemo(() => {\n if (themesInput && themesInput.length > 0) {\n return themesInput;\n }\n // Fallback: single default theme based on palette brand\n const defaultPrimary = getColorPalette().brand;\n return [\n {\n name: \"Default\",\n primaryColor: defaultPrimary,\n },\n ];\n }, [themesInput]);\n\n const selectedTheme = useMemo(() => {\n if (theme === \"system\" || systemTheme === \"unknown\") {\n return themesSource[0];\n }\n return themesSource.find((t) => t.name === theme) || themesSource[0];\n }, [systemTheme, theme, themesSource]);\n\n const mode = useMemo(\n () => (isDarkMode(darkMode, systemTheme) ? \"dark\" : \"light\"),\n [darkMode, systemTheme],\n );\n\n const muiTheme = useMemo(() => {\n const bg = selectedTheme.background?.[mode];\n return createCustomTheme(\n selectedTheme.primaryColor,\n mode,\n selectedTheme.secondaryColor,\n bg,\n );\n }, [selectedTheme, mode]);\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 fontFamily={fontFamily} />\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\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 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 },\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 \"&::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 { getColorPalette } from \"./themeConfig\";\nimport { muiTypography, typographyVariants } from \"./typography\";\n\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\nexport const createCustomTheme = (\n primaryColor: string,\n mode: PaletteMode = \"light\",\n secondaryColor?: string,\n background?: { default?: string; paper?: string },\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 // Brand follows active theme primary\n brand: base.palette.augmentColor({ color: { main: primaryColor } }),\n neutral: base.palette.augmentColor({\n color: { main: getColorPalette().neutral },\n }),\n accent: base.palette.augmentColor({\n color: { main: getColorPalette().accent },\n }),\n muted: base.palette.augmentColor({\n color: { main: getColorPalette().muted },\n }),\n ...(secondaryColor\n ? { secondary: { ...base.palette.secondary, main: secondaryColor } }\n : {}),\n error: { ...base.palette.error, main: getColorPalette().error },\n warning: { ...base.palette.warning, main: getColorPalette().warning },\n success: { ...base.palette.success, main: getColorPalette().success },\n info: { ...base.palette.info, main: getColorPalette().info },\n\n background: (() => {\n const baseBg = isDark\n ? { default: \"#1C1C1E\", paper: \"#2C2C2E\" }\n : { default: \"#F2F2F7\", paper: \"#FFFFFF\" };\n return { ...base.palette.background, ...baseBg, ...background };\n })(),\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: {\n ...typographyVariants,\n // Let application control font via CSS variable; default to Mulish stack\n fontFamily:\n 'var(--app-font-family, \"Mulish\", system-ui, -apple-system, \"Segoe UI\", Roboto, Arial, sans-serif)',\n } as any,\n shape: { borderRadius: 24 },\n });\n};\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\n// No static theme list export — themes are provided dynamically via ThemeProviderWrapper.\n","import { defaultColorPalette } from \"../constants\";\n\nimport type { ColorPaletteType } from \"../models\";\n\nlet currentColorPalette: ColorPaletteType = { ...defaultColorPalette };\n\n/** Returns the active color palette, allowing app-level overrides. */\nexport const getColorPalette = (): ColorPaletteType => currentColorPalette;\n\n/**\n * Overrides the active color palette with app-provided values.\n * Pass `undefined` or empty to reset to defaults.\n */\nexport const setColorPaletteOverride = (\n override?: Partial<ColorPaletteType>,\n): void => {\n currentColorPalette = { ...defaultColorPalette, ...override };\n};\n\n/** Backward-compatible live view of the active palette. */\nexport const ColorPalette: Readonly<ColorPaletteType> = {\n get fontDark() {\n return currentColorPalette.fontDark;\n },\n get fontLight() {\n return currentColorPalette.fontLight;\n },\n get brand() {\n return currentColorPalette.brand;\n },\n get accent() {\n return currentColorPalette.accent;\n },\n get muted() {\n return currentColorPalette.muted;\n },\n get success() {\n return currentColorPalette.success;\n },\n get info() {\n return currentColorPalette.info;\n },\n get warning() {\n return currentColorPalette.warning;\n },\n get error() {\n return currentColorPalette.error;\n },\n get neutral() {\n return currentColorPalette.neutral;\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 // HEADER SEMIBOLD\n header_2xl_semibold: \"h1\",\n header_xl_semibold: \"h2\",\n header_lg_semibold: \"h3\",\n header_md_semibold: \"h4\",\n header_sm_semibold: \"h5\",\n header_xs_semibold: \"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 34px/42px inherit inherit\" },\n header_xl_regular: { font: \"400 32px/40px inherit inherit\" },\n header_lg_regular: { font: \"400 28px/36px inherit inherit\" },\n header_md_regular: { font: \"400 24px/32px inherit inherit\" },\n header_sm_regular: { font: \"400 20px/28px inherit inherit\" },\n header_xs_regular: { font: \"400 18px/26px inherit inherit\" },\n\n header_2xl_bold: { font: \"700 34px/42px inherit inherit\" },\n header_xl_bold: { font: \"700 32px/40px inherit inherit\" },\n header_lg_bold: { font: \"700 28px/36px inherit inherit\" },\n header_md_bold: { font: \"700 24px/32px inherit inherit\" },\n header_sm_bold: { font: \"700 20px/28px inherit inherit\" },\n header_xs_bold: { font: \"700 18px/26px inherit inherit\" },\n\n // HEADER SEMIBOLD\n header_2xl_semibold: { font: \"600 34px/42px inherit inherit\" },\n header_xl_semibold: { font: \"600 32px/40px inherit inherit\" },\n header_lg_semibold: { font: \"600 28px/36px inherit inherit\" },\n header_md_semibold: { font: \"600 24px/32px inherit inherit\" },\n header_sm_semibold: { font: \"600 20px/28px inherit inherit\" },\n header_xs_semibold: { font: \"600 18px/26px inherit inherit\" },\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"../utils\";\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 */\ninterface GlobalStylesProps {\n /** Optional font stack to apply across the app. */\n fontFamily?: string;\n}\n\nexport const GlobalStyles: FC<GlobalStylesProps> = ({ fontFamily }) => {\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 /* Allow application to control font via CSS var or prop */\n :root {\n ${fontFamily ? `--app-font-family: ${fontFamily};` : \"\"}\n }\n * {\n font-family:\n var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial\n ),\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 /* default fallback font; apps can override via --app-font-family */\n font-family: var(\n --app-font-family,\n \"Mulish\",\n system-ui,\n -apple-system,\n \"Segoe UI\",\n Roboto,\n Arial,\n sans-serif\n )\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 }\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 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 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 /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n `}\n />\n );\n};\n","import { getColorPalette } from \"../styles/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 getColorPalette().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 const palette = getColorPalette();\n return brightness > 128 ? palette.fontDark : palette.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) === getColorPalette().fontLight;\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentHour = new Date().getHours();\n if (currentHour >= 5 && currentHour < 12) return \"Good morning\";\n if (currentHour > 12 && currentHour < 18) return \"Good afternoon\";\n return \"Good evening\";\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\n/**\n * Detects the user's operating system based on the user agent string.\n * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: falls back to \"Unknown\" on server.\n */\nexport const getBrowser = (): Browser => {\n const ua = (\n typeof navigator === \"undefined\" ? \"\" : navigator.userAgent\n ).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 * Safe for SSR: resolves to Unknown values on server.\n */\nexport const systemInfo = {\n os:\n typeof navigator === \"undefined\"\n ? (\"Unknown\" as OperatingSystem)\n : getOperatingSystem(),\n browser:\n typeof navigator === \"undefined\" ? (\"Unknown\" as Browser) : getBrowser(),\n};\n","import type { AppSettings, SystemTheme } from \"../models\";\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","/**\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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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 = (date: Date, lang?: string): string => {\n const locale =\n lang ?? (typeof navigator === \"undefined\" ? \"en-US\" : navigator.language);\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(locale, { 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(locale, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(locale, {\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","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"],"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","BrightnessAutoRoundedIcon","DarkModeRoundedIcon","LightModeRoundedIcon","PersonalVideoRoundedIcon","jsx","OPTION_ICON_SIZE","darkModeOptions","defaultColorPalette","createContext","useContext","ThemeContext","useThemeSettings","context","useMemo","useState","useEffect","EmotionThemeProvider","MuiThemeProvider","commonComponentProps","theme","createTheme","currentColorPalette","defaultColorPalette","getColorPalette","setColorPaletteOverride","override","ColorPalette","muiTypography","typographyVariants","createCustomTheme","primaryColor","mode","secondaryColor","background","isDark","base","createTheme","getColorPalette","baseBg","commonComponentProps","muiTypography","typographyVariants","useMemo","Global","css","useTheme","isHexColor","value","getFontColor","backgroundColor","getColorPalette","hex","fullHex","c","r","g","b","brightness","palette","isFontLight","color","displayGreeting","currentHour","getDayIdentifier","date","year","month","day","getOperatingSystem","ua","getBrowser","systemInfo","isDarkMode","darkMode","systemTheme","timeAgo","date","lang","locale","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","GlobalStyles","fontFamily","theme","useTheme","isDarkMode","primaryColor","backgroundDefault","primaryFontColor","useMemo","getFontColor","Global","css","keyframes","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","jsx","jsxs","ThemeProviderWrapper","children","fontFamily","themesInput","colorPaletteOverride","systemTheme","useSystemTheme","useEffect","setColorPaletteOverride","theme","setTheme","useState","darkMode","setDarkMode","storedRaw","stored","e","themesSource","useMemo","getColorPalette","selectedTheme","t","mode","isDarkMode","muiTheme","_a","bg","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.67",
3
+ "version": "1.0.68",
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",