@hyvor/design 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Base/Base.svelte +3 -1
- package/dist/components/Button/Button.svelte +10 -0
- package/dist/components/Button/Button.svelte.d.ts +1 -1
- package/dist/components/IconButton/IconButton.svelte +1 -0
- package/dist/components/Internationalization/InternationalizationProvider.svelte +6 -0
- package/dist/components/Internationalization/InternationalizationProvider.svelte.d.ts +14 -0
- package/dist/components/Internationalization/LanguageToggle.svelte +43 -0
- package/dist/components/Internationalization/LanguageToggle.svelte.d.ts +14 -0
- package/dist/components/Internationalization/T.svelte +5 -0
- package/dist/components/Internationalization/T.svelte.d.ts +14 -0
- package/dist/components/Internationalization/i18n.d.ts +18 -0
- package/dist/components/Internationalization/i18n.js +27 -0
- package/dist/components/Link/Link.svelte +3 -0
- package/dist/components/Link/Link.svelte.d.ts +1 -1
- package/dist/components/NavLink/NavLink.svelte +85 -0
- package/dist/components/NavLink/NavLink.svelte.d.ts +32 -0
- package/dist/components/Tooltip/Tooltip.svelte +7 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/marketing/Docs/Docs.svelte +1 -1
- package/dist/marketing/Docs/Nav/Nav.svelte +3 -1
- package/dist/marketing/Footer/Footer.svelte +159 -0
- package/dist/marketing/Footer/Footer.svelte.d.ts +20 -0
- package/dist/marketing/Footer/FooterLinkList.svelte +36 -0
- package/dist/marketing/Footer/FooterLinkList.svelte.d.ts +18 -0
- package/dist/marketing/Header/Header.svelte +10 -4
- package/package.json +7 -11
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
<script>import
|
|
1
|
+
<script>import InternationalizationProvider from "./../Internationalization/InternationalizationProvider.svelte";
|
|
2
|
+
import DarkProvider from "./../Dark/DarkProvider.svelte";
|
|
2
3
|
import "../../index.js";
|
|
3
4
|
</script>
|
|
4
5
|
|
|
5
6
|
<DarkProvider />
|
|
7
|
+
<InternationalizationProvider />
|
|
6
8
|
|
|
7
9
|
<div id="base">
|
|
8
10
|
<slot />
|
|
@@ -106,6 +106,16 @@ export let align = "center";
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
/* Sizes */
|
|
109
|
+
.button.x-small {
|
|
110
|
+
height: 20px;
|
|
111
|
+
padding: 0 8px;
|
|
112
|
+
font-size: 12px;
|
|
113
|
+
--local-hover-shadow-size: 1px;
|
|
114
|
+
}
|
|
115
|
+
.button.x-small:active {
|
|
116
|
+
--local-hover-shadow-size: 2px;
|
|
117
|
+
}
|
|
118
|
+
|
|
109
119
|
.button.small {
|
|
110
120
|
height: 26px;
|
|
111
121
|
padding: 0 12px;
|
|
@@ -3,7 +3,7 @@ declare const __propDef: {
|
|
|
3
3
|
props: {
|
|
4
4
|
[x: string]: any;
|
|
5
5
|
as?: "button" | "a" | undefined;
|
|
6
|
-
size?: "small" | "medium" | "large" | undefined;
|
|
6
|
+
size?: "small" | "medium" | "large" | "x-small" | undefined;
|
|
7
7
|
color?: "danger" | "accent" | "soft" | "light" | "invisible" | undefined;
|
|
8
8
|
block?: boolean | undefined;
|
|
9
9
|
align?: "start" | "center" | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export type InternationalizationProviderProps = typeof __propDef.props;
|
|
10
|
+
export type InternationalizationProviderEvents = typeof __propDef.events;
|
|
11
|
+
export type InternationalizationProviderSlots = typeof __propDef.slots;
|
|
12
|
+
export default class InternationalizationProvider extends SvelteComponent<InternationalizationProviderProps, InternationalizationProviderEvents, InternationalizationProviderSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script>import IconButton from "./../IconButton/IconButton.svelte";
|
|
2
|
+
import Box from "../Box/Box.svelte";
|
|
3
|
+
import { IconCaretUp } from "@hyvor/icons";
|
|
4
|
+
import { page } from "$app/stores";
|
|
5
|
+
const i18n = $page.data.i18n;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
{#if i18n}
|
|
10
|
+
<div class="language-toggle">
|
|
11
|
+
<span class="current">
|
|
12
|
+
<span class="flag">🇫🇷</span>
|
|
13
|
+
<span class="name">Français (France)</span>
|
|
14
|
+
<span class="icon"><IconCaretUp size={14} /></span>
|
|
15
|
+
</span>
|
|
16
|
+
</div>
|
|
17
|
+
{/if}
|
|
18
|
+
|
|
19
|
+
<style>
|
|
20
|
+
.current {
|
|
21
|
+
padding: 4px 15px;
|
|
22
|
+
font-size: 15px;
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
box-shadow: var(--box-shadow);
|
|
27
|
+
border-radius: var(--box-radius);
|
|
28
|
+
background-color: var(--box-background);
|
|
29
|
+
transition: .2s box-shadow;
|
|
30
|
+
}
|
|
31
|
+
.current:hover {
|
|
32
|
+
box-shadow: var(--box-shadow-dark);
|
|
33
|
+
}
|
|
34
|
+
.flag {
|
|
35
|
+
margin-right: 6px;
|
|
36
|
+
font-size: 20px;
|
|
37
|
+
}
|
|
38
|
+
.icon {
|
|
39
|
+
margin-left: 8px;
|
|
40
|
+
display: inline-flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
}
|
|
43
|
+
</style>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export type LanguageToggleProps = typeof __propDef.props;
|
|
10
|
+
export type LanguageToggleEvents = typeof __propDef.events;
|
|
11
|
+
export type LanguageToggleSlots = typeof __propDef.slots;
|
|
12
|
+
export default class LanguageToggle extends SvelteComponent<LanguageToggleProps, LanguageToggleEvents, LanguageToggleSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export type TProps = typeof __propDef.props;
|
|
10
|
+
export type TEvents = typeof __propDef.events;
|
|
11
|
+
export type TSlots = typeof __propDef.slots;
|
|
12
|
+
export default class T extends SvelteComponent<TProps, TEvents, TSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type LoaderType = () => Promise<any>;
|
|
2
|
+
interface Language {
|
|
3
|
+
code: string;
|
|
4
|
+
name: string;
|
|
5
|
+
loader: LoaderType;
|
|
6
|
+
default: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class i18n {
|
|
9
|
+
private current;
|
|
10
|
+
private languages;
|
|
11
|
+
constructor(current: string);
|
|
12
|
+
register(code: string, name: string, loader: LoaderType, isDefault?: boolean): void;
|
|
13
|
+
found(code: string): boolean;
|
|
14
|
+
languageByCode(code: string): Language | undefined;
|
|
15
|
+
getCurrent(): Language | undefined;
|
|
16
|
+
load(code: string): Promise<any>;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class i18n {
|
|
2
|
+
current;
|
|
3
|
+
languages = [];
|
|
4
|
+
constructor(current) {
|
|
5
|
+
this.current = current;
|
|
6
|
+
}
|
|
7
|
+
register(code, name, loader, isDefault = false) {
|
|
8
|
+
this.languages.push({
|
|
9
|
+
code,
|
|
10
|
+
name,
|
|
11
|
+
loader,
|
|
12
|
+
default: isDefault
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
found(code) {
|
|
16
|
+
return !!this.languageByCode(code);
|
|
17
|
+
}
|
|
18
|
+
languageByCode(code) {
|
|
19
|
+
return this.languages.find(l => l.code === code);
|
|
20
|
+
}
|
|
21
|
+
getCurrent() {
|
|
22
|
+
return this.languageByCode(this.current);
|
|
23
|
+
}
|
|
24
|
+
async load(code) {
|
|
25
|
+
return (await this.languageByCode(code)?.loader()).default;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script>export let href;
|
|
2
|
+
export let active = false;
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<a
|
|
6
|
+
{href}
|
|
7
|
+
class:active={active}
|
|
8
|
+
|
|
9
|
+
on:keyup
|
|
10
|
+
on:keydown
|
|
11
|
+
on:keypress
|
|
12
|
+
on:focus
|
|
13
|
+
on:blur
|
|
14
|
+
on:click
|
|
15
|
+
on:mouseover
|
|
16
|
+
on:mouseenter
|
|
17
|
+
on:mouseleave
|
|
18
|
+
on:change
|
|
19
|
+
>
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
{#if $$slots.start}
|
|
24
|
+
<span class="start">
|
|
25
|
+
<slot name="start" />
|
|
26
|
+
</span>
|
|
27
|
+
{/if}
|
|
28
|
+
|
|
29
|
+
<span class="middle">
|
|
30
|
+
<slot />
|
|
31
|
+
</span>
|
|
32
|
+
|
|
33
|
+
{#if $$slots.end}
|
|
34
|
+
<span class="end">
|
|
35
|
+
<slot name="end" />
|
|
36
|
+
</span>
|
|
37
|
+
{/if}
|
|
38
|
+
</a>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
<style>
|
|
42
|
+
|
|
43
|
+
a {
|
|
44
|
+
display: flex;
|
|
45
|
+
padding: 12px 29px;
|
|
46
|
+
font-size: 14px;
|
|
47
|
+
letter-spacing: .3px;
|
|
48
|
+
border-left: 3px solid transparent;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
/* align-items: center; */
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
a:hover {
|
|
54
|
+
background-color: var(--hover);
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
a.active {
|
|
59
|
+
background-color: var(--accent-lightest);
|
|
60
|
+
border-left: 3px solid var(--accent);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.start, .middle, .end {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.middle {
|
|
69
|
+
flex: 1;
|
|
70
|
+
/* display: flex; */
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
align-items: flex-start;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.start {
|
|
76
|
+
margin-right: 8px;
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.end {
|
|
81
|
+
margin-left: 8px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
</style>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
href: string;
|
|
5
|
+
active?: boolean | undefined;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
keyup: KeyboardEvent;
|
|
9
|
+
keydown: KeyboardEvent;
|
|
10
|
+
keypress: KeyboardEvent;
|
|
11
|
+
focus: FocusEvent;
|
|
12
|
+
blur: FocusEvent;
|
|
13
|
+
click: MouseEvent;
|
|
14
|
+
mouseover: MouseEvent;
|
|
15
|
+
mouseenter: MouseEvent;
|
|
16
|
+
mouseleave: MouseEvent;
|
|
17
|
+
change: Event;
|
|
18
|
+
} & {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {
|
|
22
|
+
start: {};
|
|
23
|
+
default: {};
|
|
24
|
+
end: {};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export type NavLinkProps = typeof __propDef.props;
|
|
28
|
+
export type NavLinkEvents = typeof __propDef.events;
|
|
29
|
+
export type NavLinkSlots = typeof __propDef.slots;
|
|
30
|
+
export default class NavLink extends SvelteComponent<NavLinkProps, NavLinkEvents, NavLinkSlots> {
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
@@ -35,6 +35,13 @@ async function handleMouseEnter() {
|
|
|
35
35
|
function handleMouseLeave() {
|
|
36
36
|
show = false;
|
|
37
37
|
}
|
|
38
|
+
$: {
|
|
39
|
+
if (text) {
|
|
40
|
+
tick().then(() => {
|
|
41
|
+
positionTooltip();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
38
45
|
onMount(() => {
|
|
39
46
|
positionTooltip();
|
|
40
47
|
document.addEventListener("scroll", positionTooltip);
|
|
@@ -20,6 +20,7 @@ export { default as Validation } from './FormControl/Validation.svelte';
|
|
|
20
20
|
export { default as IconButton } from './IconButton/IconButton.svelte';
|
|
21
21
|
export { default as Link } from './Link/Link.svelte';
|
|
22
22
|
export { default as Loader } from './Loader/Loader.svelte';
|
|
23
|
+
export { default as NavLink } from './NavLink/NavLink.svelte';
|
|
23
24
|
export { default as Radio } from './Radio/Radio.svelte';
|
|
24
25
|
export { default as SplitControl } from './SplitControl/SplitControl.svelte';
|
|
25
26
|
export { default as Switch } from './Switch/Switch.svelte';
|
package/dist/components/index.js
CHANGED
|
@@ -20,6 +20,7 @@ export { default as Validation } from './FormControl/Validation.svelte';
|
|
|
20
20
|
export { default as IconButton } from './IconButton/IconButton.svelte';
|
|
21
21
|
export { default as Link } from './Link/Link.svelte';
|
|
22
22
|
export { default as Loader } from './Loader/Loader.svelte';
|
|
23
|
+
export { default as NavLink } from './NavLink/NavLink.svelte';
|
|
23
24
|
export { default as Radio } from './Radio/Radio.svelte';
|
|
24
25
|
export { default as SplitControl } from './SplitControl/SplitControl.svelte';
|
|
25
26
|
export { default as Switch } from './Switch/Switch.svelte';
|
|
@@ -17,12 +17,14 @@
|
|
|
17
17
|
padding: 25px 0;
|
|
18
18
|
position: sticky;
|
|
19
19
|
flex-shrink: 0;
|
|
20
|
-
align-self: flex-start
|
|
20
|
+
align-self: flex-start;
|
|
21
|
+
max-height: calc(100vh - var(--header-height));
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
.docs-nav :global(.nav-inner) {
|
|
24
25
|
padding: 15px 0;
|
|
25
26
|
overflow-y: auto;
|
|
27
|
+
max-height: calc(100vh - var(--header-height) - 50px);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
</style>
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<script>import Container from "../Container/Container.svelte";
|
|
2
|
+
import { IconCopy, IconDiscord, IconEnvelope, IconGithub, IconLinkedin, IconTwitterX, IconYoutube } from "@hyvor/icons";
|
|
3
|
+
import Link from "../../components/Link/Link.svelte";
|
|
4
|
+
import IconButton from "../../components/IconButton/IconButton.svelte";
|
|
5
|
+
import Tooltip from "../../components/Tooltip/Tooltip.svelte";
|
|
6
|
+
import LanguageToggle from "../../components/Internationalization/LanguageToggle.svelte";
|
|
7
|
+
const year = (/* @__PURE__ */ new Date()).getFullYear();
|
|
8
|
+
export let email = null;
|
|
9
|
+
export let social = {};
|
|
10
|
+
social = {
|
|
11
|
+
...{
|
|
12
|
+
x: null,
|
|
13
|
+
discord: "https://discord.com/invite/2WRJxQB",
|
|
14
|
+
github: "https://github.com/hyvor",
|
|
15
|
+
youtube: "https://www.youtube.com/@HYVOR",
|
|
16
|
+
linkedin: "https://www.linkedin.com/company/30240435"
|
|
17
|
+
},
|
|
18
|
+
...social
|
|
19
|
+
};
|
|
20
|
+
export let emailCopied = false;
|
|
21
|
+
function handleCopy() {
|
|
22
|
+
navigator.clipboard.writeText(email);
|
|
23
|
+
emailCopied = true;
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
emailCopied = false;
|
|
26
|
+
}, 1e3);
|
|
27
|
+
}
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<footer>
|
|
31
|
+
|
|
32
|
+
<Container>
|
|
33
|
+
|
|
34
|
+
<div class="footer-top">
|
|
35
|
+
|
|
36
|
+
<div class="footer-top-left">
|
|
37
|
+
|
|
38
|
+
{#if email}
|
|
39
|
+
<div class="email-wrap">
|
|
40
|
+
<Link href="mailto:{email}" underline={false} color="text" rel="nofollow">
|
|
41
|
+
<IconEnvelope slot="start" />
|
|
42
|
+
{ email }
|
|
43
|
+
</Link>
|
|
44
|
+
<Tooltip text={emailCopied ? "Copied!" : "Copy email"} position="top">
|
|
45
|
+
<IconButton
|
|
46
|
+
size="small"
|
|
47
|
+
color="invisible"
|
|
48
|
+
on:click={handleCopy}
|
|
49
|
+
on:mouseleave={() => emailCopied = false}
|
|
50
|
+
>
|
|
51
|
+
<IconCopy size={12} />
|
|
52
|
+
</IconButton>
|
|
53
|
+
</Tooltip>
|
|
54
|
+
</div>
|
|
55
|
+
{/if}
|
|
56
|
+
|
|
57
|
+
<div class="social-media">
|
|
58
|
+
{#if social.github}
|
|
59
|
+
<a href={social.github} target="_blank" rel="nofollow"><IconGithub /></a>
|
|
60
|
+
{/if}
|
|
61
|
+
{#if social.x}
|
|
62
|
+
<a href={social.x} target="_blank" rel="nofollow"><IconTwitterX /></a>
|
|
63
|
+
{/if}
|
|
64
|
+
{#if social.discord}
|
|
65
|
+
<a href={social.discord} target="_blank" rel="nofollow"><IconDiscord /></a>
|
|
66
|
+
{/if}
|
|
67
|
+
{#if social.youtube}
|
|
68
|
+
<a href={social.discord} target="_blank" rel="nofollow"><IconYoutube /></a>
|
|
69
|
+
{/if}
|
|
70
|
+
{#if social.linkedin}
|
|
71
|
+
<a href={social.linkedin} target="_blank" rel="nofollow"><IconLinkedin /></a>
|
|
72
|
+
{/if}
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="footer-top-right">
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
<span class="language-toggle-wrap">
|
|
81
|
+
<LanguageToggle />
|
|
82
|
+
</span>
|
|
83
|
+
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="footer-center">
|
|
89
|
+
<slot name="center" />
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="footer-bottom">
|
|
93
|
+
<div class="footer-bottom-left">
|
|
94
|
+
HYVOR © {year}
|
|
95
|
+
</div>
|
|
96
|
+
<div class="footer-bottom-right">
|
|
97
|
+
From France 🇫🇷
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
</Container>
|
|
102
|
+
|
|
103
|
+
</footer>
|
|
104
|
+
|
|
105
|
+
<style>
|
|
106
|
+
|
|
107
|
+
footer {
|
|
108
|
+
border-top: 1px solid var(--border)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.footer-top {
|
|
112
|
+
padding-top: 60px;
|
|
113
|
+
display: flex;
|
|
114
|
+
align-items: flex-start;
|
|
115
|
+
}
|
|
116
|
+
.footer-center {
|
|
117
|
+
padding-top: 50px;
|
|
118
|
+
}
|
|
119
|
+
.footer-top-left {
|
|
120
|
+
flex: 1;
|
|
121
|
+
}
|
|
122
|
+
.footer-top-right {
|
|
123
|
+
display: flex;
|
|
124
|
+
}
|
|
125
|
+
.email-wrap {
|
|
126
|
+
display: inline-flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: 4px;
|
|
129
|
+
margin-bottom: 15px;
|
|
130
|
+
}
|
|
131
|
+
.social-media a {
|
|
132
|
+
display: inline-block;
|
|
133
|
+
padding: 3px;
|
|
134
|
+
margin-right: 8px;
|
|
135
|
+
color: var(--text-light);
|
|
136
|
+
}
|
|
137
|
+
.social-media a:first-child {
|
|
138
|
+
padding-left: 0;
|
|
139
|
+
}
|
|
140
|
+
.social-media a:hover {
|
|
141
|
+
color: var(--accent);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.footer-bottom {
|
|
145
|
+
padding-top: 50px;
|
|
146
|
+
padding-bottom: 30px;
|
|
147
|
+
display: flex;
|
|
148
|
+
}
|
|
149
|
+
.footer-bottom-left {
|
|
150
|
+
flex: 1;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
.language-toggle-wrap {
|
|
155
|
+
margin-left: 8px;
|
|
156
|
+
font-size: 18px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
email?: string | null | undefined;
|
|
5
|
+
social?: Record<string, string | null> | undefined;
|
|
6
|
+
emailCopied?: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {
|
|
12
|
+
center: {};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type FooterProps = typeof __propDef.props;
|
|
16
|
+
export type FooterEvents = typeof __propDef.events;
|
|
17
|
+
export type FooterSlots = typeof __propDef.slots;
|
|
18
|
+
export default class Footer extends SvelteComponent<FooterProps, FooterEvents, FooterSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script>export let title;
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<div class="link-list">
|
|
5
|
+
<div class="title">{title}</div>
|
|
6
|
+
<div class="links">
|
|
7
|
+
<slot />
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
|
|
13
|
+
.link-list {
|
|
14
|
+
flex: 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.title {
|
|
18
|
+
font-weight: 600;
|
|
19
|
+
text-transform: uppercase;
|
|
20
|
+
margin-bottom: 10px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.links {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
align-items: flex-start;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.links :global(a) {
|
|
30
|
+
margin-top: 12px;
|
|
31
|
+
}
|
|
32
|
+
.links :global(a:hover) {
|
|
33
|
+
text-decoration: underline;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
</style>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
title: string;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {
|
|
10
|
+
default: {};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type FooterLinkListProps = typeof __propDef.props;
|
|
14
|
+
export type FooterLinkListEvents = typeof __propDef.events;
|
|
15
|
+
export type FooterLinkListSlots = typeof __propDef.slots;
|
|
16
|
+
export default class FooterLinkList extends SvelteComponent<FooterLinkListProps, FooterLinkListEvents, FooterLinkListSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import DarkToggle from "../../components/Dark/DarkToggle.svelte";
|
|
3
3
|
import IconButton from "../../components/IconButton/IconButton.svelte";
|
|
4
4
|
import Dropdown from "../../components/Dropdown/Dropdown.svelte";
|
|
5
|
+
import Tooltip from "../../components/Tooltip/Tooltip.svelte";
|
|
5
6
|
import { IconList } from "@hyvor/icons";
|
|
6
7
|
export let logo;
|
|
7
8
|
export let name = "HYVOR";
|
|
@@ -135,14 +136,19 @@ header :global(nav) {
|
|
|
135
136
|
gap: 6px;
|
|
136
137
|
}
|
|
137
138
|
|
|
138
|
-
.dark-toggle-wrap {
|
|
139
|
-
margin-left: 8px;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
139
|
.mobile-nav-wrap {
|
|
143
140
|
display: none;
|
|
144
141
|
}
|
|
145
142
|
|
|
143
|
+
.dark-mobile {
|
|
144
|
+
display: inline-flex;
|
|
145
|
+
align-items: center;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.dark-toggle-wrap {
|
|
149
|
+
margin-left: 8px;
|
|
150
|
+
}
|
|
151
|
+
|
|
146
152
|
@media screen and (max-width: 992px) {
|
|
147
153
|
.nav-center {
|
|
148
154
|
display: none;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyvor/design",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"private": false,
|
|
6
6
|
"scripts": {
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"!dist/**/*.spec.*"
|
|
29
29
|
],
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"svelte": "^4.0.0"
|
|
31
|
+
"svelte": "^4.0.0",
|
|
32
|
+
"@sveltejs/kit": "^1.25.1"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
35
|
"@sveltejs/adapter-auto": "^2.0.0",
|
|
35
36
|
"@sveltejs/adapter-static": "^2.0.3",
|
|
36
|
-
"@sveltejs/kit": "^1.25.1",
|
|
37
37
|
"@sveltejs/package": "^2.0.0",
|
|
38
38
|
"publint": "^0.1.9",
|
|
39
39
|
"sass": "^1.68.0",
|
|
@@ -41,16 +41,12 @@
|
|
|
41
41
|
"svelte-check": "^3.4.3",
|
|
42
42
|
"tslib": "^2.4.1",
|
|
43
43
|
"typescript": "^5.0.0",
|
|
44
|
-
"vite": "^4.4.2"
|
|
44
|
+
"vite": "^4.4.2",
|
|
45
|
+
"@hyvor/icons": "^0.0.3",
|
|
46
|
+
"highlight.js": "^11.9.0",
|
|
47
|
+
"@fontsource/readex-pro": "^5.0.8"
|
|
45
48
|
},
|
|
46
|
-
"svelte": "./dist/index.js",
|
|
47
|
-
"types": "./dist/index.d.ts",
|
|
48
49
|
"type": "module",
|
|
49
|
-
"dependencies": {
|
|
50
|
-
"@fontsource/readex-pro": "^5.0.8",
|
|
51
|
-
"@hyvor/icons": "^0.0.2",
|
|
52
|
-
"highlight.js": "^11.9.0"
|
|
53
|
-
},
|
|
54
50
|
"publishConfig": {
|
|
55
51
|
"access": "public"
|
|
56
52
|
}
|