@hyvor/design 1.0.13 → 1.1.1

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.
Files changed (41) hide show
  1. package/dist/components/BoxShadowPicker/BoxShadowPicker.svelte +148 -0
  2. package/dist/components/BoxShadowPicker/BoxShadowPicker.svelte.d.ts +10 -0
  3. package/dist/components/BoxShadowPicker/ShadowPreviewBox.svelte +25 -0
  4. package/dist/components/BoxShadowPicker/ShadowPreviewBox.svelte.d.ts +7 -0
  5. package/dist/components/ColorPicker/ColorPicker.svelte +10 -2
  6. package/dist/components/ColorPicker/ColorPicker.svelte.d.ts +3 -0
  7. package/dist/components/Dark/DarkProvider.svelte +1 -1
  8. package/dist/components/HyvorBar/BarProducts.svelte +16 -7
  9. package/dist/components/HyvorBar/BarSupport.svelte +28 -16
  10. package/dist/components/HyvorBar/HyvorBar.svelte +8 -18
  11. package/dist/components/HyvorBar/HyvorBar.svelte.d.ts +2 -2
  12. package/dist/components/HyvorBar/bar.d.ts +2 -3
  13. package/dist/components/Internationalization/InternationalizationProvider.svelte +3 -2
  14. package/dist/components/Internationalization/InternationalizationProvider.svelte.d.ts +1 -0
  15. package/dist/components/Internationalization/LanguageToggle.svelte +19 -8
  16. package/dist/components/Internationalization/LanguageToggle.svelte.d.ts +1 -0
  17. package/dist/components/Internationalization/i18n.d.ts +9 -4
  18. package/dist/components/Internationalization/i18n.js +53 -10
  19. package/dist/components/NavLink/NavLink.svelte +4 -0
  20. package/dist/components/Slider/Slider.svelte +13 -2
  21. package/dist/components/Slider/Slider.svelte.d.ts +2 -0
  22. package/dist/components/Usage/Usage.svelte +126 -0
  23. package/dist/components/Usage/Usage.svelte.d.ts +12 -0
  24. package/dist/components/index.d.ts +3 -0
  25. package/dist/components/index.js +3 -0
  26. package/dist/marketing/Footer/Footer.svelte +14 -18
  27. package/dist/marketing/Footer/Footer.svelte.d.ts +3 -3
  28. package/dist/marketing/Header/Header.svelte +3 -1
  29. package/dist/marketing/Header/Header.svelte.d.ts +1 -0
  30. package/dist/marketing/social.d.ts +9 -0
  31. package/dist/marketing/social.js +8 -0
  32. package/dist/stores/dark.d.ts +1 -0
  33. package/dist/stores/dark.js +4 -3
  34. package/dist/variables.scss +1 -1
  35. package/package.json +2 -2
  36. package/dist/marketing/Logo/LogoBlogs.svelte +0 -46
  37. package/dist/marketing/Logo/LogoBlogs.svelte.d.ts +0 -6
  38. package/dist/marketing/Logo/LogoCore.svelte +0 -46
  39. package/dist/marketing/Logo/LogoCore.svelte.d.ts +0 -6
  40. package/dist/marketing/Logo/LogoTalk.svelte +0 -32
  41. package/dist/marketing/Logo/LogoTalk.svelte.d.ts +0 -6
@@ -1,7 +1,8 @@
1
1
  import { deepmerge } from 'deepmerge-ts';
2
- import { writable, derived } from 'svelte/store';
2
+ import { writable, derived, get } from 'svelte/store';
3
3
  import { t } from './t.js';
4
4
  import T from './T.svelte';
5
+ export const LOCALE_LOCAL_STORAGE_KEY = 'hds-language';
5
6
  export class InternationalizationService {
6
7
  languages = [];
7
8
  locale;
@@ -9,7 +10,7 @@ export class InternationalizationService {
9
10
  strings = writable({});
10
11
  stringsCache = new Map();
11
12
  defaultStrings;
12
- constructor(languages) {
13
+ constructor(languages, forceLanguage) {
13
14
  const defaultLanguage = languages.find((l) => l.default);
14
15
  if (!defaultLanguage) {
15
16
  throw new Error('Default language not found');
@@ -26,6 +27,28 @@ export class InternationalizationService {
26
27
  for (const language of languages) {
27
28
  this.register(language);
28
29
  }
30
+ const localeStorageLocale = InternationalizationService.getLocaleFromLocalStorage();
31
+ const browserLocale = InternationalizationService.getClosestLanguageCode(navigator.language, this.languages.map((l) => l.code));
32
+ if (forceLanguage) {
33
+ this.setLocale(forceLanguage);
34
+ }
35
+ else if (localeStorageLocale) {
36
+ this.setLocale(localeStorageLocale);
37
+ }
38
+ else if (browserLocale) {
39
+ this.setLocale(browserLocale);
40
+ }
41
+ }
42
+ static getLocaleFromLocalStorage() {
43
+ if (typeof window !== 'undefined') {
44
+ return localStorage.getItem(LOCALE_LOCAL_STORAGE_KEY);
45
+ }
46
+ return null;
47
+ }
48
+ setLocaleOnLocalStorage(code) {
49
+ if (typeof window !== 'undefined') {
50
+ localStorage.setItem(LOCALE_LOCAL_STORAGE_KEY, code);
51
+ }
29
52
  }
30
53
  setStrings(code) {
31
54
  const defaultStrings = this.defaultStrings;
@@ -33,20 +56,28 @@ export class InternationalizationService {
33
56
  const merged = deepmerge(defaultStrings, strings);
34
57
  this.strings.set(merged);
35
58
  }
36
- setLocale(code) {
59
+ async setLocale(code) {
37
60
  if (this.stringsCache.has(code)) {
38
61
  this.setStrings(code);
39
62
  this.locale.set(code);
40
63
  }
41
64
  else {
42
- this.languageByCode(code)
43
- ?.loader()
44
- .then(({ default: strings }) => {
45
- this.stringsCache.set(code, strings);
46
- this.setStrings(code);
47
- this.locale.set(code);
48
- });
65
+ const language = this.languageByCode(code);
66
+ if (!language) {
67
+ throw new Error(`Language with code ${code} not found`);
68
+ }
69
+ let strings = language.strings;
70
+ if (!strings) {
71
+ strings = await language.loader();
72
+ }
73
+ this.stringsCache.set(code, strings);
74
+ this.setStrings(code);
75
+ this.locale.set(code);
49
76
  }
77
+ this.setLocaleOnLocalStorage(code);
78
+ }
79
+ getLocale() {
80
+ return get(this.locale);
50
81
  }
51
82
  register(language) {
52
83
  this.languages.push({
@@ -65,6 +96,18 @@ export class InternationalizationService {
65
96
  t(key, params = {}) {
66
97
  return t(key, params, this);
67
98
  }
99
+ static getClosestLanguageCode(code, availableCodes) {
100
+ if (availableCodes.includes(code)) {
101
+ return code;
102
+ }
103
+ const codeLanguagePart = code.split('-')[0];
104
+ for (const availableCode of availableCodes) {
105
+ if (availableCode.split('-')[0] === codeLanguagePart) {
106
+ return availableCode;
107
+ }
108
+ }
109
+ return null;
110
+ }
68
111
  T = T;
69
112
  }
70
113
  export function getStringByKey(messages, key) {
@@ -68,6 +68,10 @@
68
68
  border-left: 3px solid var(--accent);
69
69
  }
70
70
 
71
+ :global(:root.dark) a.active {
72
+ background-color: color-mix(in srgb, var(--accent-lightest), transparent 80%);
73
+ }
74
+
71
75
  a.disabled {
72
76
  cursor: not-allowed;
73
77
  pointer-events: none;
@@ -8,9 +8,19 @@
8
8
  step?: number;
9
9
  // export let disabled = false;
10
10
  dots?: boolean;
11
+ onchange?: (value: number) => void;
12
+ valueFormat?: (value: number) => string;
11
13
  }
12
14
 
13
- let { min, max, value = $bindable(), step = 1, dots = false }: Props = $props();
15
+ let {
16
+ min,
17
+ max,
18
+ value = $bindable(),
19
+ step = 1,
20
+ dots = false,
21
+ onchange,
22
+ valueFormat = (val) => val.toString()
23
+ }: Props = $props();
14
24
 
15
25
  const dispatch = createEventDispatcher<{
16
26
  change: number;
@@ -75,6 +85,7 @@
75
85
  const newValue = min + (x / width) * (max - min);
76
86
  value = toStep(newValue);
77
87
  dispatch('change', value);
88
+ onchange?.(value);
78
89
  }
79
90
  </script>
80
91
 
@@ -90,7 +101,7 @@
90
101
  <div class="progress" style="width: {progress}%"></div>
91
102
  <button class="handle" style="left: {progress}%">
92
103
  <span class="tip">
93
- {value}
104
+ {valueFormat(value)}
94
105
  </span>
95
106
  </button>
96
107
 
@@ -4,6 +4,8 @@ interface Props {
4
4
  value: number;
5
5
  step?: number;
6
6
  dots?: boolean;
7
+ onchange?: (value: number) => void;
8
+ valueFormat?: (value: number) => string;
7
9
  }
8
10
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
9
11
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -0,0 +1,126 @@
1
+ <script lang="ts">
2
+ import { onMount } from 'svelte';
3
+ // import byteFormatter from '../../../lib/helper/byte-formatter';
4
+
5
+ interface Props {
6
+ name: string;
7
+ current: number;
8
+ limit: number;
9
+ bytes?: boolean;
10
+ warningPercentage?: number;
11
+ dangerPercentage?: number;
12
+ notIncludedText?: string;
13
+ }
14
+
15
+ let {
16
+ name,
17
+ current,
18
+ limit,
19
+ bytes = false,
20
+ warningPercentage = 85,
21
+ dangerPercentage = 95,
22
+ notIncludedText = 'Your license does not include this feature.'
23
+ }: Props = $props();
24
+
25
+ let width = $state('0%');
26
+ let percentage = $derived(Math.min(limit === 0 ? 100 : (current / limit) * 100, 100));
27
+
28
+ onMount(() => {
29
+ setTimeout(() => {
30
+ width = percentage + '%';
31
+ }, 200);
32
+ });
33
+
34
+ function byteFormatter(bytes: number) {
35
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
36
+ if (bytes == 0) return '0 Bytes';
37
+ const i = parseInt(String(Math.floor(Math.log(bytes) / Math.log(1000))));
38
+ return Math.round(bytes / Math.pow(1000, i)) + ' ' + sizes[i];
39
+ }
40
+
41
+ function getReadableValue(num: number) {
42
+ if (bytes) {
43
+ return byteFormatter(num);
44
+ }
45
+ return num.toLocaleString();
46
+ }
47
+
48
+ let color = $derived.by(() => {
49
+ if (percentage >= dangerPercentage) {
50
+ return 'var(--red-dark)';
51
+ } else if (percentage >= warningPercentage) {
52
+ return 'var(--orange-dark)';
53
+ } else {
54
+ return 'var(--accent)';
55
+ }
56
+ });
57
+ </script>
58
+
59
+ <div class="usage-bar">
60
+ <div class="usage-bar-top">
61
+ <div class="usage-name">
62
+ {name}
63
+ </div>
64
+ {#if limit > 0}
65
+ <div class="usage-number">
66
+ <span class="usage-now" style:color={color === 'var(--accent)' ? 'var(--text)' : color}
67
+ >{getReadableValue(current)}</span
68
+ >
69
+ <span class="usage-full">/ {getReadableValue(limit)}</span>
70
+ </div>
71
+ {/if}
72
+ </div>
73
+
74
+ {#if limit === 0}
75
+ <div class="feature-not-included">{notIncludedText}</div>
76
+ {:else}
77
+ <div class="usage-bar-bar">
78
+ <div class="usage-bar-fill" style:width style:background={color}></div>
79
+ </div>
80
+ {/if}
81
+ </div>
82
+
83
+ <style>.usage-bar-top {
84
+ display: flex;
85
+ }
86
+
87
+ .usage-name {
88
+ flex: 1;
89
+ font-size: 14px;
90
+ }
91
+
92
+ .usage-now {
93
+ margin-right: 4px;
94
+ font-weight: 600;
95
+ }
96
+
97
+ .usage-full {
98
+ color: var(--text-light);
99
+ font-size: 12px;
100
+ }
101
+
102
+ .usage-bar-bar {
103
+ margin: 6px 0 15px;
104
+ width: 100%;
105
+ height: 15px;
106
+ background: var(--accent-light);
107
+ border-radius: 20px;
108
+ position: relative;
109
+ overflow: hidden;
110
+ }
111
+
112
+ .usage-bar-fill {
113
+ position: absolute;
114
+ left: 0;
115
+ top: 0;
116
+ height: 100%;
117
+ background: var(--accent);
118
+ border-radius: 20px;
119
+ transition: 0.3s width ease-out;
120
+ }
121
+
122
+ .feature-not-included {
123
+ color: var(--text-light);
124
+ font-size: 12px;
125
+ margin: 5px 0 15px;
126
+ }</style>
@@ -0,0 +1,12 @@
1
+ interface Props {
2
+ name: string;
3
+ current: number;
4
+ limit: number;
5
+ bytes?: boolean;
6
+ warningPercentage?: number;
7
+ dangerPercentage?: number;
8
+ notIncludedText?: string;
9
+ }
10
+ declare const Usage: import("svelte").Component<Props, {}, "">;
11
+ type Usage = ReturnType<typeof Usage>;
12
+ export default Usage;
@@ -7,10 +7,12 @@ export { default as Base } from './Base/Base.svelte';
7
7
  export { default as Box } from './Box/Box.svelte';
8
8
  export { default as Button } from './Button/Button.svelte';
9
9
  export { default as ButtonGroup } from './Button/ButtonGroup.svelte';
10
+ export { default as BoxShadowPicker } from './BoxShadowPicker/BoxShadowPicker.svelte';
10
11
  export { default as Callout } from './Callout/Callout.svelte';
11
12
  export { default as Checkbox } from './Checkbox/Checkbox.svelte';
12
13
  export { default as CodeBlock } from './CodeBlock/CodeBlock.svelte';
13
14
  export { default as ColorPicker } from './ColorPicker/ColorPicker.svelte';
15
+ export { default as DarkProvider } from './Dark/DarkProvider.svelte';
14
16
  export { default as DarkToggle } from './Dark/DarkToggle.svelte';
15
17
  export { default as Dropdown } from './Dropdown/Dropdown.svelte';
16
18
  export { default as Divider } from './Divider/Divider.svelte';
@@ -43,6 +45,7 @@ export { default as Text } from './Text/Text.svelte';
43
45
  export { default as TextInput } from './TextInput/TextInput.svelte';
44
46
  export { default as toast } from './Toast/toast.js';
45
47
  export { default as Tooltip } from './Tooltip/Tooltip.svelte';
48
+ export { default as Usage } from './Usage/Usage.svelte';
46
49
  export { default as IconMessage } from './IconMessage/IconMessage.svelte';
47
50
  export { clickOutside } from './directives/clickOutside.js';
48
51
  export { default as InternationalizationProvider } from './Internationalization/InternationalizationProvider.svelte';
@@ -7,10 +7,12 @@ export { default as Base } from './Base/Base.svelte';
7
7
  export { default as Box } from './Box/Box.svelte';
8
8
  export { default as Button } from './Button/Button.svelte';
9
9
  export { default as ButtonGroup } from './Button/ButtonGroup.svelte';
10
+ export { default as BoxShadowPicker } from './BoxShadowPicker/BoxShadowPicker.svelte';
10
11
  export { default as Callout } from './Callout/Callout.svelte';
11
12
  export { default as Checkbox } from './Checkbox/Checkbox.svelte';
12
13
  export { default as CodeBlock } from './CodeBlock/CodeBlock.svelte';
13
14
  export { default as ColorPicker } from './ColorPicker/ColorPicker.svelte';
15
+ export { default as DarkProvider } from './Dark/DarkProvider.svelte';
14
16
  export { default as DarkToggle } from './Dark/DarkToggle.svelte';
15
17
  export { default as Dropdown } from './Dropdown/Dropdown.svelte';
16
18
  export { default as Divider } from './Divider/Divider.svelte';
@@ -43,6 +45,7 @@ export { default as Text } from './Text/Text.svelte';
43
45
  export { default as TextInput } from './TextInput/TextInput.svelte';
44
46
  export { default as toast } from './Toast/toast.js';
45
47
  export { default as Tooltip } from './Tooltip/Tooltip.svelte';
48
+ export { default as Usage } from './Usage/Usage.svelte';
46
49
  export { default as IconMessage } from './IconMessage/IconMessage.svelte';
47
50
  // directives
48
51
  export { clickOutside } from './directives/clickOutside.js';
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import Container from '../Container/Container.svelte';
3
-
4
3
  import IconCopy from '@hyvor/icons/IconCopy';
5
4
  import IconDiscord from '@hyvor/icons/IconDiscord';
6
5
  import IconEnvelope from '@hyvor/icons/IconEnvelope';
@@ -8,39 +7,34 @@
8
7
  import IconLinkedin from '@hyvor/icons/IconLinkedin';
9
8
  import IconTwitterX from '@hyvor/icons/IconTwitterX';
10
9
  import IconYoutube from '@hyvor/icons/IconYoutube';
11
-
12
10
  import Link from '../../components/Link/Link.svelte';
13
11
  import IconButton from '../../components/IconButton/IconButton.svelte';
14
12
  import Tooltip from '../../components/Tooltip/Tooltip.svelte';
15
13
  import LanguageToggle from '../../components/Internationalization/LanguageToggle.svelte';
14
+ import IconBluesky from '@hyvor/icons/IconBluesky';
15
+ import { SOCIAL_LINKS, type Socials } from '../social.js';
16
16
 
17
17
  const year = new Date().getFullYear();
18
18
 
19
19
  interface Props {
20
20
  email?: string | null;
21
- social?: any;
22
- emailCopied?: boolean;
21
+ social?: Partial<Socials>;
23
22
  center?: import('svelte').Snippet;
24
23
  }
25
24
 
26
25
  let {
27
26
  email = null,
28
27
  social = $bindable({} as Record<string, string | null>),
29
- emailCopied = $bindable(false),
30
28
  center
31
29
  }: Props = $props();
32
30
 
33
31
  social = {
34
- ...{
35
- x: null,
36
- discord: 'https://discord.com/invite/2WRJxQB',
37
- github: 'https://github.com/hyvor',
38
- youtube: 'https://www.youtube.com/@HYVOR',
39
- linkedin: 'https://www.linkedin.com/company/30240435'
40
- },
32
+ ...SOCIAL_LINKS,
41
33
  ...social
42
34
  };
43
35
 
36
+ let emailCopied = $state(false);
37
+
44
38
  function handleCopy() {
45
39
  navigator.clipboard.writeText(email!);
46
40
  emailCopied = true;
@@ -79,25 +73,27 @@
79
73
  {#if social.github}
80
74
  <a href={social.github} target="_blank" rel="nofollow"><IconGithub /></a>
81
75
  {/if}
82
- {#if social.x}
83
- <a href={social.x} target="_blank" rel="nofollow"><IconTwitterX /></a>
84
- {/if}
85
76
  {#if social.discord}
86
77
  <a href={social.discord} target="_blank" rel="nofollow"><IconDiscord /></a>
87
78
  {/if}
79
+ {#if social.blueksy}
80
+ <a href={social.blueksy} target="_blank" rel="nofollow"><IconBluesky /></a>
81
+ {/if}
82
+ {#if social.x}
83
+ <a href={social.x} target="_blank" rel="nofollow"><IconTwitterX /></a>
84
+ {/if}
88
85
  {#if social.youtube}
89
86
  <a href={social.youtube} target="_blank" rel="nofollow"><IconYoutube /></a>
90
87
  {/if}
91
88
  {#if social.linkedin}
92
- <a href={social.linkedin} target="_blank" rel="nofollow"><IconLinkedin /></a
93
- >
89
+ <a href={social.linkedin} target="_blank" rel="nofollow"><IconLinkedin /></a>
94
90
  {/if}
95
91
  </div>
96
92
  </div>
97
93
 
98
94
  <div class="footer-top-right">
99
95
  <span class="language-toggle-wrap">
100
- <LanguageToggle />
96
+ <LanguageToggle align="end" position="top" staticPage />
101
97
  </span>
102
98
  </div>
103
99
  </div>
@@ -1,9 +1,9 @@
1
+ import { type Socials } from '../social.js';
1
2
  interface Props {
2
3
  email?: string | null;
3
- social?: any;
4
- emailCopied?: boolean;
4
+ social?: Partial<Socials>;
5
5
  center?: import('svelte').Snippet;
6
6
  }
7
- declare const Footer: import("svelte").Component<Props, {}, "social" | "emailCopied">;
7
+ declare const Footer: import("svelte").Component<Props, {}, "social">;
8
8
  type Footer = ReturnType<typeof Footer>;
9
9
  export default Footer;
@@ -8,6 +8,7 @@
8
8
  interface Props {
9
9
  logo: string;
10
10
  name?: string;
11
+ href?: string;
11
12
  subName?: undefined | string;
12
13
  darkToggle?: boolean;
13
14
  center?: import('svelte').Snippet;
@@ -17,6 +18,7 @@
17
18
  let {
18
19
  logo,
19
20
  name = 'HYVOR',
21
+ href = '/',
20
22
  subName = undefined,
21
23
  darkToggle = true,
22
24
  center,
@@ -27,7 +29,7 @@
27
29
  <header>
28
30
  <Container as="nav">
29
31
  <div class="nav-start">
30
- <a class="nav-brand" href="/">
32
+ <a class="nav-brand" {href}>
31
33
  <img src={logo} alt="Hyvor Logo" width="30" height="30" />
32
34
  <span class="brand-product">
33
35
  <span class="brand">{name}</span>
@@ -1,6 +1,7 @@
1
1
  interface Props {
2
2
  logo: string;
3
3
  name?: string;
4
+ href?: string;
4
5
  subName?: undefined | string;
5
6
  darkToggle?: boolean;
6
7
  center?: import('svelte').Snippet;
@@ -0,0 +1,9 @@
1
+ export declare const SOCIAL_LINKS: {
2
+ readonly x: "https://x.com/HyvorHQ";
3
+ readonly blueksy: "https://bsky.app/profile/hyvor.com";
4
+ readonly discord: "https://discord.com/invite/2WRJxQB";
5
+ readonly github: "https://github.com/hyvor";
6
+ readonly youtube: "https://www.youtube.com/@HYVOR";
7
+ readonly linkedin: "https://www.linkedin.com/company/30240435";
8
+ };
9
+ export type Socials = typeof SOCIAL_LINKS;
@@ -0,0 +1,8 @@
1
+ export const SOCIAL_LINKS = {
2
+ x: 'https://x.com/HyvorHQ',
3
+ blueksy: 'https://bsky.app/profile/hyvor.com',
4
+ discord: 'https://discord.com/invite/2WRJxQB',
5
+ github: 'https://github.com/hyvor',
6
+ youtube: 'https://www.youtube.com/@HYVOR',
7
+ linkedin: 'https://www.linkedin.com/company/30240435'
8
+ };
@@ -1,2 +1,3 @@
1
1
  export declare const dark: import("svelte/store").Writable<boolean>;
2
+ export declare const DARK_LOCAL_STORAGE_KEY = "hds-dark";
2
3
  export declare function setInitialState(): void;
@@ -1,5 +1,6 @@
1
1
  import { writable } from 'svelte/store';
2
2
  export const dark = writable(false);
3
+ export const DARK_LOCAL_STORAGE_KEY = 'hds-dark';
3
4
  export function setInitialState() {
4
5
  const isDark = isDarkScheme();
5
6
  if (isDark) {
@@ -8,16 +9,16 @@ export function setInitialState() {
8
9
  dark.subscribe((isDark) => {
9
10
  if (isDark) {
10
11
  document.documentElement.classList.add('dark');
11
- window.localStorage.setItem('scheme-dark', 'true');
12
+ window.localStorage.setItem(DARK_LOCAL_STORAGE_KEY, 'true');
12
13
  }
13
14
  else {
14
15
  document.documentElement.classList.remove('dark');
15
- window.localStorage.removeItem('scheme-dark');
16
+ window.localStorage.removeItem(DARK_LOCAL_STORAGE_KEY);
16
17
  }
17
18
  });
18
19
  }
19
20
  function isDarkScheme() {
20
- const localStorageData = window.localStorage.getItem('scheme-dark');
21
+ const localStorageData = window.localStorage.getItem(DARK_LOCAL_STORAGE_KEY);
21
22
  if (localStorageData) {
22
23
  return !!localStorageData;
23
24
  }
@@ -63,7 +63,7 @@
63
63
  --box-background: #1c1c1c;
64
64
 
65
65
  --accent-light: #555;
66
- --accent-lightest: #333;
66
+ --accent-lightest: #2d2d2d;
67
67
 
68
68
  --border: #4a4a4a;
69
69
  --link: #7cb6e1;
package/package.json CHANGED
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "dependencies": {
50
50
  "@fontsource/readex-pro": "^5.0.8",
51
- "@hyvor/icons": "^1.1.0",
51
+ "@hyvor/icons": "^1.1.1",
52
52
  "deepmerge-ts": "^5.1.0",
53
53
  "highlight.js": "^11.9.0",
54
54
  "intl-messageformat": "^10.5.11",
@@ -59,5 +59,5 @@
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  },
62
- "version": "1.0.13"
62
+ "version": "1.1.1"
63
63
  }
@@ -1,46 +0,0 @@
1
- <script lang="ts">
2
- interface Props {
3
- size?: number;
4
- }
5
-
6
- let { size = 40 }: Props = $props();
7
- </script>
8
-
9
- <svg width={size} height={size} viewBox="0 0 132.29166 132.29167" version="1.1">
10
- <g id="layer1">
11
- <g id="g1067">
12
- <rect
13
- style="mix-blend-mode:normal;fill:#f1e8e8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:7.15826;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
14
- id="rect1001"
15
- width="77.870262"
16
- height="123.57672"
17
- x="26.535261"
18
- y="5.0260782"
19
- ry="38.935131"
20
- transform="rotate(-0.58211807)"
21
- />
22
- <path
23
- id="path1003"
24
- style="mix-blend-mode:normal;fill:#896c6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:7.15826;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
25
- d="m 105.07895,65.75026 0.23219,22.852048 C 105.53028,110.17126 88.342531,127.71185 66.773582,127.931 45.204632,128.15014 27.664036,110.96239 27.44489,89.393446 L 27.212709,66.541399 Z"
26
- />
27
- <g id="g1011" transform="matrix(1.0727824,0,0,1.0727824,-4.7282157,-11.786447)">
28
- <path
29
- id="path1005"
30
- style="fill:none;stroke:#000000;stroke-width:6.19866;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
31
- d="m 59.684412,40.713463 c 0,-2.381274 -3.065933,-4.311677 -6.847956,-4.311677 -3.782022,0 -6.847956,1.930403 -6.847956,4.311677"
32
- />
33
- <path
34
- id="path1007"
35
- style="fill:none;stroke:#000000;stroke-width:6.19866;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
36
- d="m 86.142762,40.713463 c 0,-2.381274 -3.065933,-4.311677 -6.847956,-4.311677 -3.782022,0 -6.847956,1.930403 -6.847956,4.311677"
37
- />
38
- <path
39
- id="path1009"
40
- style="fill:none;stroke:#000000;stroke-width:6.19866;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
41
- d="m 72.699971,55.496735 c 0,2.381274 -3.065933,4.311677 -6.847956,4.311677 -3.782022,0 -6.847956,-1.930403 -6.847956,-4.311677"
42
- />
43
- </g>
44
- </g>
45
- </g>
46
- </svg>
@@ -1,6 +0,0 @@
1
- interface Props {
2
- size?: number;
3
- }
4
- declare const LogoBlogs: import("svelte").Component<Props, {}, "">;
5
- type LogoBlogs = ReturnType<typeof LogoBlogs>;
6
- export default LogoBlogs;
@@ -1,46 +0,0 @@
1
- <script lang="ts">
2
- interface Props {
3
- size?: number;
4
- }
5
-
6
- let { size = 40 }: Props = $props();
7
- </script>
8
-
9
- <svg width={size} height={size} viewBox="0 0 500 500" version="1.1">
10
- <g id="layer1">
11
- <g id="g5140" transform="translate(-986.41349,-538.31731)">
12
- <rect
13
- style="mix-blend-mode:normal;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:27.0548;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
14
- id="rect1001"
15
- width="294.31281"
16
- height="467.06161"
17
- x="1081.1842"
18
- y="567.30737"
19
- ry="147.1564"
20
- transform="rotate(-0.582118)"
21
- />
22
- <path
23
- id="path1003"
24
- style="mix-blend-mode:normal;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:27.0548;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
25
- d="m 1383.5623,786.82223 0.8775,86.36995 c 0.8283,81.52045 -64.1333,147.81562 -145.6537,148.64392 -81.5205,0.8282 -147.8157,-64.13337 -148.6439,-145.65379 l -0.8776,-86.36995 z"
26
- />
27
- <g id="g1011" transform="matrix(4.0546107,0,0,4.0546107,968.54304,493.77011)">
28
- <path
29
- id="path1005"
30
- style="fill:none;stroke:#000000;stroke-width:6.19866;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
31
- d="m 59.684412,40.713463 c 0,-2.381274 -3.065933,-4.311677 -6.847956,-4.311677 -3.782022,0 -6.847956,1.930403 -6.847956,4.311677"
32
- />
33
- <path
34
- id="path1007"
35
- style="fill:none;stroke:#000000;stroke-width:6.19866;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
36
- d="m 86.142762,40.713463 c 0,-2.381274 -3.065933,-4.311677 -6.847956,-4.311677 -3.782022,0 -6.847956,1.930403 -6.847956,4.311677"
37
- />
38
- <path
39
- id="path1009"
40
- style="fill:none;stroke:#000000;stroke-width:6.19866;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
41
- d="m 72.699971,55.496735 c 0,2.381274 -3.065933,4.311677 -6.847956,4.311677 -3.782022,0 -6.847956,-1.930403 -6.847956,-4.311677"
42
- />
43
- </g>
44
- </g>
45
- </g>
46
- </svg>
@@ -1,6 +0,0 @@
1
- interface Props {
2
- size?: number;
3
- }
4
- declare const LogoCore: import("svelte").Component<Props, {}, "">;
5
- type LogoCore = ReturnType<typeof LogoCore>;
6
- export default LogoCore;