2021-08-04 23:31:54 +00:00
|
|
|
//
|
|
|
|
// Copyright © 2020 Anticrm Platform Contributors.
|
2022-04-29 05:27:17 +00:00
|
|
|
//
|
2021-08-04 23:31:54 +00:00
|
|
|
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License. You may
|
|
|
|
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
|
2022-04-29 05:27:17 +00:00
|
|
|
//
|
2021-08-04 23:31:54 +00:00
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
2022-04-29 05:27:17 +00:00
|
|
|
//
|
2021-08-04 23:31:54 +00:00
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
//
|
|
|
|
|
2024-02-15 15:19:33 +00:00
|
|
|
import { Analytics } from '@hcengineering/analytics'
|
2022-09-21 08:08:25 +00:00
|
|
|
import '@hcengineering/platform-rig/profiles/ui/svelte'
|
2024-09-19 15:35:18 +00:00
|
|
|
import { derived, writable } from 'svelte/store'
|
2022-06-03 16:44:11 +00:00
|
|
|
|
2021-08-04 23:31:54 +00:00
|
|
|
export { default as Theme } from './Theme.svelte'
|
2022-09-16 02:59:16 +00:00
|
|
|
|
2023-06-05 07:36:04 +00:00
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
*/
|
|
|
|
export const setDefaultLanguage = (language: string): void => {
|
|
|
|
if (localStorage.getItem('lang') === null) {
|
|
|
|
localStorage.setItem('lang', language)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-06 10:11:30 +00:00
|
|
|
function getDefaultProps (prop: string, value: string): string {
|
|
|
|
localStorage.setItem(prop, value)
|
|
|
|
return value
|
2023-07-29 09:20:40 +00:00
|
|
|
}
|
|
|
|
|
2023-05-24 16:53:06 +00:00
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
*/
|
2023-11-06 10:11:30 +00:00
|
|
|
export const isSystemThemeDark = (): boolean => window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
*/
|
|
|
|
export const isThemeDark = (theme: string): boolean =>
|
|
|
|
theme === 'theme-dark' || (theme === 'theme-system' && isSystemThemeDark())
|
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
*/
|
|
|
|
export const getCurrentTheme = (): string => localStorage.getItem('theme') ?? getDefaultProps('theme', 'theme-system')
|
2023-05-24 16:53:06 +00:00
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
*/
|
2023-11-06 10:11:30 +00:00
|
|
|
export const getCurrentFontSize = (): string =>
|
|
|
|
localStorage.getItem('fontsize') ?? getDefaultProps('fontsize', 'normal-font')
|
2023-05-24 16:53:06 +00:00
|
|
|
/**
|
|
|
|
* @public
|
|
|
|
*/
|
2024-02-15 15:19:33 +00:00
|
|
|
export const getCurrentLanguage = (): string => {
|
|
|
|
const lang = localStorage.getItem('lang') ?? getDefaultProps('lang', 'en')
|
|
|
|
Analytics.setTag('language', lang)
|
|
|
|
return lang
|
|
|
|
}
|
2023-05-24 16:53:06 +00:00
|
|
|
|
|
|
|
export class ThemeOptions {
|
2023-11-20 10:01:43 +00:00
|
|
|
constructor (
|
|
|
|
readonly fontSize: number,
|
|
|
|
readonly dark: boolean,
|
|
|
|
readonly language: string
|
|
|
|
) {}
|
2022-09-16 02:59:16 +00:00
|
|
|
}
|
2024-09-18 11:37:54 +00:00
|
|
|
export const themeStore = writable<ThemeOptions>()
|
|
|
|
|
|
|
|
export function initThemeStore (): void {
|
|
|
|
themeStore.set(
|
|
|
|
new ThemeOptions(
|
|
|
|
getCurrentFontSize() === 'normal-font' ? 16 : 14,
|
|
|
|
isThemeDark(getCurrentTheme()),
|
|
|
|
getCurrentLanguage()
|
|
|
|
)
|
2023-06-22 04:55:57 +00:00
|
|
|
)
|
2024-09-18 11:37:54 +00:00
|
|
|
}
|
2024-09-19 15:35:18 +00:00
|
|
|
|
2024-11-07 17:05:05 +00:00
|
|
|
export const languageStore = derived(themeStore, ($theme) => $theme?.language ?? '')
|