@genesislcap/blank-app-seed 3.22.0 → 3.24.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/.genx/package.json +1 -1
- package/.genx/static.js +3 -2
- package/.genx/templates/angular/entityManager.hbs +1 -0
- package/.genx/templates/angular/grid.hbs +7 -3
- package/.genx/templates/angular/route.hbs +2 -1
- package/.genx/templates/react/chart.hbs +9 -0
- package/.genx/templates/react/entityManager.hbs +45 -0
- package/.genx/templates/react/form.hbs +8 -0
- package/.genx/templates/react/grid.hbs +18 -0
- package/.genx/templates/react/gridLayout.hbs +30 -0
- package/.genx/templates/react/horizontalLayout.hbs +7 -0
- package/.genx/templates/react/route.hbs +35 -0
- package/.genx/templates/react/route.styles.hbs +3 -0
- package/.genx/templates/react/tabsLayout.hbs +7 -0
- package/.genx/templates/web-components/component/component.template.hbs +1 -1
- package/.genx/templates/web-components/entityManager.hbs +1 -0
- package/.genx/templates/web-components/grid.hbs +12 -3
- package/.genx/utils/generateRoute.js +21 -9
- package/CHANGELOG.md +14 -0
- package/client-tmp/react/.eslintrc.cjs +18 -0
- package/client-tmp/react/README.md +48 -0
- package/client-tmp/react/git +0 -0
- package/client-tmp/react/index.html +13 -0
- package/client-tmp/react/package.json +54 -0
- package/client-tmp/react/src/App.tsx +66 -0
- package/client-tmp/react/src/assets/logo-icon--light.svg +3 -0
- package/client-tmp/react/src/config.ts +31 -0
- package/client-tmp/react/src/custom-elements.d.ts +11 -0
- package/client-tmp/react/src/guards/AuthGuard.tsx +32 -0
- package/client-tmp/react/src/index.js +17 -0
- package/client-tmp/react/src/layouts/LayoutWrapper.tsx +20 -0
- package/client-tmp/react/src/layouts/blank/BlankLayout.module.css +9 -0
- package/client-tmp/react/src/layouts/blank/BlankLayout.tsx +26 -0
- package/client-tmp/react/src/layouts/default/DefaultLayout.module.css +35 -0
- package/client-tmp/react/src/layouts/default/DefaultLayout.tsx +80 -0
- package/client-tmp/react/src/main.tsx +10 -0
- package/client-tmp/react/src/pages/auth/AuthPage.css +0 -0
- package/client-tmp/react/src/pages/auth/AuthPage.jsx +11 -0
- package/client-tmp/react/src/reportWebVitals.js +13 -0
- package/client-tmp/react/src/services/auth.service.ts +13 -0
- package/client-tmp/react/src/services/connect.service.ts +26 -0
- package/client-tmp/react/src/setupTests.js +5 -0
- package/client-tmp/react/src/share/foundation-login.ts +21 -0
- package/client-tmp/react/src/share/genesis-components.ts +32 -0
- package/client-tmp/react/src/store/AuthContext.tsx +56 -0
- package/client-tmp/react/src/styles/design-tokens.json +56 -0
- package/client-tmp/react/src/styles/styles.css +39 -0
- package/client-tmp/react/src/svg-elements.d.ts +4 -0
- package/client-tmp/react/src/types/RouteLayouts.ts +3 -0
- package/client-tmp/react/src/types/layers.ts +9 -0
- package/client-tmp/react/src/types/menu.ts +8 -0
- package/client-tmp/react/src/utils/history.ts +5 -0
- package/client-tmp/react/src/utils/navigation.ts +5 -0
- package/client-tmp/react/src/vite-env.d.ts +1 -0
- package/client-tmp/react/tsconfig.app.json +28 -0
- package/client-tmp/react/tsconfig.json +11 -0
- package/client-tmp/react/tsconfig.node.json +13 -0
- package/client-tmp/react/vite.config.ts +14 -0
- package/package.json +1 -1
- package/client-tmp/react/react-file.ts +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useEffect, useState, ReactNode } from 'react';
|
|
2
|
+
import { useAuth } from '../store/AuthContext';
|
|
3
|
+
import { Navigate } from 'react-router-dom';
|
|
4
|
+
import { AUTH_PATH } from '../config';
|
|
5
|
+
interface AuthGuardProps {
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
const AuthGuard: React.FC<AuthGuardProps> = ({ children }: AuthGuardProps) => {
|
|
9
|
+
const { user, checkAuthStatus } = useAuth();
|
|
10
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
11
|
+
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const verifyAuth = async () => {
|
|
14
|
+
await checkAuthStatus();
|
|
15
|
+
setIsLoading(false);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
verifyAuth();
|
|
19
|
+
}, []);
|
|
20
|
+
|
|
21
|
+
if (isLoading) {
|
|
22
|
+
return <div>Loading...</div>; // Or some loading component
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (!user) {
|
|
26
|
+
return <Navigate to={`/${AUTH_PATH}`} />;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return <>{children}</>;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default AuthGuard;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom/client';
|
|
3
|
+
import './styles/styles.css';
|
|
4
|
+
import App from './App';
|
|
5
|
+
import reportWebVitals from './reportWebVitals';
|
|
6
|
+
|
|
7
|
+
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
8
|
+
root.render(
|
|
9
|
+
<React.StrictMode>
|
|
10
|
+
<App />
|
|
11
|
+
</React.StrictMode>,
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
// If you want to start measuring performance in your app, pass a function
|
|
15
|
+
// to log results (for example: reportWebVitals(console.log))
|
|
16
|
+
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
|
17
|
+
reportWebVitals();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
import BlankLayout from './blank/BlankLayout';
|
|
3
|
+
import DefaultLayout from './default/DefaultLayout';
|
|
4
|
+
|
|
5
|
+
interface LayoutWrapperProps {
|
|
6
|
+
layout: 'blank' | 'default';
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const layoutMap = {
|
|
11
|
+
blank: BlankLayout,
|
|
12
|
+
default: DefaultLayout,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const LayoutWrapper: React.FC<LayoutWrapperProps> = ({ layout, children }) => {
|
|
16
|
+
const Layout = layoutMap[layout] || DefaultLayout;
|
|
17
|
+
return <Layout>{children}</Layout>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default LayoutWrapper;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { ReactNode, useEffect, useRef } from 'react';
|
|
2
|
+
import { configureDesignSystem } from '@genesislcap/foundation-ui';
|
|
3
|
+
import styles from './BlankLayout.module.css';
|
|
4
|
+
import * as designTokens from '../../styles/design-tokens.json';
|
|
5
|
+
|
|
6
|
+
interface BlankLayoutProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const BlankLayout: React.FC<BlankLayoutProps> = ({ children }) =>{
|
|
11
|
+
const designSystemProviderRef = useRef<HTMLDivElement>(null);
|
|
12
|
+
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (designSystemProviderRef.current) {
|
|
15
|
+
configureDesignSystem(designSystemProviderRef.current, designTokens);
|
|
16
|
+
}
|
|
17
|
+
}, []);
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<zero-design-system-provider className={styles['blank-layout']}>
|
|
21
|
+
<section className={styles.content}>{children}</section>
|
|
22
|
+
</zero-design-system-provider>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export default BlankLayout;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
.default-layout {
|
|
2
|
+
height: 100%;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
background-color: var(--neutral-fill-stealth-active);
|
|
6
|
+
color: var(--neutral-foreground-rest);
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.default-layout foundation-header {
|
|
11
|
+
z-index: 999;
|
|
12
|
+
position: absolute;
|
|
13
|
+
top: 0px;
|
|
14
|
+
left: 0px;
|
|
15
|
+
width: 100%;
|
|
16
|
+
align-items: center;
|
|
17
|
+
border: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.routes-wrapper {
|
|
21
|
+
display: flex;
|
|
22
|
+
gap: calc(var(--design-unit) * 2px);
|
|
23
|
+
margin: calc(var(--design-unit) * 1px) 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.content {
|
|
27
|
+
width: 100%;
|
|
28
|
+
flex-grow: 1;
|
|
29
|
+
position: absolute;
|
|
30
|
+
top: 0;
|
|
31
|
+
bottom: 0;
|
|
32
|
+
left: 0;
|
|
33
|
+
right: 0;
|
|
34
|
+
padding-top: var(--nav-height);
|
|
35
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React, { ReactNode, useEffect, useRef } from 'react';
|
|
2
|
+
import { configureDesignSystem } from '@genesislcap/foundation-ui';
|
|
3
|
+
import { useNavigate } from 'react-router-dom';
|
|
4
|
+
import {
|
|
5
|
+
baseLayerLuminance,
|
|
6
|
+
StandardLuminance,
|
|
7
|
+
} from '@microsoft/fast-components';
|
|
8
|
+
import styles from './DefaultLayout.module.css';
|
|
9
|
+
import { mainMenu } from '../../config';
|
|
10
|
+
import * as designTokens from '../../styles/design-tokens.json';
|
|
11
|
+
|
|
12
|
+
interface DefaultLayoutProps {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const DefaultLayout: React.FC<DefaultLayoutProps> = ({ children }) => {
|
|
17
|
+
const navigate = useNavigate();
|
|
18
|
+
|
|
19
|
+
const designSystemProviderRef = useRef<HTMLElement>(null);
|
|
20
|
+
const foundationHeaderRef = useRef<HTMLElement>(null);
|
|
21
|
+
const allRoutes = mainMenu;
|
|
22
|
+
|
|
23
|
+
const onLuminanceToggle = (): void => {
|
|
24
|
+
if (designSystemProviderRef.current) {
|
|
25
|
+
baseLayerLuminance.setValueFor(
|
|
26
|
+
designSystemProviderRef.current,
|
|
27
|
+
baseLayerLuminance.getValueFor(designSystemProviderRef.current) ===
|
|
28
|
+
StandardLuminance.DarkMode
|
|
29
|
+
? StandardLuminance.LightMode
|
|
30
|
+
: StandardLuminance.DarkMode,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (designSystemProviderRef.current) {
|
|
37
|
+
configureDesignSystem(designSystemProviderRef.current, designTokens);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const handleLuminanceIconClicked = () => {
|
|
41
|
+
onLuminanceToggle();
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const foundationHeader = foundationHeaderRef.current;
|
|
45
|
+
if (foundationHeader) {
|
|
46
|
+
foundationHeader.addEventListener('luminance-icon-clicked', handleLuminanceIconClicked);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return () => {
|
|
50
|
+
if (foundationHeader) {
|
|
51
|
+
foundationHeader.removeEventListener('luminance-icon-clicked', handleLuminanceIconClicked);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}, []);
|
|
55
|
+
|
|
56
|
+
const className = `${styles['default-layout']}`;
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<rapid-design-system-provider ref={designSystemProviderRef} class={className}>
|
|
60
|
+
<foundation-header
|
|
61
|
+
ref={foundationHeaderRef}
|
|
62
|
+
show-luminance-toggle-button
|
|
63
|
+
show-misc-toggle-button
|
|
64
|
+
navigateTo={(path) => navigate(path)}
|
|
65
|
+
>
|
|
66
|
+
<section className={styles['routes-wrapper']} slot="routes">
|
|
67
|
+
{allRoutes.map((route, index) => (
|
|
68
|
+
<rapid-button key={index} onClick={() => navigate(route.path)}>
|
|
69
|
+
<rapid-icon name={route.icon}></rapid-icon>
|
|
70
|
+
{route.title}
|
|
71
|
+
</rapid-button>
|
|
72
|
+
))}
|
|
73
|
+
</section>
|
|
74
|
+
</foundation-header>
|
|
75
|
+
<section className={styles['content']}>{children}</section>
|
|
76
|
+
</rapid-design-system-provider>
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export default DefaultLayout;
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const reportWebVitals = (onPerfEntry) => {
|
|
2
|
+
if (onPerfEntry && onPerfEntry instanceof Function) {
|
|
3
|
+
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
|
4
|
+
getCLS(onPerfEntry);
|
|
5
|
+
getFID(onPerfEntry);
|
|
6
|
+
getFCP(onPerfEntry);
|
|
7
|
+
getLCP(onPerfEntry);
|
|
8
|
+
getTTFB(onPerfEntry);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default reportWebVitals;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Auth } from '@genesislcap/foundation-comms';
|
|
2
|
+
import { DI } from '@microsoft/fast-foundation';
|
|
3
|
+
|
|
4
|
+
class AuthService {
|
|
5
|
+
isAuthenticated = false;
|
|
6
|
+
|
|
7
|
+
async isUserAuthenticated(): Promise<boolean> {
|
|
8
|
+
const auth: Auth = DI.getOrCreateDOMContainer().get(Auth);
|
|
9
|
+
return auth.isLoggedIn;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const authService = new AuthService();
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DI } from '@microsoft/fast-foundation';
|
|
2
|
+
import { Connect } from '@genesislcap/foundation-comms';
|
|
3
|
+
import { API_DATA } from '../config';
|
|
4
|
+
|
|
5
|
+
class ConnectService {
|
|
6
|
+
private container = DI.getOrCreateDOMContainer();
|
|
7
|
+
private connect: Connect = this.container.get(Connect);
|
|
8
|
+
|
|
9
|
+
getContainer() {
|
|
10
|
+
return this.container;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
getConnect() {
|
|
14
|
+
return this.connect;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
isConnected() {
|
|
18
|
+
return this.connect.isConnected;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
init() {
|
|
22
|
+
return this.connect.connect(API_DATA.URL);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const connectService = new ConnectService();
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {configure, define} from '@genesislcap/foundation-login';
|
|
2
|
+
import { AUTH_PATH } from '../config';
|
|
3
|
+
import { DI } from '@microsoft/fast-foundation';
|
|
4
|
+
import history from '../utils/history';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Configure the micro frontend
|
|
8
|
+
*/
|
|
9
|
+
export const configureFoundationLogin = () => {
|
|
10
|
+
configure(DI.getOrCreateDOMContainer(), {
|
|
11
|
+
showConnectionIndicator: true,
|
|
12
|
+
hostPath: AUTH_PATH,
|
|
13
|
+
redirectHandler: () => {
|
|
14
|
+
history.push('/{{kebabCase routes.[0].name}}');
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
return define({
|
|
19
|
+
name: `client-app-login`,
|
|
20
|
+
});
|
|
21
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { configure as configureHeader }from '@genesislcap/foundation-header/config';
|
|
2
|
+
import { foundationLayoutComponents } from '@genesislcap/foundation-layout';
|
|
3
|
+
import { EntityManagement } from '@genesislcap/foundation-entity-management';
|
|
4
|
+
import { g2plotChartsComponents } from '@genesislcap/g2plot-chart';
|
|
5
|
+
import * as rapidDesignSystem from '@genesislcap/rapid-design-system';
|
|
6
|
+
import { rapidGridComponents } from '@genesislcap/rapid-grid-pro';
|
|
7
|
+
import { configureFoundationLogin } from './foundation-login';
|
|
8
|
+
|
|
9
|
+
EntityManagement;
|
|
10
|
+
|
|
11
|
+
configureHeader({
|
|
12
|
+
templateOptions: {
|
|
13
|
+
provider: 'template',
|
|
14
|
+
icon: 'rapid-icon',
|
|
15
|
+
button: 'rapid-button',
|
|
16
|
+
connectionIndicator: 'rapid-connection-indicator',
|
|
17
|
+
select: 'rapid-select',
|
|
18
|
+
option: 'rapid-option',
|
|
19
|
+
flyout: 'rapid-flyout',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
configureFoundationLogin();
|
|
24
|
+
|
|
25
|
+
rapidDesignSystem
|
|
26
|
+
.provideDesignSystem()
|
|
27
|
+
.register(
|
|
28
|
+
rapidDesignSystem.baseComponents,
|
|
29
|
+
rapidGridComponents,
|
|
30
|
+
g2plotChartsComponents,
|
|
31
|
+
foundationLayoutComponents,
|
|
32
|
+
);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
useState,
|
|
4
|
+
useContext,
|
|
5
|
+
ReactNode,
|
|
6
|
+
FunctionComponent,
|
|
7
|
+
} from 'react';
|
|
8
|
+
import { authService } from '../services/auth.service';
|
|
9
|
+
|
|
10
|
+
interface AuthContextType {
|
|
11
|
+
user: User | null;
|
|
12
|
+
setUser: (user: User | null) => void;
|
|
13
|
+
checkAuthStatus: () => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface AuthProviderProps {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface User {
|
|
21
|
+
authorized: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const AuthContext = createContext<AuthContextType | undefined>(undefined);
|
|
25
|
+
|
|
26
|
+
export const useAuth = () => {
|
|
27
|
+
const context = useContext(AuthContext);
|
|
28
|
+
if (!context) {
|
|
29
|
+
throw new Error('useAuth must be used within an AuthProvider');
|
|
30
|
+
}
|
|
31
|
+
return context;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const AuthProvider: FunctionComponent<AuthProviderProps> = ({
|
|
35
|
+
children,
|
|
36
|
+
}) => {
|
|
37
|
+
const [user, setUser] = useState<User | null>(null);
|
|
38
|
+
|
|
39
|
+
const checkAuthStatus = async () => {
|
|
40
|
+
const isUserAuthenticated = await authService.isUserAuthenticated();
|
|
41
|
+
|
|
42
|
+
if (isUserAuthenticated) {
|
|
43
|
+
const user = {
|
|
44
|
+
authorized: isUserAuthenticated,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
setUser(user);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
const value = { user, setUser, checkAuthStatus };
|
|
54
|
+
|
|
55
|
+
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
|
|
56
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"design_tokens": {
|
|
3
|
+
"color": {
|
|
4
|
+
"accent": {
|
|
5
|
+
"$value": "#0EAFE2",
|
|
6
|
+
"$type": "color"
|
|
7
|
+
},
|
|
8
|
+
"neutral": {
|
|
9
|
+
"$value": "#7C909B",
|
|
10
|
+
"$type": "color"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"fontFamily": {
|
|
14
|
+
"bodyFont": {
|
|
15
|
+
"$value": "Roboto, \"Segoe UI\", Arial, Helvetica, sans-serif",
|
|
16
|
+
"$type": "fontFamily"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"typography": {
|
|
20
|
+
"baseFontSize": {
|
|
21
|
+
"$value": "14px",
|
|
22
|
+
"$type": "dimension"
|
|
23
|
+
},
|
|
24
|
+
"baseLineHeight": {
|
|
25
|
+
"$value": "20px",
|
|
26
|
+
"$type": "dimension"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"mode": {
|
|
30
|
+
"luminance": {
|
|
31
|
+
"$value": 0.23,
|
|
32
|
+
"$type": "number"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"style": {
|
|
36
|
+
"density": {
|
|
37
|
+
"$value": 0,
|
|
38
|
+
"$type": "number"
|
|
39
|
+
},
|
|
40
|
+
"borderRadius": {
|
|
41
|
+
"$value": 4,
|
|
42
|
+
"$type": "number"
|
|
43
|
+
},
|
|
44
|
+
"strokeWidth": {
|
|
45
|
+
"$value": 1,
|
|
46
|
+
"$type": "number"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"space": {
|
|
50
|
+
"designUnit": {
|
|
51
|
+
"$value": 4,
|
|
52
|
+
"$type": "number"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: Segoe UI;
|
|
3
|
+
font-weight: 300;
|
|
4
|
+
src: local("Segoe UI Semilight"), local("Segoe UI");
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
* {
|
|
8
|
+
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
9
|
+
font-style: normal;
|
|
10
|
+
font-weight: normal;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
html,
|
|
14
|
+
body,
|
|
15
|
+
#root,
|
|
16
|
+
[class$='-page'] {
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
padding: 0;
|
|
20
|
+
margin: 0;
|
|
21
|
+
|
|
22
|
+
--nav-height: 60px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
body{
|
|
26
|
+
overflow: hidden;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
rapid-design-system-provider,
|
|
30
|
+
.dynamic-template,
|
|
31
|
+
foundation-router {
|
|
32
|
+
display: flex;
|
|
33
|
+
width: 100%;
|
|
34
|
+
height: 100%;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
rapid-design-system-provider {
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface LayersState {
|
|
2
|
+
[key: string]: boolean; // Each key is a layer name, value is its visibility (true/false)
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface LayerContextState {
|
|
6
|
+
state: LayersState;
|
|
7
|
+
updateState: (newState: Partial<LayerContextState['state']>) => void;
|
|
8
|
+
setLayerState: (layerName: string, isVisible: boolean) => void;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"composite": true,
|
|
4
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
|
5
|
+
"target": "ES2020",
|
|
6
|
+
"useDefineForClassFields": true,
|
|
7
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
8
|
+
"module": "ESNext",
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
|
|
11
|
+
/* Bundler mode */
|
|
12
|
+
"moduleResolution": "bundler",
|
|
13
|
+
"allowImportingTsExtensions": true,
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"isolatedModules": true,
|
|
16
|
+
"moduleDetection": "force",
|
|
17
|
+
"noEmit": true,
|
|
18
|
+
"jsx": "react-jsx",
|
|
19
|
+
|
|
20
|
+
/* Linting */
|
|
21
|
+
"strict": true,
|
|
22
|
+
"noUnusedLocals": true,
|
|
23
|
+
"noUnusedParameters": true,
|
|
24
|
+
"noFallthroughCasesInSwitch": true,
|
|
25
|
+
"types": ["node", "react"]
|
|
26
|
+
},
|
|
27
|
+
"include": ["src"]
|
|
28
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"composite": true,
|
|
4
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
5
|
+
"skipLibCheck": true,
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"moduleResolution": "bundler",
|
|
8
|
+
"allowSyntheticDefaultImports": true,
|
|
9
|
+
"strict": true,
|
|
10
|
+
"noEmit": true
|
|
11
|
+
},
|
|
12
|
+
"include": ["vite.config.ts"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [
|
|
7
|
+
react(),
|
|
8
|
+
],
|
|
9
|
+
resolve: {
|
|
10
|
+
alias: {
|
|
11
|
+
'foundationZero/ZeroDesignSystem': resolve(__dirname, 'node_modules/@genesislcap/foundation-zero'),
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// WIP
|