Compare commits
21 Commits
ada2e1cb72
...
0eef478a41
| Author | SHA1 | Date | |
|---|---|---|---|
| 0eef478a41 | |||
| 55ba6031eb | |||
| 21d47b1f90 | |||
| 9b831c86d4 | |||
| 8893b96e9b | |||
| 673efe51ed | |||
| b06595e8d8 | |||
| 05c7b49bbc | |||
| b107273db3 | |||
| 5f6eda0fc7 | |||
| f8be0b0b5f | |||
| a73ff5b9a4 | |||
| 1a9a683b25 | |||
| e8a96dd6c4 | |||
| e9aa405464 | |||
| 62f99842b3 | |||
| caf507fe1a | |||
| ba08b3a3d0 | |||
| b0c6cdcd13 | |||
| 3fd7553ce8 | |||
| 947257646d |
140
src/client/dd-hub-react/package-lock.json
generated
140
src/client/dd-hub-react/package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@minimal/material-kit-react",
|
||||
"version": "3.0.0",
|
||||
"name": "dd-hub-react",
|
||||
"version": "0.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@minimal/material-kit-react",
|
||||
"version": "3.0.0",
|
||||
"name": "dd-hub-react",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@emotion/cache": "^11.14.0",
|
||||
"@emotion/react": "^11.14.0",
|
||||
@ -14,6 +14,7 @@
|
||||
"@fontsource-variable/dm-sans": "^5.2.5",
|
||||
"@fontsource/barlow": "^5.2.5",
|
||||
"@iconify/react": "^5.2.1",
|
||||
"@mui/icons-material": "^7.2.0",
|
||||
"@mui/lab": "^7.0.0-beta.10",
|
||||
"@mui/material": "^7.0.1",
|
||||
"apexcharts": "^4.5.0",
|
||||
@ -128,13 +129,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
|
||||
"integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
|
||||
"integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@ -1164,15 +1162,41 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/core-downloads-tracker": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.1.tgz",
|
||||
"integrity": "sha512-T5DNVnSD9pMbj4Jk/Uphz+yvj9dfpl2+EqsOuJtG12HxEihNG5pd3qzX5yM1Id4dDwKRvM3dPVcxyzavTFhJeA==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz",
|
||||
"integrity": "sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/icons-material": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.2.0.tgz",
|
||||
"integrity": "sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.27.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@mui/material": "^7.2.0",
|
||||
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/lab": {
|
||||
"version": "7.0.0-beta.10",
|
||||
"resolved": "https://registry.npmjs.org/@mui/lab/-/lab-7.0.0-beta.10.tgz",
|
||||
@ -1218,22 +1242,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/material": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz",
|
||||
"integrity": "sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz",
|
||||
"integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/core-downloads-tracker": "^7.0.1",
|
||||
"@mui/system": "^7.0.1",
|
||||
"@mui/types": "^7.4.0",
|
||||
"@mui/utils": "^7.0.1",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/core-downloads-tracker": "^7.2.0",
|
||||
"@mui/system": "^7.2.0",
|
||||
"@mui/types": "^7.4.4",
|
||||
"@mui/utils": "^7.2.0",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"@types/react-transition-group": "^4.4.12",
|
||||
"clsx": "^2.1.1",
|
||||
"csstype": "^3.1.3",
|
||||
"prop-types": "^15.8.1",
|
||||
"react-is": "^19.0.0",
|
||||
"react-is": "^19.1.0",
|
||||
"react-transition-group": "^4.4.5"
|
||||
},
|
||||
"engines": {
|
||||
@ -1246,7 +1270,7 @@
|
||||
"peerDependencies": {
|
||||
"@emotion/react": "^11.5.0",
|
||||
"@emotion/styled": "^11.3.0",
|
||||
"@mui/material-pigment-css": "^7.0.1",
|
||||
"@mui/material-pigment-css": "^7.2.0",
|
||||
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
@ -1267,13 +1291,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/private-theming": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.1.tgz",
|
||||
"integrity": "sha512-1kQ7REYjjzDukuMfTbAjm3pLEhD7gUMC2bWhg9VD6f6sHzyokKzX0XHzlr3IdzNWBjPytGkzHpPIRQrUOoPLCQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz",
|
||||
"integrity": "sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/utils": "^7.0.1",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/utils": "^7.2.0",
|
||||
"prop-types": "^15.8.1"
|
||||
},
|
||||
"engines": {
|
||||
@ -1294,13 +1318,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/styled-engine": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.1.tgz",
|
||||
"integrity": "sha512-BeGe4xZmF7tESKhmctYrL54Kl25kGHPKVdZYM5qj5Xz76WM/poY+d8EmAqUesT6k2rbJWPp2gtOAXXinNCGunQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz",
|
||||
"integrity": "sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@emotion/cache": "^11.13.5",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@emotion/cache": "^11.14.0",
|
||||
"@emotion/serialize": "^1.3.3",
|
||||
"@emotion/sheet": "^1.4.0",
|
||||
"csstype": "^3.1.3",
|
||||
@ -1328,16 +1352,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/system": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/system/-/system-7.0.1.tgz",
|
||||
"integrity": "sha512-pK+puz0hRPHEKGlcPd80mKYD3jpyi0uVIwWffox1WZgPTQMw2dCKLcD+9ndMDJADnrKzmKlpoH756PPFh2UvWA==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz",
|
||||
"integrity": "sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/private-theming": "^7.0.1",
|
||||
"@mui/styled-engine": "^7.0.1",
|
||||
"@mui/types": "^7.4.0",
|
||||
"@mui/utils": "^7.0.1",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/private-theming": "^7.2.0",
|
||||
"@mui/styled-engine": "^7.2.0",
|
||||
"@mui/types": "^7.4.4",
|
||||
"@mui/utils": "^7.2.0",
|
||||
"clsx": "^2.1.1",
|
||||
"csstype": "^3.1.3",
|
||||
"prop-types": "^15.8.1"
|
||||
@ -1368,12 +1392,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/types": {
|
||||
"version": "7.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz",
|
||||
"integrity": "sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==",
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz",
|
||||
"integrity": "sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10"
|
||||
"@babel/runtime": "^7.27.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
@ -1385,17 +1409,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/utils": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.0.1.tgz",
|
||||
"integrity": "sha512-SJKrrebNpmK9rJCnVL29nGPhPXQYtBZmb7Dsp0f58uIUhQfAKcBXHE4Kjs06SX4CwqeCuwEVgcHY+MgAO6XQ/g==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz",
|
||||
"integrity": "sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/types": "^7.4.0",
|
||||
"@types/prop-types": "^15.7.14",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/types": "^7.4.4",
|
||||
"@types/prop-types": "^15.7.15",
|
||||
"clsx": "^2.1.1",
|
||||
"prop-types": "^15.8.1",
|
||||
"react-is": "^19.0.0"
|
||||
"react-is": "^19.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
@ -2099,9 +2123,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/prop-types": {
|
||||
"version": "15.7.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
|
||||
"integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
|
||||
"version": "15.7.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
|
||||
"integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
@ -5698,12 +5722,6 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/regenerator-runtime": {
|
||||
"version": "0.14.1",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
|
||||
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/regexp.prototype.flags": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
"@fontsource-variable/dm-sans": "^5.2.5",
|
||||
"@fontsource/barlow": "^5.2.5",
|
||||
"@iconify/react": "^5.2.1",
|
||||
"@mui/icons-material": "^7.2.0",
|
||||
"@mui/lab": "^7.0.0-beta.10",
|
||||
"@mui/material": "^7.0.1",
|
||||
"apexcharts": "^4.5.0",
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 356 B |
@ -1,3 +1,6 @@
|
||||
import { Filter } from 'src/api/filter-service';
|
||||
import { Product } from 'src/api/product-service';
|
||||
|
||||
import {
|
||||
_id,
|
||||
_price,
|
||||
@ -74,7 +77,7 @@ const COLORS = [
|
||||
'#FFC107',
|
||||
];
|
||||
|
||||
export const _products = [...Array(24)].map((_, index) => {
|
||||
export const _productsTextile = [...Array(24)].map((_, index) => {
|
||||
const setIndex = index + 1;
|
||||
|
||||
return {
|
||||
@ -208,3 +211,29 @@ export const _notifications = [
|
||||
isUnRead: false,
|
||||
},
|
||||
];
|
||||
|
||||
export const _products: Product[] = [
|
||||
{
|
||||
id: '1',
|
||||
name: "User Manager",
|
||||
version: "1.0.0"
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
name: "Envelope Generator",
|
||||
version: "1.0.0"
|
||||
}
|
||||
];
|
||||
|
||||
export const _filters: Filter[] = [
|
||||
{ id: 1, label: 'Rechnungsnummer', name: 'invoiceNumber', type: 'VARCHAR' },
|
||||
{ id: 2, label: 'Kundenname', name: 'customerName', type: 'INTEGER' },
|
||||
{ id: 3, label: 'Startdatum', name: 'startDate', type: 'DATE' },
|
||||
{ id: 4, label: 'Enddatum', name: 'endDate', type: 'DATE' },
|
||||
{ id: 5, label: 'Status der Rechnung', name: 'status', type: 'VARCHAR' },
|
||||
{ id: 6, label: 'Mindestbetrag', name: 'minAmount', type: 'DECIMAL' },
|
||||
{ id: 7, label: 'Höchstbetrag', name: 'maxAmount', type: 'DECIMAL' },
|
||||
{ id: 8, label: 'Steuer inbegriffen?', name: 'taxIncluded', type: 'BOOLEAN' },
|
||||
{ id: 9, label: 'Währung', name: 'currency', type: 'VARCHAR' },
|
||||
{ id: 10, label: 'Erstellungsdatum', name: 'createdAt', type: 'DATE' }
|
||||
];
|
||||
14
src/client/dd-hub-react/src/api/filter-service.ts
Normal file
14
src/client/dd-hub-react/src/api/filter-service.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { _filters } from 'src/_mock/_data';
|
||||
|
||||
export type Type = 'BOOLEAN' | 'DATE' | 'VARCHAR' | 'INTEGER' | 'DECIMAL';
|
||||
|
||||
export type Filter = {
|
||||
id: number;
|
||||
label?: string;
|
||||
name: string;
|
||||
type: Type;
|
||||
};
|
||||
|
||||
export function getFiltersAsync(): Promise<Filter[]> {
|
||||
return Promise.resolve(_filters);
|
||||
}
|
||||
@ -1,3 +1,5 @@
|
||||
import { _products } from "src/_mock";
|
||||
|
||||
export type Product = {
|
||||
id: string;
|
||||
name: string;
|
||||
@ -16,16 +18,5 @@ export type Product = {
|
||||
*/
|
||||
export function getProductsAsync(): Promise<Product[]> {
|
||||
//TODO: Implement the API call using fetch or axios
|
||||
return Promise.resolve([
|
||||
{
|
||||
id: '1',
|
||||
name: "User Manager",
|
||||
version: "1.0.0"
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
name: "Envelope Generator",
|
||||
version: "1.0.0"
|
||||
}
|
||||
]);
|
||||
return Promise.resolve(_products);
|
||||
}
|
||||
@ -8,8 +8,6 @@ import { usePathname } from 'src/routes/hooks';
|
||||
|
||||
import { ThemeProvider } from 'src/theme/theme-provider';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type AppProps = {
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import { Label } from 'src/components/label';
|
||||
import { SvgColor } from 'src/components/svg-color';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@ -13,39 +12,48 @@ export type NavItem = {
|
||||
};
|
||||
|
||||
export const navData = [
|
||||
{
|
||||
title: 'Dashboard',
|
||||
path: '/',
|
||||
icon: icon('ic-analytics'),
|
||||
},
|
||||
{
|
||||
title: 'User',
|
||||
path: '/user',
|
||||
icon: icon('ic-user'),
|
||||
},
|
||||
{
|
||||
title: 'Product',
|
||||
path: '/products',
|
||||
icon: icon('ic-cart'),
|
||||
info: (
|
||||
<Label color="error" variant="inverted">
|
||||
+3
|
||||
</Label>
|
||||
),
|
||||
//#region example component
|
||||
// info: (
|
||||
// <Label color="error" variant="inverted">
|
||||
// +3
|
||||
// </Label>
|
||||
// ),
|
||||
//#endregion
|
||||
},
|
||||
{
|
||||
title: 'Blog',
|
||||
path: '/blog',
|
||||
icon: icon('ic-blog'),
|
||||
},
|
||||
{
|
||||
title: 'Sign in',
|
||||
path: '/sign-in',
|
||||
icon: icon('ic-lock'),
|
||||
},
|
||||
{
|
||||
title: 'Not found',
|
||||
path: '/404',
|
||||
icon: icon('ic-disabled'),
|
||||
},
|
||||
title: 'Document Search',
|
||||
path: '/doc-search',
|
||||
icon: icon('ic-doc-search'),
|
||||
}
|
||||
//#region example pages
|
||||
// {
|
||||
// title: 'Dashboard',
|
||||
// path: '/',
|
||||
// icon: icon('ic-analytics'),
|
||||
// },
|
||||
// {
|
||||
// title: 'User',
|
||||
// path: '/user',
|
||||
// icon: icon('ic-user'),
|
||||
// },
|
||||
// {
|
||||
// title: 'Blog',
|
||||
// path: '/blog',
|
||||
// icon: icon('ic-blog'),
|
||||
// },
|
||||
// {
|
||||
// title: 'Sign in',
|
||||
// path: '/sign-in',
|
||||
// icon: icon('ic-lock'),
|
||||
// },
|
||||
// {
|
||||
// title: 'Not found',
|
||||
// path: '/404',
|
||||
// icon: icon('ic-disabled'),
|
||||
// },
|
||||
//#endregion
|
||||
];
|
||||
|
||||
16
src/client/dd-hub-react/src/pages/doc-search.tsx
Normal file
16
src/client/dd-hub-react/src/pages/doc-search.tsx
Normal file
@ -0,0 +1,16 @@
|
||||
import { _posts } from 'src/_mock';
|
||||
import { CONFIG } from 'src/config-global';
|
||||
|
||||
import { DocSearchView } from 'src/sections/document/view';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export default function Page() {
|
||||
return (
|
||||
<>
|
||||
<title>{`Document Search - ${CONFIG.appName}`}</title>
|
||||
|
||||
<DocSearchView posts={_posts} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -18,6 +18,7 @@ export const UserPage = lazy(() => import('src/pages/user'));
|
||||
export const SignInPage = lazy(() => import('src/pages/sign-in'));
|
||||
export const ProductsPage = lazy(() => import('src/pages/products'));
|
||||
export const Page404 = lazy(() => import('src/pages/page-not-found'));
|
||||
export const DocumentSearch = lazy(() => import('src/pages/doc-search'));
|
||||
|
||||
const renderFallback = () => (
|
||||
<Box
|
||||
@ -49,9 +50,10 @@ export const routesSection: RouteObject[] = [
|
||||
</DashboardLayout>
|
||||
),
|
||||
children: [
|
||||
{ index: true, element: <DashboardPage /> },
|
||||
{ path: 'user', element: <UserPage /> },
|
||||
{ index: true, element: <ProductsPage /> },
|
||||
{ path: 'doc-search', element: <DocumentSearch /> },
|
||||
{ path: 'products', element: <ProductsPage /> },
|
||||
{ path: 'user', element: <UserPage /> },
|
||||
{ path: 'blog', element: <BlogPage /> },
|
||||
],
|
||||
},
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
import Switch from '@mui/material/Switch';
|
||||
import Checkbox from '@mui/material/Checkbox';
|
||||
import FormGroup from '@mui/material/FormGroup';
|
||||
import AddBoxIcon from '@mui/icons-material/AddBox';
|
||||
import FormControlLabel from '@mui/material/FormControlLabel';
|
||||
import AddBoxTwoToneIcon from '@mui/icons-material/AddBoxTwoTone';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type BoolFilterProps = {
|
||||
label: string;
|
||||
}
|
||||
|
||||
export function BoolFilter({ label }: BoolFilterProps) {
|
||||
const [disabled, setDisabled] = useState<boolean>(true);
|
||||
|
||||
return (
|
||||
<FormGroup row>
|
||||
<Checkbox
|
||||
{...{ inputProps: { 'aria-label': 'Checkbox demo' } }}
|
||||
icon={<AddBoxTwoToneIcon />}
|
||||
checkedIcon={<AddBoxIcon />}
|
||||
onClick={() => setDisabled(!disabled)}
|
||||
/>
|
||||
{
|
||||
disabled
|
||||
? <FormControlLabel disabled control={<Switch />} label={label} />
|
||||
: <FormControlLabel control={<Switch />} label={label} />
|
||||
}
|
||||
</FormGroup>
|
||||
);
|
||||
}
|
||||
211
src/client/dd-hub-react/src/sections/document/doc-item.tsx
Normal file
211
src/client/dd-hub-react/src/sections/document/doc-item.tsx
Normal file
@ -0,0 +1,211 @@
|
||||
import type { CardProps } from '@mui/material/Card';
|
||||
import type { IconifyName } from 'src/components/iconify';
|
||||
|
||||
import { varAlpha } from 'minimal-shared/utils';
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import Link from '@mui/material/Link';
|
||||
import Card from '@mui/material/Card';
|
||||
import Avatar from '@mui/material/Avatar';
|
||||
import Typography from '@mui/material/Typography';
|
||||
|
||||
import { fDate } from 'src/utils/format-time';
|
||||
import { fShortenNumber } from 'src/utils/format-number';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
import { SvgColor } from 'src/components/svg-color';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export type IDocItem = {
|
||||
id: string;
|
||||
title: string;
|
||||
coverUrl: string;
|
||||
totalViews: number;
|
||||
description: string;
|
||||
totalShares: number;
|
||||
totalComments: number;
|
||||
totalFavorites: number;
|
||||
postedAt: string | number | null;
|
||||
author: {
|
||||
name: string;
|
||||
avatarUrl: string;
|
||||
};
|
||||
};
|
||||
|
||||
export function DocItem({
|
||||
sx,
|
||||
post,
|
||||
latestDoc,
|
||||
latestDocLarge,
|
||||
...other
|
||||
}: CardProps & {
|
||||
post: IDocItem;
|
||||
latestDoc: boolean;
|
||||
latestDocLarge: boolean;
|
||||
}) {
|
||||
const renderAvatar = (
|
||||
<Avatar
|
||||
alt={post.author.name}
|
||||
src={post.author.avatarUrl}
|
||||
sx={{
|
||||
left: 24,
|
||||
zIndex: 9,
|
||||
bottom: -24,
|
||||
position: 'absolute',
|
||||
...((latestDocLarge || latestDoc) && {
|
||||
top: 24,
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
const renderTitle = (
|
||||
<Link
|
||||
color="inherit"
|
||||
variant="subtitle2"
|
||||
underline="hover"
|
||||
sx={{
|
||||
height: 44,
|
||||
overflow: 'hidden',
|
||||
WebkitLineClamp: 2,
|
||||
display: '-webkit-box',
|
||||
WebkitBoxOrient: 'vertical',
|
||||
...(latestDocLarge && { typography: 'h5', height: 60 }),
|
||||
...((latestDocLarge || latestDoc) && {
|
||||
color: 'common.white',
|
||||
}),
|
||||
}}
|
||||
>
|
||||
{post.title}
|
||||
</Link>
|
||||
);
|
||||
|
||||
const renderInfo = (
|
||||
<Box
|
||||
sx={{
|
||||
mt: 3,
|
||||
gap: 1.5,
|
||||
display: 'flex',
|
||||
flexWrap: 'wrap',
|
||||
color: 'text.disabled',
|
||||
justifyContent: 'flex-end',
|
||||
}}
|
||||
>
|
||||
{[
|
||||
{ number: post.totalComments, icon: 'solar:chat-round-dots-bold' },
|
||||
{ number: post.totalViews, icon: 'solar:eye-bold' },
|
||||
{ number: post.totalShares, icon: 'solar:share-bold' },
|
||||
].map((info, _index) => (
|
||||
<Box
|
||||
key={_index}
|
||||
sx={{
|
||||
display: 'flex',
|
||||
...((latestDocLarge || latestDoc) && {
|
||||
opacity: 0.64,
|
||||
color: 'common.white',
|
||||
}),
|
||||
}}
|
||||
>
|
||||
<Iconify width={16} icon={info.icon as IconifyName} sx={{ mr: 0.5 }} />
|
||||
<Typography variant="caption">{fShortenNumber(info.number)}</Typography>
|
||||
</Box>
|
||||
))}
|
||||
</Box>
|
||||
);
|
||||
|
||||
const renderCover = (
|
||||
<Box
|
||||
component="img"
|
||||
alt={post.title}
|
||||
src={post.coverUrl}
|
||||
sx={{
|
||||
top: 0,
|
||||
width: 1,
|
||||
height: 1,
|
||||
objectFit: 'cover',
|
||||
position: 'absolute',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
const renderDate = (
|
||||
<Typography
|
||||
variant="caption"
|
||||
component="div"
|
||||
sx={{
|
||||
mb: 1,
|
||||
color: 'text.disabled',
|
||||
...((latestDocLarge || latestDoc) && {
|
||||
opacity: 0.48,
|
||||
color: 'common.white',
|
||||
}),
|
||||
}}
|
||||
>
|
||||
{fDate(post.postedAt)}
|
||||
</Typography>
|
||||
);
|
||||
|
||||
const renderShape = (
|
||||
<SvgColor
|
||||
src="/assets/icons/shape-avatar.svg"
|
||||
sx={{
|
||||
left: 0,
|
||||
width: 88,
|
||||
zIndex: 9,
|
||||
height: 36,
|
||||
bottom: -16,
|
||||
position: 'absolute',
|
||||
color: 'background.paper',
|
||||
...((latestDocLarge || latestDoc) && { display: 'none' }),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<Card sx={sx} {...other}>
|
||||
<Box
|
||||
sx={(theme) => ({
|
||||
position: 'relative',
|
||||
pt: 'calc(100% * 3 / 4)',
|
||||
...((latestDocLarge || latestDoc) && {
|
||||
pt: 'calc(100% * 4 / 3)',
|
||||
'&:after': {
|
||||
top: 0,
|
||||
content: "''",
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
position: 'absolute',
|
||||
bgcolor: varAlpha(theme.palette.grey['900Channel'], 0.72),
|
||||
},
|
||||
}),
|
||||
...(latestDocLarge && {
|
||||
pt: {
|
||||
xs: 'calc(100% * 4 / 3)',
|
||||
sm: 'calc(100% * 3 / 4.66)',
|
||||
},
|
||||
}),
|
||||
})}
|
||||
>
|
||||
{renderShape}
|
||||
{renderAvatar}
|
||||
{renderCover}
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={(theme) => ({
|
||||
p: theme.spacing(6, 3, 3, 3),
|
||||
...((latestDocLarge || latestDoc) && {
|
||||
width: 1,
|
||||
bottom: 0,
|
||||
position: 'absolute',
|
||||
}),
|
||||
})}
|
||||
>
|
||||
{renderDate}
|
||||
{renderTitle}
|
||||
{renderInfo}
|
||||
</Box>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
59
src/client/dd-hub-react/src/sections/document/doc-search.tsx
Normal file
59
src/client/dd-hub-react/src/sections/document/doc-search.tsx
Normal file
@ -0,0 +1,59 @@
|
||||
import type { Theme, SxProps } from '@mui/material/styles';
|
||||
|
||||
import TextField from '@mui/material/TextField';
|
||||
import InputAdornment from '@mui/material/InputAdornment';
|
||||
import Autocomplete, { autocompleteClasses } from '@mui/material/Autocomplete';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
import type { IDocItem } from './doc-item';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type DocSearchProps = {
|
||||
posts: IDocItem[];
|
||||
sx?: SxProps<Theme>;
|
||||
};
|
||||
|
||||
export function DocSearch({ posts, sx }: DocSearchProps) {
|
||||
return (
|
||||
<Autocomplete
|
||||
sx={{ width: 280 }}
|
||||
autoHighlight
|
||||
popupIcon={null}
|
||||
slotProps={{
|
||||
paper: {
|
||||
sx: {
|
||||
width: 320,
|
||||
[`& .${autocompleteClasses.option}`]: {
|
||||
typography: 'body2',
|
||||
},
|
||||
...sx,
|
||||
},
|
||||
},
|
||||
}}
|
||||
options={posts}
|
||||
getOptionLabel={(post) => post.title}
|
||||
isOptionEqualToValue={(option, value) => option.id === value.id}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
placeholder="Search post..."
|
||||
slotProps={{
|
||||
input: {
|
||||
...params.InputProps,
|
||||
startAdornment: (
|
||||
<InputAdornment position="start">
|
||||
<Iconify
|
||||
icon="eva:search-fill"
|
||||
sx={{ ml: 1, width: 20, height: 20, color: 'text.disabled' }}
|
||||
/>
|
||||
</InputAdornment>
|
||||
),
|
||||
},
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
96
src/client/dd-hub-react/src/sections/document/doc-sort.tsx
Normal file
96
src/client/dd-hub-react/src/sections/document/doc-sort.tsx
Normal file
@ -0,0 +1,96 @@
|
||||
import type { ButtonProps } from '@mui/material/Button';
|
||||
|
||||
import { useState, useCallback } from 'react';
|
||||
import { varAlpha } from 'minimal-shared/utils';
|
||||
|
||||
import Button from '@mui/material/Button';
|
||||
import Popover from '@mui/material/Popover';
|
||||
import MenuList from '@mui/material/MenuList';
|
||||
import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type DocSortProps = ButtonProps & {
|
||||
sortBy: string;
|
||||
onSort: (newSort: string) => void;
|
||||
options: { value: string; label: string }[];
|
||||
};
|
||||
|
||||
export function DocSort({ options, sortBy, onSort, sx, ...other }: DocSortProps) {
|
||||
const [openPopover, setOpenPopover] = useState<HTMLButtonElement | null>(null);
|
||||
|
||||
const handleOpenPopover = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {
|
||||
setOpenPopover(event.currentTarget);
|
||||
}, []);
|
||||
|
||||
const handleClosePopover = useCallback(() => {
|
||||
setOpenPopover(null);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
disableRipple
|
||||
color="inherit"
|
||||
onClick={handleOpenPopover}
|
||||
endIcon={
|
||||
<Iconify
|
||||
icon={openPopover ? 'eva:arrow-ios-upward-fill' : 'eva:arrow-ios-downward-fill'}
|
||||
sx={{
|
||||
ml: -0.5,
|
||||
}}
|
||||
/>
|
||||
}
|
||||
sx={[
|
||||
{
|
||||
bgcolor: (theme) => varAlpha(theme.vars.palette.grey['500Channel'], 0.08),
|
||||
},
|
||||
...(Array.isArray(sx) ? sx : [sx]),
|
||||
]}
|
||||
{...other}
|
||||
>
|
||||
{options.find((option) => option.value === sortBy)?.label}
|
||||
</Button>
|
||||
|
||||
<Popover
|
||||
open={!!openPopover}
|
||||
anchorEl={openPopover}
|
||||
onClose={handleClosePopover}
|
||||
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
|
||||
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
|
||||
>
|
||||
<MenuList
|
||||
disablePadding
|
||||
sx={{
|
||||
p: 0.5,
|
||||
gap: 0.5,
|
||||
width: 160,
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
[`& .${menuItemClasses.root}`]: {
|
||||
px: 1,
|
||||
gap: 2,
|
||||
borderRadius: 0.75,
|
||||
[`&.${menuItemClasses.selected}`]: { bgcolor: 'action.selected' },
|
||||
},
|
||||
}}
|
||||
>
|
||||
{options.map((option) => (
|
||||
<MenuItem
|
||||
key={option.value}
|
||||
selected={option.value === sortBy}
|
||||
onClick={() => {
|
||||
onSort(option.value);
|
||||
handleClosePopover();
|
||||
}}
|
||||
>
|
||||
{option.label}
|
||||
</MenuItem>
|
||||
))}
|
||||
</MenuList>
|
||||
</Popover>
|
||||
</>
|
||||
);
|
||||
}
|
||||
35
src/client/dd-hub-react/src/sections/document/num-filter.tsx
Normal file
35
src/client/dd-hub-react/src/sections/document/num-filter.tsx
Normal file
@ -0,0 +1,35 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
import TextField from '@mui/material/TextField';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type BoolFilterProps = {
|
||||
label: string;
|
||||
}
|
||||
|
||||
const isNumbers = (str: string) => /^[0-9]*$/.test(str);
|
||||
|
||||
export function IntFilter({ label }: BoolFilterProps) {
|
||||
const [val, setVal] = useState("");
|
||||
|
||||
const onInputChange = (event: any) => {
|
||||
const value = event.target.value;
|
||||
if (isNumbers(value)) {
|
||||
setVal(value);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<TextField label={label} value={val} onChange={onInputChange} />
|
||||
);
|
||||
}
|
||||
|
||||
export function DecimalFilter({ label }: BoolFilterProps) {
|
||||
return (
|
||||
<TextField
|
||||
type="number"
|
||||
label={label}
|
||||
variant="standard"
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -0,0 +1,160 @@
|
||||
import React from 'react';
|
||||
import { useState, useCallback, useEffect } from 'react';
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import Grid from '@mui/material/Grid';
|
||||
import Button from '@mui/material/Button';
|
||||
import TextField from '@mui/material/TextField';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import Pagination from '@mui/material/Pagination';
|
||||
|
||||
import { DashboardContent } from 'src/layouts/dashboard';
|
||||
import { Filter, getFiltersAsync } from 'src/api/filter-service';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
import { DocItem } from '../doc-item';
|
||||
import { BoolFilter } from '../bool-filter';
|
||||
import { DecimalFilter, IntFilter } from '../num-filter';
|
||||
|
||||
import type { IDocItem } from '../doc-item';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type Props = {
|
||||
posts: IDocItem[];
|
||||
};
|
||||
|
||||
export function DocSearchView({ posts }: Props) {
|
||||
const [sortBy, setSortBy] = useState('latest');
|
||||
|
||||
const [filters, setFilters] = useState<Filter[]>([])
|
||||
|
||||
const [disabledStates, setDisabledStates] = useState<Record<number, boolean>>({});
|
||||
|
||||
const setDisabledState = useCallback((index: number, state: boolean) => {
|
||||
setDisabledStates(prev => ({
|
||||
...prev,
|
||||
[index]: state,
|
||||
}));
|
||||
}, []);
|
||||
|
||||
const handleSort = useCallback((newSort: string) => {
|
||||
setSortBy(newSort);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
getFiltersAsync().then((res) => {
|
||||
setFilters(res);
|
||||
const newDisabledStates = res.reduce<Record<number, boolean>>((acc, filter, index) => {
|
||||
if (filter.type === 'BOOLEAN') {
|
||||
acc[index] = true;
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
setDisabledStates(newDisabledStates);
|
||||
});
|
||||
}, []);
|
||||
|
||||
//#region example components
|
||||
// <Box
|
||||
// sx={{
|
||||
// mb: 5,
|
||||
// display: 'flex',
|
||||
// alignItems: 'center',
|
||||
// justifyContent: 'space-between',
|
||||
// }}
|
||||
// >
|
||||
// <DocSearch posts={posts} />
|
||||
// <DocSort
|
||||
// sortBy={sortBy}
|
||||
// onSort={handleSort}
|
||||
// options={[
|
||||
// { value: 'latest', label: 'Latest' },
|
||||
// { value: 'popular', label: 'Popular' },
|
||||
// { value: 'oldest', label: 'Oldest' },
|
||||
// ]}
|
||||
// />
|
||||
// </Box>
|
||||
//#endregion
|
||||
|
||||
return (
|
||||
<DashboardContent>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
mb: 5,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
<Typography variant="h4" sx={{ flexGrow: 1 }}>
|
||||
Document Search
|
||||
</Typography>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="inherit"
|
||||
startIcon={<Iconify icon="mingcute:add-line" />}
|
||||
>
|
||||
New filter
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
<>
|
||||
{filters.map((filter, index) => {
|
||||
let filterComp;
|
||||
switch (filter.type) {
|
||||
case 'BOOLEAN':
|
||||
filterComp = <BoolFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
case 'INTEGER':
|
||||
filterComp = <IntFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
case 'DECIMAL':
|
||||
filterComp = <DecimalFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
case 'VARCHAR':
|
||||
case 'DATE':
|
||||
default:
|
||||
filterComp = <TextField id={`filter-${filter.id.toString()}`} label={filter.label ?? filter.type} variant="filled" />
|
||||
break;
|
||||
}
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
mb: 5,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
}}
|
||||
>
|
||||
{filterComp}
|
||||
</Box>
|
||||
)
|
||||
}
|
||||
)}
|
||||
</>
|
||||
|
||||
<Grid container spacing={3}>
|
||||
{posts.map((post, index) => {
|
||||
const latestDocLarge = index === 0;
|
||||
const latestDoc = index === 1 || index === 2;
|
||||
|
||||
return (
|
||||
<Grid
|
||||
key={post.id}
|
||||
size={{
|
||||
xs: 12,
|
||||
sm: latestDocLarge ? 12 : 6,
|
||||
md: latestDocLarge ? 6 : 3,
|
||||
}}
|
||||
>
|
||||
<DocItem post={post} latestDoc={latestDoc} latestDocLarge={latestDocLarge} />
|
||||
</Grid>
|
||||
);
|
||||
})}
|
||||
</Grid>
|
||||
|
||||
<Pagination count={10} color="primary" sx={{ mt: 8, mx: 'auto' }} />
|
||||
</DashboardContent>
|
||||
);
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
export * from './doc-search-view';
|
||||
@ -47,12 +47,10 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.27.0"
|
||||
|
||||
"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.26.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
|
||||
version "7.27.0"
|
||||
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz"
|
||||
integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.14.0"
|
||||
"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.26.10", "@babel/runtime@^7.27.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
|
||||
version "7.27.6"
|
||||
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz"
|
||||
integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==
|
||||
|
||||
"@babel/template@^7.27.0":
|
||||
version "7.27.0"
|
||||
@ -101,7 +99,7 @@
|
||||
source-map "^0.5.7"
|
||||
stylis "4.2.0"
|
||||
|
||||
"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0":
|
||||
"@emotion/cache@^11.14.0":
|
||||
version "11.14.0"
|
||||
resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz"
|
||||
integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==
|
||||
@ -351,10 +349,17 @@
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@mui/core-downloads-tracker@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.1.tgz"
|
||||
integrity sha512-T5DNVnSD9pMbj4Jk/Uphz+yvj9dfpl2+EqsOuJtG12HxEihNG5pd3qzX5yM1Id4dDwKRvM3dPVcxyzavTFhJeA==
|
||||
"@mui/core-downloads-tracker@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz"
|
||||
integrity sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==
|
||||
|
||||
"@mui/icons-material@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.2.0.tgz"
|
||||
integrity sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.27.6"
|
||||
|
||||
"@mui/lab@^7.0.0-beta.10":
|
||||
version "7.0.0-beta.10"
|
||||
@ -368,77 +373,77 @@
|
||||
clsx "^2.1.1"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/material@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz"
|
||||
integrity sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==
|
||||
"@mui/material@^7.0.1", "@mui/material@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz"
|
||||
integrity sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/core-downloads-tracker" "^7.0.1"
|
||||
"@mui/system" "^7.0.1"
|
||||
"@mui/types" "^7.4.0"
|
||||
"@mui/utils" "^7.0.1"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/core-downloads-tracker" "^7.2.0"
|
||||
"@mui/system" "^7.2.0"
|
||||
"@mui/types" "^7.4.4"
|
||||
"@mui/utils" "^7.2.0"
|
||||
"@popperjs/core" "^2.11.8"
|
||||
"@types/react-transition-group" "^4.4.12"
|
||||
clsx "^2.1.1"
|
||||
csstype "^3.1.3"
|
||||
prop-types "^15.8.1"
|
||||
react-is "^19.0.0"
|
||||
react-is "^19.1.0"
|
||||
react-transition-group "^4.4.5"
|
||||
|
||||
"@mui/private-theming@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.1.tgz"
|
||||
integrity sha512-1kQ7REYjjzDukuMfTbAjm3pLEhD7gUMC2bWhg9VD6f6sHzyokKzX0XHzlr3IdzNWBjPytGkzHpPIRQrUOoPLCQ==
|
||||
"@mui/private-theming@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz"
|
||||
integrity sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/utils" "^7.0.1"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/utils" "^7.2.0"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/styled-engine@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.1.tgz"
|
||||
integrity sha512-BeGe4xZmF7tESKhmctYrL54Kl25kGHPKVdZYM5qj5Xz76WM/poY+d8EmAqUesT6k2rbJWPp2gtOAXXinNCGunQ==
|
||||
"@mui/styled-engine@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz"
|
||||
integrity sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@emotion/cache" "^11.13.5"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@emotion/cache" "^11.14.0"
|
||||
"@emotion/serialize" "^1.3.3"
|
||||
"@emotion/sheet" "^1.4.0"
|
||||
csstype "^3.1.3"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/system@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/system/-/system-7.0.1.tgz"
|
||||
integrity sha512-pK+puz0hRPHEKGlcPd80mKYD3jpyi0uVIwWffox1WZgPTQMw2dCKLcD+9ndMDJADnrKzmKlpoH756PPFh2UvWA==
|
||||
"@mui/system@^7.0.1", "@mui/system@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz"
|
||||
integrity sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/private-theming" "^7.0.1"
|
||||
"@mui/styled-engine" "^7.0.1"
|
||||
"@mui/types" "^7.4.0"
|
||||
"@mui/utils" "^7.0.1"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/private-theming" "^7.2.0"
|
||||
"@mui/styled-engine" "^7.2.0"
|
||||
"@mui/types" "^7.4.4"
|
||||
"@mui/utils" "^7.2.0"
|
||||
clsx "^2.1.1"
|
||||
csstype "^3.1.3"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/types@^7.4.0":
|
||||
version "7.4.0"
|
||||
resolved "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz"
|
||||
integrity sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==
|
||||
"@mui/types@^7.4.0", "@mui/types@^7.4.4":
|
||||
version "7.4.4"
|
||||
resolved "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz"
|
||||
integrity sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
|
||||
"@mui/utils@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/utils/-/utils-7.0.1.tgz"
|
||||
integrity sha512-SJKrrebNpmK9rJCnVL29nGPhPXQYtBZmb7Dsp0f58uIUhQfAKcBXHE4Kjs06SX4CwqeCuwEVgcHY+MgAO6XQ/g==
|
||||
"@mui/utils@^7.0.1", "@mui/utils@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz"
|
||||
integrity sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/types" "^7.4.0"
|
||||
"@types/prop-types" "^15.7.14"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/types" "^7.4.4"
|
||||
"@types/prop-types" "^15.7.15"
|
||||
clsx "^2.1.1"
|
||||
prop-types "^15.8.1"
|
||||
react-is "^19.0.0"
|
||||
react-is "^19.1.0"
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
@ -571,10 +576,10 @@
|
||||
resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz"
|
||||
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
|
||||
|
||||
"@types/prop-types@^15.7.14":
|
||||
version "15.7.14"
|
||||
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz"
|
||||
integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
|
||||
"@types/prop-types@^15.7.15":
|
||||
version "15.7.15"
|
||||
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz"
|
||||
integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
|
||||
|
||||
"@types/react-dom@^19.1.1":
|
||||
version "19.1.1"
|
||||
@ -2308,7 +2313,7 @@ react-is@^16.7.0:
|
||||
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-is@^19.0.0:
|
||||
react-is@^19.1.0:
|
||||
version "19.1.0"
|
||||
resolved "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz"
|
||||
integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==
|
||||
@ -2364,11 +2369,6 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
|
||||
get-proto "^1.0.1"
|
||||
which-builtin-type "^1.2.1"
|
||||
|
||||
regenerator-runtime@^0.14.0:
|
||||
version "0.14.1"
|
||||
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
|
||||
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
|
||||
|
||||
regexp.prototype.flags@^1.5.3:
|
||||
version "1.5.4"
|
||||
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user