@mui-toolpad-extended-tuni/main 3.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/README.md +131 -0
- package/dist/Forms/Components/Editables/EditableAutoComplete.d.ts +12 -0
- package/dist/Forms/Components/Editables/EditableColor.d.ts +8 -0
- package/dist/Forms/Components/Editables/EditableImage.d.ts +9 -0
- package/dist/Forms/Components/Editables/EditableNumber.d.ts +12 -0
- package/dist/Forms/Components/Editables/EditableSelect.d.ts +14 -0
- package/dist/Forms/Components/Editables/EditableSwitch.d.ts +8 -0
- package/dist/Forms/Components/Editables/EditableText.d.ts +32 -0
- package/dist/Forms/Components/SqueezableTable/SqueezableTable.d.ts +2 -0
- package/dist/Forms/Components/SqueezableTable/types.d.ts +24 -0
- package/dist/Forms/PlatformSettings/PlatformSettings.d.ts +21 -0
- package/dist/Forms/PlatformSettings/PlatformSettingsTabs.d.ts +16 -0
- package/dist/Forms/PlatformSettings/tabs/AITab.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/AuthTab.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/CoursesTab.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/FeaturesTab.d.ts +24 -0
- package/dist/Forms/PlatformSettings/tabs/GeneralTab.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/PrivacyTab.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/ThemeTab.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/components/ColorSettings.d.ts +7 -0
- package/dist/Forms/PlatformSettings/tabs/components/TypographySettings.d.ts +7 -0
- package/dist/ToolpadProvider.d.ts +44 -0
- package/dist/components/AuthenticationManager.d.ts +2 -0
- package/dist/components/IconWithBadge.d.ts +9 -0
- package/dist/components/Microservices/MicroserviceNavigationBuilder.d.ts +45 -0
- package/dist/components/Microservices/MicroserviceSubsections.d.ts +9 -0
- package/dist/components/Microservices/Microservices.d.ts +25 -0
- package/dist/components/Microservices/types.d.ts +12 -0
- package/dist/components/Routes/Home/Home.d.ts +2 -0
- package/dist/components/ThemeToggle/ThemeToggle.d.ts +3 -0
- package/dist/components/tools/addActions.d.ts +5 -0
- package/dist/components/tools/addIcons.d.ts +2 -0
- package/dist/components/tools/iconsByType.d.ts +6 -0
- package/dist/components/tools/utils/ActionFCWrapper.d.ts +5 -0
- package/dist/components/tools/utils/IconFCWrapper.d.ts +5 -0
- package/dist/constants.d.ts +67 -0
- package/dist/hooks/useCustomRouter.d.ts +7 -0
- package/dist/index.cjs +132 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.es.js +13291 -0
- package/dist/interfaces.d.ts +1 -0
- package/dist/layout/Content/PageContent.d.ts +5 -0
- package/dist/layout/Toolbars/AppToolbar/Account.d.ts +2 -0
- package/dist/layout/Toolbars/AppToolbar/CollapsibleMenu.d.ts +1 -0
- package/dist/layout/Toolbars/AppToolbar/Logo.d.ts +2 -0
- package/dist/layout/Toolbars/AppToolbar/RegisteredAppTools.d.ts +11 -0
- package/dist/layout/Toolbars/AppToolbar/SearchBar.d.ts +6 -0
- package/dist/layout/Toolbars/PageToolbar/RegisteredPageTools.d.ts +37 -0
- package/dist/layout/Toolbars/toolbarRegistry.d.ts +117 -0
- package/dist/layout/sidebar/Footer.d.ts +3 -0
- package/dist/network/axiosConfig.d.ts +4 -0
- package/dist/store/useDialogStore.d.ts +9 -0
- package/dist/store/usePlatformStore.d.ts +165 -0
- package/dist/store/useThemeStore.d.ts +184 -0
- package/dist/store/useToolbarStore.d.ts +8 -0
- package/dist/theme/EduMLTheme.d.ts +2 -0
- package/dist/tools/ErrorBoundary.d.ts +14 -0
- package/dist/tools/NullStateWarning.d.ts +8 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type fetchState = "idle" | "loading" | "error" | "success";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CollapsibleMenu: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** @format */
|
|
2
|
+
/**
|
|
3
|
+
* A component that renders app toolbar actions registered under a fixed "global" key
|
|
4
|
+
* or using location.pathname for route-specific app actions.
|
|
5
|
+
*
|
|
6
|
+
* @version 1.1.0
|
|
7
|
+
* @updates
|
|
8
|
+
* - Added support for passing props to toolbar components
|
|
9
|
+
*/
|
|
10
|
+
declare const RegisteredAppTools: () => import("react/jsx-runtime").JSX.Element | null;
|
|
11
|
+
export default RegisteredAppTools;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** @format */
|
|
2
|
+
/**
|
|
3
|
+
* PageToolbar Component
|
|
4
|
+
*
|
|
5
|
+
* @version 3.1.0
|
|
6
|
+
*
|
|
7
|
+
* A dynamic toolbar component that renders actions based on the current route.
|
|
8
|
+
* Automatically updates when actions are registered or unregistered.
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Route-based action rendering
|
|
12
|
+
* - Dynamic action registration/unregistration
|
|
13
|
+
* - Automatic re-rendering on changes
|
|
14
|
+
* - Support for custom toolbar overrides
|
|
15
|
+
* - Support for passing props to toolbar components
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* // In your app layout
|
|
20
|
+
* <AppLayout>
|
|
21
|
+
* <PageToolbar />
|
|
22
|
+
* {children}
|
|
23
|
+
* </AppLayout>
|
|
24
|
+
*
|
|
25
|
+
* // Register actions in your components
|
|
26
|
+
* useEffect(() => {
|
|
27
|
+
* registerToolbarAction('/my-route', MyAction);
|
|
28
|
+
* return () => unregisterToolbarAction('/my-route', MyAction);
|
|
29
|
+
* }, []);
|
|
30
|
+
*
|
|
31
|
+
* // Register with props
|
|
32
|
+
* registerPageToolbarAction('/my-route', MyAction, { data: 'some-data' });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
declare const RegisteredPageTools: () => import("react/jsx-runtime").JSX.Element | null;
|
|
36
|
+
export declare const HeaderWithPageRegistryToolbar: () => import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
export default RegisteredPageTools;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Toolbar Registry System
|
|
4
|
+
*
|
|
5
|
+
* @version 3.1.0
|
|
6
|
+
*
|
|
7
|
+
* A flexible system for registering and managing toolbar actions based on routes.
|
|
8
|
+
* Supports dynamic registration, unregistration, and automatic re-rendering.
|
|
9
|
+
* Now with support for passing props to registered components.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* // Register a toolbar action
|
|
14
|
+
* registerToolbarAction('/my-route', MyActionComponent);
|
|
15
|
+
*
|
|
16
|
+
* // Register with props
|
|
17
|
+
* registerToolbarAction('/my-route', MyActionComponent, { some: 'props' });
|
|
18
|
+
*
|
|
19
|
+
* // Clean up when component unmounts
|
|
20
|
+
* useEffect(() => {
|
|
21
|
+
* registerToolbarAction('/my-route', MyActionComponent);
|
|
22
|
+
* return () => unregisterToolbarAction('/my-route', MyActionComponent);
|
|
23
|
+
* }, []);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Toolbar entry containing both the component and optional props
|
|
28
|
+
*/
|
|
29
|
+
export interface ToolbarEntry {
|
|
30
|
+
Component: ComponentType<any>;
|
|
31
|
+
props?: Record<string, any>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register a new page toolbar action for a specific route.
|
|
35
|
+
*
|
|
36
|
+
* @param path - The route path where this action should appear.
|
|
37
|
+
* @param Component - The React component to render in the page toolbar.
|
|
38
|
+
* @param props - Optional props to pass to the component.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* registerPageToolbarAction('/my-route', MyPageAction);
|
|
42
|
+
* registerPageToolbarAction('/my-route', MyPageAction, { color: 'primary' });
|
|
43
|
+
*/
|
|
44
|
+
export declare function registerPageToolbarAction(path: string, Component: ComponentType<any>, props?: Record<string, any>): void;
|
|
45
|
+
/**
|
|
46
|
+
* Unregister a page toolbar action from a specific route.
|
|
47
|
+
*
|
|
48
|
+
* @param path - The route path to remove the action from.
|
|
49
|
+
* @param Component - The React component to remove.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* unregisterPageToolbarAction('/my-route', MyPageAction);
|
|
53
|
+
*/
|
|
54
|
+
export declare function unregisterPageToolbarAction(path: string, Component: ComponentType<any>): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get all registered page toolbar actions for a specific route.
|
|
57
|
+
*
|
|
58
|
+
* @param path - The route path to get the actions for.
|
|
59
|
+
* @returns An array of registered page toolbar action entries.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* const actions = getPageToolbarActions('/my-route');
|
|
63
|
+
*/
|
|
64
|
+
export declare function getPageToolbarActions(path: string): ToolbarEntry[];
|
|
65
|
+
/**
|
|
66
|
+
* Clear all registered page toolbar actions for a specific route.
|
|
67
|
+
*
|
|
68
|
+
* @param path - The route path to clear the actions for.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* clearPageToolbarActions('/my-route');
|
|
72
|
+
*/
|
|
73
|
+
export declare function clearPageToolbarActions(path: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Register a new app toolbar action for a specific route or global key.
|
|
76
|
+
*
|
|
77
|
+
* @param path - The key or route where this action should appear.
|
|
78
|
+
* @param Component - The React component to render in the app toolbar.
|
|
79
|
+
* @param props - Optional props to pass to the component.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* registerAppToolbarAction('global', MyAppAction);
|
|
83
|
+
* registerAppToolbarAction('global', MyAppAction, { variant: 'outlined' });
|
|
84
|
+
*/
|
|
85
|
+
export declare function registerAppToolbarAction(path: string, Component: ComponentType<any>, props?: Record<string, any>): void;
|
|
86
|
+
/**
|
|
87
|
+
* Unregister an app toolbar action from a specific route or global key.
|
|
88
|
+
*
|
|
89
|
+
* @param path - The key or route to remove the action from.
|
|
90
|
+
* @param Component - The React component to remove.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* unregisterAppToolbarAction('global', MyAppAction);
|
|
94
|
+
*/
|
|
95
|
+
export declare function unregisterAppToolbarAction(path: string, Component: ComponentType<any>): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get all registered app toolbar actions for a specific route or global key.
|
|
98
|
+
*
|
|
99
|
+
* @param path - The key or route to get the actions for.
|
|
100
|
+
* @returns An array of registered app toolbar action entries.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* const actions = getAppToolbarActions('global');
|
|
104
|
+
*/
|
|
105
|
+
export declare function getAppToolbarActions(path: string): ToolbarEntry[];
|
|
106
|
+
/**
|
|
107
|
+
* Clear all registered app toolbar actions for a specific route or global key.
|
|
108
|
+
*
|
|
109
|
+
* @param path - The key or route to clear the actions for.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* clearAppToolbarActions('global');
|
|
113
|
+
*/
|
|
114
|
+
export declare function clearAppToolbarActions(path: string): void;
|
|
115
|
+
export declare const useToolbarRegistryStore: () => {
|
|
116
|
+
version: number;
|
|
117
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** @format */
|
|
2
|
+
export type dialogType = string | null;
|
|
3
|
+
type DialogState = {
|
|
4
|
+
openDialog: dialogType;
|
|
5
|
+
setOpenDialog: (dialog: dialogType | null) => void;
|
|
6
|
+
closeDialog: () => void;
|
|
7
|
+
};
|
|
8
|
+
declare const useDialogStore: import('zustand/traditional').UseBoundStoreWithEqualityFn<import('zustand').StoreApi<DialogState>>;
|
|
9
|
+
export default useDialogStore;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Layouts } from 'react-grid-layout';
|
|
2
|
+
export interface AuthSettings {
|
|
3
|
+
allowedAuthMethods: ("local" | "google" | "microsoft" | "shibboleth")[];
|
|
4
|
+
minimumPasswordLength: number;
|
|
5
|
+
requireEmailVerification: boolean;
|
|
6
|
+
allowSelfRegistration: boolean;
|
|
7
|
+
defaultUserRole: PlatformRole;
|
|
8
|
+
}
|
|
9
|
+
export type PlatformRole = "admin" | "developer" | "moderator" | "creator" | "user" | "guest";
|
|
10
|
+
export type visibilityMode = "public" | "enrolled" | "private";
|
|
11
|
+
export interface CourseSettings {
|
|
12
|
+
courseCreation: {
|
|
13
|
+
requiredRoles: PlatformRole[];
|
|
14
|
+
requireApproval: boolean;
|
|
15
|
+
};
|
|
16
|
+
defaultCourseVisibility: visibilityMode;
|
|
17
|
+
defaultEnrollmentDuration: number;
|
|
18
|
+
courseCategories: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface AISettings {
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
providers: {
|
|
23
|
+
openai: {
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
apiKey?: string;
|
|
26
|
+
modelName: string;
|
|
27
|
+
maxTokens: number;
|
|
28
|
+
temperature: number;
|
|
29
|
+
};
|
|
30
|
+
anthropic: {
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
apiKey?: string;
|
|
33
|
+
modelName: string;
|
|
34
|
+
};
|
|
35
|
+
local: {
|
|
36
|
+
enabled: boolean;
|
|
37
|
+
endpoint: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
features: {
|
|
41
|
+
autoGrading: boolean;
|
|
42
|
+
plagiarismDetection: boolean;
|
|
43
|
+
contentGeneration: boolean;
|
|
44
|
+
studentAssistant: boolean;
|
|
45
|
+
teacherAssistant: boolean;
|
|
46
|
+
};
|
|
47
|
+
moderationSettings: {
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
filterProfanity: boolean;
|
|
50
|
+
filterSensitiveContent: boolean;
|
|
51
|
+
maxQueriesPerHour: number;
|
|
52
|
+
};
|
|
53
|
+
agentConfigurations: {
|
|
54
|
+
agent: "openai" | "anthropic" | "local" | string;
|
|
55
|
+
assigned: string[];
|
|
56
|
+
apiKey?: string;
|
|
57
|
+
modelName?: string;
|
|
58
|
+
apiUrl?: string;
|
|
59
|
+
}[];
|
|
60
|
+
}
|
|
61
|
+
export interface NotificationSettings {
|
|
62
|
+
emailNotifications: boolean;
|
|
63
|
+
pushNotifications: boolean;
|
|
64
|
+
smtpSettings?: {
|
|
65
|
+
host: string;
|
|
66
|
+
port: number;
|
|
67
|
+
secure: boolean;
|
|
68
|
+
auth: {
|
|
69
|
+
user: string;
|
|
70
|
+
pass: string;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface Platform {
|
|
75
|
+
name: string;
|
|
76
|
+
description: string;
|
|
77
|
+
contactEmail: string;
|
|
78
|
+
supportUrl: string;
|
|
79
|
+
darkMode: {
|
|
80
|
+
enabled: boolean;
|
|
81
|
+
default: boolean;
|
|
82
|
+
};
|
|
83
|
+
auth: AuthSettings;
|
|
84
|
+
courses: CourseSettings;
|
|
85
|
+
ai: AISettings;
|
|
86
|
+
notifications: NotificationSettings;
|
|
87
|
+
analytics: {
|
|
88
|
+
enabled: boolean;
|
|
89
|
+
provider?: string;
|
|
90
|
+
trackingId?: string;
|
|
91
|
+
};
|
|
92
|
+
maintenance: {
|
|
93
|
+
enabled: boolean;
|
|
94
|
+
message: string;
|
|
95
|
+
};
|
|
96
|
+
storage: {
|
|
97
|
+
maxFileSize: number;
|
|
98
|
+
allowedFileTypes: string[];
|
|
99
|
+
totalStorageLimit: number;
|
|
100
|
+
};
|
|
101
|
+
features: {
|
|
102
|
+
forums: boolean;
|
|
103
|
+
wiki: boolean;
|
|
104
|
+
chat: boolean;
|
|
105
|
+
videoConference: boolean;
|
|
106
|
+
peerReview: boolean;
|
|
107
|
+
gamification: boolean;
|
|
108
|
+
};
|
|
109
|
+
admins: {
|
|
110
|
+
emails: string[];
|
|
111
|
+
invitePending: string[];
|
|
112
|
+
};
|
|
113
|
+
privacy: {
|
|
114
|
+
gdprEnabled: boolean;
|
|
115
|
+
dataRetentionPeriod: number;
|
|
116
|
+
defaultPrivacySettings: {
|
|
117
|
+
allowAnalytics: boolean;
|
|
118
|
+
allowPersonalization: boolean;
|
|
119
|
+
allowCommunications: boolean;
|
|
120
|
+
allowThirdPartySharing: boolean;
|
|
121
|
+
};
|
|
122
|
+
privacyPolicy: {
|
|
123
|
+
url: string;
|
|
124
|
+
lastUpdated: string;
|
|
125
|
+
version: string;
|
|
126
|
+
};
|
|
127
|
+
cookieSettings: {
|
|
128
|
+
necessary: boolean;
|
|
129
|
+
functional: boolean;
|
|
130
|
+
analytics: boolean;
|
|
131
|
+
advertising: boolean;
|
|
132
|
+
expiryDays: number;
|
|
133
|
+
};
|
|
134
|
+
dataProcessingAgreements: {
|
|
135
|
+
thirdParties: {
|
|
136
|
+
name: string;
|
|
137
|
+
purpose: string;
|
|
138
|
+
dataShared: string[];
|
|
139
|
+
location: string;
|
|
140
|
+
}[];
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
interface: {
|
|
144
|
+
layout: Layouts;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
interface PlatformSettingsStore {
|
|
148
|
+
platform: Platform;
|
|
149
|
+
platformToUpdate: Platform | null;
|
|
150
|
+
updatePlatform: (newPlatform: Platform) => void;
|
|
151
|
+
updateAISettings: (newAISettings: Partial<AISettings>) => void;
|
|
152
|
+
resetToDefaults: () => void;
|
|
153
|
+
}
|
|
154
|
+
export declare const usePlatformStore: import('zustand/traditional').UseBoundStoreWithEqualityFn<Omit<import('zustand').StoreApi<PlatformSettingsStore>, "persist"> & {
|
|
155
|
+
persist: {
|
|
156
|
+
setOptions: (options: Partial<import('zustand/middleware').PersistOptions<PlatformSettingsStore, PlatformSettingsStore>>) => void;
|
|
157
|
+
clearStorage: () => void;
|
|
158
|
+
rehydrate: () => Promise<void> | void;
|
|
159
|
+
hasHydrated: () => boolean;
|
|
160
|
+
onHydrate: (fn: (state: PlatformSettingsStore) => void) => () => void;
|
|
161
|
+
onFinishHydration: (fn: (state: PlatformSettingsStore) => void) => () => void;
|
|
162
|
+
getOptions: () => Partial<import('zustand/middleware').PersistOptions<PlatformSettingsStore, PlatformSettingsStore>>;
|
|
163
|
+
};
|
|
164
|
+
}>;
|
|
165
|
+
export {};
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { Components, Theme, PaletteMode, PaletteOptions } from '@mui/material/styles';
|
|
2
|
+
import { ColorSchemePreference } from '../../../core/src';
|
|
3
|
+
export interface TypographyVariantStyle extends Partial<React.CSSProperties> {
|
|
4
|
+
}
|
|
5
|
+
export interface ThemeTypography {
|
|
6
|
+
fontFamily: string;
|
|
7
|
+
h1: TypographyVariantStyle;
|
|
8
|
+
h2: TypographyVariantStyle;
|
|
9
|
+
h3: TypographyVariantStyle;
|
|
10
|
+
h4: TypographyVariantStyle;
|
|
11
|
+
h5: TypographyVariantStyle;
|
|
12
|
+
h6: TypographyVariantStyle;
|
|
13
|
+
subtitle1: TypographyVariantStyle;
|
|
14
|
+
subtitle2: TypographyVariantStyle;
|
|
15
|
+
body1: TypographyVariantStyle;
|
|
16
|
+
body2: TypographyVariantStyle;
|
|
17
|
+
button: TypographyVariantStyle;
|
|
18
|
+
caption: TypographyVariantStyle;
|
|
19
|
+
overline: TypographyVariantStyle;
|
|
20
|
+
}
|
|
21
|
+
export interface shape {
|
|
22
|
+
borderRadius: number;
|
|
23
|
+
}
|
|
24
|
+
export interface colorScheme {
|
|
25
|
+
palette: PaletteOptions & {
|
|
26
|
+
mode: PaletteMode;
|
|
27
|
+
background: {
|
|
28
|
+
default: string;
|
|
29
|
+
paper: string;
|
|
30
|
+
};
|
|
31
|
+
primary: {
|
|
32
|
+
main: string;
|
|
33
|
+
light: string;
|
|
34
|
+
dark: string;
|
|
35
|
+
contrastText: string;
|
|
36
|
+
};
|
|
37
|
+
secondary: {
|
|
38
|
+
main: string;
|
|
39
|
+
light: string;
|
|
40
|
+
dark: string;
|
|
41
|
+
contrastText: string;
|
|
42
|
+
};
|
|
43
|
+
error: {
|
|
44
|
+
main: string;
|
|
45
|
+
light: string;
|
|
46
|
+
dark: string;
|
|
47
|
+
contrastText: string;
|
|
48
|
+
};
|
|
49
|
+
warning: {
|
|
50
|
+
main: string;
|
|
51
|
+
light: string;
|
|
52
|
+
dark: string;
|
|
53
|
+
contrastText: string;
|
|
54
|
+
};
|
|
55
|
+
info: {
|
|
56
|
+
main: string;
|
|
57
|
+
light: string;
|
|
58
|
+
dark: string;
|
|
59
|
+
contrastText: string;
|
|
60
|
+
};
|
|
61
|
+
success: {
|
|
62
|
+
main: string;
|
|
63
|
+
light: string;
|
|
64
|
+
dark: string;
|
|
65
|
+
contrastText: string;
|
|
66
|
+
};
|
|
67
|
+
text: {
|
|
68
|
+
primary: string;
|
|
69
|
+
secondary: string;
|
|
70
|
+
disabled: string;
|
|
71
|
+
};
|
|
72
|
+
divider: string;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface ThemeBreakpoints {
|
|
76
|
+
values: {
|
|
77
|
+
xs: number;
|
|
78
|
+
sm: number;
|
|
79
|
+
md: number;
|
|
80
|
+
lg: number;
|
|
81
|
+
xl: number;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export interface ThemeComponents {
|
|
85
|
+
MuiButton: {
|
|
86
|
+
styleOverrides: {
|
|
87
|
+
root: {
|
|
88
|
+
textTransform: string;
|
|
89
|
+
borderRadius: number;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
MuiPaper: {
|
|
94
|
+
styleOverrides: {
|
|
95
|
+
root: {
|
|
96
|
+
backgroundImage: string;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
MuiDialog: {
|
|
101
|
+
styleOverrides: {
|
|
102
|
+
paper: {
|
|
103
|
+
borderRadius: number;
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
MuiCard: {
|
|
108
|
+
styleOverrides: {
|
|
109
|
+
root: {
|
|
110
|
+
borderRadius: number;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export interface ThemeTransitions {
|
|
116
|
+
easing: {
|
|
117
|
+
easeInOut: string;
|
|
118
|
+
easeOut: string;
|
|
119
|
+
easeIn: string;
|
|
120
|
+
sharp: string;
|
|
121
|
+
};
|
|
122
|
+
duration: {
|
|
123
|
+
shortest: number;
|
|
124
|
+
shorter: number;
|
|
125
|
+
short: number;
|
|
126
|
+
standard: number;
|
|
127
|
+
complex: number;
|
|
128
|
+
enteringScreen: number;
|
|
129
|
+
leavingScreen: number;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export interface ThemezIndex {
|
|
133
|
+
mobileStepper: number;
|
|
134
|
+
fab: number;
|
|
135
|
+
speedDial: number;
|
|
136
|
+
appBar: number;
|
|
137
|
+
drawer: number;
|
|
138
|
+
modal: number;
|
|
139
|
+
snackbar: number;
|
|
140
|
+
tooltip: number;
|
|
141
|
+
}
|
|
142
|
+
interface ThemeTemplate {
|
|
143
|
+
cssVariables: {
|
|
144
|
+
colorSchemeSelector: string;
|
|
145
|
+
};
|
|
146
|
+
defaultColorScheme: 'light' | 'dark';
|
|
147
|
+
typography: ThemeTypography;
|
|
148
|
+
shape: shape;
|
|
149
|
+
spacing: number;
|
|
150
|
+
colorSchemes: {
|
|
151
|
+
light: colorScheme;
|
|
152
|
+
dark: colorScheme;
|
|
153
|
+
};
|
|
154
|
+
breakpoints: ThemeBreakpoints;
|
|
155
|
+
components: Partial<Components<Theme>>;
|
|
156
|
+
transitions: ThemeTransitions;
|
|
157
|
+
zIndex: ThemezIndex;
|
|
158
|
+
}
|
|
159
|
+
export declare const ThemeTemplate: ThemeTemplate;
|
|
160
|
+
export type AppTheme = ThemeTemplate;
|
|
161
|
+
interface ThemeStore {
|
|
162
|
+
colorSchemePreference: ColorSchemePreference;
|
|
163
|
+
setColorSchemePreference: (preference: ColorSchemePreference) => void;
|
|
164
|
+
getTheme: () => AppTheme;
|
|
165
|
+
updateTheme: (updates: AppTheme) => void;
|
|
166
|
+
resetTheme: () => void;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Theme management store with support for custom themes and dark mode.
|
|
170
|
+
*
|
|
171
|
+
* @version 2.0.0
|
|
172
|
+
* @updates
|
|
173
|
+
* - Color scheme preference stored in cookie (light/dark/system)
|
|
174
|
+
* - Theme colors always come from ThemeTemplate (not persisted)
|
|
175
|
+
* - System preference detection for 'system' mode
|
|
176
|
+
*
|
|
177
|
+
* @features
|
|
178
|
+
* - Theme customization (colors, typography, etc.)
|
|
179
|
+
* - Color scheme preference management (cookie-based)
|
|
180
|
+
* - System preference detection
|
|
181
|
+
* - Always uses ThemeTemplate for base colors
|
|
182
|
+
*/
|
|
183
|
+
export declare const useThemeStore: import('zustand/traditional').UseBoundStoreWithEqualityFn<import('zustand').StoreApi<ThemeStore>>;
|
|
184
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @format */
|
|
2
|
+
export type toolbarType = string | null;
|
|
3
|
+
type ToolbarState = {
|
|
4
|
+
currentToolbar: toolbarType;
|
|
5
|
+
setCurrentToolbar: (toolbar: toolbarType) => void;
|
|
6
|
+
};
|
|
7
|
+
declare const useToolbarStore: import('zustand/traditional').UseBoundStoreWithEqualityFn<import('zustand').StoreApi<ToolbarState>>;
|
|
8
|
+
export default useToolbarStore;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
interface Props {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
interface State {
|
|
6
|
+
hasError: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare class ErrorBoundary extends Component<Props, State> {
|
|
9
|
+
state: State;
|
|
10
|
+
static getDerivedStateFromError(_: Error): State;
|
|
11
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
12
|
+
render(): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
|
|
13
|
+
}
|
|
14
|
+
export default ErrorBoundary;
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mui-toolpad-extended-tuni/main",
|
|
3
|
+
"version": "3.2.0",
|
|
4
|
+
"description": "Main package for MUI Toolpad Extended TUNI - provides ToolpadProvider, LMS components, and platform features",
|
|
5
|
+
"author": "Jaakko Rajala",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.cjs",
|
|
8
|
+
"module": "./dist/index.es.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/Jalez/mui-toolpad-extended-tuni.git",
|
|
17
|
+
"directory": "packages/main"
|
|
18
|
+
},
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.es.js",
|
|
23
|
+
"require": "./dist/index.cjs",
|
|
24
|
+
"default": "./dist/index.es.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"react",
|
|
32
|
+
"mui",
|
|
33
|
+
"toolpad",
|
|
34
|
+
"education",
|
|
35
|
+
"tuni",
|
|
36
|
+
"main"
|
|
37
|
+
],
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc && vite build",
|
|
42
|
+
"dev": "vite build --watch",
|
|
43
|
+
"prepublishOnly": "npm run build"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@mui-toolpad-extended-tuni/core": "^3.1.0",
|
|
47
|
+
"@dnd-kit/core": "^6.3.1",
|
|
48
|
+
"@dnd-kit/modifiers": "^9.0.0",
|
|
49
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
50
|
+
"@fontsource/roboto": "^5.0.14",
|
|
51
|
+
"axios": "^1.7.9",
|
|
52
|
+
"chart.js": "^4.5.1",
|
|
53
|
+
"d3-force": "^3.0.0",
|
|
54
|
+
"lodash": "^4.17.21",
|
|
55
|
+
"react-chartjs-2": "^5.2.0",
|
|
56
|
+
"react-colorful": "^5.6.1",
|
|
57
|
+
"react-grid-layout": "^1.5.0",
|
|
58
|
+
"styled-components": "^6.1.0",
|
|
59
|
+
"uuid": "^10.0.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"@emotion/react": "^11.0.0",
|
|
63
|
+
"@emotion/styled": "^11.0.0",
|
|
64
|
+
"@mui/icons-material": "^7.0.0",
|
|
65
|
+
"@mui/material": "^7.0.0",
|
|
66
|
+
"@mui/x-date-pickers": "^7.0.0",
|
|
67
|
+
"@toolpad/core": "^0.16.0",
|
|
68
|
+
"react": "^19.0.0",
|
|
69
|
+
"react-dom": "^19.0.0",
|
|
70
|
+
"react-router-dom": "^7.0.0",
|
|
71
|
+
"zustand": "^4.5.0"
|
|
72
|
+
}
|
|
73
|
+
}
|