@atomazing-org/design-system 1.0.13 → 1.0.15

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/README.MD CHANGED
@@ -3,204 +3,243 @@
3
3
  1. [Introduction](#1-introduction)
4
4
  2. [Installation](#2-installation)
5
5
  3. [Usage](#3-usage)
6
- 3.1 [Theme Provider Setup](#31-theme-provider-setup)
7
- 3.2 [Typography Variants](#32-typography-variants)
8
- 3.3 [Global Styles](#33-global-styles)
9
- 3.4 [Component Overrides](#34-component-overrides)
10
- 4. [Utilities](#4-utilities)
11
- 4.1 [Color Utilities](#41-color-utilities)
12
- 4.2 [System Info](#42-system-info)
13
- 5. [Animations](#5-animations)
14
- 6. [Theming](#6-theming)
15
- 6.1 [Theme Creation](#61-theme-creation)
16
- 6.2 [Dark Mode Strategy](#62-dark-mode-strategy)
17
- 7. [Typography Configuration](#7-typography-configuration)
18
- 8. [Contributing](#8-contributing)
19
- 9. [License](#9-license)
6
+ 3.1 [ThemeProvider Setup](#31-themeprovider-setup)
7
+ 3.2 [Switching Theme Mode (Light/Dark)](#34-switching-theme-mode-lightdark)
8
+ 3.3 [Custom Theme Colors](#35-custom-theme-colors)
9
+ 4. [Peer Dependencies & Requirements](#4-peer-dependencies--requirements)
10
+ 5. [Utilities](#5-utilities)
11
+ 5.1 [Color Utilities](#51-color-utilities)
12
+ 5.2 [System Info](#52-system-info)
20
13
 
21
14
  ## 1. Introduction
22
15
 
23
- **@atomazing-org/design-system** is a reusable, opinionated design system built on top of [Material UI (MUI)](https://mui.com/) and [Emotion](https://emotion.sh/).
24
- It offers a consistent foundation for building modern web interfaces with minimal configuration.
16
+ **@atomazing-org/design-system** is a flexible, modern, and themeable design system built on top of [Material UI (MUI)](https://mui.com/) and [Emotion](https://emotion.sh/).
25
17
 
26
- This package provides:
18
+ It provides a unified approach to building consistent, responsive, and accessible UIs across multiple frontend applications — with minimal setup and full customizability.
27
19
 
28
- - 🌈 Customizable MUI theme generator
29
- - ✍️ Extended typography variants
30
- - 🎨 Global styles (with dark/light mode support)
31
- - 🧩 Component style overrides
32
- - 🛠 Utility functions (e.g., color contrast, system info)
33
- - 🎞 Smooth keyframe animations
20
+ ### 🔧 What’s Included
34
21
 
35
- The design system is ideal for teams working across multiple front-end applications who want to unify styles, reduce duplication, and ship faster with consistent UI patterns.
22
+ - 🌈 **Custom MUI Theme Generator**
23
+ Create light/dark themes with primary/background colors in a single line.
24
+
25
+ - ✍️ **Extended Typography Variants**
26
+ Includes consistent, scalable font sizes and weights beyond MUI defaults.
27
+
28
+ - 🎨 **Global Styles**
29
+ Applies CSS resets, adaptive contrast, scrollbar styling, and system theming.
30
+
31
+ - 🧩 **Component Style Overrides**
32
+ Predefined visual rules for MUI components like buttons, dialogs, sliders, etc.
33
+
34
+ - 🛠 **Utility Functions**
35
+ Helpful tools like color contrast calculation, system info detection, and dark mode strategy.
36
+
37
+ - 🎞 **Predefined Animations**
38
+ Keyframes for transitions like fade, slide, pulse, and more.
39
+
40
+ ### 🚀 When to Use
41
+
42
+ Use this design system when:
43
+
44
+ - You’re building apps that require a **consistent design language**.
45
+ - You want to **save time on theming and component styling**.
46
+ - You work across multiple projects and need **reusable design tokens**.
47
+ - You want **dark mode support**, animations, and global styles out of the box.
48
+
49
+ This package is ideal for both small projects and large enterprise frontends looking to maintain style consistency and speed up delivery.
50
+
51
+ ---
36
52
 
37
53
  ## 2. Installation
38
54
 
39
- To install the design system in your project, use your preferred package manager:
55
+ To install `@atomazing-org/design-system`, use your preferred package manager:
40
56
 
41
57
  ```bash
42
- # Using npm
58
+ # npm
43
59
  npm install @atomazing-org/design-system
44
60
  ```
45
61
 
46
62
  ```bash
47
- # Using yarn
63
+ # yarn
48
64
  yarn add @atomazing-org/design-system
49
65
  ```
50
66
 
51
67
  ```bash
52
- # Using pnpm
68
+ # pnpm
53
69
  pnpm add @atomazing-org/design-system
54
70
  ```
55
71
 
72
+ > **Note:** This package includes only the core functionality.
73
+ > You must also install the required **peer dependencies** to ensure proper integration with MUI and Emotion.
56
74
 
57
- ## 3. Peer Dependencies & Requirements
58
-
59
- The `@atomazing-org/design-system` package relies on several peer dependencies to integrate properly with your application stack.
75
+ ## 3. Usage
60
76
 
61
- Make sure the following libraries are installed in your project:
77
+ This section describes how to use the design system in your application, including theme setup, global styles, switching between light and dark modes, and accessing theme context via a custom hook.
62
78
 
63
- | Package | Version | Required For |
64
- |----------------------|------------------|-------------------------------------|
65
- | `@mui/material` | `^7.2.0` | Core MUI theming and components |
66
- | `@mui/icons-material`| `^7.2.0` | Icon support |
67
- | `@emotion/react` | `^11.0.0` | Emotion styling engine (required) |
68
- | `@emotion/styled` | `^11.0.0` | Styled components with Emotion |
69
- | `@emotion/css` | `^11.13.5` | (Optional) Raw className utility |
79
+ ### 3.1 ThemeProvider Setup
70
80
 
71
- ### TypeScript Support
81
+ To enable theming, wrap your application with the `ThemeProviderWrapper` provided by `@atomazing-org/design-system`.
82
+ This wrapper handles theme creation, dark mode toggling, system preferences, and context setup — all out of the box.
72
83
 
73
- This package is fully written in TypeScript and ships with `.d.ts` type declarations.
74
- Ensure your project uses TypeScript 4.5+ for best compatibility.
84
+ ```tsx
85
+ import { GlobalStyles, ThemeProviderWrapper } from '@atomazing-org/design-system';
75
86
 
76
- > **Tip:** If you encounter missing types (e.g., for `@emotion/react`), install them manually:
77
- ```bash
78
- npm install -D @types/react
87
+ export const App = () => (
88
+ <ThemeProviderWrapper>
89
+ <GlobalStyles />
90
+ {/* Your application content */}
91
+ </ThemeProviderWrapper>
92
+ );
79
93
  ```
80
94
 
81
- ## 4. Features Overview
95
+ ### 🔍 Key Notes
82
96
 
83
- This package provides a modular and extendable foundation for your design system, broken into the following areas:
97
+ - `ThemeProviderWrapper` abstracts away the creation and management of the MUI theme.
98
+ - It provides built-in support for dark mode, system preferences, and the `useAppThemeProvider` hook.
99
+ - `GlobalStyles` ensures base UI styles adapt to the current theme.
100
+ - Place the wrapper as high in the component tree as possible to ensure theme availability across the app.
84
101
 
85
- ### 🎨 Theme Generator (`createCustomTheme`)
86
- - Dynamically generate MUI themes using custom primary and secondary colors.
87
- - Supports light, dark, system, and auto modes.
88
- - Automatically adapts based on background contrast.
102
+ ### 3.2 Switching Theme Mode (Light/Dark)
89
103
 
90
- ### 🧩 Component Overrides (`commonComponentProps`)
91
- - Global style customizations for common MUI components (e.g. `Button`, `Tooltip`, `Dialog`, `Slider`).
92
- - Shared defaults to ensure consistent spacing, border-radius, shadows, and blur effects.
104
+ The design system includes a built-in hook — `useThemeSettings()` — to manage theme mode and apply it consistently across your app.
93
105
 
94
- ### ✍️ Typography Variants (`typographyVariants`)
95
- - Dozens of additional font sizes and weights beyond MUI defaults.
96
- - Uses names like `text_md_regular`, `display_lg_bold` for clarity and structure.
97
- - Easily configurable in your MUI theme's `typography` field.
106
+ It supports four modes out of the box:
107
+ - `light`
108
+ - `dark`
109
+ - `system` matches the user’s OS-level preference
110
+ - `auto` — determines best contrast based on theme background
98
111
 
99
- ### 🖥 Global Styles (`GlobalStyles`)
100
- - Applies global CSS resets and base styles (scrollbars, font, highlight colors).
101
- - Reacts to theme mode (`light` or `dark`) to dynamically adjust UI contrast.
102
- - Uses Emotion’s `<Global />` component under the hood.
112
+ #### 🧩 Example: Custom Toggle with Options
103
113
 
104
- ### 🎞 Animations (`keyframes`)
105
- - Predefined keyframes for fade, slide, scale, and pulse effects.
106
- - Includes customizable utilities like `pulseAnimation(color)` and `progressPulse(color)`.
114
+ ```tsx
115
+ import {
116
+ useThemeSettings,
117
+ themes,
118
+ } from '@atomazing-org/design-system';
107
119
 
108
- ### 🛠 Utilities
109
- - `getFontColor`: Calculates readable font color from a background hex.
110
- - `isDarkMode`: Detects appropriate mode based on system or color contrast.
111
- - `systemInfo`: Returns the user's OS and browser in a reliable format.
120
+ const { darkMode, setDarkMode } = useThemeSettings();
121
+
122
+ <CustomRadioGroup
123
+ options={[
124
+ { label: 'Auto', value: 'auto' },
125
+ { label: 'System', value: 'system' },
126
+ { label: 'Light', value: 'light' },
127
+ { label: 'Dark', value: 'dark' },
128
+ ]}
129
+ value={darkMode}
130
+ onChange={val => setDarkMode(val)}
131
+ />
132
+ ```
112
133
 
113
- ---
114
134
 
115
- These modules are built to be tree-shakable and can be imported individually.
135
+ ### 3.3 Custom Theme Colors
116
136
 
117
- ## 5. Usage Examples
137
+ The design system allows you to create and switch between custom color themes using the `createCustomTheme()` function internally via `ThemeProviderWrapper`.
118
138
 
119
- This section shows how to integrate the design system in your React application.
139
+ You can define as many themes as needed by specifying:
140
+ - `primaryColor`: main branding color
141
+ - `secondaryColor` (optional): used for background and surface elements
120
142
 
121
- ### 5.1. Wrapping with ThemeProvider
143
+ #### 🎨 Example: Theme Definitions
122
144
 
123
- ```tsx
124
- import React from 'react';
125
- import ReactDOM from 'react-dom/client';
126
- import App from './App';
145
+ ```ts
146
+ export const themeConfig = {
147
+ BPM: {
148
+ primaryColor: '#203959',
149
+ secondaryColor: '#ffffff',
150
+ },
151
+ Lanit: {
152
+ primaryColor: '#33ccff',
153
+ secondaryColor: '#f7f7f7',
154
+ },
155
+ "Dark Purple": {
156
+ primaryColor: '#b624ff',
157
+ },
158
+ "Light Orange": {
159
+ primaryColor: '#F26E56',
160
+ secondaryColor: '#F6F6F6',
161
+ },
162
+ };
163
+ ```
127
164
 
128
- import {
129
- createCustomTheme,
130
- GlobalStyles,
131
- } from '@atomazing-org/design-system';
165
+ ## 4. Peer Dependencies & Requirements
132
166
 
133
- import { ThemeProvider, CssBaseline } from '@mui/material';
167
+ The `@atomazing-org/design-system` package is built on top of [Material UI v7](https://mui.com/) and [Emotion](https://emotion.sh/) and requires the following peer dependencies to be present in your project.
134
168
 
135
- const theme = createCustomTheme('#4461F2', '#F9F9FC', 'light');
169
+ Install them manually if not already included:
136
170
 
137
- ReactDOM.createRoot(document.getElementById('root')!).render(
138
- <ThemeProvider theme={theme}>
139
- <CssBaseline />
140
- <GlobalStyles />
141
- <App />
142
- </ThemeProvider>,
143
- );
171
+ ### 📦 Required Peer Dependencies
172
+
173
+ | Package | Version | Purpose |
174
+ |----------------------------|------------|-----------------------------------------|
175
+ | `@mui/material` | ^7.0.0 | Core MUI components and theming |
176
+ | `@mui/icons-material` | ^7.0.0 | MUI icon set |
177
+ | `@emotion/react` | ^11.0.0 | Emotion’s core rendering runtime |
178
+ | `@emotion/styled` | ^11.0.0 | Styled components engine |
179
+ | `@emotion/css` | ^11.0.0 | (Optional) For raw CSS class generation |
180
+
181
+ You can install all required peers with:
182
+
183
+ ```bash
184
+ npm install @mui/material @mui/icons-material @emotion/react @emotion/styled @emotion/css
144
185
  ```
145
186
 
146
- ## 6. Customization
187
+ ## 5. Utilities
147
188
 
148
- The design system is built to be flexible and extendable. You can override or extend the default behavior in several ways.
189
+ The design system includes a collection of lightweight, framework-agnostic utility functions and hooks to support theming, contrast handling, and device detection.
149
190
 
150
- ### 6.1. Customizing the Theme
191
+ ---
151
192
 
152
- You can generate your own theme using `createCustomTheme`:
193
+ ### 5.1 Color Utilities
153
194
 
154
- ```ts
155
- import { createCustomTheme } from '@atomazing-org/design-system';
195
+ #### 🎯 `getFontColor(backgroundColor: string): string`
156
196
 
157
- const theme = createCustomTheme(
158
- '#0088cc', // primary color
159
- '#f0f4f8', // background (secondary) color
160
- 'light', // palette mode
161
- );
197
+ Returns the best readable font color (`dark` or `light`) based on the background brightness.
198
+
199
+ ```ts
200
+ const textColor = getFontColor('#ffffff'); // "#101727" (dark)
162
201
  ```
163
202
 
164
- ## 7. Tree-Shaking & Importing
203
+ - Accepts any valid hex color (`#fff`, `#ffffff`)
204
+ - Automatically expands short hex (`#abc` → `#aabbcc`)
205
+ - Uses WCAG-recommended brightness formula
206
+ - Returns fallback (`fontDark`) if invalid color
165
207
 
166
- The `@atomazing-org/design-system` package is optimized for modern bundlers and supports tree-shaking out of the box.
208
+ This is useful for generating accessible dynamic UI colors especially in theme builders or color pickers.
167
209
 
168
- To minimize bundle size:
210
+ ---
169
211
 
170
- ### 7.1. Use Named Imports
212
+ ### 5.2 System Info
171
213
 
172
- Instead of importing everything at once, prefer named imports:
214
+ #### 🧩 `systemInfo: { os: OperatingSystem; browser: Browser }`
173
215
 
174
- ```ts
175
- // ✅ Recommended (tree-shakable)
176
- import { fadeIn, getFontColor } from '@atomazing-org/design-system';
216
+ Detects the user's operating system and browser at runtime based on the `navigator.userAgent`.
177
217
 
178
- // 🚫 Not recommended (bundles everything)
179
- import * as DesignSystem from '@atomazing-org/design-system';
218
+ ```ts
219
+ console.log(systemInfo.os); // "macOS" | "Windows" | "Linux" | ...
220
+ console.log(systemInfo.browser); // "Chrome" | "Safari" | ...
180
221
  ```
181
222
 
182
- ## 8. Contribution Guide
223
+ > Uses lightweight string matching for compatibility across most modern devices.
183
224
 
184
- We welcome contributions to the design system! Whether it's improving styles, fixing bugs, or adding utilities — every improvement helps.
225
+ #### 🌓 `useSystemTheme(): 'light' | 'dark' | 'unknown'`
185
226
 
186
- ### 8.1. Getting Started
227
+ React hook that listens for system-level theme changes.
187
228
 
188
- Clone the repository and install dependencies:
229
+ ```ts
230
+ const systemTheme = useSystemTheme();
189
231
 
190
- ```bash
191
- git clone https://github.com/atomazing/design-system.git
192
- cd design-system
193
- npm install
232
+ useEffect(() => {
233
+ console.log('System prefers:', systemTheme);
234
+ }, [systemTheme]);
194
235
  ```
195
236
 
196
- ## 9. License
197
-
198
- This project is licensed under the [MIT License](./LICENSE).
199
-
200
- You are free to use, modify, distribute, and sublicense the design system in your projects, whether personal or commercial.
237
+ - Responds to changes in `(prefers-color-scheme)`
238
+ - Automatically updates the value when system settings are changed
239
+ - Useful for defaulting UI themes before user makes a selection
201
240
 
202
241
  ---
203
242
 
204
- © PonomarevBPM + MarkSinD, 2025
205
- Maintained under the Atomazing Org initiative.
243
+ These utilities are tree-shakable and can be used independently of the rest of the design system.
244
+
206
245
 
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var Ce=Object.create;var b=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var ve=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty;var Me=(e,r)=>{for(var t in r)b(e,t,{get:r[t],enumerable:!0})},z=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of we(r))!Se.call(e,i)&&i!==t&&b(e,i,{get:()=>r[i],enumerable:!(o=Te(r,i))||o.enumerable});return e};var x=(e,r,t)=>(t=e!=null?Ce(ve(e)):{},z(r||!e||!e.__esModule?b(t,"default",{value:e,enumerable:!0}):t,e)),Pe=e=>z(b({},"__esModule",{value:!0}),e);var Ie={};Me(Ie,{ColorPalette:()=>s,DialogBtn:()=>H,ErrorBoundary:()=>_,GlobalStyles:()=>K,Loading:()=>G,PathName:()=>j,ThemeProviderWrapper:()=>_e,commonComponentProps:()=>v,createCustomTheme:()=>y,displayGreeting:()=>me,fadeIn:()=>re,fadeInLeft:()=>ee,getDayIdentifier:()=>ce,getFontColor:()=>h,installAppAnimation:()=>pe,isDarkMode:()=>S,isFontLight:()=>J,isHexColor:()=>B,logoutAnimation:()=>se,progressPulse:()=>ae,pulseAnimation:()=>ne,scale:()=>ie,slideIn:()=>te,slideInBottom:()=>oe,systemInfo:()=>he,themeConfig:()=>w,themes:()=>u,timeAgo:()=>ue,timeAgoFromStart:()=>xe,typographyProps:()=>le,typographyVariants:()=>de,useResponsiveDisplay:()=>ge,useSystemTheme:()=>E,useThemeSettings:()=>V});module.exports=Pe(Ie);var W=x(require("@emotion/styled")),N=require("@mui/material"),H=(0,W.default)(N.Button)`
1
+ "use strict";var ke=Object.create;var b=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var ve=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Se=(e,r)=>{for(var t in r)b(e,t,{get:r[t],enumerable:!0})},z=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of we(r))!Me.call(e,i)&&i!==t&&b(e,i,{get:()=>r[i],enumerable:!(o=Te(r,i))||o.enumerable});return e};var x=(e,r,t)=>(t=e!=null?ke(ve(e)):{},z(r||!e||!e.__esModule?b(t,"default",{value:e,enumerable:!0}):t,e)),Pe=e=>z(b({},"__esModule",{value:!0}),e);var Ie={};Se(Ie,{ColorPalette:()=>s,DialogBtn:()=>N,ErrorBoundary:()=>_,GlobalStyles:()=>K,Loading:()=>G,PathName:()=>j,ThemeProviderWrapper:()=>_e,commonComponentProps:()=>v,createCustomTheme:()=>y,displayGreeting:()=>me,fadeIn:()=>re,fadeInLeft:()=>ee,getDayIdentifier:()=>fe,getFontColor:()=>u,installAppAnimation:()=>pe,isDarkMode:()=>M,isFontLight:()=>J,isHexColor:()=>$,logoutAnimation:()=>se,progressPulse:()=>ae,pulseAnimation:()=>ne,scale:()=>ie,slideIn:()=>te,slideInBottom:()=>oe,systemInfo:()=>ue,themeConfig:()=>w,themes:()=>h,timeAgo:()=>he,timeAgoFromStart:()=>xe,typographyProps:()=>le,typographyVariants:()=>de,useResponsiveDisplay:()=>ge,useSystemTheme:()=>E,useThemeSettings:()=>V});module.exports=Pe(Ie);var W=x(require("@emotion/styled")),H=require("@mui/material"),N=(0,W.default)(H.Button)`
2
2
  padding: 10px 16px;
3
3
  border-radius: 16px;
4
4
  font-size: 16px;
@@ -24,7 +24,7 @@
24
24
  margin-top: 0;
25
25
  margin-bottom: 0;
26
26
  }
27
- `;var k=require("react"),U=x(require("@emotion/styled")),C=require("@mui/material"),f=require("react/jsx-runtime"),G=()=>{let[e,r]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),(0,f.jsx)(Re,{children:e&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(C.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,f.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},Re=(0,U.default)(C.Box)`
27
+ `;var C=require("react"),U=x(require("@emotion/styled")),k=require("@mui/material"),c=require("react/jsx-runtime"),G=()=>{let[e,r]=(0,C.useState)(!1);return(0,C.useEffect)(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),(0,c.jsx)(Re,{children:e&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(k.CircularProgress,{"aria-label":"loading",size:80,thickness:4}),(0,c.jsx)("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},Re=(0,U.default)(k.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 T=require("react"),$=(0,T.createContext)(void 0),V=()=>{let e=(0,T.useContext)($);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var c=require("react"),ye=require("@emotion/react"),be=require("@mui/material/styles");var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},w={"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var B=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),h=e=>{if(!B(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(l=>l+l).join(""):r,o=Number.parseInt(t.slice(0,2),16),i=Number.parseInt(t.slice(2,4),16),n=Number.parseInt(t.slice(4,6),16);return Math.round((o*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},J=e=>h(e)===s.fontLight;var v={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiIcon:{styleOverrides:{root:{borderRadius:"100%"}}},MuiDialogContent:{styleOverrides:{root:{padding:"0 !important"}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};var Q=require("@mui/material");var y=(e,r="#232e58",t="dark")=>(0,Q.createTheme)({palette:{primary:{main:e},secondary:{main:r},warning:{main:t==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:t},components:{...v},shape:{borderRadius:24}}),u=Object.entries(w).map(([e,r])=>({name:e,MuiTheme:y(r.primaryColor,r.secondaryColor)})),S=(e,r,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return h(t)===s.fontLight;default:return!1}};var A=require("react"),M=require("@emotion/react"),q=require("@mui/material/styles");var Z=require("react/jsx-runtime"),K=()=>{let e=(0,q.useTheme)(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.secondary.main,i=(0,A.useMemo)(()=>h(t),[t]),n=(0,A.useMemo)(()=>h(o),[o]);return(0,Z.jsx)(M.Global,{styles:M.css`
43
+ `;var T=require("react"),B=(0,T.createContext)(void 0),V=()=>{let e=(0,T.useContext)(B);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};var f=require("react"),ye=require("@emotion/react"),be=require("@mui/material/styles");var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},w={Lanit:{primaryColor:"#33ccff",secondaryColor:"#f7f7f7"},BPM:{primaryColor:"#203959",secondaryColor:"#ffffff"},Pampa:{primaryColor:"#ffe22e",secondaryColor:"#fafafa"},Hurma:{primaryColor:"#f6883d",secondaryColor:"#ffffff"},"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var $=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),u=e=>{if(!$(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(l=>l+l).join(""):r,o=Number.parseInt(t.slice(0,2),16),i=Number.parseInt(t.slice(2,4),16),n=Number.parseInt(t.slice(4,6),16);return Math.round((o*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},J=e=>u(e)===s.fontLight;var v={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiIcon:{styleOverrides:{root:{borderRadius:"100%"}}},MuiDialogContent:{styleOverrides:{root:{padding:0}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};var Q=require("@mui/material");var y=(e,r="#232e58",t="dark")=>(0,Q.createTheme)({palette:{primary:{main:e},secondary:{main:r},warning:{main:t==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:t},components:{...v},shape:{borderRadius:24}}),h=Object.entries(w).map(([e,r])=>({name:e,MuiTheme:y(r.primaryColor,r.secondaryColor)})),M=(e,r,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return u(t)===s.fontLight;default:return!1}};var A=require("react"),S=require("@emotion/react"),q=require("@mui/material/styles");var Z=require("react/jsx-runtime"),K=()=>{let e=(0,q.useTheme)(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.secondary.main,i=(0,A.useMemo)(()=>u(t),[t]),n=(0,A.useMemo)(()=>u(o),[o]);return(0,Z.jsx)(S.Global,{styles:S.css`
44
44
  * {
45
45
  font-family: "Poppins", sans-serif !important;
46
46
  -webkit-tap-highlight-color: transparent;
@@ -250,5 +250,5 @@
250
250
  100% {
251
251
  transform: translateY(0);
252
252
  }
253
- `;var le={MuiTypography:{defaultProps:{variantMapping:{...Object.fromEntries(["xl","lg","md","sm","xs","2xs"].flatMap(e=>[[`text_${e}_regular`,"p"],[`text_${e}_bold`,"p"],[`text_${e}_semibold`,"p"],[`text_${e}_thin`,"p"]])),display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}}},de={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:"600 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var me=()=>{let r=new Date().getHours(),t;return r<12&&r>=5?t="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",t};var ce=e=>{let r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`};var{userAgent:fe}=globalThis.navigator,Fe=()=>{let e=fe.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"},Oe=()=>{let e=fe.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},he={os:Fe(),browser:Oe()};var ue=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=Math.floor((t.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return i.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return i.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return i.format(-a,"hour")}let n=Math.floor(o/86400);return i.format(-n,"day")},xe=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=(e.getTime()-t.getTime())/1e3,i=Math.floor(o/(60*60)),n=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*n),l=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return l.format(a,"second");if(i===0&&n<60)return l.format(n,"minute");if(i<24){let O=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,d=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${O} ${d}`}let F=Math.floor(a/86400);return l.format(F,"day")};var P=require("react"),ge=(e=768)=>{let[r,t]=(0,P.useState)(!1);return(0,P.useEffect)(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};var D=require("react"),E=()=>{let[e,r]=(0,D.useState)("unknown");return(0,D.useEffect)(()=>{let t=i=>{r(i.matches?"dark":"light")},o=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(o.matches?"dark":"light"),o.addEventListener("change",t),()=>{o.removeEventListener("change",t)}},[]),e};var R=require("react/jsx-runtime"),_e=({children:e})=>{let r=E(),[t,o]=(0,c.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).theme||"system"}),[i,n]=(0,c.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).darkMode||"auto"});(0,c.useEffect)(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=(0,c.useMemo)(()=>{var d;return r==="unknown"?u[0].MuiTheme:t==="system"?r==="dark"?u[0].MuiTheme:u[1].MuiTheme:((d=u.find(ke=>ke.name===t))==null?void 0:d.MuiTheme)||u[0].MuiTheme},[r,t]),l=(0,c.useMemo)(()=>S(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),F=(0,c.useMemo)(()=>y(a.palette.primary.main,a.palette.secondary.main,l),[a,l]),O=(0,c.useMemo)(()=>({darkMode:l==="dark"}),[l]);return(0,R.jsx)($.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:(0,R.jsx)(be.ThemeProvider,{theme:F,children:(0,R.jsx)(ye.ThemeProvider,{theme:O,children:e})})})};0&&(module.exports={ColorPalette,DialogBtn,ErrorBoundary,GlobalStyles,Loading,PathName,ThemeProviderWrapper,commonComponentProps,createCustomTheme,displayGreeting,fadeIn,fadeInLeft,getDayIdentifier,getFontColor,installAppAnimation,isDarkMode,isFontLight,isHexColor,logoutAnimation,progressPulse,pulseAnimation,scale,slideIn,slideInBottom,systemInfo,themeConfig,themes,timeAgo,timeAgoFromStart,typographyProps,typographyVariants,useResponsiveDisplay,useSystemTheme,useThemeSettings});
253
+ `;var le={MuiTypography:{defaultProps:{variantMapping:{...Object.fromEntries(["xl","lg","md","sm","xs","2xs"].flatMap(e=>[[`text_${e}_regular`,"p"],[`text_${e}_bold`,"p"],[`text_${e}_semibold`,"p"],[`text_${e}_thin`,"p"]])),display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}}},de={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:"600 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var me=()=>{let r=new Date().getHours(),t;return r<12&&r>=5?t="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",t};var fe=e=>{let r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`};var{userAgent:ce}=globalThis.navigator,Fe=()=>{let e=ce.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"},Oe=()=>{let e=ce.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},ue={os:Fe(),browser:Oe()};var he=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=Math.floor((t.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return i.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return i.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return i.format(-a,"hour")}let n=Math.floor(o/86400);return i.format(-n,"day")},xe=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=(e.getTime()-t.getTime())/1e3,i=Math.floor(o/(60*60)),n=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*n),l=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return l.format(a,"second");if(i===0&&n<60)return l.format(n,"minute");if(i<24){let O=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,d=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${O} ${d}`}let F=Math.floor(a/86400);return l.format(F,"day")};var P=require("react"),ge=(e=768)=>{let[r,t]=(0,P.useState)(!1);return(0,P.useEffect)(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};var D=require("react"),E=()=>{let[e,r]=(0,D.useState)("unknown");return(0,D.useEffect)(()=>{let t=i=>{r(i.matches?"dark":"light")},o=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(o.matches?"dark":"light"),o.addEventListener("change",t),()=>{o.removeEventListener("change",t)}},[]),e};var R=require("react/jsx-runtime"),_e=({children:e})=>{let r=E(),[t,o]=(0,f.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).theme||"system"}),[i,n]=(0,f.useState)(()=>{let d=localStorage.getItem("appSettings");return d&&JSON.parse(d).darkMode||"auto"});(0,f.useEffect)(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=(0,f.useMemo)(()=>{var d;return r==="unknown"?h[0].MuiTheme:t==="system"?r==="dark"?h[0].MuiTheme:h[1].MuiTheme:((d=h.find(Ce=>Ce.name===t))==null?void 0:d.MuiTheme)||h[0].MuiTheme},[r,t]),l=(0,f.useMemo)(()=>M(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),F=(0,f.useMemo)(()=>y(a.palette.primary.main,a.palette.secondary.main,l),[a,l]),O=(0,f.useMemo)(()=>({darkMode:l==="dark"}),[l]);return(0,R.jsx)(B.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:(0,R.jsx)(be.ThemeProvider,{theme:F,children:(0,R.jsx)(ye.ThemeProvider,{theme:O,children:e})})})};0&&(module.exports={ColorPalette,DialogBtn,ErrorBoundary,GlobalStyles,Loading,PathName,ThemeProviderWrapper,commonComponentProps,createCustomTheme,displayGreeting,fadeIn,fadeInLeft,getDayIdentifier,getFontColor,installAppAnimation,isDarkMode,isFontLight,isHexColor,logoutAnimation,progressPulse,pulseAnimation,scale,slideIn,slideInBottom,systemInfo,themeConfig,themes,timeAgo,timeAgoFromStart,typographyProps,typographyVariants,useResponsiveDisplay,useSystemTheme,useThemeSettings});
254
254
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/styles/typography.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./context\";\nexport * from \"./styles\";\nexport * from \"./utils\";\nexport * from \"./models\";\n","import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiIcon: {\n styleOverrides: {\n root: {\n borderRadius: '100%'\n }\n },\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: '0 !important'\n }\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\n/**\n * Generates a custom MUI theme using a primary color, background color, and color mode.\n *\n * @param primaryColor - The main color used for primary palette.\n * @param backgroundColor - Background color (used as secondary). Defaults to dark blue.\n * @param mode - MUI palette mode ('light' | 'dark'). Defaults to 'dark'.\n * @returns A MUI Theme object.\n */\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n },\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","import type { Theme } from \"@mui/material\";\nimport type { TypographyVariantsOptions } from \"@mui/material/styles/createTypography\";\n\n/**\n * Default MUI Typography variant-to-element mapping.\n * Custom variants are mapped to HTML tags like <p>, <h1>, etc.\n */\nexport const typographyProps: Theme[\"components\"] = {\n MuiTypography: {\n defaultProps: {\n variantMapping: {\n // Text variants\n ...Object.fromEntries(\n [\"xl\", \"lg\", \"md\", \"sm\", \"xs\", \"2xs\"].flatMap((size) => [\n [`text_${size}_regular`, \"p\"],\n [`text_${size}_bold`, \"p\"],\n [`text_${size}_semibold`, \"p\"],\n [`text_${size}_thin`, \"p\"],\n ]),\n ),\n // Display variants\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n },\n};\n\n/**\n * Custom typography variants.\n * Defines font-weight, size, line-height and optionally fallback font.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n // TEXT_REGULAR\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_BOLD\n text_xl_bold: { font: \"600 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_SEMIBOLD\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_THIN\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n // DISPLAY_REGULAR\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n // DISPLAY_BOLD\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["index_exports","__export","ColorPalette","DialogBtn","ErrorBoundary","GlobalStyles","Loading","PathName","ThemeProviderWrapper","commonComponentProps","createCustomTheme","displayGreeting","fadeIn","fadeInLeft","getDayIdentifier","getFontColor","installAppAnimation","isDarkMode","isFontLight","isHexColor","logoutAnimation","progressPulse","pulseAnimation","scale","slideIn","slideInBottom","systemInfo","themeConfig","themes","timeAgo","timeAgoFromStart","typographyProps","typographyVariants","useResponsiveDisplay","useSystemTheme","useThemeSettings","__toCommonJS","import_styled","import_material","DialogBtn","styled","import_react","import_styled","import_ErrorOutlineRounded","import_material","import_jsx_runtime","ErrorBoundary","React","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","ErrorOutlineRounded","styled","import_react","import_styled","import_material","import_jsx_runtime","Loading","showLoading","setShowLoading","timer","Container","styled","import_styled","PathName","styled","import_react","ThemeContext","useThemeSettings","context","import_react","import_styles","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","import_material","createCustomTheme","primaryColor","backgroundColor","mode","ColorPalette","commonComponentProps","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","import_react","import_styles","import_jsx_runtime","GlobalStyles","theme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","getFontColor","secondaryFontColor","import_react","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","typographyProps","size","typographyVariants","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","import_react","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","import_react","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","import_jsx_runtime","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","stored","darkMode","setDarkMode","selectedTheme","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/styles/typography.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./context\";\nexport * from \"./styles\";\nexport * from \"./utils\";\nexport * from \"./models\";\n","import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Lanit: {\n primaryColor: '#33ccff',\n secondaryColor: '#f7f7f7',\n },\n BPM: {\n primaryColor: '#203959',\n secondaryColor: '#ffffff',\n },\n Pampa: {\n primaryColor: '#ffe22e',\n secondaryColor: '#fafafa',\n },\n Hurma: {\n primaryColor: '#f6883d',\n secondaryColor: '#ffffff',\n },\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiIcon: {\n styleOverrides: {\n root: {\n borderRadius: '100%'\n }\n },\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: 0\n }\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\n/**\n * Generates a custom MUI theme using a primary color, background color, and color mode.\n *\n * @param primaryColor - The main color used for primary palette.\n * @param backgroundColor - Background color (used as secondary). Defaults to dark blue.\n * @param mode - MUI palette mode ('light' | 'dark'). Defaults to 'dark'.\n * @returns A MUI Theme object.\n */\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n },\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","import type { Theme } from \"@mui/material\";\nimport type { TypographyVariantsOptions } from \"@mui/material/styles/createTypography\";\n\n/**\n * Default MUI Typography variant-to-element mapping.\n * Custom variants are mapped to HTML tags like <p>, <h1>, etc.\n */\nexport const typographyProps: Theme[\"components\"] = {\n MuiTypography: {\n defaultProps: {\n variantMapping: {\n // Text variants\n ...Object.fromEntries(\n [\"xl\", \"lg\", \"md\", \"sm\", \"xs\", \"2xs\"].flatMap((size) => [\n [`text_${size}_regular`, \"p\"],\n [`text_${size}_bold`, \"p\"],\n [`text_${size}_semibold`, \"p\"],\n [`text_${size}_thin`, \"p\"],\n ]),\n ),\n // Display variants\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n },\n};\n\n/**\n * Custom typography variants.\n * Defines font-weight, size, line-height and optionally fallback font.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n // TEXT_REGULAR\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_BOLD\n text_xl_bold: { font: \"600 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_SEMIBOLD\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_THIN\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n // DISPLAY_REGULAR\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n // DISPLAY_BOLD\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["index_exports","__export","ColorPalette","DialogBtn","ErrorBoundary","GlobalStyles","Loading","PathName","ThemeProviderWrapper","commonComponentProps","createCustomTheme","displayGreeting","fadeIn","fadeInLeft","getDayIdentifier","getFontColor","installAppAnimation","isDarkMode","isFontLight","isHexColor","logoutAnimation","progressPulse","pulseAnimation","scale","slideIn","slideInBottom","systemInfo","themeConfig","themes","timeAgo","timeAgoFromStart","typographyProps","typographyVariants","useResponsiveDisplay","useSystemTheme","useThemeSettings","__toCommonJS","import_styled","import_material","DialogBtn","styled","import_react","import_styled","import_ErrorOutlineRounded","import_material","import_jsx_runtime","ErrorBoundary","React","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","ErrorOutlineRounded","styled","import_react","import_styled","import_material","import_jsx_runtime","Loading","showLoading","setShowLoading","timer","Container","styled","import_styled","PathName","styled","import_react","ThemeContext","useThemeSettings","context","import_react","import_styles","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","import_material","createCustomTheme","primaryColor","backgroundColor","mode","ColorPalette","commonComponentProps","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","import_react","import_styles","import_jsx_runtime","GlobalStyles","theme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","getFontColor","secondaryFontColor","import_react","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","typographyProps","size","typographyVariants","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","import_react","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","import_react","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","import_jsx_runtime","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","stored","darkMode","setDarkMode","selectedTheme","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)`
1
+ import L from"@emotion/styled";import{Button as B}from"@mui/material";var $=L(B)`
2
2
  padding: 10px 16px;
3
3
  border-radius: 16px;
4
4
  font-size: 16px;
5
5
  margin: 8px;
6
- `;import A from"react";import D from"@emotion/styled";import P from"@mui/icons-material/ErrorOutlineRounded";import{Box as h}from"@mui/material";import{jsx as u,jsxs as f}from"react/jsx-runtime";var _=class extends A.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,t){console.error("Error:",r),console.error("Error Info:",t)}render(){var o,i,n;let{state:r,props:t}=this;return r.hasError?f(z,{children:[u(W,{children:u(h,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),f("h3",{children:[f(h,{style:{color:"#ff3131",display:"inline-block"},children:[u(P,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",f(h,{translate:"no",children:["[",(o=r.error)==null?void 0:o.name,"] ",(i=r.error)==null?void 0:i.message]}),f(h,{style:{color:"#ff3131",display:"inline-block"},children:[u(P,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",f(h,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):t.children}},z=D.div`
6
+ `;import A from"react";import D from"@emotion/styled";import P from"@mui/icons-material/ErrorOutlineRounded";import{Box as u}from"@mui/material";import{jsx as h,jsxs as c}from"react/jsx-runtime";var _=class extends A.Component{constructor(r){super(r),this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,t){console.error("Error:",r),console.error("Error Info:",t)}render(){var o,i,n;let{state:r,props:t}=this;return r.hasError?c(z,{children:[h(W,{children:h(u,{children:"\u041E\u0448\u0438\u0431\u043A\u0430.\xA0"})}),c("h3",{children:[c(u,{style:{color:"#ff3131",display:"inline-block"},children:[h(P,{sx:{verticalAlign:"middle",mb:"4px"}})," ","ERROR:"]})," ",c(u,{translate:"no",children:["[",(o=r.error)==null?void 0:o.name,"] ",(i=r.error)==null?void 0:i.message]}),c(u,{style:{color:"#ff3131",display:"inline-block"},children:[h(P,{sx:{verticalAlign:"middle",mb:"4px"}})," ","Stack:"]})," ",c(u,{translate:"no",children:["[",(n=r.error)==null?void 0:n.stack,"]"]})]})]}):t.children}},z=D.div`
7
7
  margin: 0 8vw;
8
8
  @media (max-width: 768px) {
9
9
  margin: 0;
@@ -24,7 +24,7 @@ import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)
24
24
  margin-top: 0;
25
25
  margin-bottom: 0;
26
26
  }
27
- `;import{useEffect as N,useState as H}from"react";import Y from"@emotion/styled";import{Box as U,CircularProgress as G}from"@mui/material";import{Fragment as V,jsx as k,jsxs as J}from"react/jsx-runtime";var X=()=>{let[e,r]=H(!1);return N(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),k(j,{children:e&&J(V,{children:[k(G,{"aria-label":"loading",size:80,thickness:4}),k("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},j=Y(U)`
27
+ `;import{useEffect as H,useState as N}from"react";import Y from"@emotion/styled";import{Box as U,CircularProgress as G}from"@mui/material";import{Fragment as V,jsx as C,jsxs as J}from"react/jsx-runtime";var X=()=>{let[e,r]=N(!1);return H(()=>{let t=setTimeout(()=>{r(!0)},100);return()=>clearTimeout(t)},[]),C(j,{children:e&&J(V,{children:[C(G,{"aria-label":"loading",size:80,thickness:4}),C("h3",{style:{opacity:.8},children:"Loading Page..."})]})})},j=Y(U)`
28
28
  position: absolute;
29
29
  top: 50%;
30
30
  left: 50%;
@@ -40,7 +40,7 @@ import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)
40
40
  color: white;
41
41
  padding: 4px 6px;
42
42
  border-radius: 8px;
43
- `;import{createContext as K,useContext as Z}from"react";var C=K(void 0),ee=()=>{let e=Z(C);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as g,useState as O,useEffect as Re}from"react";import{ThemeProvider as Fe}from"@emotion/react";import{ThemeProvider as Oe}from"@mui/material/styles";var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},T={"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var E=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),m=e=>{if(!E(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(p=>p+p).join(""):r,o=Number.parseInt(t.slice(0,2),16),i=Number.parseInt(t.slice(2,4),16),n=Number.parseInt(t.slice(4,6),16);return Math.round((o*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},re=e=>m(e)===s.fontLight;var w={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiIcon:{styleOverrides:{root:{borderRadius:"100%"}}},MuiDialogContent:{styleOverrides:{root:{padding:"0 !important"}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};import{createTheme as te}from"@mui/material";var x=(e,r="#232e58",t="dark")=>te({palette:{primary:{main:e},secondary:{main:r},warning:{main:t==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:t},components:{...w},shape:{borderRadius:24}}),c=Object.entries(T).map(([e,r])=>({name:e,MuiTheme:x(r.primaryColor,r.secondaryColor)})),v=(e,r,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return m(t)===s.fontLight;default:return!1}};import{useMemo as R}from"react";import{Global as oe,css as ie}from"@emotion/react";import{useTheme as ne}from"@mui/material/styles";import{jsx as se}from"react/jsx-runtime";var ae=()=>{let e=ne(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.secondary.main,i=R(()=>m(t),[t]),n=R(()=>m(o),[o]);return se(oe,{styles:ie`
43
+ `;import{createContext as K,useContext as Z}from"react";var k=K(void 0),ee=()=>{let e=Z(k);if(!e)throw new Error("useThemeSettings must be used within ThemeProviderWrapper");return e};import{useMemo as g,useState as O,useEffect as Re}from"react";import{ThemeProvider as Fe}from"@emotion/react";import{ThemeProvider as Oe}from"@mui/material/styles";var s={fontDark:"#101727",fontLight:"#f0f0f0",darkMode:"#383838",lightMode:"#ffffff",purple:"#b624ff",red:"#ff3131",orange:"#ff9318",orangeDark:"#ff9500"},T={Lanit:{primaryColor:"#33ccff",secondaryColor:"#f7f7f7"},BPM:{primaryColor:"#203959",secondaryColor:"#ffffff"},Pampa:{primaryColor:"#ffe22e",secondaryColor:"#fafafa"},Hurma:{primaryColor:"#f6883d",secondaryColor:"#ffffff"},"Dark Purple":{primaryColor:s.purple},"Light Purple":{primaryColor:s.purple,secondaryColor:"#edeef6"},"Dark Blue":{primaryColor:"#106cff",secondaryColor:"#090815"},"Light Blue":{primaryColor:"#278ad2",secondaryColor:"#dddaf6"},"Dark Pink":{primaryColor:"#f2369d",secondaryColor:"#191218"},"Light Pink":{primaryColor:"#e5369a",secondaryColor:"#ffe3ff"},"Blush Blossom":{primaryColor:"#EC407A",secondaryColor:"#FCE4EC"},Cheesecake:{primaryColor:"#E14C94",secondaryColor:"#FDF0D5"},"Mystic Coral":{primaryColor:"#ff7b9c",secondaryColor:"#4a2333"},"Dark Orange":{primaryColor:"#FF5631",secondaryColor:"#0D0D0D"},"Light Orange":{primaryColor:"#F26E56",secondaryColor:"#F6F6F6"},Aurora:{primaryColor:"#00e952",secondaryColor:"#011926"}};var E=e=>/^#([\dA-Fa-f]{3}|[\dA-Fa-f]{6})$/.test(e),m=e=>{if(!E(e))return console.error("Invalid hex color provided:",e),s.fontDark;let r=e.slice(1),t=r.length===3?r.split("").map(p=>p+p).join(""):r,o=Number.parseInt(t.slice(0,2),16),i=Number.parseInt(t.slice(2,4),16),n=Number.parseInt(t.slice(4,6),16);return Math.round((o*299+i*587+n*114)/1e3)>128?s.fontDark:s.fontLight},re=e=>m(e)===s.fontLight;var w={MuiTooltip:{defaultProps:{disableInteractive:!0},styleOverrides:{tooltip:({theme:e})=>({color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",padding:"8px 16px",borderRadius:e.shape.borderRadius,fontSize:"12px"})}},MuiButton:{styleOverrides:{root:({theme:e})=>({padding:"12px 24px",borderRadius:e.shape.borderRadius}),contained:{boxShadow:"none"}}},MuiSkeleton:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiSelect:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),select:{display:"flex",justifyContent:"flex-start",alignItems:"center",gap:"4px"}}},MuiDialog:{defaultProps:{slotProps:{paper:{style:{padding:"12px",borderRadius:24,minWidth:"400px"}}}},styleOverrides:{root:{"& .MuiDialog-container":{backdropFilter:"blur(4px)"}}}},MuiAvatar:{styleOverrides:{root:{fontWeight:500,color:"#fff"}}},MuiAlert:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiTextField:{styleOverrides:{root:({theme:e})=>({"& .MuiInputBase-root":{borderRadius:e.shape.borderRadius}})}},MuiPaper:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius}),elevation8:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiMenuItem:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiBottomNavigationAction:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"12px",margin:0,maxHeight:"none"})}},MuiIcon:{styleOverrides:{root:{borderRadius:"100%"}}},MuiDialogContent:{styleOverrides:{root:{padding:0}}},MuiSlider:{styleOverrides:{valueLabel:({theme:e})=>({borderRadius:e.shape.borderRadius,padding:"6px 14px",color:e.palette.mode==="dark"?"#fff":"#000",backgroundColor:e.palette.mode==="dark"?"#141431dd":"#ededf3dd","&::before, &::after":{display:"none"}})}},MuiCircularProgress:{styleOverrides:{circle:{strokeLinecap:"round"}}},MuiTab:{styleOverrides:{root:({theme:e})=>({borderRadius:e.shape.borderRadius})}},MuiAccordion:{styleOverrides:{root:{"&::before":{display:"none"}}}}};import{createTheme as te}from"@mui/material";var x=(e,r="#232e58",t="dark")=>te({palette:{primary:{main:e},secondary:{main:r},warning:{main:t==="dark"?s.orange:s.orangeDark},error:{main:s.red},mode:t},components:{...w},shape:{borderRadius:24}}),f=Object.entries(T).map(([e,r])=>({name:e,MuiTheme:x(r.primaryColor,r.secondaryColor)})),v=(e,r,t)=>{switch(e){case"light":return!1;case"dark":return!0;case"system":return r==="dark";case"auto":return m(t)===s.fontLight;default:return!1}};import{useMemo as R}from"react";import{Global as oe,css as ie}from"@emotion/react";import{useTheme as ne}from"@mui/material/styles";import{jsx as se}from"react/jsx-runtime";var ae=()=>{let e=ne(),r=e.palette.mode==="dark",t=e.palette.primary.main,o=e.palette.secondary.main,i=R(()=>m(t),[t]),n=R(()=>m(o),[o]);return se(oe,{styles:ie`
44
44
  * {
45
45
  font-family: "Poppins", sans-serif !important;
46
46
  -webkit-tap-highlight-color: transparent;
@@ -191,14 +191,14 @@ import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)
191
191
  to {
192
192
  transform: translateY(0);
193
193
  }
194
- `,ce=d`
194
+ `,fe=d`
195
195
  from {
196
196
  transform: scale(0);
197
197
  }
198
198
  to {
199
199
  transform: scale(1);
200
200
  }
201
- `,fe=(e,r=12)=>d`
201
+ `,ce=(e,r=12)=>d`
202
202
  0% {
203
203
  transform: scale(0.95);
204
204
  box-shadow: 0 0 0 0 ${e}b2;
@@ -211,7 +211,7 @@ import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)
211
211
  transform: scale(0.95);
212
212
  box-shadow: 0 0 0 0 ${e}00;
213
213
  }
214
- `,he=e=>d`
214
+ `,ue=e=>d`
215
215
  0% {
216
216
  filter: none;
217
217
  }
@@ -221,7 +221,7 @@ import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)
221
221
  100% {
222
222
  filter: none;
223
223
  }
224
- `,ue=d`
224
+ `,he=d`
225
225
  0% {
226
226
  transform: scale(1);
227
227
  opacity: 1;
@@ -250,5 +250,5 @@ import L from"@emotion/styled";import{Button as $}from"@mui/material";var B=L($)
250
250
  100% {
251
251
  transform: translateY(0);
252
252
  }
253
- `;var ge={MuiTypography:{defaultProps:{variantMapping:{...Object.fromEntries(["xl","lg","md","sm","xs","2xs"].flatMap(e=>[[`text_${e}_regular`,"p"],[`text_${e}_bold`,"p"],[`text_${e}_semibold`,"p"],[`text_${e}_thin`,"p"]])),display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}}},ye={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:"600 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var be=()=>{let r=new Date().getHours(),t;return r<12&&r>=5?t="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",t};var _e=e=>{let r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`};var{userAgent:F}=globalThis.navigator,ke=()=>{let e=F.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"},Ce=()=>{let e=F.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Te={os:ke(),browser:Ce()};var we=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=Math.floor((t.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return i.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return i.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return i.format(-a,"hour")}let n=Math.floor(o/86400);return i.format(-n,"day")},ve=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=(e.getTime()-t.getTime())/1e3,i=Math.floor(o/(60*60)),n=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*n),p=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return p.format(a,"second");if(i===0&&n<60)return p.format(n,"minute");if(i<24){let b=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,l=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${b} ${l}`}let y=Math.floor(a/86400);return p.format(y,"day")};import{useEffect as Se,useState as Me}from"react";var Pe=(e=768)=>{let[r,t]=Me(!1);return Se(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};import{useState as De,useEffect as Ee}from"react";var S=()=>{let[e,r]=De("unknown");return Ee(()=>{let t=i=>{r(i.matches?"dark":"light")},o=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(o.matches?"dark":"light"),o.addEventListener("change",t),()=>{o.removeEventListener("change",t)}},[]),e};import{jsx as M}from"react/jsx-runtime";var Ie=({children:e})=>{let r=S(),[t,o]=O(()=>{let l=localStorage.getItem("appSettings");return l&&JSON.parse(l).theme||"system"}),[i,n]=O(()=>{let l=localStorage.getItem("appSettings");return l&&JSON.parse(l).darkMode||"auto"});Re(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=g(()=>{var l;return r==="unknown"?c[0].MuiTheme:t==="system"?r==="dark"?c[0].MuiTheme:c[1].MuiTheme:((l=c.find(I=>I.name===t))==null?void 0:l.MuiTheme)||c[0].MuiTheme},[r,t]),p=g(()=>v(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),y=g(()=>x(a.palette.primary.main,a.palette.secondary.main,p),[a,p]),b=g(()=>({darkMode:p==="dark"}),[p]);return M(C.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:M(Oe,{theme:y,children:M(Fe,{theme:b,children:e})})})};export{s as ColorPalette,B as DialogBtn,_ as ErrorBoundary,ae as GlobalStyles,X as Loading,q as PathName,Ie as ThemeProviderWrapper,w as commonComponentProps,x as createCustomTheme,be as displayGreeting,le as fadeIn,pe as fadeInLeft,_e as getDayIdentifier,m as getFontColor,xe as installAppAnimation,v as isDarkMode,re as isFontLight,E as isHexColor,ue as logoutAnimation,he as progressPulse,fe as pulseAnimation,ce as scale,de as slideIn,me as slideInBottom,Te as systemInfo,T as themeConfig,c as themes,we as timeAgo,ve as timeAgoFromStart,ge as typographyProps,ye as typographyVariants,Pe as useResponsiveDisplay,S as useSystemTheme,ee as useThemeSettings};
253
+ `;var ge={MuiTypography:{defaultProps:{variantMapping:{...Object.fromEntries(["xl","lg","md","sm","xs","2xs"].flatMap(e=>[[`text_${e}_regular`,"p"],[`text_${e}_bold`,"p"],[`text_${e}_semibold`,"p"],[`text_${e}_thin`,"p"]])),display_2xl_regular:"h1",display_xl_regular:"h2",display_lg_regular:"h3",display_md_regular:"h4",display_sm_regular:"h5",display_xs_regular:"h6",display_2xl_bold:"h1",display_xl_bold:"h2",display_lg_bold:"h3",display_md_bold:"h4",display_sm_bold:"h5",display_xs_bold:"h6"}}}},ye={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:"600 20px/30px inherit inherit"},text_lg_bold:{font:"700 18px/28px inherit inherit"},text_md_bold:{font:"700 16px/24px inherit inherit"},text_sm_bold:{font:"700 14px/20px inherit inherit"},text_xs_bold:{font:"700 12px/18px inherit inherit"},text_2xs_bold:{font:"700 10px/14px inherit inherit"},text_xl_semibold:{font:"600 20px/30px inherit inherit"},text_lg_semibold:{font:"600 18px/28px inherit inherit"},text_md_semibold:{font:"600 16px/24px inherit inherit"},text_sm_semibold:{font:"600 14px/20px inherit inherit"},text_xs_semibold:{font:"600 12px/18px inherit inherit"},text_2xs_semibold:{font:"600 10px/14px inherit inherit"},text_xl_thin:{font:"100 20px/30px inherit inherit"},text_lg_thin:{font:"100 18px/28px inherit inherit"},text_md_thin:{font:"100 16px/24px inherit inherit"},text_sm_thin:{font:"100 14px/20px inherit inherit"},text_xs_thin:{font:"100 12px/18px inherit inherit"},text_2xs_thin:{font:"100 10px/14px inherit inherit"},display_2xl_regular:{font:"400 72px/90px inherit inherit"},display_xl_regular:{font:"400 60px/72px inherit inherit"},display_lg_regular:{font:"400 48px/60px inherit inherit"},display_md_regular:{font:"400 36px/44px inherit inherit"},display_sm_regular:{font:"400 30px/38px inherit inherit"},display_xs_regular:{font:"400 24px/32px inherit inherit"},display_2xl_bold:{font:"700 72px/90px inherit inherit"},display_xl_bold:{font:"700 60px/72px inherit inherit"},display_lg_bold:{font:"700 48px/60px inherit inherit"},display_md_bold:{font:"700 36px/44px inherit inherit"},display_sm_bold:{font:"700 30px/38px inherit inherit"},display_xs_bold:{font:"700 24px/32px inherit inherit"}};var be=()=>{let r=new Date().getHours(),t;return r<12&&r>=5?t="\u0414\u043E\u0431\u0440\u043E\u0435 \u0443\u0442\u0440\u043E,":r<18&&r>12?t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0434\u0435\u043D\u044C,":t="\u0414\u043E\u0431\u0440\u044B\u0439 \u0432\u0435\u0447\u0435\u0440,",t};var _e=e=>{let r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`};var{userAgent:F}=globalThis.navigator,Ce=()=>{let e=F.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"},ke=()=>{let e=F.toLowerCase();return e.includes("edg")?"Edge":e.includes("chrome")?"Chrome":e.includes("firefox")?"Firefox":e.includes("safari")?"Safari":"Unknown"},Te={os:Ce(),browser:ke()};var we=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=Math.floor((t.getTime()-e.getTime())/1e3),i=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(o<60)return i.format(-o,"second");if(o<3600){let a=Math.floor(o/60);return i.format(-a,"minute")}if(o<86400){let a=Math.floor(o/3600);return i.format(-a,"hour")}let n=Math.floor(o/86400);return i.format(-n,"day")},ve=(e,r=navigator.language||"en-US")=>{let t=new Date;e=new Date(e);let o=(e.getTime()-t.getTime())/1e3,i=Math.floor(o/(60*60)),n=Math.floor((o-60*60*i)/60),a=Math.floor(o-60*60*i-60*n),p=new Intl.RelativeTimeFormat(r,{numeric:"auto"});if(n===0&&a<60)return p.format(a,"second");if(i===0&&n<60)return p.format(n,"minute");if(i<24){let b=`${new Intl.RelativeTimeFormat(r,{numeric:"auto"}).format(i,"hour")}`,l=` ${new Intl.RelativeTimeFormat(r,{localeMatcher:"lookup",numeric:"always",style:"long"}).format(n,"minute")}`.replace(/^\D+/,"");return`${b} ${l}`}let y=Math.floor(a/86400);return p.format(y,"day")};import{useEffect as Me,useState as Se}from"react";var Pe=(e=768)=>{let[r,t]=Se(!1);return Me(()=>{let o=()=>{t(window.innerWidth<e)};o();let i=()=>o();return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},[e]),r};import{useState as De,useEffect as Ee}from"react";var M=()=>{let[e,r]=De("unknown");return Ee(()=>{let t=i=>{r(i.matches?"dark":"light")},o=globalThis.matchMedia("(prefers-color-scheme: dark)");return r(o.matches?"dark":"light"),o.addEventListener("change",t),()=>{o.removeEventListener("change",t)}},[]),e};import{jsx as S}from"react/jsx-runtime";var Ie=({children:e})=>{let r=M(),[t,o]=O(()=>{let l=localStorage.getItem("appSettings");return l&&JSON.parse(l).theme||"system"}),[i,n]=O(()=>{let l=localStorage.getItem("appSettings");return l&&JSON.parse(l).darkMode||"auto"});Re(()=>{localStorage.setItem("appSettings",JSON.stringify({theme:t,darkMode:i}))},[t,i]);let a=g(()=>{var l;return r==="unknown"?f[0].MuiTheme:t==="system"?r==="dark"?f[0].MuiTheme:f[1].MuiTheme:((l=f.find(I=>I.name===t))==null?void 0:l.MuiTheme)||f[0].MuiTheme},[r,t]),p=g(()=>v(i,r,a.palette.secondary.main)?"dark":"light",[i,r,a]),y=g(()=>x(a.palette.primary.main,a.palette.secondary.main,p),[a,p]),b=g(()=>({darkMode:p==="dark"}),[p]);return S(k.Provider,{value:{theme:t,darkMode:i,setTheme:o,setDarkMode:n},children:S(Oe,{theme:y,children:S(Fe,{theme:b,children:e})})})};export{s as ColorPalette,$ as DialogBtn,_ as ErrorBoundary,ae as GlobalStyles,X as Loading,q as PathName,Ie as ThemeProviderWrapper,w as commonComponentProps,x as createCustomTheme,be as displayGreeting,le as fadeIn,pe as fadeInLeft,_e as getDayIdentifier,m as getFontColor,xe as installAppAnimation,v as isDarkMode,re as isFontLight,E as isHexColor,he as logoutAnimation,ue as progressPulse,ce as pulseAnimation,fe as scale,de as slideIn,me as slideInBottom,Te as systemInfo,T as themeConfig,f as themes,we as timeAgo,ve as timeAgoFromStart,ge as typographyProps,ye as typographyVariants,Pe as useResponsiveDisplay,M as useSystemTheme,ee as useThemeSettings};
254
254
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/styles/typography.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiIcon: {\n styleOverrides: {\n root: {\n borderRadius: '100%'\n }\n },\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: '0 !important'\n }\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\n/**\n * Generates a custom MUI theme using a primary color, background color, and color mode.\n *\n * @param primaryColor - The main color used for primary palette.\n * @param backgroundColor - Background color (used as secondary). Defaults to dark blue.\n * @param mode - MUI palette mode ('light' | 'dark'). Defaults to 'dark'.\n * @returns A MUI Theme object.\n */\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n },\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","import type { Theme } from \"@mui/material\";\nimport type { TypographyVariantsOptions } from \"@mui/material/styles/createTypography\";\n\n/**\n * Default MUI Typography variant-to-element mapping.\n * Custom variants are mapped to HTML tags like <p>, <h1>, etc.\n */\nexport const typographyProps: Theme[\"components\"] = {\n MuiTypography: {\n defaultProps: {\n variantMapping: {\n // Text variants\n ...Object.fromEntries(\n [\"xl\", \"lg\", \"md\", \"sm\", \"xs\", \"2xs\"].flatMap((size) => [\n [`text_${size}_regular`, \"p\"],\n [`text_${size}_bold`, \"p\"],\n [`text_${size}_semibold`, \"p\"],\n [`text_${size}_thin`, \"p\"],\n ]),\n ),\n // Display variants\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n },\n};\n\n/**\n * Custom typography variants.\n * Defines font-weight, size, line-height and optionally fallback font.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n // TEXT_REGULAR\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_BOLD\n text_xl_bold: { font: \"600 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_SEMIBOLD\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_THIN\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n // DISPLAY_REGULAR\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n // DISPLAY_BOLD\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["styled","Button","DialogBtn","React","styled","ErrorOutlineRounded","Box","jsx","jsxs","ErrorBoundary","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","useEffect","useState","styled","Box","CircularProgress","Fragment","jsx","jsxs","Loading","showLoading","setShowLoading","timer","Container","styled","PathName","createContext","useContext","ThemeContext","useThemeSettings","context","useMemo","useState","useEffect","EmotionThemeProvider","MuiThemeProvider","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","createTheme","createCustomTheme","primaryColor","backgroundColor","mode","createTheme","ColorPalette","commonComponentProps","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","useMemo","Global","css","useTheme","jsx","GlobalStyles","theme","useTheme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","useMemo","getFontColor","secondaryFontColor","Global","css","keyframes","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","typographyProps","size","typographyVariants","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","useEffect","useState","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","useState","useEffect","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","jsx","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","useState","stored","darkMode","setDarkMode","useEffect","selectedTheme","useMemo","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
1
+ {"version":3,"sources":["../src/components/DialogBtn.ts","../src/components/ErrorBoundary.tsx","../src/components/Loading.tsx","../src/components/PathName.ts","../src/context/ThemeContext.tsx","../src/context/ThemeProviderWrapper.tsx","../src/styles/themeConfig.ts","../src/styles/colorUtils.ts","../src/styles/commonComponents.ts","../src/styles/createTheme.ts","../src/styles/globalStyles.tsx","../src/styles/keyframes.ts","../src/styles/typography.ts","../src/utils/displayGreeting.ts","../src/utils/getDayIdentifier.ts","../src/utils/getSystemInfo.ts","../src/utils/timeAgo.ts","../src/utils/useResponsiveDisplay.ts","../src/utils/useSystemTheme.ts"],"sourcesContent":["import styled from \"@emotion/styled\";\nimport { Button } from \"@mui/material\";\n\nexport const DialogBtn = styled(Button)`\n padding: 10px 16px;\n border-radius: 16px;\n font-size: 16px;\n margin: 8px;\n`;\n","/* eslint-disable @typescript-eslint/class-methods-use-this -- only for ErrorBoundary*/\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport ErrorOutlineRounded from \"@mui/icons-material/ErrorOutlineRounded\";\nimport { Box } from \"@mui/material\";\n\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\n/**\n * ErrorBoundary component that catches and displays errors.\n */\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error:\", error);\n // eslint-disable-next-line no-console -- Выводим ошибку в консоль\n console.error(\"Error Info:\", errorInfo);\n }\n\n render() {\n const { state, props } = this;\n if (state.hasError) {\n return (\n <Container>\n <ErrorHeader>\n <Box>Ошибка.&nbsp;</Box>\n </ErrorHeader>\n <h3>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n ERROR:\n </Box>{\" \"}\n <Box translate=\"no\">\n [{state.error?.name}] {state.error?.message}\n </Box>\n <Box style={{ color: \"#ff3131\", display: \"inline-block\" }}>\n <ErrorOutlineRounded\n sx={{ verticalAlign: \"middle\", mb: \"4px\" }}\n />{\" \"}\n Stack:\n </Box>{\" \"}\n <Box translate=\"no\">[{state.error?.stack}]</Box>\n </h3>\n </Container>\n );\n }\n\n return props.children;\n }\n}\n\nconst Container = styled.div`\n margin: 0 8vw;\n @media (max-width: 768px) {\n margin: 0;\n }\n`;\n\nconst ErrorHeader = styled.h1`\n margin-top: 32px;\n margin-bottom: 32px;\n font-size: 36px;\n color: #ff3131;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n @media (max-width: 768px) {\n text-align: left;\n justify-content: left;\n font-size: 30px;\n margin-top: 0;\n margin-bottom: 0;\n }\n`;\n","import { useEffect, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport const Loading = () => {\n const [showLoading, setShowLoading] = useState<boolean>(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShowLoading(true);\n }, 100); // Show the loading spinner after 100 milliseconds\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Container>\n {showLoading && (\n <>\n <CircularProgress aria-label=\"loading\" size={80} thickness={4} />\n <h3 style={{ opacity: 0.8 }}>Loading Page...</h3>\n </>\n )}\n </Container>\n );\n};\n\nconst Container = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n text-align: center;\n gap: 8px;\n`;\n","import styled from \"@emotion/styled\";\n\nexport const PathName = styled.code`\n background: #000000c8;\n color: white;\n padding: 4px 6px;\n border-radius: 8px;\n`;\n","import { createContext, useContext } from \"react\";\n\nimport type { ThemeContextProps } from \"../models\";\n\nexport const ThemeContext = createContext<ThemeContextProps | undefined>(\n undefined,\n);\n\nexport const useThemeSettings = (): ThemeContextProps => {\n const context = useContext(ThemeContext);\n if (!context)\n throw new Error(\n \"useThemeSettings must be used within ThemeProviderWrapper\",\n );\n return context;\n};\n","// src/context/ThemeProvider.tsx\nimport { useMemo, useState, useEffect } from \"react\";\nimport { ThemeProvider as EmotionThemeProvider } from \"@emotion/react\";\nimport { ThemeProvider as MuiThemeProvider } from \"@mui/material/styles\";\n\nimport { themes, createCustomTheme, isDarkMode } from \"../styles\";\nimport { useSystemTheme } from \"../utils\";\n\nimport { ThemeContext } from \"./ThemeContext\";\n\nimport type { FC, PropsWithChildren } from \"react\";\n\nexport const ThemeProviderWrapper: FC<PropsWithChildren> = ({ children }) => {\n const systemTheme = useSystemTheme();\n\n const [theme, setTheme] = useState<string>(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).theme || \"system\" : \"system\";\n });\n\n const [darkMode, setDarkMode] = useState<\n \"light\" | \"dark\" | \"system\" | \"auto\"\n >(() => {\n const stored = localStorage.getItem(\"appSettings\");\n return stored ? JSON.parse(stored).darkMode || \"auto\" : \"auto\";\n });\n\n useEffect(() => {\n localStorage.setItem(\"appSettings\", JSON.stringify({ theme, darkMode }));\n }, [theme, darkMode]);\n\n const selectedTheme = useMemo(() => {\n if (systemTheme === \"unknown\") return themes[0].MuiTheme;\n if (theme === \"system\") {\n return systemTheme === \"dark\" ? themes[0].MuiTheme : themes[1].MuiTheme;\n }\n return themes.find((t) => t.name === theme)?.MuiTheme || themes[0].MuiTheme;\n }, [systemTheme, theme]);\n\n const mode = useMemo(\n () =>\n isDarkMode(darkMode, systemTheme, selectedTheme.palette.secondary.main)\n ? \"dark\"\n : \"light\",\n [darkMode, systemTheme, selectedTheme],\n );\n\n const muiTheme = useMemo(\n () =>\n createCustomTheme(\n selectedTheme.palette.primary.main,\n selectedTheme.palette.secondary.main,\n mode,\n ),\n [selectedTheme, mode],\n );\n\n const emotionTheme = useMemo(() => ({ darkMode: mode === \"dark\" }), [mode]);\n\n return (\n <ThemeContext.Provider value={{ theme, darkMode, setTheme, setDarkMode }}>\n <MuiThemeProvider theme={muiTheme}>\n <EmotionThemeProvider theme={emotionTheme}>\n {children}\n </EmotionThemeProvider>\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n","export const ColorPalette = {\n fontDark: \"#101727\",\n fontLight: \"#f0f0f0\",\n darkMode: \"#383838\",\n lightMode: \"#ffffff\",\n purple: \"#b624ff\",\n red: \"#ff3131\",\n orange: \"#ff9318\",\n orangeDark: \"#ff9500\",\n} as const;\n\nexport const themeConfig: Record<\n string,\n { primaryColor: string; secondaryColor?: string }\n> = {\n Lanit: {\n primaryColor: '#33ccff',\n secondaryColor: '#f7f7f7',\n },\n BPM: {\n primaryColor: '#203959',\n secondaryColor: '#ffffff',\n },\n Pampa: {\n primaryColor: '#ffe22e',\n secondaryColor: '#fafafa',\n },\n Hurma: {\n primaryColor: '#f6883d',\n secondaryColor: '#ffffff',\n },\n \"Dark Purple\": {\n // Default dark theme\n primaryColor: ColorPalette.purple,\n },\n \"Light Purple\": {\n // Default light theme\n primaryColor: ColorPalette.purple,\n secondaryColor: \"#edeef6\",\n },\n \"Dark Blue\": {\n primaryColor: \"#106cff\",\n secondaryColor: \"#090815\",\n },\n \"Light Blue\": {\n primaryColor: \"#278ad2\",\n secondaryColor: \"#dddaf6\",\n },\n \"Dark Pink\": {\n primaryColor: \"#f2369d\",\n secondaryColor: \"#191218\",\n },\n \"Light Pink\": {\n primaryColor: \"#e5369a\",\n secondaryColor: \"#ffe3ff\",\n },\n \"Blush Blossom\": {\n primaryColor: \"#EC407A\",\n secondaryColor: \"#FCE4EC\",\n },\n Cheesecake: {\n primaryColor: \"#E14C94\",\n secondaryColor: \"#FDF0D5\",\n },\n \"Mystic Coral\": {\n primaryColor: \"#ff7b9c\",\n secondaryColor: \"#4a2333\",\n },\n \"Dark Orange\": {\n primaryColor: \"#FF5631\",\n secondaryColor: \"#0D0D0D\",\n },\n \"Light Orange\": {\n primaryColor: \"#F26E56\",\n secondaryColor: \"#F6F6F6\",\n },\n Aurora: {\n primaryColor: \"#00e952\",\n secondaryColor: \"#011926\",\n },\n};\n","import { ColorPalette } from \"./themeConfig\";\n\n/**\n * Validates whether a given string is a valid 3- or 6-digit hex color code (e.g., \"#fff\" or \"#ffffff\").\n *\n * @param value - The string to check.\n * @returns `true` if the string is a valid hex color; otherwise, `false`.\n */\nexport const isHexColor = (value: string): boolean =>\n /^#([\\dA-Fa-f]{3}|[\\dA-Fa-f]{6})$/.test(value);\n\n/**\n * Determines the ideal font color (white or black) for contrast against a given background color.\n *\n * Uses luminance calculation (YIQ) to ensure accessibility and visual clarity.\n *\n * @param backgroundColor - A valid hex color (e.g., \"#ffffff\").\n * @returns A hex color string (`fontLight` or `fontDark`) suitable for overlay text.\n */\nexport const getFontColor = (backgroundColor: string): string => {\n if (!isHexColor(backgroundColor)) {\n // eslint-disable-next-line no-console -- Allow\n console.error(\"Invalid hex color provided:\", backgroundColor);\n return ColorPalette.fontDark;\n }\n\n const hex = backgroundColor.slice(1);\n\n const fullHex =\n hex.length === 3\n ? hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : hex;\n\n const r = Number.parseInt(fullHex.slice(0, 2), 16);\n const g = Number.parseInt(fullHex.slice(2, 4), 16);\n const b = Number.parseInt(fullHex.slice(4, 6), 16);\n\n const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1000);\n\n return brightness > 128 ? ColorPalette.fontDark : ColorPalette.fontLight;\n};\n\n/**\n * Determines whether the ideal font color for a background is light (i.e., white).\n *\n * @param color - The background color in hex.\n * @returns `true` if white text is recommended; otherwise, `false`.\n */\nexport const isFontLight = (color: string): boolean =>\n getFontColor(color) === ColorPalette.fontLight;\n","import type { Theme } from \"@mui/material\";\n\n/**\n * Common component style overrides and default props shared across the design system.\n * This object should be spread into the `components` field of the MUI theme.\n */\nexport const commonComponentProps: Theme[\"components\"] = {\n MuiTooltip: {\n defaultProps: {\n disableInteractive: true,\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n backdropFilter: \"blur(6px)\",\n WebkitBackdropFilter: \"blur(6px)\",\n padding: \"8px 16px\",\n borderRadius: theme.shape.borderRadius,\n fontSize: \"12px\",\n }),\n },\n },\n\n MuiButton: {\n styleOverrides: {\n root: ({ theme }) => ({\n padding: \"12px 24px\",\n borderRadius: theme.shape.borderRadius,\n }),\n contained: {\n boxShadow: \"none\",\n },\n },\n },\n\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiSelect: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n select: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n gap: \"4px\",\n },\n },\n },\n\n MuiDialog: {\n defaultProps: {\n slotProps: {\n paper: {\n style: {\n padding: \"12px\",\n borderRadius: 24, // оставить явно, если это критично\n minWidth: \"400px\",\n },\n },\n },\n },\n styleOverrides: {\n root: {\n \"& .MuiDialog-container\": {\n backdropFilter: \"blur(4px)\",\n },\n },\n },\n },\n\n MuiAvatar: {\n styleOverrides: {\n root: {\n fontWeight: 500,\n color: \"#fff\",\n },\n },\n },\n\n MuiAlert: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n },\n },\n\n MuiTextField: {\n styleOverrides: {\n root: ({ theme }) => ({\n \"& .MuiInputBase-root\": {\n borderRadius: theme.shape.borderRadius,\n },\n }),\n },\n },\n\n MuiPaper: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n elevation8: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiBottomNavigationAction: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"12px\",\n margin: 0,\n maxHeight: \"none\",\n }),\n },\n },\n\n MuiIcon: {\n styleOverrides: {\n root: {\n borderRadius: '100%'\n }\n },\n },\n\n MuiDialogContent: {\n styleOverrides: {\n root: {\n padding: 0\n }\n },\n },\n\n MuiSlider: {\n styleOverrides: {\n valueLabel: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: \"6px 14px\",\n color: theme.palette.mode === \"dark\" ? \"#fff\" : \"#000\",\n backgroundColor:\n theme.palette.mode === \"dark\" ? \"#141431dd\" : \"#ededf3dd\",\n \"&::before, &::after\": {\n display: \"none\",\n },\n }),\n },\n },\n\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n strokeLinecap: \"round\",\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: ({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n }),\n }\n },\n\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&::before\": {\n display: \"none\",\n },\n },\n },\n },\n};\n","import { createTheme } from \"@mui/material\";\n\nimport { getFontColor } from \"./colorUtils\";\nimport { commonComponentProps } from \"./commonComponents\";\nimport { ColorPalette, themeConfig } from \"./themeConfig\";\n\nimport type { AppSettings, SystemTheme } from \"../models\";\nimport type { PaletteMode, Theme } from \"@mui/material\";\n\n/**\n * Generates a custom MUI theme using a primary color, background color, and color mode.\n *\n * @param primaryColor - The main color used for primary palette.\n * @param backgroundColor - Background color (used as secondary). Defaults to dark blue.\n * @param mode - MUI palette mode ('light' | 'dark'). Defaults to 'dark'.\n * @returns A MUI Theme object.\n */\nexport const createCustomTheme = (\n primaryColor: string,\n backgroundColor = \"#232e58\",\n mode: PaletteMode = \"dark\",\n): Theme =>\n createTheme({\n palette: {\n primary: { main: primaryColor },\n secondary: { main: backgroundColor },\n warning: {\n main: mode === \"dark\" ? ColorPalette.orange : ColorPalette.orangeDark,\n },\n error: { main: ColorPalette.red },\n mode,\n },\n components: {\n ...commonComponentProps,\n },\n shape: { borderRadius: 24 },\n });\n\n/**\n * A predefined list of named themes based on the `themeConfig` definition.\n */\nexport const themes: { name: string; MuiTheme: Theme }[] = Object.entries(\n themeConfig,\n).map(([name, config]) => ({\n name,\n MuiTheme: createCustomTheme(config.primaryColor, config.secondaryColor),\n}));\n\n/**\n * Determines whether dark mode should be enabled based on user settings and system conditions.\n *\n * @param darkMode - User preference: 'light' | 'dark' | 'system' | 'auto'.\n * @param systemTheme - Detected OS-level theme: 'light' | 'dark'.\n * @param backgroundColor - The background color to assess contrast in 'auto' mode.\n * @returns True if dark mode should be used.\n */\nexport const isDarkMode = (\n darkMode: AppSettings[\"darkMode\"],\n systemTheme: SystemTheme,\n backgroundColor: string,\n): boolean => {\n switch (darkMode) {\n case \"light\": {\n return false;\n }\n case \"dark\": {\n return true;\n }\n case \"system\": {\n return systemTheme === \"dark\";\n }\n case \"auto\": {\n return getFontColor(backgroundColor) === ColorPalette.fontLight;\n }\n default: {\n return false;\n }\n }\n};\n","import { useMemo } from \"react\";\nimport { Global, css } from \"@emotion/react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nimport { getFontColor } from \"./colorUtils\";\n\nimport type { FC } from \"react\";\n\n/**\n * Injects global styles into the document using Emotion.\n * These styles include font setup, base HTML styles, custom scrollbars,\n * selection styling, and some accessibility tweaks.\n *\n * Uses the MUI theme to dynamically adjust colors for light/dark mode.\n */\nexport const GlobalStyles: FC = () => {\n const theme = useTheme();\n const isDarkMode = theme.palette.mode === \"dark\";\n\n const primaryColor = theme.palette.primary.main;\n const secondaryColor = theme.palette.secondary.main;\n\n const primaryFontColor = useMemo(\n () => getFontColor(primaryColor),\n [primaryColor],\n );\n const secondaryFontColor = useMemo(\n () => getFontColor(secondaryColor),\n [secondaryColor],\n );\n\n return (\n <Global\n styles={css`\n * {\n font-family: \"Poppins\", sans-serif !important;\n -webkit-tap-highlight-color: transparent;\n &::selection {\n background-color: ${`${primaryColor}e1`};\n color: ${primaryFontColor};\n }\n }\n\n :root {\n height: 100%;\n font-family: \"Poppins\", sans-serif;\n line-height: 1.5;\n font-weight: 400;\n color-scheme: ${isDarkMode ? \"dark\" : \"light\"};\n color: ${secondaryFontColor};\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n\n --rsbs-backdrop-bg: rgba(0, 0, 0, 0.3);\n --rsbs-bg: ${isDarkMode ? \"#383838\" : \"#ffffff\"};\n }\n\n body {\n margin: 0;\n height: 100%;\n touch-action: manipulation;\n background: ${secondaryColor};\n background-attachment: fixed;\n background-size: cover;\n transition: 0.3s background;\n\n ::-webkit-scrollbar {\n width: 8px;\n background-color: ${secondaryColor};\n }\n ::-webkit-scrollbar-thumb {\n background-color: ${primaryColor};\n border-radius: 64px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${`${primaryColor}d8`};\n }\n ::-webkit-scrollbar-track {\n border-radius: 64px;\n background-color: ${secondaryColor};\n }\n }\n\n a {\n text-decoration: none;\n color: inherit;\n }\n\n img {\n user-select: none;\n }\n\n input[type=\"file\"]::-webkit-file-upload-button {\n display: none;\n }\n\n input[type=\"datetime-local\"]:placeholder-shown {\n color: transparent !important;\n }\n\n pre {\n background-color: #000000d7;\n color: white;\n padding: 16px;\n border-radius: 18px;\n overflow-x: auto;\n }\n\n .MuiDialogContent-root,\n .MuiDrawer-paper,\n .customScrollbar,\n textarea {\n ::-webkit-scrollbar {\n width: 8px;\n border-radius: 4px;\n background-color: #84848415;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #8484844b;\n border-radius: 4px;\n }\n ::-webkit-scrollbar-thumb:hover {\n background-color: #84848476;\n }\n ::-webkit-scrollbar-track {\n border-radius: 4px;\n background-color: #84848415;\n }\n }\n\n /* react-spring-bottom-sheet styles */\n div[role=\"dialog\"] {\n border-radius: 42px 42px 0 0;\n z-index: 9999999;\n }\n\n div[data-rsbs-backdrop] {\n z-index: 999;\n }\n\n div[data-rsbs-header] {\n z-index: 999999;\n box-shadow: none;\n &::before {\n width: 60px;\n height: 6px;\n border-radius: 100px;\n background: ${isDarkMode ? \"#717171\" : \"#cfcfcf\"};\n margin-top: 3px;\n }\n }\n `}\n />\n );\n};\n","import { keyframes } from \"@emotion/react\";\n\n/**\n * Fade in from the left with slight movement on the X-axis.\n */\nexport const fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(-40px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\n/**\n * Simple fade in animation (opacity only).\n */\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n/**\n * Slide in from the left side of the screen.\n */\nexport const slideIn = keyframes`\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n`;\n\n/**\n * Slide in from the bottom of the screen.\n */\nexport const slideInBottom = keyframes`\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n`;\n\n/**\n * Scale from 0 to full size.\n */\nexport const scale = keyframes`\n from {\n transform: scale(0);\n }\n to {\n transform: scale(1);\n }\n`;\n\n/**\n * Creates a pulsating animation using scale and box-shadow.\n * Simulates a glowing effect.\n *\n * @param clr - The base color for the shadow in hex format.\n * @param shadowBlur - The maximum spread of the shadow during the pulse (default: 12).\n * @returns Emotion keyframes animation.\n */\nexport const pulseAnimation = (clr: string, shadowBlur = 12) => keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}b2;\n }\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 ${shadowBlur}px ${clr}00;\n }\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 ${clr}00;\n }\n`;\n\n/**\n * Creates a glowing pulse animation using drop-shadow.\n * Used in progress or highlight elements.\n *\n * @param clr - The glow color in hex.\n * @returns Emotion keyframes animation.\n */\nexport const progressPulse = (clr: string) => keyframes`\n 0% {\n filter: none;\n }\n 50% {\n filter: drop-shadow(0 0 10px ${clr}78);\n }\n 100% {\n filter: none;\n }\n`;\n\n/**\n * A bounce-scale animation used during logout transition.\n */\nexport const logoutAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(0.9) translateX(-2px);\n opacity: 0.7;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\n/**\n * Subtle bounce animation used for install app prompts.\n */\nexport const installAppAnimation = keyframes`\n 0% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-5px);\n }\n 50% {\n transform: translateY(2px);\n }\n 70% {\n transform: translateY(-2px);\n }\n 100% {\n transform: translateY(0);\n }\n`;\n","import type { Theme } from \"@mui/material\";\nimport type { TypographyVariantsOptions } from \"@mui/material/styles/createTypography\";\n\n/**\n * Default MUI Typography variant-to-element mapping.\n * Custom variants are mapped to HTML tags like <p>, <h1>, etc.\n */\nexport const typographyProps: Theme[\"components\"] = {\n MuiTypography: {\n defaultProps: {\n variantMapping: {\n // Text variants\n ...Object.fromEntries(\n [\"xl\", \"lg\", \"md\", \"sm\", \"xs\", \"2xs\"].flatMap((size) => [\n [`text_${size}_regular`, \"p\"],\n [`text_${size}_bold`, \"p\"],\n [`text_${size}_semibold`, \"p\"],\n [`text_${size}_thin`, \"p\"],\n ]),\n ),\n // Display variants\n display_2xl_regular: \"h1\",\n display_xl_regular: \"h2\",\n display_lg_regular: \"h3\",\n display_md_regular: \"h4\",\n display_sm_regular: \"h5\",\n display_xs_regular: \"h6\",\n display_2xl_bold: \"h1\",\n display_xl_bold: \"h2\",\n display_lg_bold: \"h3\",\n display_md_bold: \"h4\",\n display_sm_bold: \"h5\",\n display_xs_bold: \"h6\",\n },\n },\n },\n};\n\n/**\n * Custom typography variants.\n * Defines font-weight, size, line-height and optionally fallback font.\n */\nexport const typographyVariants: TypographyVariantsOptions = {\n // TEXT_REGULAR\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_BOLD\n text_xl_bold: { font: \"600 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_SEMIBOLD\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_THIN\n text_xl_thin: { font: \"100 20px/30px inherit inherit\" },\n text_lg_thin: { font: \"100 18px/28px inherit inherit\" },\n text_md_thin: { font: \"100 16px/24px inherit inherit\" },\n text_sm_thin: { font: \"100 14px/20px inherit inherit\" },\n text_xs_thin: { font: \"100 12px/18px inherit inherit\" },\n text_2xs_thin: { font: \"100 10px/14px inherit inherit\" },\n\n // DISPLAY_REGULAR\n display_2xl_regular: { font: \"400 72px/90px inherit inherit\" },\n display_xl_regular: { font: \"400 60px/72px inherit inherit\" },\n display_lg_regular: { font: \"400 48px/60px inherit inherit\" },\n display_md_regular: { font: \"400 36px/44px inherit inherit\" },\n display_sm_regular: { font: \"400 30px/38px inherit inherit\" },\n display_xs_regular: { font: \"400 24px/32px inherit inherit\" },\n\n // DISPLAY_BOLD\n display_2xl_bold: { font: \"700 72px/90px inherit inherit\" },\n display_xl_bold: { font: \"700 60px/72px inherit inherit\" },\n display_lg_bold: { font: \"700 48px/60px inherit inherit\" },\n display_md_bold: { font: \"700 36px/44px inherit inherit\" },\n display_sm_bold: { font: \"700 30px/38px inherit inherit\" },\n display_xs_bold: { font: \"700 24px/32px inherit inherit\" },\n};\n","/**\n * Returns a greeting based on the current time.\n * @returns {string} The appropriate greeting.\n */\nexport const displayGreeting = (): string => {\n const currentTime = new Date();\n const currentHour = currentTime.getHours();\n let greeting: string;\n if (currentHour < 12 && currentHour >= 5) {\n greeting = \"Доброе утро,\";\n } else if (currentHour < 18 && currentHour > 12) {\n greeting = \"Добрый день,\";\n } else {\n greeting = \"Добрый вечер,\";\n }\n\n return greeting;\n};\n","/**\n * Function to extract year, month, and day from a Date object\n */\nexport const getDayIdentifier = (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based in JavaScript\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","/**\n * A list of supported operating systems.\n */\nexport type OperatingSystem =\n | \"Windows\"\n | \"macOS\"\n | \"Linux\"\n | \"iOS\"\n | \"Android\"\n | \"Unknown\";\n\n/**\n * A list of supported browsers.\n */\nexport type Browser = \"Chrome\" | \"Firefox\" | \"Safari\" | \"Edge\" | \"Unknown\";\n\nconst { userAgent } = globalThis.navigator;\n\n/**\n * Detects the user's operating system based on the user agent string.\n *\n * @returns {OperatingSystem} The name of the detected operating system.\n */\nexport const getOperatingSystem = (): OperatingSystem => {\n const ua = userAgent.toLowerCase();\n\n if (ua.includes(\"windows nt\")) return \"Windows\";\n if (ua.includes(\"iphone\") || ua.includes(\"ipad\") || ua.includes(\"ipod\"))\n return \"iOS\";\n if (ua.includes(\"mac\")) return \"macOS\";\n if (ua.includes(\"android\")) return \"Android\";\n if (ua.includes(\"linux\")) return \"Linux\";\n\n return \"Unknown\";\n};\n\n/**\n * Detects the user's browser based on the user agent string.\n *\n * @returns {Browser} The name of the detected browser.\n */\nexport const getBrowser = (): Browser => {\n const ua = userAgent.toLowerCase();\n\n // Order matters: Edge must come before Chrome\n if (ua.includes(\"edg\")) return \"Edge\";\n if (ua.includes(\"chrome\")) return \"Chrome\";\n if (ua.includes(\"firefox\")) return \"Firefox\";\n if (ua.includes(\"safari\")) return \"Safari\";\n\n return \"Unknown\";\n};\n\n/**\n * Basic information about the user's system (OS and browser).\n */\nexport const systemInfo = {\n os: getOperatingSystem(),\n browser: getBrowser(),\n};\n","/**\n * Converts a given date to a human-readable relative time string.\n *\n * @param {Date} date - The date to be converted.\n * @param lang\n * @returns {string} A string representing the relative time using `Intl` format (e.g., \"2 days ago\").\n */\nexport const timeAgo = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n // Get the current date and time\n const now = new Date();\n date = new Date(date);\n // Calculate the time difference in seconds\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n // Create an Intl.RelativeTimeFormat instance with the user's language\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n // Determine the appropriate unit and format the result\n if (diffInSeconds < 60) {\n return rtf.format(-diffInSeconds, \"second\");\n }\n if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60);\n return rtf.format(-minutes, \"minute\");\n }\n if (diffInSeconds < 86_400) {\n const hours = Math.floor(diffInSeconds / 3600);\n return rtf.format(-hours, \"hour\");\n }\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(-days, \"day\");\n};\n\nexport const timeAgoFromStart = (\n date: Date,\n lang = navigator.language || \"en-US\",\n): string => {\n const now = new Date();\n date = new Date(date);\n const difference = (date.getTime() - now.getTime()) / 1000;\n const differenceHours = Math.floor(difference / (60 * 60));\n const differenceMinutes = Math.floor(\n (difference - 60 * 60 * differenceHours) / 60,\n );\n const diffInSeconds = Math.floor(\n difference - 60 * 60 * differenceHours - 60 * differenceMinutes,\n );\n\n const rtf = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n\n if (differenceMinutes === 0 && diffInSeconds < 60) {\n return rtf.format(diffInSeconds, \"second\");\n }\n if (differenceHours === 0 && differenceMinutes < 60) {\n return rtf.format(differenceMinutes, \"minute\");\n }\n if (differenceHours < 24) {\n const hours = `${new Intl.RelativeTimeFormat(lang, {\n numeric: \"auto\",\n }).format(differenceHours, \"hour\")}`;\n const minutes = ` ${new Intl.RelativeTimeFormat(lang, {\n localeMatcher: \"lookup\",\n numeric: \"always\",\n style: \"long\",\n }).format(differenceMinutes, \"minute\")}`.replace(/^\\D+/, \"\");\n return `${hours} ${minutes}`;\n }\n\n const days = Math.floor(diffInSeconds / 86_400);\n return rtf.format(days, \"day\");\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * A custom React hook to determine if the current device is a smaller device\n * based on the screen width.\n * @param [breakpoint=768] - The breakpoint in pixels at which a device is considered \"smaller\".\n * @returns {boolean} - A boolean value indicating whether the current device is a smaller device.\n */\nexport const useResponsiveDisplay = (breakpoint = 768): boolean => {\n const [isSmallerDevice, setIsSmallerDevice] = useState<boolean>(false);\n\n useEffect(() => {\n const checkScreenSize = () => {\n setIsSmallerDevice(window.innerWidth < breakpoint);\n };\n checkScreenSize();\n const handleResize = () => checkScreenSize();\n window.addEventListener(\"resize\", handleResize);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [breakpoint]);\n\n return isSmallerDevice;\n};\n","import { useState, useEffect } from \"react\";\n\nimport type { SystemTheme } from \"../models\";\n\n/**\n * A React hook to detect the system theme preference.\n * @returns The current system theme ('light', 'dark', or 'unknown').\n */\nexport const useSystemTheme = (): SystemTheme => {\n const [theme, setTheme] = useState<SystemTheme>(\"unknown\");\n useEffect(() => {\n const mediaQueryListener = (e: MediaQueryListEvent) => {\n setTheme(e.matches ? \"dark\" : \"light\");\n };\n\n const prefersDarkScheme = globalThis.matchMedia(\n \"(prefers-color-scheme: dark)\",\n );\n setTheme(prefersDarkScheme.matches ? \"dark\" : \"light\");\n\n // Listen for changes in system theme\n prefersDarkScheme.addEventListener(\"change\", mediaQueryListener);\n\n return () => {\n prefersDarkScheme.removeEventListener(\"change\", mediaQueryListener);\n };\n }, []);\n\n return theme;\n};\n"],"mappings":"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","names":["styled","Button","DialogBtn","React","styled","ErrorOutlineRounded","Box","jsx","jsxs","ErrorBoundary","props","error","errorInfo","_a","_b","_c","state","Container","ErrorHeader","useEffect","useState","styled","Box","CircularProgress","Fragment","jsx","jsxs","Loading","showLoading","setShowLoading","timer","Container","styled","PathName","createContext","useContext","ThemeContext","useThemeSettings","context","useMemo","useState","useEffect","EmotionThemeProvider","MuiThemeProvider","ColorPalette","themeConfig","isHexColor","value","getFontColor","backgroundColor","ColorPalette","hex","fullHex","c","r","g","b","isFontLight","color","commonComponentProps","theme","createTheme","createCustomTheme","primaryColor","backgroundColor","mode","createTheme","ColorPalette","commonComponentProps","themes","themeConfig","name","config","isDarkMode","darkMode","systemTheme","getFontColor","useMemo","Global","css","useTheme","jsx","GlobalStyles","theme","useTheme","isDarkMode","primaryColor","secondaryColor","primaryFontColor","useMemo","getFontColor","secondaryFontColor","Global","css","keyframes","fadeInLeft","fadeIn","slideIn","slideInBottom","scale","pulseAnimation","clr","shadowBlur","progressPulse","logoutAnimation","installAppAnimation","typographyProps","size","typographyVariants","displayGreeting","currentHour","greeting","getDayIdentifier","date","year","month","day","userAgent","getOperatingSystem","ua","getBrowser","systemInfo","timeAgo","date","lang","now","diffInSeconds","rtf","minutes","hours","days","timeAgoFromStart","difference","differenceHours","differenceMinutes","useEffect","useState","useResponsiveDisplay","breakpoint","isSmallerDevice","setIsSmallerDevice","checkScreenSize","handleResize","useState","useEffect","useSystemTheme","theme","setTheme","mediaQueryListener","e","prefersDarkScheme","jsx","ThemeProviderWrapper","children","systemTheme","useSystemTheme","theme","setTheme","useState","stored","darkMode","setDarkMode","useEffect","selectedTheme","useMemo","_a","themes","t","mode","isDarkMode","muiTheme","createCustomTheme","emotionTheme","ThemeContext","MuiThemeProvider","EmotionThemeProvider"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomazing-org/design-system",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
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",