@gsa-tts/graymatter-ui 0.0.2 → 0.2.0
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/assets/images/ai-icons/chevron-up-down.svg +4 -0
- package/dist/graymatter-ui.js +4082 -0
- package/dist/graymatter-ui.umd.cjs +40 -0
- package/index.ts +3 -0
- package/package.json +10 -5
- package/src/components/Button.svelte +11 -23
- package/src/components/Button.webcomponent.svelte +44 -0
- package/src/components/DesktopHeader.svelte +101 -0
- package/src/components/DesktopHeader.webcomponent.svelte +17 -0
- package/src/components/DesktopSideNav.svelte +645 -0
- package/src/components/DesktopSideNav.webcomponent.svelte +19 -0
- package/src/components/GoogleTagManager.astro +16 -0
- package/src/components/Logo.svelte +8 -7
- package/src/components/Logo.webcomponent.svelte +26 -0
- package/src/components/MobileBottomNav.svelte +145 -0
- package/src/components/MobileBottomNav.webcomponent.svelte +14 -0
- package/src/components/MobileSideMenu.svelte +225 -0
- package/src/components/MobileSideMenu.webcomponent.svelte +11 -0
- package/src/components/MobileTopNav.svelte +235 -0
- package/src/components/MobileTopNav.webcomponent.svelte +14 -0
- package/src/components/NavigationInitializer.svelte +19 -0
- package/src/components/icons/ApiIcon.svelte +49 -0
- package/src/components/icons/ChatIcon.svelte +27 -0
- package/src/components/icons/CloseIcon.svelte +18 -0
- package/src/components/icons/ConsoleIcon.svelte +25 -0
- package/src/components/icons/DiscoverIcon.svelte +30 -0
- package/src/components/icons/MenuIcon.svelte +38 -0
- package/src/components/icons/index.ts +6 -0
- package/src/components/index.ts +9 -0
- package/src/index.ts +16 -0
- package/src/layouts/AppLayout.astro +1 -1
- package/src/layouts/BaseLayout.astro +4 -0
- package/src/layouts/GlobalAppLayout.astro +594 -0
- package/src/stores/navigationStore.ts +138 -0
- package/src/stores/subNavReadyStore.ts +3 -0
- package/src/styles/base/global.css +8 -1
- package/src/styles/base/typography.css +15 -14
- package/src/styles/components/globalAppLayout.css +73 -0
- package/src/styles/components/globalAppNav.css +95 -0
- package/src/utils/getAppUrls.ts +29 -0
- package/src/utils/index.ts +1 -0
- package/assets/images/gsai-logo-black.svg +0 -18
- package/assets/images/gsai-logo-white.svg +0 -18
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Store for selected subnav item id and title (for all apps)
|
|
2
|
+
import { writable, type Writable, derived } from 'svelte/store';
|
|
3
|
+
|
|
4
|
+
export type NavigationItem = 'discover' | 'chat' | 'console' | 'api' | null;
|
|
5
|
+
|
|
6
|
+
const browser = typeof window !== 'undefined';
|
|
7
|
+
|
|
8
|
+
// Persistent subnav item id and title in sessionStorage
|
|
9
|
+
function getSessionValue<T>(key: string, defaultValue: T): T {
|
|
10
|
+
if (browser && typeof sessionStorage !== 'undefined') {
|
|
11
|
+
const stored = sessionStorage.getItem(key);
|
|
12
|
+
if (stored !== null) {
|
|
13
|
+
try {
|
|
14
|
+
return JSON.parse(stored) as T;
|
|
15
|
+
} catch (e) {
|
|
16
|
+
console.warn(`Failed to parse stored value for ${key}:`, e);
|
|
17
|
+
return defaultValue;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return defaultValue;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function createSessionStore<T>(key: string, defaultValue: T): Writable<T> {
|
|
25
|
+
const initialValue = getSessionValue(key, defaultValue);
|
|
26
|
+
const store = writable<T>(initialValue);
|
|
27
|
+
|
|
28
|
+
if (browser) {
|
|
29
|
+
store.subscribe((value: T) => {
|
|
30
|
+
try {
|
|
31
|
+
sessionStorage.setItem(key, JSON.stringify(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
console.warn(`Failed to persist ${key} to sessionStorage:`, e);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return store;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const selectedSubNavItemId: Writable<string | null> = createSessionStore(
|
|
42
|
+
'subNav-selectedId',
|
|
43
|
+
null
|
|
44
|
+
);
|
|
45
|
+
export const selectedSubNavItemTitle: Writable<string | null> =
|
|
46
|
+
createSessionStore('subNav-selectedTitle', '');
|
|
47
|
+
|
|
48
|
+
function getInitialValue<T>(key: string, defaultValue: T): T {
|
|
49
|
+
if (browser && typeof localStorage !== 'undefined') {
|
|
50
|
+
const stored = localStorage.getItem(key);
|
|
51
|
+
if (stored !== null) {
|
|
52
|
+
try {
|
|
53
|
+
return JSON.parse(stored) as T;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
console.warn(`Failed to parse stored value for ${key}:`, e);
|
|
56
|
+
return defaultValue;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return defaultValue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function createPersistentStore<T>(key: string, defaultValue: T): Writable<T> {
|
|
64
|
+
const initialValue = getInitialValue(key, defaultValue);
|
|
65
|
+
const store = writable<T>(initialValue);
|
|
66
|
+
|
|
67
|
+
if (browser) {
|
|
68
|
+
store.subscribe((value: T) => {
|
|
69
|
+
try {
|
|
70
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
71
|
+
} catch (e) {
|
|
72
|
+
console.warn(`Failed to persist ${key} to localStorage:`, e);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return store;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const isExpanded: Writable<boolean> = createPersistentStore(
|
|
81
|
+
'globalSideNav-isExpanded',
|
|
82
|
+
false
|
|
83
|
+
);
|
|
84
|
+
export const selectedItem: Writable<NavigationItem> = createPersistentStore(
|
|
85
|
+
'globalSideNav-selectedItem',
|
|
86
|
+
null
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// Derived store to determine if menu button should be disabled
|
|
90
|
+
export const isMenuButtonDisabled = derived(
|
|
91
|
+
selectedItem,
|
|
92
|
+
$selectedItem => $selectedItem === 'discover'
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
export interface NavigationStore {
|
|
96
|
+
toggleExpanded: () => void;
|
|
97
|
+
setExpanded: (value: boolean) => void;
|
|
98
|
+
setSelectedItem: (item: NavigationItem) => void;
|
|
99
|
+
handleLayoutTransition: (isMobile: boolean) => void;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export const navigationStore: NavigationStore = {
|
|
103
|
+
toggleExpanded: (): void => {
|
|
104
|
+
isExpanded.update((expanded: boolean) => !expanded);
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
setExpanded: (value: boolean): void => {
|
|
108
|
+
isExpanded.set(value);
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
setSelectedItem: (item: NavigationItem): void => {
|
|
112
|
+
selectedItem.set(item);
|
|
113
|
+
if (item === 'discover') {
|
|
114
|
+
isExpanded.set(false);
|
|
115
|
+
} else {
|
|
116
|
+
// For non-discover items (API, Console, Chat), ALWAYS expand on desktop
|
|
117
|
+
if (browser && window.innerWidth > 640) {
|
|
118
|
+
isExpanded.set(true);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
handleLayoutTransition: (isMobile: boolean): void => {
|
|
124
|
+
if (isMobile) {
|
|
125
|
+
isExpanded.set(false);
|
|
126
|
+
} else {
|
|
127
|
+
const currentItem = getInitialValue('globalSideNav-selectedItem', null);
|
|
128
|
+
if (currentItem && currentItem !== 'discover') {
|
|
129
|
+
console.log(
|
|
130
|
+
'[NavigationStore] Opening navigation for desktop (non-discover page)'
|
|
131
|
+
);
|
|
132
|
+
isExpanded.set(true);
|
|
133
|
+
} else {
|
|
134
|
+
isExpanded.set(false);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@layer designsystem, theme, buttons;
|
|
1
|
+
@layer designsystem, theme, buttons, appnav, applayout;
|
|
2
2
|
@import '../../../static/uswds/styles/styles.css' layer(designsystem);
|
|
3
3
|
@import '../../../node_modules/@gsa-tts/graymatter-style-tokens/dist/css/variables.css'
|
|
4
4
|
layer(theme);
|
|
@@ -6,3 +6,10 @@
|
|
|
6
6
|
@import 'typography.css' layer(theme);
|
|
7
7
|
@import '../utilities/layout.css' layer(theme);
|
|
8
8
|
@import '../components/heroCards.css' layer(theme);
|
|
9
|
+
@import '../components/globalAppNav.css' layer(appnav);
|
|
10
|
+
@import '../components/globalAppLayout.css' layer(applayout);
|
|
11
|
+
|
|
12
|
+
/* Ensure anchor targets are not hidden behind fixed header */
|
|
13
|
+
[id] {
|
|
14
|
+
scroll-margin-top: 56px;
|
|
15
|
+
}
|
|
@@ -9,43 +9,44 @@
|
|
|
9
9
|
|
|
10
10
|
h1,
|
|
11
11
|
.ai-heading-size-1 {
|
|
12
|
-
font-size: clamp(var(--ai-size-
|
|
12
|
+
font-size: clamp(var(--ai-size-30), 5vw, var(--ai-size-32));
|
|
13
13
|
font-weight: var(--ai-font-weight-semibold);
|
|
14
|
-
margin-bottom: var(--ai-size-
|
|
14
|
+
margin-bottom: var(--ai-size-20);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
h2,
|
|
18
18
|
.ai-heading-size-2 {
|
|
19
|
-
font-size:
|
|
20
|
-
|
|
19
|
+
font-size: var(--ai-size-26);
|
|
20
|
+
font-weight: var(--ai-font-weight-semibold);
|
|
21
|
+
margin-bottom: var(--ai-size-16);
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
h3,
|
|
24
25
|
.ai-heading-size-3 {
|
|
25
|
-
font-size:
|
|
26
|
-
font-weight: var(--ai-font-weight-
|
|
27
|
-
margin-bottom: var(--ai-size-
|
|
26
|
+
font-size: var(--ai-size-24);
|
|
27
|
+
font-weight: var(--ai-font-weight-semibold);
|
|
28
|
+
margin-bottom: var(--ai-size-16);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
h4,
|
|
31
32
|
.ai-heading-size-4 {
|
|
32
|
-
font-size: var(--ai-size-
|
|
33
|
-
font-weight: var(--ai-font-weight-
|
|
34
|
-
margin-bottom: var(--ai-size-
|
|
33
|
+
font-size: var(--ai-size-22);
|
|
34
|
+
font-weight: var(--ai-font-weight-semibold);
|
|
35
|
+
margin-bottom: var(--ai-size-10);
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
h5,
|
|
38
39
|
.ai-heading-size-5 {
|
|
39
40
|
font-size: var(--ai-size-22);
|
|
40
41
|
font-weight: var(--ai-font-weight-normal);
|
|
41
|
-
margin-bottom: var(--ai-size-
|
|
42
|
+
margin-bottom: var(--ai-size-10);
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
h6,
|
|
45
46
|
.ai-heading-size-6 {
|
|
46
|
-
font-size: var(--ai-size-
|
|
47
|
-
font-weight: var(--ai-font-weight-
|
|
48
|
-
margin-bottom: var(--ai-size-
|
|
47
|
+
font-size: var(--ai-size-18);
|
|
48
|
+
font-weight: var(--ai-font-weight-semibold);
|
|
49
|
+
margin-bottom: var(--ai-size-6);
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
pre {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
.app {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
height: 100vh;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.main-content-mobile {
|
|
8
|
+
flex: 1;
|
|
9
|
+
padding: var(--initial-main-top-padding, calc(3.5rem + 1rem)) 1rem
|
|
10
|
+
var(--initial-main-bottom-padding, calc(5rem + 1rem)) 1rem;
|
|
11
|
+
overflow-y: auto;
|
|
12
|
+
display: block;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.layout-container {
|
|
16
|
+
display: none;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.main-container {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
flex: 1;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
position: relative;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.app main {
|
|
28
|
+
flex: 1;
|
|
29
|
+
padding: var(--initial-main-top-padding, calc(3.5rem + 1rem)) 1rem
|
|
30
|
+
var(--initial-main-bottom-padding, calc(5rem + 1rem)) 1rem;
|
|
31
|
+
overflow-y: auto;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.logo-fixed-container {
|
|
35
|
+
position: fixed;
|
|
36
|
+
top: var(--ai-size-40);
|
|
37
|
+
left: var(--ai-size-88);
|
|
38
|
+
z-index: 500;
|
|
39
|
+
background: transparent;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@media (--ai-size-breakpoint-tablet) {
|
|
43
|
+
.main-content-mobile {
|
|
44
|
+
display: none;
|
|
45
|
+
}
|
|
46
|
+
.layout-container {
|
|
47
|
+
display: flex;
|
|
48
|
+
flex: 1;
|
|
49
|
+
overflow: hidden;
|
|
50
|
+
flex-direction: row;
|
|
51
|
+
}
|
|
52
|
+
.main-container {
|
|
53
|
+
flex: 1 1 0%;
|
|
54
|
+
min-width: 0;
|
|
55
|
+
position: relative;
|
|
56
|
+
z-index: var(--ai-layer-1);
|
|
57
|
+
}
|
|
58
|
+
.app main {
|
|
59
|
+
padding: var(--ai-size-40) var(--ai-size-32) var(--ai-size-8) 4.875rem;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
:global(.side-nav-container.expanded) ~ .main-container main {
|
|
63
|
+
padding-top: var(--ai-size-8);
|
|
64
|
+
}
|
|
65
|
+
:global(.side-nav-container),
|
|
66
|
+
:global(.side-nav-container .expanded-content) {
|
|
67
|
+
transition: none;
|
|
68
|
+
}
|
|
69
|
+
:global(body) {
|
|
70
|
+
overflow-y: hidden;
|
|
71
|
+
height: 100%;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* DesktopHeader styles */
|
|
2
|
+
.global-header,
|
|
3
|
+
graymatter-desktop-header::part(global-header) {
|
|
4
|
+
display: none;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/* MobileTopNav styles */
|
|
8
|
+
.mobile-top-nav,
|
|
9
|
+
graymatter-mobile-top-nav::part(mobile-top-nav) {
|
|
10
|
+
position: sticky;
|
|
11
|
+
top: 0;
|
|
12
|
+
left: 0;
|
|
13
|
+
right: 0;
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: space-between;
|
|
17
|
+
height: var(--ai-size-56);
|
|
18
|
+
padding: 0 var(--ai-size-16);
|
|
19
|
+
padding-top: env(safe-area-inset-top);
|
|
20
|
+
background: var(--ai-color-white);
|
|
21
|
+
border-bottom: 0.0625rem solid var(--ai-color-neutral-200);
|
|
22
|
+
z-index: var(--ai-layer-30);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* MobileBottomNav styles */
|
|
26
|
+
.mobile-bottom-nav,
|
|
27
|
+
graymatter-mobile-bottom-nav::part(mobile-bottom-nav) {
|
|
28
|
+
display: flex;
|
|
29
|
+
position: fixed;
|
|
30
|
+
bottom: 0;
|
|
31
|
+
left: 0;
|
|
32
|
+
right: 0;
|
|
33
|
+
background: var(--ai-color-white);
|
|
34
|
+
border-top: 0.0625rem solid var(--ai-neutral-200);
|
|
35
|
+
height: 3.125rem;
|
|
36
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
37
|
+
z-index: var(--ai-layer-30);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* MobileSideMenu styles */
|
|
41
|
+
.mobile-overlay,
|
|
42
|
+
graymatter-mobile-side-menu::part(mobile-overlay) {
|
|
43
|
+
display: block;
|
|
44
|
+
position: fixed;
|
|
45
|
+
top: 0;
|
|
46
|
+
left: 0;
|
|
47
|
+
right: 0;
|
|
48
|
+
bottom: 0;
|
|
49
|
+
background: #00000080;
|
|
50
|
+
z-index: var(--ai-layer-40);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.mobile-side-menu,
|
|
54
|
+
graymatter-mobile-side-menu::part(mobile-side-menu) {
|
|
55
|
+
display: flex;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media (--ai-size-breakpoint-tablet) {
|
|
59
|
+
.global-header,
|
|
60
|
+
graymatter-desktop-header::part(global-header) {
|
|
61
|
+
position: absolute;
|
|
62
|
+
top: 0;
|
|
63
|
+
left: 0;
|
|
64
|
+
right: 0;
|
|
65
|
+
display: flex;
|
|
66
|
+
width: 100%;
|
|
67
|
+
height: var(--ai-size-56);
|
|
68
|
+
padding: var(--ai-size-12) var(--ai-size-16);
|
|
69
|
+
flex-direction: column;
|
|
70
|
+
justify-content: center;
|
|
71
|
+
align-items: flex-start;
|
|
72
|
+
background: var(--ai-color-white);
|
|
73
|
+
z-index: var(--ai-layer-20);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.mobile-top-nav,
|
|
77
|
+
graymatter-mobile-top-nav::part(mobile-top-nav) {
|
|
78
|
+
display: none;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.mobile-bottom-nav,
|
|
82
|
+
graymatter-mobile-bottom-nav::part(mobile-bottom-nav) {
|
|
83
|
+
display: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.mobile-overlay,
|
|
87
|
+
graymatter-mobile-side-menu::part(mobile-overlay) {
|
|
88
|
+
display: none;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.mobile-side-menu,
|
|
92
|
+
graymatter-mobile-side-menu::part(mobile-side-menu) {
|
|
93
|
+
display: none;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function warnIfMissing(name: string, value: string | undefined) {
|
|
2
|
+
if (!value) {
|
|
3
|
+
console.warn(`[getAppUrls] Environment variable for ${name} is missing!`);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function getAppUrls(envArg?: Record<string, string | undefined>) {
|
|
8
|
+
const env = envArg || import.meta.env;
|
|
9
|
+
const fallback = '#';
|
|
10
|
+
|
|
11
|
+
const chatUrl = env.PUBLIC_CHAT_URL;
|
|
12
|
+
const consoleUrl = env.PUBLIC_CONSOLE_URL;
|
|
13
|
+
// NOTE: The Discover and API docs/pages are served as part of the Astro site app itself,
|
|
14
|
+
// so the API link typically points to a local route (e.g., /api) within the same deployment.
|
|
15
|
+
// We may not need to use the external FCS URLs for API here, since the content is bundled and deployed together with the site app.
|
|
16
|
+
|
|
17
|
+
// const apiUrl = env.PUBLIC_API_URL;
|
|
18
|
+
|
|
19
|
+
warnIfMissing('chat', chatUrl);
|
|
20
|
+
warnIfMissing('console', consoleUrl);
|
|
21
|
+
// warnIfMissing('api', api);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
chat: chatUrl || fallback,
|
|
25
|
+
console: consoleUrl || fallback,
|
|
26
|
+
api: '/api',
|
|
27
|
+
discover: '/discover',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getAppUrls';
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<svg width="105" height="33" viewBox="0 0 105 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<g clip-path="url(#clip0_2282_6725)">
|
|
3
|
-
<mask id="mask0_2282_6725" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="105" height="33">
|
|
4
|
-
<path d="M104.81 0H0V32.8249H104.81V0Z" fill="white"/>
|
|
5
|
-
</mask>
|
|
6
|
-
<g mask="url(#mask0_2282_6725)">
|
|
7
|
-
<path d="M13.4937 19.864H26.5932C25.3427 24.7736 21.4655 27.9119 16.5655 27.9119C10.167 27.9119 4.96116 22.7532 4.96116 16.4125C4.96116 10.0717 10.1636 4.91296 16.5621 4.91296C20.1777 4.91296 23.5248 6.53939 25.7437 9.37806L27.2626 11.321L31.184 8.31061L29.665 6.36765C26.4981 2.3201 21.7238 0 16.5621 0C7.43155 0 0 7.36102 0 16.4125C0 25.4639 7.43155 32.8249 16.5621 32.8249C24.9553 32.8249 31.4218 26.4 31.9383 17.5506L32.0913 14.951H13.4937V19.864Z" fill="black"/>
|
|
8
|
-
<path d="M52.9238 13.9544H44.0379C41.6559 13.9544 39.7156 12.035 39.7156 9.67113C39.7156 7.30725 41.6559 5.38786 44.0379 5.38786H61.0282V0.478271H44.0379C38.9204 0.478271 34.7578 4.60327 34.7578 9.6745C34.7578 14.7457 38.9204 18.8707 44.0379 18.8707H52.9238C55.3059 18.8707 57.2462 20.7901 57.2462 23.154C57.2462 25.5179 55.3059 27.4373 52.9238 27.4373H35.4V32.3502H52.9238C58.0413 32.3502 62.2039 28.2252 62.2039 23.154C62.2039 18.0828 58.0413 13.9578 52.9238 13.9578V13.9544Z" fill="black"/>
|
|
9
|
-
<path d="M104.809 0.478271H99.8516V32.3468H104.809V0.478271Z" fill="black"/>
|
|
10
|
-
<path d="M76.2292 0.478271L62.7559 32.3536H68.1316L79.5287 5.39123H79.9874L91.3811 32.3536H96.7568L83.2835 0.478271H76.2292Z" fill="black"/>
|
|
11
|
-
</g>
|
|
12
|
-
</g>
|
|
13
|
-
<defs>
|
|
14
|
-
<clipPath id="clip0_2282_6725">
|
|
15
|
-
<rect width="105" height="33" fill="white"/>
|
|
16
|
-
</clipPath>
|
|
17
|
-
</defs>
|
|
18
|
-
</svg>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<svg width="105" height="33" viewBox="0 0 105 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<g clip-path="url(#clip0_2282_6734)">
|
|
3
|
-
<mask id="mask0_2282_6734" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="105" height="33">
|
|
4
|
-
<path d="M104.81 0H0V32.8249H104.81V0Z" fill="white"/>
|
|
5
|
-
</mask>
|
|
6
|
-
<g mask="url(#mask0_2282_6734)">
|
|
7
|
-
<path d="M13.4937 19.864H26.5932C25.3427 24.7736 21.4655 27.9119 16.5655 27.9119C10.167 27.9119 4.96116 22.7532 4.96116 16.4125C4.96116 10.0717 10.1636 4.91296 16.5621 4.91296C20.1777 4.91296 23.5248 6.53939 25.7437 9.37806L27.2626 11.321L31.184 8.31061L29.665 6.36765C26.4981 2.3201 21.7238 0 16.5621 0C7.43155 0 0 7.36102 0 16.4125C0 25.4639 7.43155 32.8249 16.5621 32.8249C24.9553 32.8249 31.4218 26.4 31.9383 17.5506L32.0913 14.951H13.4937V19.864Z" fill="white"/>
|
|
8
|
-
<path d="M52.9238 13.9544H44.0379C41.6559 13.9544 39.7156 12.035 39.7156 9.67113C39.7156 7.30725 41.6559 5.38786 44.0379 5.38786H61.0282V0.478271H44.0379C38.9204 0.478271 34.7578 4.60327 34.7578 9.6745C34.7578 14.7457 38.9204 18.8707 44.0379 18.8707H52.9238C55.3059 18.8707 57.2462 20.7901 57.2462 23.154C57.2462 25.5179 55.3059 27.4373 52.9238 27.4373H35.4V32.3502H52.9238C58.0413 32.3502 62.2039 28.2252 62.2039 23.154C62.2039 18.0828 58.0413 13.9578 52.9238 13.9578V13.9544Z" fill="white"/>
|
|
9
|
-
<path d="M104.809 0.478271H99.8516V32.3468H104.809V0.478271Z" fill="white"/>
|
|
10
|
-
<path d="M76.2292 0.478271L62.7559 32.3536H68.1316L79.5287 5.39123H79.9874L91.3811 32.3536H96.7568L83.2835 0.478271H76.2292Z" fill="white"/>
|
|
11
|
-
</g>
|
|
12
|
-
</g>
|
|
13
|
-
<defs>
|
|
14
|
-
<clipPath id="clip0_2282_6734">
|
|
15
|
-
<rect width="105" height="33" fill="white"/>
|
|
16
|
-
</clipPath>
|
|
17
|
-
</defs>
|
|
18
|
-
</svg>
|