1st Version

This commit is contained in:
yocto committed 2024-03-19 17:06:47 +01:00
commit d79d2aefee
1948 files changed
+361921

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
/node_modules/
/tmpDir/
+46
View File
@@ -0,0 +1,46 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch firefox",
"type": "firefox",
"request": "launch",
"url": "http://localhost:5001",
"webRoot": "${workspaceFolder}",
},
{
"name": "Launch Firfox new",
"type": "firefox",
"request": "launch",
"url": "http://localhost/index.html",
"webRoot": "${workspaceFolder}"
}
{
"name": "Launch Firefox new2",
"type": "firefox",
"request": "launch",
"port": 5173,
"url": "http://localhost/index.html",
"webRoot": "${workspaceFolder}"
}
{
"name": "Launch index.html",
"type": "firefox",
"request": "launch",
"port": 5173,
"file": "${workspaceFolder}/index.html"
},
{
"type": "firefox",
"request": "launch",
"name": "Launch My Firefox",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}",
"timeout": 90000,
"tmpDir": "/home/markus/git/vrpmdvweb/vrpmdvfrontend/tmpDir"
},
]
}
+37
View File
@@ -0,0 +1,37 @@
# This Dockerfile uses `serve` npm package to serve the static files with node process.
# You can find the Dockerfile for nginx in the following link:
# https://github.com/refinedev/dockerfiles/blob/main/vite/Dockerfile.nginx
FROM refinedev/node:18 AS base
FROM base as deps
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
FROM base as builder
ENV NODE_ENV production
COPY --from=deps /app/refine/node_modules ./node_modules
COPY . .
RUN npm run build
FROM base as runner
ENV NODE_ENV production
RUN npm install -g serve
COPY --from=builder /app/refine/dist ./
USER refine
CMD ["serve"]
+49
View File
@@ -0,0 +1,49 @@
# refine-project
<div align="center" style="margin: 30px;">
<a href="https://refine.dev">
<img alt="refine logo" src="https://refine.ams3.cdn.digitaloceanspaces.com/readme/refine-readme-banner.png">
</a>
</div>
<br/>
This [Refine](https://github.com/refinedev/refine) project was generated with [create refine-app](https://github.com/refinedev/refine/tree/master/packages/create-refine-app).
## Getting Started
A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility ✨
Refine's hooks and components simplifies the development process and eliminates the repetitive tasks by providing industry-standard solutions for crucial aspects of a project, including authentication, access control, routing, networking, state management, and i18n.
## Available Scripts
### Running the development server.
```bash
npm run dev
```
### Building for production.
```bash
npm run build
```
### Running the production server.
```bash
npm run start
```
## Learn More
To learn more about **Refine**, please check out the [Documentation](https://refine.dev/docs)
- **REST Data Provider** [Docs](https://refine.dev/docs/core/providers/data-provider/#overview)
- **Material UI** [Docs](https://refine.dev/docs/ui-frameworks/mui/tutorial/)
- **Custom Auth Provider** [Docs](https://refine.dev/docs/core/providers/auth-provider/)
- **React Router** [Docs](https://refine.dev/docs/core/providers/router-provider/)
## License
MIT
+2
View File
@@ -0,0 +1,2 @@
/favicon.ico
/index.html
+1
View File
@@ -0,0 +1 @@
/index-a25c81c8.js
+41
View File
@@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Markus Lehr | VR Predictive Maintenance Device."
/>
<meta
data-rh="true"
property="og:image"
content="https://refine.dev/img/refine_social.png"
/>
<meta
data-rh="true"
name="twitter:image"
content="https://refine.dev/img/refine_social.png"
/>
<title>
Markus Lehr | VR Predictive Maintenance Device.
</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm dev` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
+11266
View File
File diff suppressed because it is too large. Load diff
+60
View File
@@ -0,0 +1,60 @@
{
"name": "vrpmdv",
"version": "0.1.0",
"private": true,
"type": "module",
"dependencies": {
"@emotion/react": "^11.8.2",
"@emotion/styled": "^11.8.1",
"@mui/icons-material": "^5.8.3",
"@mui/lab": "^5.0.0-alpha.85",
"@mui/material": "^5.8.6",
"@mui/x-data-grid": "^6.6.0",
"@refinedev/cli": "^2.16.1",
"@refinedev/core": "^4.47.1",
"@refinedev/devtools": "^1.1.35",
"@refinedev/kbar": "^1.3.6",
"@refinedev/mui": "^5.14.4",
"@refinedev/react-hook-form": "^4.8.14",
"@refinedev/react-router-v6": "^4.5.5",
"@refinedev/simple-rest": "^5.0.1",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-hook-form": "^7.30.0",
"react-router-dom": "^6.8.1"
},
"devDependencies": {
"@types/node": "^18.16.2",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
"@vitejs/plugin-react": "^4.0.0",
"eslint": "^8.38.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.3.4",
"typescript": "^4.7.4",
"vite": "^4.3.1"
},
"scripts": {
"dev": "refine dev",
"build": "tsc && refine build",
"preview": "refine start",
"refine": "refine"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"refine": {
"projectId": "4LRbGi-1874iA-m2rbd1"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

+184
View File
@@ -0,0 +1,184 @@
import { Authenticated, GitHubBanner, Refine } from "@refinedev/core";
import { DevtoolsPanel, DevtoolsProvider } from "@refinedev/devtools";
import { RefineKbar, RefineKbarProvider } from "@refinedev/kbar";
import {
ErrorComponent,
notificationProvider,
RefineSnackbarProvider,
ThemedLayoutV2,
ThemedTitleV2,
} from "@refinedev/mui";
import CssBaseline from "@mui/material/CssBaseline";
import GlobalStyles from "@mui/material/GlobalStyles";
import routerBindings, {
CatchAllNavigate,
DocumentTitleHandler,
NavigateToResource,
UnsavedChangesNotifier,
} from "@refinedev/react-router-v6";
// import dataProvider from "@refinedev/simple-rest";
import { dataProvider } from './dataprovider/dataprovider'
import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";
import { authProvider } from "./authProvider";
import { AppIcon } from "./components/app-icon";
import { Header } from "./components/header";
import { ColorModeContextProvider } from "./contexts/color-mode";
import {
BlogPostCreate,
BlogPostEdit,
BlogPostList,
BlogPostShow,
} from "./pages/blog-posts";
import {
CategoryCreate,
CategoryEdit,
CategoryList,
CategoryShow,
} from "./pages/categories";
import { ForgotPassword } from "./pages/forgotPassword";
import { Login } from "./pages/login";
import { Register } from "./pages/register";
import { MonitoringList } from "./pages/monitorings/list";
import { MonitoringCreate } from "./pages/monitorings/create";
import { MonitoringEdit } from "./pages/monitorings/edit";
import { MonitoringShow } from "./pages/monitorings/show";
const API_URL = "https://api.fake-rest.refine.dev";
const MONITORINGS_API_URL = "http://127.0.0.1:5000//vrpmdvapi/1_0";
function App() {
return (
<BrowserRouter>
<RefineKbarProvider>
<ColorModeContextProvider>
<CssBaseline />
<GlobalStyles styles={{ html: { WebkitFontSmoothing: "auto" } }} />
<RefineSnackbarProvider>
<DevtoolsProvider>
<Refine
dataProvider={{
default: dataProvider(API_URL),
monitorings: dataProvider(MONITORINGS_API_URL),
}}
notificationProvider={notificationProvider}
authProvider={authProvider}
routerProvider={routerBindings}
resources={[
{
name: "monitorings",
list: "/monitorings",
create: "/monitorings/create",
edit: "/monitorings/edit/:id",
meta: {
canDelete: true,
dataProviderName: "monitorings"
},
},
{
name: "blog_posts",
list: "/blog-posts",
create: "/blog-posts/create",
edit: "/blog-posts/edit/:id",
show: "/blog-posts/show/:id",
meta: {
canDelete: true,
},
},
{
name: "categories",
list: "/categories",
create: "/categories/create",
edit: "/categories/edit/:id",
show: "/categories/show/:id",
meta: {
canDelete: true,
},
},
]}
options={{
syncWithLocation: true,
warnWhenUnsavedChanges: true,
useNewQueryKeys: true,
projectId: "4LRbGi-1874iA-m2rbd1",
}}
>
<Routes>
<Route
element={
<Authenticated
key="authenticated-inner"
fallback={<CatchAllNavigate to="/login" />}
>
<ThemedLayoutV2
Header={() => <Header sticky />}
Title={({ collapsed }) => (
<ThemedTitleV2
collapsed={collapsed}
text="Refine Project"
icon={<AppIcon />}
/>
)}
>
<Outlet />
</ThemedLayoutV2>
</Authenticated>
}
>
<Route
index
element={<NavigateToResource resource="monitorings" />}
/>
<Route path="/monitorings">
<Route index element={<MonitoringList />} />
<Route path="create" element={<MonitoringCreate />} />
<Route path="edit/:id" element={<MonitoringEdit />} />
</Route>
<Route path="/blog-posts">
<Route index element={<BlogPostList />} />
<Route path="create" element={<BlogPostCreate />} />
<Route path="edit/:id" element={<BlogPostEdit />} />
<Route path="show/:id" element={<BlogPostShow />} />
</Route>
<Route path="/categories">
<Route index element={<CategoryList />} />
<Route path="create" element={<CategoryCreate />} />
<Route path="edit/:id" element={<CategoryEdit />} />
<Route path="show/:id" element={<CategoryShow />} />
</Route>
<Route path="*" element={<ErrorComponent />} />
</Route>
<Route
element={
<Authenticated
key="authenticated-outer"
fallback={<Outlet />}
>
<NavigateToResource />
</Authenticated>
}
>
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
<Route
path="/forgot-password"
element={<ForgotPassword />}
/>
</Route>
</Routes>
<RefineKbar />
<UnsavedChangesNotifier />
<DocumentTitleHandler />
</Refine>
<DevtoolsPanel />
</DevtoolsProvider>
</RefineSnackbarProvider>
</ColorModeContextProvider>
</RefineKbarProvider>
</BrowserRouter>
);
}
export default App;
+59
View File
@@ -0,0 +1,59 @@
import { AuthBindings } from "@refinedev/core";
export const TOKEN_KEY = "refine-auth";
export const authProvider: AuthBindings = {
login: async ({ username, email, password }) => {
if ((username || email) && password) {
localStorage.setItem(TOKEN_KEY, username);
return {
success: true,
redirectTo: "/",
};
}
return {
success: false,
error: {
name: "LoginError",
message: "Invalid username or password",
},
};
},
logout: async () => {
localStorage.removeItem(TOKEN_KEY);
return {
success: true,
redirectTo: "/login",
};
},
check: async () => {
const token = localStorage.getItem(TOKEN_KEY);
if (token) {
return {
authenticated: true,
};
}
return {
authenticated: false,
redirectTo: "/login",
};
},
getPermissions: async () => null,
getIdentity: async () => {
const token = localStorage.getItem(TOKEN_KEY);
if (token) {
return {
id: 1,
name: "John Doe",
avatar: "https://i.pravatar.cc/300",
};
}
return null;
},
onError: async (error) => {
console.error(error);
return { error };
},
};
@@ -0,0 +1,22 @@
import React from "react";
export const AppIcon: React.FC = () => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 16 16"
fill="none"
>
<g fill="currentColor">
<path d="M8 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4z" />
<path
fill-rule="evenodd"
d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.333 4a2.667 2.667 0 0 1 5.334 0v8a2.667 2.667 0 1 1-5.334 0z"
clip-rule="evenodd"
/>
</g>
</svg>
);
};
@@ -0,0 +1,80 @@
import DarkModeOutlined from "@mui/icons-material/DarkModeOutlined";
import LightModeOutlined from "@mui/icons-material/LightModeOutlined";
import AppBar from "@mui/material/AppBar";
import Avatar from "@mui/material/Avatar";
import IconButton from "@mui/material/IconButton";
import Stack from "@mui/material/Stack";
import Toolbar from "@mui/material/Toolbar";
import Typography from "@mui/material/Typography";
import { useGetIdentity } from "@refinedev/core";
import { HamburgerMenu, RefineThemedLayoutV2HeaderProps } from "@refinedev/mui";
import React, { useContext } from "react";
import { ColorModeContext } from "../../contexts/color-mode";
type IUser = {
id: number;
name: string;
avatar: string;
};
export const Header: React.FC<RefineThemedLayoutV2HeaderProps> = ({
sticky = true,
}) => {
const { mode, setMode } = useContext(ColorModeContext);
const { data: user } = useGetIdentity<IUser>();
return (
<AppBar position={sticky ? "sticky" : "relative"}>
<Toolbar>
<Stack
direction="row"
width="100%"
justifyContent="flex-end"
alignItems="center"
>
<HamburgerMenu />
<Stack
direction="row"
width="100%"
justifyContent="flex-end"
alignItems="center"
>
<IconButton
color="inherit"
onClick={() => {
setMode();
}}
>
{mode === "dark" ? <LightModeOutlined /> : <DarkModeOutlined />}
</IconButton>
{(user?.avatar || user?.name) && (
<Stack
direction="row"
gap="16px"
alignItems="center"
justifyContent="center"
>
{user?.name && (
<Typography
sx={{
display: {
xs: "none",
sm: "inline-block",
},
}}
variant="subtitle2"
>
{user?.name}
</Typography>
)}
<Avatar src={user?.avatar} alt={user?.name} />
</Stack>
)}
</Stack>
</Stack>
</Toolbar>
</AppBar>
);
};
+1
View File
@@ -0,0 +1 @@
export { Header } from "./header";
@@ -0,0 +1,51 @@
import TextField from "@mui/material/TextField";
interface NumericInputProps {
label: string;
value: string;
}
export const NumericInput = ({label:string, value}) : NumericInputProps => {
return (
<TextField
type="number"
label={label}
value={value}
//defaultValue="10"
// error={!!(errors as any)?.samplerate}
// helperText={(errors as any)?.samplerate?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
/>
);
}
// function NumericInput() {
// return (
// <TextField
// type="number"
// label="Enter a number"
// defaultValue="10"
// // Other props
// />
// );
// }
// {...register("samplerate", {
// required: "The samplerate is required",
// })}
// error={!!(errors as any)?.samplerate}
// helperText={(errors as any)?.samplerate?.message}
// margin="normal"
// fullWidth
// InputLabelProps={{ shrink: true }}
// type="number"
// label={"Samplerate"}
// name="samplerate"
@@ -0,0 +1,59 @@
import { ThemeProvider } from "@mui/material/styles";
import { RefineThemes } from "@refinedev/mui";
import React, {
createContext,
PropsWithChildren,
useEffect,
useState,
} from "react";
type ColorModeContextType = {
mode: string;
setMode: () => void;
};
export const ColorModeContext = createContext<ColorModeContextType>(
{} as ColorModeContextType
);
export const ColorModeContextProvider: React.FC<PropsWithChildren> = ({
children,
}) => {
const colorModeFromLocalStorage = localStorage.getItem("colorMode");
const isSystemPreferenceDark = window?.matchMedia(
"(prefers-color-scheme: dark)"
).matches;
const systemPreference = isSystemPreferenceDark ? "dark" : "light";
const [mode, setMode] = useState(
colorModeFromLocalStorage || systemPreference
);
useEffect(() => {
window.localStorage.setItem("colorMode", mode);
}, [mode]);
const setColorMode = () => {
if (mode === "light") {
setMode("dark");
} else {
setMode("light");
}
};
return (
<ColorModeContext.Provider
value={{
setMode: setColorMode,
mode,
}}
>
<ThemeProvider
// you can change the theme colors here. example: mode === "light" ? RefineThemes.Magenta : RefineThemes.MagentaDark
theme={mode === "light" ? RefineThemes.Blue : RefineThemes.BlueDark}
>
{children}
</ThemeProvider>
</ColorModeContext.Provider>
);
};
@@ -0,0 +1,197 @@
import { AxiosInstance } from "axios";
import { stringify } from "query-string";
import { DataProvider } from "@refinedev/core";
import { axiosInstance, generateSort, generateFilter } from "./utils";
type MethodTypes = "get" | "delete" | "head" | "options";
type MethodTypesWithBody = "post" | "put" | "patch";
export const dataProvider = (
apiUrl: string,
httpClient: AxiosInstance = axiosInstance,
): Omit<
Required<DataProvider>,
"createMany" | "updateMany" | "deleteMany"
> => ({
getList: async ({ resource, pagination, filters, sorters, meta }) => {
const url = `${apiUrl}/${resource}`;
const { current = 1, pageSize = 10, mode = "server" } = pagination ?? {};
const { headers: headersFromMeta, method } = meta ?? {};
const requestMethod = (method as MethodTypes) ?? "get";
const queryFilters = generateFilter(filters);
const query: {
_start?: number;
_end?: number;
_sort?: string;
_order?: string;
} = {};
if (mode === "server") {
query._start = (current - 1) * pageSize;
query._end = current * pageSize;
}
const generatedSort = generateSort(sorters);
if (generatedSort) {
const { _sort, _order } = generatedSort;
query._sort = _sort.join(",");
query._order = _order.join(",");
}
const combinedQuery = { ...query, ...queryFilters };
const urlWithQuery = Object.keys(combinedQuery).length
? `${url}?${stringify(combinedQuery)}`
: url;
const { data, headers } = await httpClient[requestMethod](urlWithQuery, {
headers: headersFromMeta,
});
const total = +headers["x-total-count"];
return {
data,
total: total || data.length,
};
},
getMany: async ({ resource, ids, meta }) => {
const { headers, method } = meta ?? {};
const requestMethod = (method as MethodTypes) ?? "get";
const { data } = await httpClient[requestMethod](
`${apiUrl}/${resource}?${stringify({ id: ids })}`,
{ headers },
);
return {
data,
};
},
create: async ({ resource, variables, meta }) => {
const url = `${apiUrl}/${resource}`;
const { headers, method } = meta ?? {};
const requestMethod = (method as MethodTypesWithBody) ?? "post";
const { data } = await httpClient[requestMethod](url, variables, {
headers,
});
return {
data,
};
},
update: async ({ resource, id, variables, meta }) => {
const url = `${apiUrl}/${resource}/${id}`;
const { headers, method } = meta ?? {};
const requestMethod = (method as MethodTypesWithBody) ?? "patch";
const { data } = await httpClient[requestMethod](url, variables, {
headers,
});
return {
data,
};
},
getOne: async ({ resource, id, meta }) => {
const url = `${apiUrl}/${resource}/${id}`;
const { headers, method } = meta ?? {};
const requestMethod = (method as MethodTypes) ?? "get";
const { data } = await httpClient[requestMethod](url, { headers });
return {
data,
};
},
deleteOne: async ({ resource, id, variables, meta }) => {
const url = `${apiUrl}/${resource}/${id}`;
const { headers, method } = meta ?? {};
const requestMethod = (method as MethodTypesWithBody) ?? "delete";
const { data } = await httpClient[requestMethod](url, {
data: variables,
headers,
});
return {
data,
};
},
getApiUrl: () => {
return apiUrl;
},
custom: async ({
url,
method,
filters,
sorters,
payload,
query,
headers,
}) => {
let requestUrl = `${url}?`;
if (sorters) {
const generatedSort = generateSort(sorters);
if (generatedSort) {
const { _sort, _order } = generatedSort;
const sortQuery = {
_sort: _sort.join(","),
_order: _order.join(","),
};
requestUrl = `${requestUrl}&${stringify(sortQuery)}`;
}
}
if (filters) {
const filterQuery = generateFilter(filters);
requestUrl = `${requestUrl}&${stringify(filterQuery)}`;
}
if (query) {
requestUrl = `${requestUrl}&${stringify(query)}`;
}
let axiosResponse;
switch (method) {
case "put":
case "post":
case "patch":
axiosResponse = await httpClient[method](url, payload, {
headers,
});
break;
case "delete":
axiosResponse = await httpClient.delete(url, {
data: payload,
headers: headers,
});
break;
default:
axiosResponse = await httpClient.get(requestUrl, {
headers,
});
break;
}
const { data } = axiosResponse;
return Promise.resolve({ data });
},
});
@@ -0,0 +1,21 @@
import { HttpError } from "@refinedev/core";
import axios from "axios";
const axiosInstance = axios.create();
axiosInstance.interceptors.response.use(
(response) => {
return response;
},
(error) => {
const customError: HttpError = {
...error,
message: error.response?.data?.message,
statusCode: error.response?.status,
};
return Promise.reject(customError);
},
);
export { axiosInstance };
@@ -0,0 +1,30 @@
import { CrudFilters } from "@refinedev/core";
import { mapOperator } from "./mapOperator";
export const generateFilter = (filters?: CrudFilters) => {
const queryFilters: { [key: string]: string } = {};
if (filters) {
filters.map((filter) => {
if (filter.operator === "or" || filter.operator === "and") {
throw new Error(
`[@refinedev/simple-rest]: \`operator: ${filter.operator}\` is not supported. You can create custom data provider. https://refine.dev/docs/api-reference/core/providers/data-provider/#creating-a-data-provider`,
);
}
if ("field" in filter) {
const { field, operator, value } = filter;
if (field === "q") {
queryFilters[field] = value;
return;
}
const mappedOperator = mapOperator(operator);
queryFilters[`${field}${mappedOperator}`] = value;
}
});
}
return queryFilters;
};
@@ -0,0 +1,20 @@
import { CrudSorting } from "@refinedev/core";
export const generateSort = (sorters?: CrudSorting) => {
if (sorters && sorters.length > 0) {
const _sort: string[] = [];
const _order: string[] = [];
sorters.map((item) => {
_sort.push(item.field);
_order.push(item.order);
});
return {
_sort,
_order,
};
}
return;
};
@@ -0,0 +1,4 @@
export { mapOperator } from "./mapOperator";
export { generateSort } from "./generateSort";
export { generateFilter } from "./generateFilter";
export { axiosInstance } from "./axios";
@@ -0,0 +1,14 @@
import { CrudOperators } from "@refinedev/core";
export const mapOperator = (operator: CrudOperators): string => {
switch (operator) {
case "ne":
case "gte":
case "lte":
return `_${operator}`;
case "contains":
return "_like";
default:
return "";
}
};
+13
View File
@@ -0,0 +1,13 @@
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
const container = document.getElementById("root") as HTMLElement;
const root = createRoot(container);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
@@ -0,0 +1,119 @@
import { Autocomplete, Box, MenuItem, Select, TextField } from "@mui/material";
import { Create, useAutocomplete } from "@refinedev/mui";
import { useForm } from "@refinedev/react-hook-form";
import { Controller } from "react-hook-form";
export const BlogPostCreate = () => {
const {
saveButtonProps,
refineCore: { formLoading },
register,
control,
formState: { errors },
} = useForm({});
const { autocompleteProps: categoryAutocompleteProps } = useAutocomplete({
resource: "categories",
});
return (
<Create isLoading={formLoading} saveButtonProps={saveButtonProps}>
<Box
component="form"
sx={{ display: "flex", flexDirection: "column" }}
autoComplete="off"
>
<TextField
{...register("title", {
required: "This field is required",
})}
error={!!(errors as any)?.title}
helperText={(errors as any)?.title?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="text"
label={"Title"}
name="title"
/>
<TextField
{...register("content", {
required: "This field is required",
})}
error={!!(errors as any)?.content}
helperText={(errors as any)?.content?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
multiline
label={"Content"}
name="content"
/>
<Controller
control={control}
name={"category.id"}
rules={{ required: "This field is required" }}
// eslint-disable-next-line
defaultValue={null as any}
render={({ field }) => (
<Autocomplete
{...categoryAutocompleteProps}
{...field}
onChange={(_, value) => {
field.onChange(value.id);
}}
getOptionLabel={(item) => {
return (
categoryAutocompleteProps?.options?.find((p) => {
const itemId =
typeof item === "object"
? item?.id?.toString()
: item?.toString();
const pId = p?.id?.toString();
return itemId === pId;
})?.title ?? ""
);
}}
isOptionEqualToValue={(option, value) => {
const optionId = option?.id?.toString();
const valueId =
typeof value === "object"
? value?.id?.toString()
: value?.toString();
return value === undefined || optionId === valueId;
}}
renderInput={(params) => (
<TextField
{...params}
label={"Category"}
margin="normal"
variant="outlined"
error={!!(errors as any)?.category?.id}
helperText={(errors as any)?.category?.id?.message}
required
/>
)}
/>
)}
/>
<Controller
name="status"
control={control}
render={({ field }) => {
return (
<Select
{...field}
value={field?.value || "draft"}
label={"Status"}
>
<MenuItem value="draft">Draft</MenuItem>
<MenuItem value="published">Published</MenuItem>
<MenuItem value="rejected">Rejected</MenuItem>
</Select>
);
}}
/>
</Box>
</Create>
);
};
@@ -0,0 +1,124 @@
import { Autocomplete, Box, Select, TextField } from "@mui/material";
import MenuItem from "@mui/material/MenuItem";
import { Edit, useAutocomplete } from "@refinedev/mui";
import { useForm } from "@refinedev/react-hook-form";
import { Controller } from "react-hook-form";
export const BlogPostEdit = () => {
const {
saveButtonProps,
refineCore: { queryResult, formLoading },
register,
control,
formState: { errors },
} = useForm({});
const blogPostsData = queryResult?.data?.data;
const { autocompleteProps: categoryAutocompleteProps } = useAutocomplete({
resource: "categories",
defaultValue: blogPostsData?.category?.id,
});
return (
<Edit isLoading={formLoading} saveButtonProps={saveButtonProps}>
<Box
component="form"
sx={{ display: "flex", flexDirection: "column" }}
autoComplete="off"
>
<TextField
{...register("title", {
required: "This field is required",
})}
error={!!(errors as any)?.title}
helperText={(errors as any)?.title?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="text"
label={"Title"}
name="title"
/>
<TextField
{...register("content", {
required: "This field is required",
})}
error={!!(errors as any)?.content}
helperText={(errors as any)?.content?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
multiline
label={"Content"}
name="content"
rows={4}
/>
<Controller
control={control}
name={"category.id"}
rules={{ required: "This field is required" }}
// eslint-disable-next-line
defaultValue={null as any}
render={({ field }) => (
<Autocomplete
{...categoryAutocompleteProps}
{...field}
onChange={(_, value) => {
field.onChange(value.id);
}}
getOptionLabel={(item) => {
return (
categoryAutocompleteProps?.options?.find((p) => {
const itemId =
typeof item === "object"
? item?.id?.toString()
: item?.toString();
const pId = p?.id?.toString();
return itemId === pId;
})?.title ?? ""
);
}}
isOptionEqualToValue={(option, value) => {
const optionId = option?.id?.toString();
const valueId =
typeof value === "object"
? value?.id?.toString()
: value?.toString();
return value === undefined || optionId === valueId;
}}
renderInput={(params) => (
<TextField
{...params}
label={"Category"}
margin="normal"
variant="outlined"
error={!!(errors as any)?.category?.id}
helperText={(errors as any)?.category?.id?.message}
required
/>
)}
/>
)}
/>
<Controller
name="status"
control={control}
render={({ field }) => {
return (
<Select
{...field}
value={field?.value || "draft"}
label={"Status"}
>
<MenuItem value="draft">Draft</MenuItem>
<MenuItem value="published">Published</MenuItem>
<MenuItem value="rejected">Rejected</MenuItem>
</Select>
);
}}
/>
</Box>
</Edit>
);
};
@@ -0,0 +1,4 @@
export * from "./create";
export * from "./edit";
export * from "./list";
export * from "./show";
@@ -0,0 +1,112 @@
import { DataGrid, GridColDef } from "@mui/x-data-grid";
import { useMany } from "@refinedev/core";
import {
DateField,
DeleteButton,
EditButton,
List,
MarkdownField,
ShowButton,
useDataGrid,
} from "@refinedev/mui";
import React from "react";
export const BlogPostList = () => {
const { dataGridProps } = useDataGrid({
syncWithLocation: true,
});
const { data: categoryData, isLoading: categoryIsLoading } = useMany({
resource: "categories",
ids:
dataGridProps?.rows
?.map((item: any) => item?.category?.id)
.filter(Boolean) ?? [],
queryOptions: {
enabled: !!dataGridProps?.rows,
},
});
const columns = React.useMemo<GridColDef[]>(
() => [
{
field: "id",
headerName: "ID",
type: "number",
minWidth: 50,
},
{
field: "title",
flex: 1,
headerName: "Title",
minWidth: 200,
},
{
field: "content",
flex: 1,
headerName: "content",
minWidth: 250,
renderCell: function render({ value }) {
if (!value) return "-";
return <MarkdownField value={value?.slice(0, 80) + "..." || ""} />;
},
},
{
field: "category",
flex: 1,
headerName: "Category",
minWidth: 300,
valueGetter: ({ row }) => {
const value = row?.category;
return value;
},
renderCell: function render({ value }) {
return categoryIsLoading ? (
<>Loading...</>
) : (
categoryData?.data?.find((item) => item.id === value?.id)?.title
);
},
},
{
field: "status",
flex: 1,
headerName: "Status",
minWidth: 200,
},
{
field: "createdAt",
flex: 1,
headerName: "Created at",
minWidth: 250,
renderCell: function render({ value }) {
return <DateField value={value} />;
},
},
{
field: "actions",
headerName: "Actions",
sortable: false,
renderCell: function render({ row }) {
return (
<>
<EditButton hideText recordItemId={row.id} />
<ShowButton hideText recordItemId={row.id} />
<DeleteButton hideText recordItemId={row.id} />
</>
);
},
align: "center",
headerAlign: "center",
minWidth: 80,
},
],
[categoryData]
);
return (
<List>
<DataGrid {...dataGridProps} columns={columns} autoHeight />
</List>
);
};
@@ -0,0 +1,59 @@
import { Stack, Typography } from "@mui/material";
import { useOne, useShow } from "@refinedev/core";
import {
DateField,
MarkdownField,
NumberField,
Show,
TextFieldComponent as TextField,
} from "@refinedev/mui";
export const BlogPostShow = () => {
const { queryResult } = useShow({});
const { data, isLoading } = queryResult;
const record = data?.data;
const { data: categoryData, isLoading: categoryIsLoading } = useOne({
resource: "categories",
id: record?.category?.id || "",
queryOptions: {
enabled: !!record,
},
});
return (
<Show isLoading={isLoading}>
<Stack gap={1}>
<Typography variant="body1" fontWeight="bold">
{"ID"}
</Typography>
<NumberField value={record?.id ?? ""} />
<Typography variant="body1" fontWeight="bold">
{"Title"}
</Typography>
<TextField value={record?.title} />
<Typography variant="body1" fontWeight="bold">
{"Content"}
</Typography>
<MarkdownField value={record?.content} />
<Typography variant="body1" fontWeight="bold">
{"Category"}
</Typography>
{categoryIsLoading ? <>Loading...</> : <>{categoryData?.data?.title}</>}
<Typography variant="body1" fontWeight="bold">
{"Status"}
</Typography>
<TextField value={record?.status} />
<Typography variant="body1" fontWeight="bold">
{"CreatedAt"}
</Typography>
<DateField value={record?.createdAt} />
</Stack>
</Show>
);
};
@@ -0,0 +1,36 @@
import { Box, TextField } from "@mui/material";
import { Create } from "@refinedev/mui";
import { useForm } from "@refinedev/react-hook-form";
export const CategoryCreate = () => {
const {
saveButtonProps,
refineCore: { formLoading },
register,
formState: { errors },
} = useForm({});
return (
<Create isLoading={formLoading} saveButtonProps={saveButtonProps}>
<Box
component="form"
sx={{ display: "flex", flexDirection: "column" }}
autoComplete="off"
>
<TextField
{...register("title", {
required: "This field is required",
})}
error={!!(errors as any)?.title}
helperText={(errors as any)?.title?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="text"
label={"Title"}
name="title"
/>
</Box>
</Create>
);
};
@@ -0,0 +1,35 @@
import { Box, TextField } from "@mui/material";
import { Edit } from "@refinedev/mui";
import { useForm } from "@refinedev/react-hook-form";
export const CategoryEdit = () => {
const {
saveButtonProps,
register,
formState: { errors },
} = useForm({});
return (
<Edit saveButtonProps={saveButtonProps}>
<Box
component="form"
sx={{ display: "flex", flexDirection: "column" }}
autoComplete="off"
>
<TextField
{...register("title", {
required: "This field is required",
})}
error={!!(errors as any)?.title}
helperText={(errors as any)?.title?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="text"
label={"Title"}
name="title"
/>
</Box>
</Edit>
);
};
@@ -0,0 +1,4 @@
export * from "./create";
export * from "./edit";
export * from "./list";
export * from "./show";
@@ -0,0 +1,58 @@
import { DataGrid, GridColDef } from "@mui/x-data-grid";
import {
DeleteButton,
EditButton,
List,
ShowButton,
useDataGrid,
} from "@refinedev/mui";
import React from "react";
export const CategoryList = () => {
const { dataGridProps } = useDataGrid({
pagination: {
mode: "client",
},
});
const columns = React.useMemo<GridColDef[]>(
() => [
{
field: "id",
headerName: "ID",
type: "number",
minWidth: 50,
},
{
field: "title",
flex: 1,
headerName: "Title",
minWidth: 200,
},
{
field: "actions",
headerName: "Actions",
sortable: false,
renderCell: function render({ row }) {
return (
<>
<EditButton hideText recordItemId={row.id} />
<ShowButton hideText recordItemId={row.id} />
<DeleteButton hideText recordItemId={row.id} />
</>
);
},
align: "center",
headerAlign: "center",
minWidth: 80,
},
],
[]
);
return (
<List>
<DataGrid {...dataGridProps} columns={columns} autoHeight />
</List>
);
};
@@ -0,0 +1,29 @@
import { Stack, Typography } from "@mui/material";
import { useShow } from "@refinedev/core";
import {
NumberField,
Show,
TextFieldComponent as TextField,
} from "@refinedev/mui";
export const CategoryShow = () => {
const { queryResult } = useShow({});
const { data, isLoading } = queryResult;
const record = data?.data;
return (
<Show isLoading={isLoading}>
<Stack gap={1}>
<Typography variant="body1" fontWeight="bold">
{"ID"}
</Typography>
<NumberField value={record?.id ?? ""} />
<Typography variant="body1" fontWeight="bold">
{"Title"}
</Typography>
<TextField value={record?.title} />
</Stack>
</Show>
);
};
@@ -0,0 +1,17 @@
import { AuthPage, ThemedTitleV2 } from "@refinedev/mui";
import { AppIcon } from "../../components/app-icon";
export const ForgotPassword = () => {
return (
<AuthPage
type="forgotPassword"
title={
<ThemedTitleV2
collapsed={false}
text="Refine Project"
icon={<AppIcon />}
/>
}
/>
);
};
+20
View File
@@ -0,0 +1,20 @@
import { AuthPage, ThemedTitleV2 } from "@refinedev/mui";
import { AppIcon } from "../../components/app-icon";
export const Login = () => {
return (
<AuthPage
type="login"
title={
<ThemedTitleV2
collapsed={false}
text="Refine Project"
icon={<AppIcon />}
/>
}
formProps={{
defaultValues: { email: "demo@refine.dev", password: "demodemo" },
}}
/>
);
};
@@ -0,0 +1,179 @@
import { Autocomplete, Box, InputAdornment, MenuItem, Select, TextField } from "@mui/material";
import { Create, NumberField, useAutocomplete } from "@refinedev/mui";
import { useForm } from "@refinedev/react-hook-form";
import { Controller } from "react-hook-form";
import { IMonitoring } from "./monitorings.types";
export const MonitoringCreate = () => {
const {
saveButtonProps,
refineCore: { formLoading },
register,
control,
formState: { errors },
} = useForm<IMonitoring>({});
// const { autocompleteProps: categoryAutocompleteProps } = useAutocomplete({
// resource: "categories",
// });
return (
<Create isLoading={formLoading} saveButtonProps={saveButtonProps}>
<Box
component="form"
sx={{ display: "flex", flexDirection: "column" }}
autoComplete="off"
>
<TextField
{...register("name", {
required: "The name is required",
})}
error={!!(errors as any)?.name}
helperText={(errors as any)?.name?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="text"
label={"Name"}
name="name"
/>
<TextField
{...register("samplerate", {
required: "The samplerate is required",
})}
error={!!(errors as any)?.samplerate}
helperText={(errors as any)?.samplerate?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="number"
label={"Samplerate"}
name="samplerate"
InputProps={{
endAdornment:
<InputAdornment position="end">hz</InputAdornment>
}}
/>
<TextField
{...register("sampleperiod", {
required: "The sampleperiod is required",
})}
error={!!(errors as any)?.sampleperiod}
helperText={(errors as any)?.sampleperiod?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="number"
label={"Sampleperiod"}
name="sampleperiod"
InputProps={{
endAdornment:
<InputAdornment position="end">s</InputAdornment>
}}
/>
<TextField
{...register("downtime", {
required: "The downtime is required",
})}
error={!!(errors as any)?.downtime}
helperText={(errors as any)?.downtime?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="number"
label={"Downtime"}
name="downtime"
InputProps={{
endAdornment:
<InputAdornment position="end">s</InputAdornment>
}}
/>
<TextField
{...register("owner", {
required: "The downtime is required",
})}
error={!!(errors as any)?.downtime}
helperText={(errors as any)?.downtime?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
multiline
label={"Owner"}
name="owner"
/>
</Box>
</Create>
);
};
// <Controller
// name="status"
// control={control}
// render={({ field }) => {
// return (
// <Select
// {...field}
// value={field?.value || "stopped"}
// label={"Status"}
// >
// <MenuItem value="started">Draft</MenuItem>
// <MenuItem value="stoppedd">Published</MenuItem>
// </Select>
// );
// }}
// />
// <Controller
// control={control}
// name={"category.id"}
// rules={{ required: "This field is required" }}
// // eslint-disable-next-line
// defaultValue={null as any}
// render={({ field }) => (
// <Autocomplete
// {...categoryAutocompleteProps}
// {...field}
// onChange={(_, value) => {
// field.onChange(value.id);
// }}
// getOptionLabel={(item) => {
// return (
// categoryAutocompleteProps?.options?.find((p) => {
// const itemId =
// typeof item === "object"
// ? item?.id?.toString()
// : item?.toString();
// const pId = p?.id?.toString();
// return itemId === pId;
// })?.title ?? ""
// );
// }}
// isOptionEqualToValue={(option, value) => {
// const optionId = option?.id?.toString();
// const valueId =
// typeof value === "object"
// ? value?.id?.toString()
// : value?.toString();
// return value === undefined || optionId === valueId;
// }}
// renderInput={(params) => (
// <TextField
// {...params}
// label={"Category"}
// margin="normal"
// variant="outlined"
// error={!!(errors as any)?.category?.id}
// helperText={(errors as any)?.category?.id?.message}
// required
// />
// )}
// />
// )}
// />
@@ -0,0 +1,163 @@
import { Autocomplete, Box, InputAdornment, Select, TextField } from "@mui/material";
import MenuItem from "@mui/material/MenuItem";
import { Edit, useAutocomplete } from "@refinedev/mui";
import { useForm } from "@refinedev/react-hook-form";
import { Controller } from "react-hook-form";
import { IMonitoring } from "./monitorings.types";
export const MonitoringEdit = () => {
const {
saveButtonProps,
refineCore: { queryResult, formLoading },
register,
control,
formState: { errors },
} = useForm<IMonitoring>({});
const blogPostsData = queryResult?.data?.data;
// const { autocompleteProps: categoryAutocompleteProps } = useAutocomplete({
// resource: "categories",
// defaultValue: blogPostsData?.category?.id,
// });
return (
<Edit dataProviderName="monitorings" isLoading={formLoading} saveButtonProps={saveButtonProps}>
<Box
component="form"
sx={{ display: "flex", flexDirection: "column" }}
autoComplete="off"
>
<TextField
{...register("name", {
required: "The name is required",
})}
error={!!(errors as any)?.name}
helperText={(errors as any)?.name?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="text"
label={"Name"}
name="name"
/>
<TextField
{...register("samplerate", {
required: "The samplerate is required",
})}
error={!!(errors as any)?.samplerate}
helperText={(errors as any)?.samplerate?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="number"
label={"Samplerate"}
name="samplerate"
InputProps={{
endAdornment:
<InputAdornment position="end">hz</InputAdornment>
}}
/>
<TextField
{...register("sampleperiod", {
required: "The sampleperiod is required",
})}
error={!!(errors as any)?.sampleperiod}
helperText={(errors as any)?.sampleperiod?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="number"
label={"Sampleperiod"}
name="sampleperiod"
InputProps={{
endAdornment:
<InputAdornment position="end">s</InputAdornment>
}}
/>
<TextField
{...register("downtime", {
required: "The downtime is required",
})}
error={!!(errors as any)?.downtime}
helperText={(errors as any)?.downtime?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
type="number"
label={"Downtime"}
name="downtime"
InputProps={{
endAdornment:
<InputAdornment position="end">s</InputAdornment>
}}
/>
<TextField
{...register("owner", {
required: "The downtime is required",
})}
error={!!(errors as any)?.downtime}
helperText={(errors as any)?.downtime?.message}
margin="normal"
fullWidth
InputLabelProps={{ shrink: true }}
multiline
label={"Owner"}
name="owner"
/>
</Box>
</Edit>
);
};
/*
{ <Controller
control={control}
name={"category.id"}
rules={{ required: "This field is required" }}
// eslint-disable-next-line
defaultValue={null as any}
render={({ field }) => (
<Autocomplete
{...categoryAutocompleteProps}
{...field}
onChange={(_, value) => {
field.onChange(value.id);
}}
getOptionLabel={(item) => {
return (
categoryAutocompleteProps?.options?.find((p) => {
const itemId =
typeof item === "object"
? item?.id?.toString()
: item?.toString();
const pId = p?.id?.toString();
return itemId === pId;
})?.title ?? ""
);
}}
isOptionEqualToValue={(option, value) => {
const optionId = option?.id?.toString();
const valueId =
typeof value === "object"
? value?.id?.toString()
: value?.toString();
return value === undefined || optionId === valueId;
}}
renderInput={(params) => (
<TextField
{...params}
label={"Category"}
margin="normal"
variant="outlined"
error={!!(errors as any)?.category?.id}
helperText={(errors as any)?.category?.id?.message}
required
/>
)}
/>
)}
/> }
*/
@@ -0,0 +1,4 @@
export * from "./create";
export * from "./edit";
export * from "./list";
export * from "./show";
@@ -0,0 +1,147 @@
import { DataGrid, GridColDef } from "@mui/x-data-grid";
import {
DateField,
DeleteButton,
EditButton,
List,
MarkdownField,
NumberField,
ShowButton,
useDataGrid,
} from "@refinedev/mui";
import React from "react";
import { IMonitoring } from "./monitorings.types";
export const MonitoringList = () => {
const { dataGridProps } = useDataGrid<IMonitoring>({
syncWithLocation: true,
dataProviderName: "monitorings",
pagination: {
mode: "client",
pageSize: 10,
},
});
// const { data: categoryData, isLoading: categoryIsLoading } = useMany({
// resource: "categories",
// ids:
// dataGridProps?.rows
// ?.map((item: any) => item?.category?.id)
// .filter(Boolean) ?? [],
// queryOptions: {
// enabled: !!dataGridProps?.rows,
// },
// });
const columns = React.useMemo<GridColDef<IMonitoring>[]>(
() => [
{
field: "name",
flex: 1,
headerName: "Name",
type:"string",
minWidth: 250,
},
{
field: "id",
headerName: "ID",
type: "string",
minWidth: 300,
},
{
field: "created_at",
flex: 1,
headerName: "Created at",
minWidth: 30,
renderCell: function render({ value }) {
return <DateField value={value} />;
},
},
{
field: "samplerate",
flex: 0.3,
headerName: "Samplerate in Hz",
renderCell: function render({ row }) {
return (
<NumberField
value={row.samplerate}
options={{
minimumIntegerDigits: 1,
minimumFractionDigits:0,
maximumFractionDigits: 0,
}}
/>
);
},
minWidth: 120,
},
{
field: "sampleperiod",
flex: 0.3,
headerName: "Period in s",
renderCell: function render({ row }) {
return (
<NumberField
value={row.sampleperiod}
options={{
minimumIntegerDigits: 1,
minimumFractionDigits:1,
maximumFractionDigits: 3,
}}
/>
);
},
minWidth: 120,
},
{
field: "downtime",
flex: 0.3,
headerName: "Downtime in s",
renderCell: function render({ row }) {
return (
<NumberField
value={row.sampleperiod}
options={{
minimumIntegerDigits: 1,
minimumFractionDigits:1,
maximumFractionDigits: 3,
}}
/>
);
},
minWidth: 120,
},
{
field: "owner",
flex: 1,
headerName: "Owner",
type:"string",
minWidth: 80,
},
{
field: "actions",
headerName: "Actions",
sortable: false,
renderCell: function render({ row }) {
return (
<>
<EditButton hideText recordItemId={row.id} />
<DeleteButton hideText recordItemId={row.id} />
</>
);
},
align: "center",
headerAlign: "center",
minWidth: 80,
},
],
[]
);
return (
<List>
<DataGrid {...dataGridProps} columns={columns} autoHeight />
</List>
);
};
@@ -0,0 +1,12 @@
export interface IMonitoring {
id: string;
created_at: string;
name: string;
samplerate: number;
sampleperiod: number;
downtime: number;
owner: string;
}
@@ -0,0 +1,59 @@
import { Stack, Typography } from "@mui/material";
import { useOne, useShow } from "@refinedev/core";
import {
DateField,
MarkdownField,
NumberField,
Show,
TextFieldComponent as TextField,
} from "@refinedev/mui";
export const MonitoringShow = () => {
const { queryResult } = useShow({});
const { data, isLoading } = queryResult;
const record = data?.data;
const { data: categoryData, isLoading: categoryIsLoading } = useOne({
resource: "categories",
id: record?.category?.id || "",
queryOptions: {
enabled: !!record,
},
});
return (
<Show isLoading={isLoading}>
<Stack gap={1}>
<Typography variant="body1" fontWeight="bold">
{"ID"}
</Typography>
<NumberField value={record?.id ?? ""} />
<Typography variant="body1" fontWeight="bold">
{"Title"}
</Typography>
<TextField value={record?.title} />
<Typography variant="body1" fontWeight="bold">
{"Content"}
</Typography>
<MarkdownField value={record?.content} />
<Typography variant="body1" fontWeight="bold">
{"Category"}
</Typography>
{categoryIsLoading ? <>Loading...</> : <>{categoryData?.data?.title}</>}
<Typography variant="body1" fontWeight="bold">
{"Status"}
</Typography>
<TextField value={record?.status} />
<Typography variant="body1" fontWeight="bold">
{"CreatedAt"}
</Typography>
<DateField value={record?.createdAt} />
</Stack>
</Show>
);
};
@@ -0,0 +1,17 @@
import { AuthPage, ThemedTitleV2 } from "@refinedev/mui";
import { AppIcon } from "../../components/app-icon";
export const Register = () => {
return (
<AuthPage
type="register"
title={
<ThemedTitleV2
collapsed={false}
text="Refine Project"
icon={<AppIcon />}
/>
}
/>
);
};
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
@@ -0,0 +1,741 @@
import "/node_modules/vite/dist/client/env.mjs";
const base$1 = "/" || '/';
// set :host styles to make playwright detect the element as visible
const template = /*html*/ `
<style>
:host {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 99999;
--monospace: 'SFMono-Regular', Consolas,
'Liberation Mono', Menlo, Courier, monospace;
--red: #ff5555;
--yellow: #e2aa53;
--purple: #cfa4ff;
--cyan: #2dd9da;
--dim: #c9c9c9;
--window-background: #181818;
--window-color: #d8d8d8;
}
.backdrop {
position: fixed;
z-index: 99999;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow-y: scroll;
margin: 0;
background: rgba(0, 0, 0, 0.66);
}
.window {
font-family: var(--monospace);
line-height: 1.5;
width: 800px;
color: var(--window-color);
margin: 30px auto;
padding: 25px 40px;
position: relative;
background: var(--window-background);
border-radius: 6px 6px 8px 8px;
box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);
overflow: hidden;
border-top: 8px solid var(--red);
direction: ltr;
text-align: left;
}
pre {
font-family: var(--monospace);
font-size: 16px;
margin-top: 0;
margin-bottom: 1em;
overflow-x: scroll;
scrollbar-width: none;
}
pre::-webkit-scrollbar {
display: none;
}
.message {
line-height: 1.3;
font-weight: 600;
white-space: pre-wrap;
}
.message-body {
color: var(--red);
}
.plugin {
color: var(--purple);
}
.file {
color: var(--cyan);
margin-bottom: 0;
white-space: pre-wrap;
word-break: break-all;
}
.frame {
color: var(--yellow);
}
.stack {
font-size: 13px;
color: var(--dim);
}
.tip {
font-size: 13px;
color: #999;
border-top: 1px dotted #999;
padding-top: 13px;
line-height: 1.8;
}
code {
font-size: 13px;
font-family: var(--monospace);
color: var(--yellow);
}
.file-link {
text-decoration: underline;
cursor: pointer;
}
kbd {
line-height: 1.5;
font-family: ui-monospace, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 0.75rem;
font-weight: 700;
background-color: rgb(38, 40, 44);
color: rgb(166, 167, 171);
padding: 0.15rem 0.3rem;
border-radius: 0.25rem;
border-width: 0.0625rem 0.0625rem 0.1875rem;
border-style: solid;
border-color: rgb(54, 57, 64);
border-image: initial;
}
</style>
<div class="backdrop" part="backdrop">
<div class="window" part="window">
<pre class="message" part="message"><span class="plugin" part="plugin"></span><span class="message-body" part="message-body"></span></pre>
<pre class="file" part="file"></pre>
<pre class="frame" part="frame"></pre>
<pre class="stack" part="stack"></pre>
<div class="tip" part="tip">
Click outside, press <kbd>Esc</kbd> key, or fix the code to dismiss.<br>
You can also disable this overlay by setting
<code part="config-option-name">server.hmr.overlay</code> to <code part="config-option-value">false</code> in <code part="config-file-name">vite.config.js.</code>
</div>
</div>
</div>
`;
const fileRE = /(?:[a-zA-Z]:\\|\/).*?:\d+:\d+/g;
const codeframeRE = /^(?:>?\s+\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm;
// Allow `ErrorOverlay` to extend `HTMLElement` even in environments where
// `HTMLElement` was not originally defined.
const { HTMLElement = class {
} } = globalThis;
class ErrorOverlay extends HTMLElement {
constructor(err, links = true) {
var _a;
super();
this.root = this.attachShadow({ mode: 'open' });
this.root.innerHTML = template;
codeframeRE.lastIndex = 0;
const hasFrame = err.frame && codeframeRE.test(err.frame);
const message = hasFrame
? err.message.replace(codeframeRE, '')
: err.message;
if (err.plugin) {
this.text('.plugin', `[plugin:${err.plugin}] `);
}
this.text('.message-body', message.trim());
const [file] = (((_a = err.loc) === null || _a === void 0 ? void 0 : _a.file) || err.id || 'unknown file').split(`?`);
if (err.loc) {
this.text('.file', `${file}:${err.loc.line}:${err.loc.column}`, links);
}
else if (err.id) {
this.text('.file', file);
}
if (hasFrame) {
this.text('.frame', err.frame.trim());
}
this.text('.stack', err.stack, links);
this.root.querySelector('.window').addEventListener('click', (e) => {
e.stopPropagation();
});
this.addEventListener('click', () => {
this.close();
});
this.closeOnEsc = (e) => {
if (e.key === 'Escape' || e.code === 'Escape') {
this.close();
}
};
document.addEventListener('keydown', this.closeOnEsc);
}
text(selector, text, linkFiles = false) {
const el = this.root.querySelector(selector);
if (!linkFiles) {
el.textContent = text;
}
else {
let curIndex = 0;
let match;
fileRE.lastIndex = 0;
while ((match = fileRE.exec(text))) {
const { 0: file, index } = match;
if (index != null) {
const frag = text.slice(curIndex, index);
el.appendChild(document.createTextNode(frag));
const link = document.createElement('a');
link.textContent = file;
link.className = 'file-link';
link.onclick = () => {
fetch(`${base$1}__open-in-editor?file=` + encodeURIComponent(file));
};
el.appendChild(link);
curIndex += frag.length + file.length;
}
}
}
}
close() {
var _a;
(_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this);
document.removeEventListener('keydown', this.closeOnEsc);
}
}
const overlayId = 'vite-error-overlay';
const { customElements } = globalThis; // Ensure `customElements` is defined before the next line.
if (customElements && !customElements.get(overlayId)) {
customElements.define(overlayId, ErrorOverlay);
}
console.debug('[vite] connecting...');
const importMetaUrl = new URL(import.meta.url);
// use server configuration, then fallback to inference
const serverHost = "localhost:undefined/";
const socketProtocol = null || (importMetaUrl.protocol === 'https:' ? 'wss' : 'ws');
const hmrPort = null;
const socketHost = `${null || importMetaUrl.hostname}:${hmrPort || importMetaUrl.port}${"/"}`;
const directSocketHost = "localhost:undefined/";
const base = "/" || '/';
const messageBuffer = [];
let socket;
try {
let fallback;
// only use fallback when port is inferred to prevent confusion
if (!hmrPort) {
fallback = () => {
// fallback to connecting directly to the hmr server
// for servers which does not support proxying websocket
socket = setupWebSocket(socketProtocol, directSocketHost, () => {
const currentScriptHostURL = new URL(import.meta.url);
const currentScriptHost = currentScriptHostURL.host +
currentScriptHostURL.pathname.replace(/@vite\/client$/, '');
console.error('[vite] failed to connect to websocket.\n' +
'your current setup:\n' +
` (browser) ${currentScriptHost} <--[HTTP]--> ${serverHost} (server)\n` +
` (browser) ${socketHost} <--[WebSocket (failing)]--> ${directSocketHost} (server)\n` +
'Check out your Vite / network configuration and https://vitejs.dev/config/server-options.html#server-hmr .');
});
socket.addEventListener('open', () => {
console.info('[vite] Direct websocket connection fallback. Check out https://vitejs.dev/config/server-options.html#server-hmr to remove the previous connection error.');
}, { once: true });
};
}
socket = setupWebSocket(socketProtocol, socketHost, fallback);
}
catch (error) {
console.error(`[vite] failed to connect to websocket (${error}). `);
}
function setupWebSocket(protocol, hostAndPath, onCloseWithoutOpen) {
const socket = new WebSocket(`${protocol}://${hostAndPath}`, 'vite-hmr');
let isOpened = false;
socket.addEventListener('open', () => {
isOpened = true;
notifyListeners('vite:ws:connect', { webSocket: socket });
}, { once: true });
// Listen for messages
socket.addEventListener('message', async ({ data }) => {
handleMessage(JSON.parse(data));
});
// ping server
socket.addEventListener('close', async ({ wasClean }) => {
if (wasClean)
return;
if (!isOpened && onCloseWithoutOpen) {
onCloseWithoutOpen();
return;
}
notifyListeners('vite:ws:disconnect', { webSocket: socket });
console.log(`[vite] server connection lost. polling for restart...`);
await waitForSuccessfulPing(protocol, hostAndPath);
location.reload();
});
return socket;
}
function warnFailedFetch(err, path) {
if (!err.message.match('fetch')) {
console.error(err);
}
console.error(`[hmr] Failed to reload ${path}. ` +
`This could be due to syntax errors or importing non-existent ` +
`modules. (see errors above)`);
}
function cleanUrl(pathname) {
const url = new URL(pathname, location.toString());
url.searchParams.delete('direct');
return url.pathname + url.search;
}
let isFirstUpdate = true;
const outdatedLinkTags = new WeakSet();
const debounceReload = (time) => {
let timer;
return () => {
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(() => {
location.reload();
}, time);
};
};
const pageReload = debounceReload(50);
async function handleMessage(payload) {
switch (payload.type) {
case 'connected':
console.debug(`[vite] connected.`);
sendMessageBuffer();
// proxy(nginx, docker) hmr ws maybe caused timeout,
// so send ping package let ws keep alive.
setInterval(() => {
if (socket.readyState === socket.OPEN) {
socket.send('{"type":"ping"}');
}
}, 30000);
break;
case 'update':
notifyListeners('vite:beforeUpdate', payload);
// if this is the first update and there's already an error overlay, it
// means the page opened with existing server compile error and the whole
// module script failed to load (since one of the nested imports is 500).
// in this case a normal update won't work and a full reload is needed.
if (isFirstUpdate && hasErrorOverlay()) {
window.location.reload();
return;
}
else {
clearErrorOverlay();
isFirstUpdate = false;
}
await Promise.all(payload.updates.map(async (update) => {
if (update.type === 'js-update') {
return queueUpdate(fetchUpdate(update));
}
// css-update
// this is only sent when a css file referenced with <link> is updated
const { path, timestamp } = update;
const searchUrl = cleanUrl(path);
// can't use querySelector with `[href*=]` here since the link may be
// using relative paths so we need to use link.href to grab the full
// URL for the include check.
const el = Array.from(document.querySelectorAll('link')).find((e) => !outdatedLinkTags.has(e) && cleanUrl(e.href).includes(searchUrl));
if (!el) {
return;
}
const newPath = `${base}${searchUrl.slice(1)}${searchUrl.includes('?') ? '&' : '?'}t=${timestamp}`;
// rather than swapping the href on the existing tag, we will
// create a new link tag. Once the new stylesheet has loaded we
// will remove the existing link tag. This removes a Flash Of
// Unstyled Content that can occur when swapping out the tag href
// directly, as the new stylesheet has not yet been loaded.
return new Promise((resolve) => {
const newLinkTag = el.cloneNode();
newLinkTag.href = new URL(newPath, el.href).href;
const removeOldEl = () => {
el.remove();
console.debug(`[vite] css hot updated: ${searchUrl}`);
resolve();
};
newLinkTag.addEventListener('load', removeOldEl);
newLinkTag.addEventListener('error', removeOldEl);
outdatedLinkTags.add(el);
el.after(newLinkTag);
});
}));
notifyListeners('vite:afterUpdate', payload);
break;
case 'custom': {
notifyListeners(payload.event, payload.data);
break;
}
case 'full-reload':
notifyListeners('vite:beforeFullReload', payload);
if (payload.path && payload.path.endsWith('.html')) {
// if html file is edited, only reload the page if the browser is
// currently on that page.
const pagePath = decodeURI(location.pathname);
const payloadPath = base + payload.path.slice(1);
if (pagePath === payloadPath ||
payload.path === '/index.html' ||
(pagePath.endsWith('/') && pagePath + 'index.html' === payloadPath)) {
pageReload();
}
return;
}
else {
pageReload();
}
break;
case 'prune':
notifyListeners('vite:beforePrune', payload);
// After an HMR update, some modules are no longer imported on the page
// but they may have left behind side effects that need to be cleaned up
// (.e.g style injections)
// TODO Trigger their dispose callbacks.
payload.paths.forEach((path) => {
const fn = pruneMap.get(path);
if (fn) {
fn(dataMap.get(path));
}
});
break;
case 'error': {
notifyListeners('vite:error', payload);
const err = payload.err;
if (enableOverlay) {
createErrorOverlay(err);
}
else {
console.error(`[vite] Internal Server Error\n${err.message}\n${err.stack}`);
}
break;
}
default: {
const check = payload;
return check;
}
}
}
function notifyListeners(event, data) {
const cbs = customListenersMap.get(event);
if (cbs) {
cbs.forEach((cb) => cb(data));
}
}
const enableOverlay = true;
function createErrorOverlay(err) {
if (!enableOverlay)
return;
clearErrorOverlay();
document.body.appendChild(new ErrorOverlay(err));
}
function clearErrorOverlay() {
document
.querySelectorAll(overlayId)
.forEach((n) => n.close());
}
function hasErrorOverlay() {
return document.querySelectorAll(overlayId).length;
}
let pending = false;
let queued = [];
/**
* buffer multiple hot updates triggered by the same src change
* so that they are invoked in the same order they were sent.
* (otherwise the order may be inconsistent because of the http request round trip)
*/
async function queueUpdate(p) {
queued.push(p);
if (!pending) {
pending = true;
await Promise.resolve();
pending = false;
const loading = [...queued];
queued = [];
(await Promise.all(loading)).forEach((fn) => fn && fn());
}
}
async function waitForSuccessfulPing(socketProtocol, hostAndPath, ms = 1000) {
const pingHostProtocol = socketProtocol === 'wss' ? 'https' : 'http';
const ping = async () => {
// A fetch on a websocket URL will return a successful promise with status 400,
// but will reject a networking error.
// When running on middleware mode, it returns status 426, and an cors error happens if mode is not no-cors
try {
await fetch(`${pingHostProtocol}://${hostAndPath}`, {
mode: 'no-cors',
headers: {
// Custom headers won't be included in a request with no-cors so (ab)use one of the
// safelisted headers to identify the ping request
Accept: 'text/x-vite-ping',
},
});
return true;
}
catch { }
return false;
};
if (await ping()) {
return;
}
await wait(ms);
// eslint-disable-next-line no-constant-condition
while (true) {
if (document.visibilityState === 'visible') {
if (await ping()) {
break;
}
await wait(ms);
}
else {
await waitForWindowShow();
}
}
}
function wait(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function waitForWindowShow() {
return new Promise((resolve) => {
const onChange = async () => {
if (document.visibilityState === 'visible') {
resolve();
document.removeEventListener('visibilitychange', onChange);
}
};
document.addEventListener('visibilitychange', onChange);
});
}
const sheetsMap = new Map();
// collect existing style elements that may have been inserted during SSR
// to avoid FOUC or duplicate styles
if ('document' in globalThis) {
document.querySelectorAll('style[data-vite-dev-id]').forEach((el) => {
sheetsMap.set(el.getAttribute('data-vite-dev-id'), el);
});
}
// all css imports should be inserted at the same position
// because after build it will be a single css file
let lastInsertedStyle;
function updateStyle(id, content) {
let style = sheetsMap.get(id);
if (!style) {
style = document.createElement('style');
style.setAttribute('type', 'text/css');
style.setAttribute('data-vite-dev-id', id);
style.textContent = content;
if (!lastInsertedStyle) {
document.head.appendChild(style);
// reset lastInsertedStyle after async
// because dynamically imported css will be splitted into a different file
setTimeout(() => {
lastInsertedStyle = undefined;
}, 0);
}
else {
lastInsertedStyle.insertAdjacentElement('afterend', style);
}
lastInsertedStyle = style;
}
else {
style.textContent = content;
}
sheetsMap.set(id, style);
}
function removeStyle(id) {
const style = sheetsMap.get(id);
if (style) {
document.head.removeChild(style);
sheetsMap.delete(id);
}
}
async function fetchUpdate({ path, acceptedPath, timestamp, explicitImportRequired, }) {
const mod = hotModulesMap.get(path);
if (!mod) {
// In a code-splitting project,
// it is common that the hot-updating module is not loaded yet.
// https://github.com/vitejs/vite/issues/721
return;
}
let fetchedModule;
const isSelfUpdate = path === acceptedPath;
// determine the qualified callbacks before we re-import the modules
const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => deps.includes(acceptedPath));
if (isSelfUpdate || qualifiedCallbacks.length > 0) {
const disposer = disposeMap.get(acceptedPath);
if (disposer)
await disposer(dataMap.get(acceptedPath));
const [acceptedPathWithoutQuery, query] = acceptedPath.split(`?`);
try {
fetchedModule = await import(
/* @vite-ignore */
base +
acceptedPathWithoutQuery.slice(1) +
`?${explicitImportRequired ? 'import&' : ''}t=${timestamp}${query ? `&${query}` : ''}`);
}
catch (e) {
warnFailedFetch(e, acceptedPath);
}
}
return () => {
for (const { deps, fn } of qualifiedCallbacks) {
fn(deps.map((dep) => (dep === acceptedPath ? fetchedModule : undefined)));
}
const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
console.debug(`[vite] hot updated: ${loggedPath}`);
};
}
function sendMessageBuffer() {
if (socket.readyState === 1) {
messageBuffer.forEach((msg) => socket.send(msg));
messageBuffer.length = 0;
}
}
const hotModulesMap = new Map();
const disposeMap = new Map();
const pruneMap = new Map();
const dataMap = new Map();
const customListenersMap = new Map();
const ctxToListenersMap = new Map();
function createHotContext(ownerPath) {
if (!dataMap.has(ownerPath)) {
dataMap.set(ownerPath, {});
}
// when a file is hot updated, a new context is created
// clear its stale callbacks
const mod = hotModulesMap.get(ownerPath);
if (mod) {
mod.callbacks = [];
}
// clear stale custom event listeners
const staleListeners = ctxToListenersMap.get(ownerPath);
if (staleListeners) {
for (const [event, staleFns] of staleListeners) {
const listeners = customListenersMap.get(event);
if (listeners) {
customListenersMap.set(event, listeners.filter((l) => !staleFns.includes(l)));
}
}
}
const newListeners = new Map();
ctxToListenersMap.set(ownerPath, newListeners);
function acceptDeps(deps, callback = () => { }) {
const mod = hotModulesMap.get(ownerPath) || {
id: ownerPath,
callbacks: [],
};
mod.callbacks.push({
deps,
fn: callback,
});
hotModulesMap.set(ownerPath, mod);
}
const hot = {
get data() {
return dataMap.get(ownerPath);
},
accept(deps, callback) {
if (typeof deps === 'function' || !deps) {
// self-accept: hot.accept(() => {})
acceptDeps([ownerPath], ([mod]) => deps === null || deps === void 0 ? void 0 : deps(mod));
}
else if (typeof deps === 'string') {
// explicit deps
acceptDeps([deps], ([mod]) => callback === null || callback === void 0 ? void 0 : callback(mod));
}
else if (Array.isArray(deps)) {
acceptDeps(deps, callback);
}
else {
throw new Error(`invalid hot.accept() usage.`);
}
},
// export names (first arg) are irrelevant on the client side, they're
// extracted in the server for propagation
acceptExports(_, callback) {
acceptDeps([ownerPath], ([mod]) => callback === null || callback === void 0 ? void 0 : callback(mod));
},
dispose(cb) {
disposeMap.set(ownerPath, cb);
},
prune(cb) {
pruneMap.set(ownerPath, cb);
},
// Kept for backward compatibility (#11036)
// @ts-expect-error untyped
// eslint-disable-next-line @typescript-eslint/no-empty-function
decline() { },
// tell the server to re-perform hmr propagation from this module as root
invalidate(message) {
notifyListeners('vite:invalidate', { path: ownerPath, message });
this.send('vite:invalidate', { path: ownerPath, message });
console.debug(`[vite] invalidate ${ownerPath}${message ? `: ${message}` : ''}`);
},
// custom events
on(event, cb) {
const addToMap = (map) => {
const existing = map.get(event) || [];
existing.push(cb);
map.set(event, existing);
};
addToMap(customListenersMap);
addToMap(newListeners);
},
send(event, data) {
messageBuffer.push(JSON.stringify({ type: 'custom', event, data }));
sendMessageBuffer();
},
};
return hot;
}
/**
* urls here are dynamic import() urls that couldn't be statically analyzed
*/
function injectQuery(url, queryToInject) {
// skip urls that won't be handled by vite
if (url[0] !== '.' && url[0] !== '/') {
return url;
}
// can't use pathname from URL since it may be relative like ../
const pathname = url.replace(/#.*$/, '').replace(/\?.*$/, '');
const { search, hash } = new URL(url, 'http://vitejs.dev');
return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${hash || ''}`;
}
export { ErrorOverlay, createHotContext, injectQuery, removeStyle, updateStyle };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50Lm1qcyIsInNvdXJjZXMiOlsib3ZlcmxheS50cyIsImNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVycm9yUGF5bG9hZCB9IGZyb20gJ3R5cGVzL2htclBheWxvYWQnXG5cbi8vIGluamVjdGVkIGJ5IHRoZSBobXIgcGx1Z2luIHdoZW4gc2VydmVkXG5kZWNsYXJlIGNvbnN0IF9fQkFTRV9fOiBzdHJpbmdcblxuY29uc3QgYmFzZSA9IF9fQkFTRV9fIHx8ICcvJ1xuXG4vLyBzZXQgOmhvc3Qgc3R5bGVzIHRvIG1ha2UgcGxheXdyaWdodCBkZXRlY3QgdGhlIGVsZW1lbnQgYXMgdmlzaWJsZVxuY29uc3QgdGVtcGxhdGUgPSAvKmh0bWwqLyBgXG48c3R5bGU+XG46aG9zdCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgLS1tb25vc3BhY2U6ICdTRk1vbm8tUmVndWxhcicsIENvbnNvbGFzLFxuICAnTGliZXJhdGlvbiBNb25vJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgLS1yZWQ6ICNmZjU1NTU7XG4gIC0teWVsbG93OiAjZTJhYTUzO1xuICAtLXB1cnBsZTogI2NmYTRmZjtcbiAgLS1jeWFuOiAjMmRkOWRhO1xuICAtLWRpbTogI2M5YzljOTtcblxuICAtLXdpbmRvdy1iYWNrZ3JvdW5kOiAjMTgxODE4O1xuICAtLXdpbmRvdy1jb2xvcjogI2Q4ZDhkODtcbn1cblxuLmJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG1hcmdpbjogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY2KTtcbn1cblxuLndpbmRvdyB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vc3BhY2UpO1xuICBsaW5lLWhlaWdodDogMS41O1xuICB3aWR0aDogODAwcHg7XG4gIGNvbG9yOiB2YXIoLS13aW5kb3ctY29sb3IpO1xuICBtYXJnaW46IDMwcHggYXV0bztcbiAgcGFkZGluZzogMjVweCA0MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6IHZhcigtLXdpbmRvdy1iYWNrZ3JvdW5kKTtcbiAgYm9yZGVyLXJhZGl1czogNnB4IDZweCA4cHggOHB4O1xuICBib3gtc2hhZG93OiAwIDE5cHggMzhweCByZ2JhKDAsMCwwLDAuMzApLCAwIDE1cHggMTJweCByZ2JhKDAsMCwwLDAuMjIpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItdG9wOiA4cHggc29saWQgdmFyKC0tcmVkKTtcbiAgZGlyZWN0aW9uOiBsdHI7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vc3BhY2UpO1xuICBmb250LXNpemU6IDE2cHg7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgb3ZlcmZsb3cteDogc2Nyb2xsO1xuICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG59XG5cbnByZTo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubWVzc2FnZSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbn1cblxuLm1lc3NhZ2UtYm9keSB7XG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xufVxuXG4ucGx1Z2luIHtcbiAgY29sb3I6IHZhcigtLXB1cnBsZSk7XG59XG5cbi5maWxlIHtcbiAgY29sb3I6IHZhcigtLWN5YW4pO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbn1cblxuLmZyYW1lIHtcbiAgY29sb3I6IHZhcigtLXllbGxvdyk7XG59XG5cbi5zdGFjayB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgY29sb3I6IHZhcigtLWRpbSk7XG59XG5cbi50aXAge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBib3JkZXItdG9wOiAxcHggZG90dGVkICM5OTk7XG4gIHBhZGRpbmctdG9wOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMS44O1xufVxuXG5jb2RlIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LWZhbWlseTogdmFyKC0tbW9ub3NwYWNlKTtcbiAgY29sb3I6IHZhcigtLXllbGxvdyk7XG59XG5cbi5maWxlLWxpbmsge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5rYmQge1xuICBsaW5lLWhlaWdodDogMS41O1xuICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDM4LCA0MCwgNDQpO1xuICBjb2xvcjogcmdiKDE2NiwgMTY3LCAxNzEpO1xuICBwYWRkaW5nOiAwLjE1cmVtIDAuM3JlbTtcbiAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgYm9yZGVyLXdpZHRoOiAwLjA2MjVyZW0gMC4wNjI1cmVtIDAuMTg3NXJlbTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiByZ2IoNTQsIDU3LCA2NCk7XG4gIGJvcmRlci1pbWFnZTogaW5pdGlhbDtcbn1cbjwvc3R5bGU+XG48ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiBwYXJ0PVwiYmFja2Ryb3BcIj5cbiAgPGRpdiBjbGFzcz1cIndpbmRvd1wiIHBhcnQ9XCJ3aW5kb3dcIj5cbiAgICA8cHJlIGNsYXNzPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCI+PHNwYW4gY2xhc3M9XCJwbHVnaW5cIiBwYXJ0PVwicGx1Z2luXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwibWVzc2FnZS1ib2R5XCIgcGFydD1cIm1lc3NhZ2UtYm9keVwiPjwvc3Bhbj48L3ByZT5cbiAgICA8cHJlIGNsYXNzPVwiZmlsZVwiIHBhcnQ9XCJmaWxlXCI+PC9wcmU+XG4gICAgPHByZSBjbGFzcz1cImZyYW1lXCIgcGFydD1cImZyYW1lXCI+PC9wcmU+XG4gICAgPHByZSBjbGFzcz1cInN0YWNrXCIgcGFydD1cInN0YWNrXCI+PC9wcmU+XG4gICAgPGRpdiBjbGFzcz1cInRpcFwiIHBhcnQ9XCJ0aXBcIj5cbiAgICAgIENsaWNrIG91dHNpZGUsIHByZXNzIDxrYmQ+RXNjPC9rYmQ+IGtleSwgb3IgZml4IHRoZSBjb2RlIHRvIGRpc21pc3MuPGJyPlxuICAgICAgWW91IGNhbiBhbHNvIGRpc2FibGUgdGhpcyBvdmVybGF5IGJ5IHNldHRpbmdcbiAgICAgIDxjb2RlIHBhcnQ9XCJjb25maWctb3B0aW9uLW5hbWVcIj5zZXJ2ZXIuaG1yLm92ZXJsYXk8L2NvZGU+IHRvIDxjb2RlIHBhcnQ9XCJjb25maWctb3B0aW9uLXZhbHVlXCI+ZmFsc2U8L2NvZGU+IGluIDxjb2RlIHBhcnQ9XCJjb25maWctZmlsZS1uYW1lXCI+dml0ZS5jb25maWcuanMuPC9jb2RlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuYFxuXG5jb25zdCBmaWxlUkUgPSAvKD86W2EtekEtWl06XFxcXHxcXC8pLio/OlxcZCs6XFxkKy9nXG5jb25zdCBjb2RlZnJhbWVSRSA9IC9eKD86Pj9cXHMrXFxkK1xccytcXHwuKnxcXHMrXFx8XFxzKlxcXi4qKVxccj9cXG4vZ21cblxuLy8gQWxsb3cgYEVycm9yT3ZlcmxheWAgdG8gZXh0ZW5kIGBIVE1MRWxlbWVudGAgZXZlbiBpbiBlbnZpcm9ubWVudHMgd2hlcmVcbi8vIGBIVE1MRWxlbWVudGAgd2FzIG5vdCBvcmlnaW5hbGx5IGRlZmluZWQuXG5jb25zdCB7IEhUTUxFbGVtZW50ID0gY2xhc3Mge30gYLine truncated
Access-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: no-cache
Etag: W/"62fb-sfz4JhSKWW1gLUlilrp/Gcy44jo"
Date: Fri, 15 Mar 2024 14:43:29 GMT
Content-Length: 86398
original-response-headersAccess-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: no-cache
Etag: W/"62fb-sfz4JhSKWW1gLUlilrp/Gcy44jo"
Date: Fri, 15 Mar 2024 14:43:29 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 86398
ctid2uncompressed-len0net-response-time-onstart15net-response-time-onstop16Q~
@@ -0,0 +1,494 @@
import {
__commonJS
} from "/node_modules/.vite/deps/chunk-AUZ3RYOM.js?v=e565559a";
// node_modules/strict-uri-encode/index.js
var require_strict_uri_encode = __commonJS({
"node_modules/strict-uri-encode/index.js"(exports, module) {
"use strict";
module.exports = (str) => encodeURIComponent(str).replace(/[!'()*]/g, (x) => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);
}
});
// node_modules/decode-uri-component/index.js
var require_decode_uri_component = __commonJS({
"node_modules/decode-uri-component/index.js"(exports, module) {
"use strict";
var token = "%[a-f0-9]{2}";
var singleMatcher = new RegExp("(" + token + ")|([^%]+?)", "gi");
var multiMatcher = new RegExp("(" + token + ")+", "gi");
function decodeComponents(components, split) {
try {
return [decodeURIComponent(components.join(""))];
} catch (err) {
}
if (components.length === 1) {
return components;
}
split = split || 1;
var left = components.slice(0, split);
var right = components.slice(split);
return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));
}
function decode(input) {
try {
return decodeURIComponent(input);
} catch (err) {
var tokens = input.match(singleMatcher) || [];
for (var i = 1; i < tokens.length; i++) {
input = decodeComponents(tokens, i).join("");
tokens = input.match(singleMatcher) || [];
}
return input;
}
}
function customDecodeURIComponent(input) {
var replaceMap = {
"%FE%FF": "��",
"%FF%FE": "��"
};
var match = multiMatcher.exec(input);
while (match) {
try {
replaceMap[match[0]] = decodeURIComponent(match[0]);
} catch (err) {
var result = decode(match[0]);
if (result !== match[0]) {
replaceMap[match[0]] = result;
}
}
match = multiMatcher.exec(input);
}
replaceMap["%C2"] = "�";
var entries = Object.keys(replaceMap);
for (var i = 0; i < entries.length; i++) {
var key = entries[i];
input = input.replace(new RegExp(key, "g"), replaceMap[key]);
}
return input;
}
module.exports = function(encodedURI) {
if (typeof encodedURI !== "string") {
throw new TypeError("Expected `encodedURI` to be of type `string`, got `" + typeof encodedURI + "`");
}
try {
encodedURI = encodedURI.replace(/\+/g, " ");
return decodeURIComponent(encodedURI);
} catch (err) {
return customDecodeURIComponent(encodedURI);
}
};
}
});
// node_modules/split-on-first/index.js
var require_split_on_first = __commonJS({
"node_modules/split-on-first/index.js"(exports, module) {
"use strict";
module.exports = (string, separator) => {
if (!(typeof string === "string" && typeof separator === "string")) {
throw new TypeError("Expected the arguments to be of type `string`");
}
if (separator === "") {
return [string];
}
const separatorIndex = string.indexOf(separator);
if (separatorIndex === -1) {
return [string];
}
return [
string.slice(0, separatorIndex),
string.slice(separatorIndex + separator.length)
];
};
}
});
// node_modules/filter-obj/index.js
var require_filter_obj = __commonJS({
"node_modules/filter-obj/index.js"(exports, module) {
"use strict";
module.exports = function(obj, predicate) {
var ret = {};
var keys = Object.keys(obj);
var isArr = Array.isArray(predicate);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var val = obj[key];
if (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {
ret[key] = val;
}
}
return ret;
};
}
});
// node_modules/query-string/index.js
var require_query_string = __commonJS({
"node_modules/query-string/index.js"(exports) {
var strictUriEncode = require_strict_uri_encode();
var decodeComponent = require_decode_uri_component();
var splitOnFirst = require_split_on_first();
var filterObject = require_filter_obj();
var isNullOrUndefined = (value) => value === null || value === void 0;
var encodeFragmentIdentifier = Symbol("encodeFragmentIdentifier");
function encoderForArrayFormat(options) {
switch (options.arrayFormat) {
case "index":
return (key) => (result, value) => {
const index = result.length;
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [...result, [encode(key, options), "[", index, "]"].join("")];
}
return [
...result,
[encode(key, options), "[", encode(index, options), "]=", encode(value, options)].join("")
];
};
case "bracket":
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [...result, [encode(key, options), "[]"].join("")];
}
return [...result, [encode(key, options), "[]=", encode(value, options)].join("")];
};
case "colon-list-separator":
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [...result, [encode(key, options), ":list="].join("")];
}
return [...result, [encode(key, options), ":list=", encode(value, options)].join("")];
};
case "comma":
case "separator":
case "bracket-separator": {
const keyValueSep = options.arrayFormat === "bracket-separator" ? "[]=" : "=";
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
value = value === null ? "" : value;
if (result.length === 0) {
return [[encode(key, options), keyValueSep, encode(value, options)].join("")];
}
return [[result, encode(value, options)].join(options.arrayFormatSeparator)];
};
}
default:
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [...result, encode(key, options)];
}
return [...result, [encode(key, options), "=", encode(value, options)].join("")];
};
}
}
function parserForArrayFormat(options) {
let result;
switch (options.arrayFormat) {
case "index":
return (key, value, accumulator) => {
result = /\[(\d*)\]$/.exec(key);
key = key.replace(/\[\d*\]$/, "");
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === void 0) {
accumulator[key] = {};
}
accumulator[key][result[1]] = value;
};
case "bracket":
return (key, value, accumulator) => {
result = /(\[\])$/.exec(key);
key = key.replace(/\[\]$/, "");
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === void 0) {
accumulator[key] = [value];
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
case "colon-list-separator":
return (key, value, accumulator) => {
result = /(:list)$/.exec(key);
key = key.replace(/:list$/, "");
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === void 0) {
accumulator[key] = [value];
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
case "comma":
case "separator":
return (key, value, accumulator) => {
const isArray = typeof value === "string" && value.includes(options.arrayFormatSeparator);
const isEncodedArray = typeof value === "string" && !isArray && decode(value, options).includes(options.arrayFormatSeparator);
value = isEncodedArray ? decode(value, options) : value;
const newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map((item) => decode(item, options)) : value === null ? value : decode(value, options);
accumulator[key] = newValue;
};
case "bracket-separator":
return (key, value, accumulator) => {
const isArray = /(\[\])$/.test(key);
key = key.replace(/\[\]$/, "");
if (!isArray) {
accumulator[key] = value ? decode(value, options) : value;
return;
}
const arrayValue = value === null ? [] : value.split(options.arrayFormatSeparator).map((item) => decode(item, options));
if (accumulator[key] === void 0) {
accumulator[key] = arrayValue;
return;
}
accumulator[key] = [].concat(accumulator[key], arrayValue);
};
default:
return (key, value, accumulator) => {
if (accumulator[key] === void 0) {
accumulator[key] = value;
return;
}
accumulator[key] = [].concat(accumulator[key], value);
};
}
}
function validateArrayFormatSeparator(value) {
if (typeof value !== "string" || value.length !== 1) {
throw new TypeError("arrayFormatSeparator must be single character string");
}
}
function encode(value, options) {
if (options.encode) {
return options.strict ? strictUriEncode(value) : encodeURIComponent(value);
}
return value;
}
function decode(value, options) {
if (options.decode) {
return decodeComponent(value);
}
return value;
}
function keysSorter(input) {
if (Array.isArray(input)) {
return input.sort();
}
if (typeof input === "object") {
return keysSorter(Object.keys(input)).sort((a, b) => Number(a) - Number(b)).map((key) => input[key]);
}
return input;
}
function removeHash(input) {
const hashStart = input.indexOf("#");
if (hashStart !== -1) {
input = input.slice(0, hashStart);
}
return input;
}
function getHash(url) {
let hash = "";
const hashStart = url.indexOf("#");
if (hashStart !== -1) {
hash = url.slice(hashStart);
}
return hash;
}
function extract(input) {
input = removeHash(input);
const queryStart = input.indexOf("?");
if (queryStart === -1) {
return "";
}
return input.slice(queryStart + 1);
}
function parseValue(value, options) {
if (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === "string" && value.trim() !== "")) {
value = Number(value);
} else if (options.parseBooleans && value !== null && (value.toLowerCase() === "true" || value.toLowerCase() === "false")) {
value = value.toLowerCase() === "true";
}
return value;
}
function parse(query, options) {
options = Object.assign({
decode: true,
sort: true,
arrayFormat: "none",
arrayFormatSeparator: ",",
parseNumbers: false,
parseBooleans: false
}, options);
validateArrayFormatSeparator(options.arrayFormatSeparator);
const formatter = parserForArrayFormat(options);
const ret = /* @__PURE__ */ Object.create(null);
if (typeof query !== "string") {
return ret;
}
query = query.trim().replace(/^[?#&]/, "");
if (!query) {
return ret;
}
for (const param of query.split("&")) {
if (param === "") {
continue;
}
let [key, value] = splitOnFirst(options.decode ? param.replace(/\+/g, " ") : param, "=");
value = value === void 0 ? null : ["comma", "separator", "bracket-separator"].includes(options.arrayFormat) ? value : decode(value, options);
formatter(decode(key, options), value, ret);
}
for (const key of Object.keys(ret)) {
const value = ret[key];
if (typeof value === "object" && value !== null) {
for (const k of Object.keys(value)) {
value[k] = parseValue(value[k], options);
}
} else {
ret[key] = parseValue(value, options);
}
}
if (options.sort === false) {
return ret;
}
return (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {
const value = ret[key];
if (Boolean(value) && typeof value === "object" && !Array.isArray(value)) {
result[key] = keysSorter(value);
} else {
result[key] = value;
}
return result;
}, /* @__PURE__ */ Object.create(null));
}
exports.extract = extract;
exports.parse = parse;
exports.stringify = (object, options) => {
if (!object) {
return "";
}
options = Object.assign({
encode: true,
strict: true,
arrayFormat: "none",
arrayFormatSeparator: ","
}, options);
validateArrayFormatSeparator(options.arrayFormatSeparator);
const shouldFilter = (key) => options.skipNull && isNullOrUndefined(object[key]) || options.skipEmptyString && object[key] === "";
const formatter = encoderForArrayFormat(options);
const objectCopy = {};
for (const key of Object.keys(object)) {
if (!shouldFilter(key)) {
objectCopy[key] = object[key];
}
}
const keys = Object.keys(objectCopy);
if (options.sort !== false) {
keys.sort(options.sort);
}
return keys.map((key) => {
const value = object[key];
if (value === void 0) {
return "";
}
if (value === null) {
return encode(key, options);
}
if (Array.isArray(value)) {
if (value.length === 0 && options.arrayFormat === "bracket-separator") {
return encode(key, options) + "[]";
}
return value.reduce(formatter(key), []).join("&");
}
return encode(key, options) + "=" + encode(value, options);
}).filter((x) => x.length > 0).join("&");
};
exports.parseUrl = (url, options) => {
options = Object.assign({
decode: true
}, options);
const [url_, hash] = splitOnFirst(url, "#");
return Object.assign(
{
url: url_.split("?")[0] || "",
query: parse(extract(url), options)
},
options && options.parseFragmentIdentifier && hash ? { fragmentIdentifier: decode(hash, options) } : {}
);
};
exports.stringifyUrl = (object, options) => {
options = Object.assign({
encode: true,
strict: true,
[encodeFragmentIdentifier]: true
}, options);
const url = removeHash(object.url).split("?")[0] || "";
const queryFromUrl = exports.extract(object.url);
const parsedQueryFromUrl = exports.parse(queryFromUrl, { sort: false });
const query = Object.assign(parsedQueryFromUrl, object.query);
let queryString = exports.stringify(query, options);
if (queryString) {
queryString = `?${queryString}`;
}
let hash = getHash(object.url);
if (object.fragmentIdentifier) {
hash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;
}
return `${url}${queryString}${hash}`;
};
exports.pick = (input, filter, options) => {
options = Object.assign({
parseFragmentIdentifier: true,
[encodeFragmentIdentifier]: false
}, options);
const { url, query, fragmentIdentifier } = exports.parseUrl(input, options);
return exports.stringifyUrl({
url,
query: filterObject(query, filter),
fragmentIdentifier
}, options);
};
exports.exclude = (input, filter, options) => {
const exclusionFilter = Array.isArray(filter) ? (key) => !filter.includes(key) : (key, value) => !filter(key, value);
return exports.pick(input, exclusionFilter, options);
};
}
});
export default require_query_string();
//# sourceMappingURL=query-string.js.map
3É‚teô^‘eô^‘F¬O1gÕ�£vO^partitionKey=%28http%2Clocalhost%2C5173%29,:http://localhost:5173/node_modules/.vite/deps/query-string.js?v=e565559astrongly-framed1request-methodGETresponse-headHTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: max-age=31536000,immutable
Etag: W/"43c4-MxI2NUTkbbNKbRJdi5zAv8LrAOQ"
Date: Fri, 15 Mar 2024 14:37:23 GMT
Content-Length: 17348
original-response-headersAccess-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: max-age=31536000,immutable
Etag: W/"43c4-MxI2NUTkbbNKbRJdi5zAv8LrAOQ"
Date: Fri, 15 Mar 2024 14:37:23 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 17348
ctid2uncompressed-len0net-response-time-onstart38net-response-time-onstop38CÄ
@@ -0,0 +1,16 @@
{"version":3,"sources":["../../@mui/system/useThemeWithoutDefault.js","../../@mui/base/composeClasses/index.js","../../@mui/base/ClickAwayListener/ClickAwayListener.js","../../@mui/base/FocusTrap/FocusTrap.js","../../@mui/base/Portal/Portal.js","../../@mui/base/unstable_useModal/ModalManager.js","../../@mui/base/NoSsr/NoSsr.js","../../@mui/base/TextareaAutosize/TextareaAutosize.js","../../@mui/base/useAutocomplete/useAutocomplete.js","../../@mui/material/Popper/Popper.js","../../@mui/base/Popper/Popper.js","../../@popperjs/core/lib/enums.js","../../@popperjs/core/lib/dom-utils/getNodeName.js","../../@popperjs/core/lib/dom-utils/getWindow.js","../../@popperjs/core/lib/dom-utils/instanceOf.js","../../@popperjs/core/lib/modifiers/applyStyles.js","../../@popperjs/core/lib/utils/getBasePlacement.js","../../@popperjs/core/lib/utils/math.js","../../@popperjs/core/lib/utils/userAgent.js","../../@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../@popperjs/core/lib/dom-utils/getLayoutRect.js","../../@popperjs/core/lib/dom-utils/contains.js","../../@popperjs/core/lib/dom-utils/getComputedStyle.js","../../@popperjs/core/lib/dom-utils/isTableElement.js","../../@popperjs/core/lib/dom-utils/getDocumentElement.js","../../@popperjs/core/lib/dom-utils/getParentNode.js","../../@popperjs/core/lib/dom-utils/getOffsetParent.js","../../@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../@popperjs/core/lib/utils/within.js","../../@popperjs/core/lib/utils/getFreshSideObject.js","../../@popperjs/core/lib/utils/mergePaddingObject.js","../../@popperjs/core/lib/utils/expandToHashMap.js","../../@popperjs/core/lib/modifiers/arrow.js","../../@popperjs/core/lib/utils/getVariation.js","../../@popperjs/core/lib/modifiers/computeStyles.js","../../@popperjs/core/lib/modifiers/eventListeners.js","../../@popperjs/core/lib/utils/getOppositePlacement.js","../../@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../@popperjs/core/lib/dom-utils/getWindowScroll.js","../../@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../@popperjs/core/lib/dom-utils/getViewportRect.js","../../@popperjs/core/lib/dom-utils/getDocumentRect.js","../../@popperjs/core/lib/dom-utils/isScrollParent.js","../../@popperjs/core/lib/dom-utils/getScrollParent.js","../../@popperjs/core/lib/dom-utils/listScrollParents.js","../../@popperjs/core/lib/utils/rectToClientRect.js","../../@popperjs/core/lib/dom-utils/getClippingRect.js","../../@popperjs/core/lib/utils/computeOffsets.js","../../@popperjs/core/lib/utils/detectOverflow.js","../../@popperjs/core/lib/utils/computeAutoPlacement.js","../../@popperjs/core/lib/modifiers/flip.js","../../@popperjs/core/lib/modifiers/hide.js","../../@popperjs/core/lib/modifiers/offset.js","../../@popperjs/core/lib/modifiers/popperOffsets.js","../../@popperjs/core/lib/utils/getAltAxis.js","../../@popperjs/core/lib/modifiers/preventOverflow.js","../../@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../@popperjs/core/lib/dom-utils/getNodeScroll.js","../../@popperjs/core/lib/dom-utils/getCompositeRect.js","../../@popperjs/core/lib/utils/orderModifiers.js","../../@popperjs/core/lib/utils/debounce.js","../../@popperjs/core/lib/utils/mergeByName.js","../../@popperjs/core/lib/createPopper.js","../../@popperjs/core/lib/popper-lite.js","../../@popperjs/core/lib/popper.js","../../@mui/base/generateUtilityClass/index.js","../../@mui/base/generateUtilityClasses/index.js","../../@mui/base/Popper/popperClasses.js","../../@mui/material/ListSubheader/listSubheaderClasses.js","../../@mui/material/ListSubheader/ListSubheader.js","../../@mui/material/Chip/chipClasses.js","../../@mui/material/Chip/Chip.js","../../@mui/material/internal/svg-icons/Cancel.js","../../@mui/material/FormControl/useFormControl.js","../../@mui/material/FormControl/FormControlContext.js","../../@mui/material/InputBase/inputBaseClasses.js","../../@mui/material/InputBase/InputBase.js","../../@mui/base/Badge/Badge.js","../../@mui/base/useBadge/useBadge.js","../../@mui/base/Badge/badgeClasses.js","../../@mui/base/Button/Button.js","../../@mui/base/Button/buttonClasses.js","../../@mui/base/useButton/useButton.js","../../@mui/base/Dropdown/Dropdown.js","../../@mui/base/useDropdown/DropdownContext.js","../../@mui/base/useDropdown/useDropdown.js","../../@mui/base/utils/useControllableReducer.js","../../@mui/base/useDropdown/useDropdown.types.js","../../@mui/base/useDropdown/dropdownReducer.js","../../@mui/base/FormControl/FormControl.js","../../@mui/base/FormControl/FormControlContext.js","../../@mui/base/FormControl/formControlClasses.js","../../@mui/base/FormControl/useFormControlContext.js","../../@mui/base/Input/Input.js","../../@mui/base/Input/inputClasses.js","../../@mui/base/useInput/useInput.js","../../@mui/base/Menu/Menu.js","../../@mui/base/Menu/menuClasses.js","../../@mui/base/useMenu/useMenu.js","../../@mui/base/useMenu/menuReducer.js","../../@mui/base/useList/useList.js","../../@mui/baLine truncated
Access-Control-Allow-Origin: *
Content-Type: application/json
Cache-Control: no-cache
Etag: W/"186d35-K79JleW+4qGco3ojlU+6EACyuKQ"
Date: Fri, 15 Mar 2024 16:01:57 GMT
Content-Length: 1600821
original-response-headersAccess-Control-Allow-Origin: *
Content-Type: application/json
Cache-Control: no-cache
Etag: W/"186d35-K79JleW+4qGco3ojlU+6EACyuKQ"
Date: Fri, 15 Mar 2024 16:01:57 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 1600821
ctid1net-response-time-onstart364net-response-time-onstop367m5
@@ -0,0 +1,605 @@
"use client";
import {
L,
O,
T,
d
} from "/node_modules/.vite/deps/chunk-K7UO52JA.js?v=e565559a";
import {
require_react_dom
} from "/node_modules/.vite/deps/chunk-GYWC62UC.js?v=e565559a";
import {
require_react
} from "/node_modules/.vite/deps/chunk-HS5T2ZWL.js?v=e565559a";
import {
__commonJS,
__toESM
} from "/node_modules/.vite/deps/chunk-AUZ3RYOM.js?v=e565559a";
// node_modules/lodash/isObject.js
var require_isObject = __commonJS({
"node_modules/lodash/isObject.js"(exports, module) {
function isObject(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
module.exports = isObject;
}
});
// node_modules/lodash/_freeGlobal.js
var require_freeGlobal = __commonJS({
"node_modules/lodash/_freeGlobal.js"(exports, module) {
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
module.exports = freeGlobal;
}
});
// node_modules/lodash/_root.js
var require_root = __commonJS({
"node_modules/lodash/_root.js"(exports, module) {
var freeGlobal = require_freeGlobal();
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
var root = freeGlobal || freeSelf || Function("return this")();
module.exports = root;
}
});
// node_modules/lodash/now.js
var require_now = __commonJS({
"node_modules/lodash/now.js"(exports, module) {
var root = require_root();
var now = function() {
return root.Date.now();
};
module.exports = now;
}
});
// node_modules/lodash/_trimmedEndIndex.js
var require_trimmedEndIndex = __commonJS({
"node_modules/lodash/_trimmedEndIndex.js"(exports, module) {
var reWhitespace = /\s/;
function trimmedEndIndex(string) {
var index = string.length;
while (index-- && reWhitespace.test(string.charAt(index))) {
}
return index;
}
module.exports = trimmedEndIndex;
}
});
// node_modules/lodash/_baseTrim.js
var require_baseTrim = __commonJS({
"node_modules/lodash/_baseTrim.js"(exports, module) {
var trimmedEndIndex = require_trimmedEndIndex();
var reTrimStart = /^\s+/;
function baseTrim(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
}
module.exports = baseTrim;
}
});
// node_modules/lodash/_Symbol.js
var require_Symbol = __commonJS({
"node_modules/lodash/_Symbol.js"(exports, module) {
var root = require_root();
var Symbol = root.Symbol;
module.exports = Symbol;
}
});
// node_modules/lodash/_getRawTag.js
var require_getRawTag = __commonJS({
"node_modules/lodash/_getRawTag.js"(exports, module) {
var Symbol = require_Symbol();
var objectProto = Object.prototype;
var hasOwnProperty = objectProto.hasOwnProperty;
var nativeObjectToString = objectProto.toString;
var symToStringTag = Symbol ? Symbol.toStringTag : void 0;
function getRawTag(value) {
var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = void 0;
var unmasked = true;
} catch (e) {
}
var result = nativeObjectToString.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
} else {
delete value[symToStringTag];
}
}
return result;
}
module.exports = getRawTag;
}
});
// node_modules/lodash/_objectToString.js
var require_objectToString = __commonJS({
"node_modules/lodash/_objectToString.js"(exports, module) {
var objectProto = Object.prototype;
var nativeObjectToString = objectProto.toString;
function objectToString(value) {
return nativeObjectToString.call(value);
}
module.exports = objectToString;
}
});
// node_modules/lodash/_baseGetTag.js
var require_baseGetTag = __commonJS({
"node_modules/lodash/_baseGetTag.js"(exports, module) {
var Symbol = require_Symbol();
var getRawTag = require_getRawTag();
var objectToString = require_objectToString();
var nullTag = "[object Null]";
var undefinedTag = "[object Undefined]";
var symToStringTag = Symbol ? Symbol.toStringTag : void 0;
function baseGetTag(value) {
if (value == null) {
return value === void 0 ? undefinedTag : nullTag;
}
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
}
module.exports = baseGetTag;
}
});
// node_modules/lodash/isObjectLike.js
var require_isObjectLike = __commonJS({
"node_modules/lodash/isObjectLike.js"(exports, module) {
function isObjectLike(value) {
return value != null && typeof value == "object";
}
module.exports = isObjectLike;
}
});
// node_modules/lodash/isSymbol.js
var require_isSymbol = __commonJS({
"node_modules/lodash/isSymbol.js"(exports, module) {
var baseGetTag = require_baseGetTag();
var isObjectLike = require_isObjectLike();
var symbolTag = "[object Symbol]";
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
}
module.exports = isSymbol;
}
});
// node_modules/lodash/toNumber.js
var require_toNumber = __commonJS({
"node_modules/lodash/toNumber.js"(exports, module) {
var baseTrim = require_baseTrim();
var isObject = require_isObject();
var isSymbol = require_isSymbol();
var NAN = 0 / 0;
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
var reIsBinary = /^0b[01]+$/i;
var reIsOctal = /^0o[0-7]+$/i;
var freeParseInt = parseInt;
function toNumber(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
if (isObject(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject(other) ? other + "" : other;
}
if (typeof value != "string") {
return value === 0 ? value : +value;
}
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
module.exports = toNumber;
}
});
// node_modules/lodash/debounce.js
var require_debounce = __commonJS({
"node_modules/lodash/debounce.js"(exports, module) {
var isObject = require_isObject();
var now = require_now();
var toNumber = require_toNumber();
var FUNC_ERROR_TEXT = "Expected a function";
var nativeMax = Math.max;
var nativeMin = Math.min;
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
if (typeof func != "function") {
throw new TypeError(FUNC_ERROR_TEXT);
}
wait = toNumber(wait) || 0;
if (isObject(options)) {
leading = !!options.leading;
maxing = "maxWait" in options;
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
lastArgs = lastThis = void 0;
lastInvokeTime = time;
result = func.apply(thisArg, args);
return result;
}
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout(timerExpired, wait);
return leading ? invokeFunc(time) : result;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now();
if (shouldInvoke(time)) {
return trailingEdge(time);
}
timerId = setTimeout(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
timerId = void 0;
if (trailing && lastArgs) {
return invokeFunc(time);
}
lastArgs = lastThis = void 0;
return result;
}
function cancel() {
if (timerId !== void 0) {
clearTimeout(timerId);
}
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = void 0;
}
function flush() {
return timerId === void 0 ? result : trailingEdge(now());
}
function debounced() {
var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === void 0) {
return leadingEdge(lastCallTime);
}
if (maxing) {
clearTimeout(timerId);
timerId = setTimeout(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === void 0) {
timerId = setTimeout(timerExpired, wait);
}
return result;
}
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
module.exports = debounce;
}
});
// node_modules/@refinedev/devtools/dist/esm/index.js
var import_react = __toESM(require_react());
var import_react2 = __toESM(require_react());
var import_react3 = __toESM(require_react());
var import_react_dom = __toESM(require_react_dom());
// node_modules/@aliemir/dom-to-fiber-utils/dist/esm/index.js
var F = (e) => {
let r = e, t;
for (; !t && r; )
t = Object.keys(r).find((n) => n.startsWith("__reactFiber$")), t || (r = r.parentElement);
return t && r ? r[t] : null;
};
var i = (e) => {
var r, t, n, u2;
return e && (((r = e.type) == null ? void 0 : r.displayName) || ((t = e.type) == null ? void 0 : t.name) || ((n = e.elementType) == null ? void 0 : n.displayName) || ((u2 = e.elementType) == null ? void 0 : u2.name)) || null;
};
var l = (e) => e.return || null;
var s = (e) => {
let r = e;
for (; r; ) {
if (r.stateNode)
return r;
r = l(r);
}
return null;
};
var p = (e) => e.stateNode;
var o = (e) => {
if (!e)
return null;
if (i(e))
return e;
let r = l(e);
return r ? o(r) : null;
};
// node_modules/@refinedev/devtools/dist/esm/index.js
var import_debounce = __toESM(require_debounce());
var import_react4 = __toESM(require_react());
var import_react5 = __toESM(require_react());
var y = __toESM(require_react());
var import_react6 = __toESM(require_react());
var S = __toESM(require_react());
var import_react7 = __toESM(require_react());
var import_react8 = __toESM(require_react());
var import_react9 = __toESM(require_react());
var import_react10 = __toESM(require_react());
var O2 = (e) => {
let { devtoolsUrl: a } = import_react4.default.useContext(O), [p2, s2] = import_react4.default.useState([]);
import_react4.default.useEffect(() => {
e && fetch(`${a ?? "http://localhost:5001"}/api/unique-trace-items`).then((r) => r.json().then((i2) => s2(i2.data)));
}, [e, a]);
let [l2, t] = import_react4.default.useState({ stateNode: null, nameFiber: null }), [n, h] = import_react4.default.useState({ stateNode: null, nameFiber: null, derived: false });
import_react4.default.useEffect(() => e ? () => {
t({ stateNode: null, nameFiber: null }), h({ stateNode: null, nameFiber: null, derived: false });
} : () => 0, [e]);
let w = import_react4.default.useCallback((r) => {
let i2 = r, d2, x, C = false;
for (; !C && i2; )
d2 = o(i2), x = s(d2), C = p2.includes(i(d2) ?? ""), C || (i2 = l(i2));
return x && d2 ? { stateNode: x, nameFiber: d2 } : { stateNode: null, nameFiber: null };
}, [p2]), v = import_react4.default.useCallback((r) => {
let i2 = F(r);
t(w(i2));
}, [p2]);
import_react4.default.useEffect(() => {
(n.stateNode !== l2.stateNode || n.nameFiber !== l2.nameFiber) && h({ stateNode: l2.stateNode, nameFiber: l2.nameFiber, derived: false });
}, [l2]);
let m = import_react4.default.useRef({ rect: { width: 0, height: 0, x: 0, y: 0 }, name: "" }), { rect: o2, name: c } = import_react4.default.useMemo(() => {
var r;
if (!e)
return { rect: { width: 0, height: 0, x: 0, y: 0 }, name: "" };
if (n.stateNode || n.nameFiber) {
let i2 = n.stateNode ? p(n.stateNode) : null, d2 = n.nameFiber ? i(n.nameFiber) : null;
if (!i2)
return { rect: m.current.rect, name: d2 ?? m.current.name };
let x = (r = i2.getBoundingClientRect) == null ? void 0 : r.call(i2);
return x ? { rect: { width: x.width, height: x.height, x: x.left, y: x.top }, name: d2 ?? m.current.name } : { rect: m.current.rect, name: d2 ?? m.current.name };
}
return m.current;
}, [n, e]);
return m.current = { rect: o2, name: c }, import_react4.default.useEffect(() => {
if (e) {
let r = (i2) => {
if (i2.key === "Shift" && n.stateNode) {
i2.stopPropagation(), i2.preventDefault();
let d2 = l(n.nameFiber), x = w(d2);
if (x.nameFiber && x.stateNode) {
h({ ...x, derived: true });
return;
}
}
};
return document.addEventListener("keydown", r), () => document.removeEventListener("keydown", r);
}
return () => 0;
}, [n, e]), import_react4.default.useEffect(() => {
if (e) {
let r = null, i2 = (0, import_debounce.default)((d2) => {
if (d2 != null && d2.target) {
if (r === d2.target)
return;
v(d2.target), r = d2.target;
}
}, 50);
return document.addEventListener("mousemove", i2), () => document.removeEventListener("mousemove", i2);
}
return () => 0;
}, [e, v]), { rect: o2, name: c };
};
var z = (e) => y.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", ...e }, y.createElement("path", { fill: "#303450", stroke: "url(#arrow-union-icon)", d: "M.5 8.495V15.5h15V8.495a4.5 4.5 0 0 1-3.816-2.483L9.341 1.33c-.553-1.105-2.13-1.105-2.683 0L4.317 6.012A4.5 4.5 0 0 1 .5 8.495Z" }), y.createElement("defs", null, y.createElement("linearGradient", { id: "arrow-union-icon", x1: 8, x2: 8, y1: 0, y2: 10, gradientUnits: "userSpaceOnUse" }, y.createElement("stop", { stopColor: "#474E6B" }), y.createElement("stop", { offset: 0.9, stopColor: "#474E6B" }), y.createElement("stop", { offset: 0.901, stopColor: "#474E6B", stopOpacity: 0 }))));
var W = 38;
var Z = 7;
var A = ({ width: e, height: a, x: p2, y: s2, name: l2 }) => {
let t = s2 > W ? "top" : a > 3 * W ? "inset" : "bottom", n = p2 > Z && s2 > Z ? "outside" : "inside";
return import_react5.default.createElement("div", { id: "selector-box", style: { pointerEvents: "none", position: "fixed", opacity: l2 ? 1 : 0, transitionProperty: "width, height, transform, opacity", transitionDuration: "0.15s", transitionTimingFunction: "ease-out", border: "1.5px solid #47EBEB", borderRadius: "4px", background: "rgba(37,160,160, 0.25)", backdropFilter: "sepia(30%) hue-rotate(180deg)", zIndex: 99998, ...n === "outside" ? { left: -6, top: -6, width: e + 10, height: a + 10, transform: `translate(${p2}px, ${s2}px)` } : { left: 0, top: 0, width: e - 10, height: a - 20, transform: `translate(${p2 + 4}px, ${s2 + 4}px)` } } }, import_react5.default.createElement("div", { style: { position: "absolute", left: "-1.5px", background: "#303450", border: "1px solid #474E6B", borderRadius: "4px", padding: "8px 12px", fontSize: "12px", lineHeight: "16px", fontWeight: 400, color: "#ffffff", display: l2 ? "block" : "none", ...t === "top" && { top: "-38px" }, ...t === "bottom" && { bottom: "-38px" }, ...t === "inset" && { top: "4px", left: "8px" } } }, l2, import_react5.default.createElement(z, { style: { position: "absolute", left: "30%", ...t === "top" && { transform: "translateX(-50%) rotate(180deg)", bottom: "-9px" }, ...t === "bottom" && { transform: "translateX(-50%) ", top: "-9px" }, ...t === "inset" && { transform: "translateX(-50%) rotate(-90deg)", top: "8px", left: "-1px" }, display: l2 ? "block" : "none" } })));
};
var G = ({ active: e }) => import_react6.default.createElement("div", { style: { color: "white", pointerEvents: "none", position: "absolute", left: "calc(-50% - 144px - 14px)", top: "-36px", width: "max-content", borderRadius: "8px", backgroundColor: "#40414A", opacity: e ? 1 : 0, transitionDuration: "0.2s", transitionProperty: "transform,opacity", transitionTimingFunction: "ease-in-out", padding: "8px", fontSize: "12px", lineHeight: "12px", fontWeight: 400, textShadow: "0 0 2px #1D1E30, 1px 0 2px #1D1E30, -1px 0 2px #1D1E30, 0 1px 2px #1D1E30, 0 -1px 2px #1D1E30" } }, import_react6.default.createElement("kbd", { style: { marginLeft: "4px", padding: "2px 4px", borderRadius: "2px", background: "#1D1E30", color: "#CFD7E2", border: "none", textShadow: "none" } }, "shift"), " ", "to move to parent.", import_react6.default.createElement("kbd", { style: { marginLeft: "4px", padding: "2px 4px", borderRadius: "2px", background: "#1D1E30", color: "#CFD7E2", border: "none", textShadow: "none" } }, "space"), " ", "to highlight in monitor.");
var R = ({ onSelectorOpen: e, onHighlight: a, icon: p2, style: s2 }) => {
let [l2, t] = import_react3.default.useState(false), [n, h] = import_react3.default.useState(false), { rect: w, name: v } = O2(n), [m, o2] = import_react3.default.useState(null);
return import_react3.default.useEffect(() => {
if (!m) {
let c = document.createElement("div");
c.id = "selector-box-root", document.body.appendChild(c), o2(c);
}
}, []), import_react3.default.useEffect(() => {
n ? document.body.style.cursor = "crosshair" : document.body.style.cursor = "default";
}, [n]), import_react3.default.useEffect(() => {
let c = (r) => {
n && v && (r == null || r.preventDefault(), r == null || r.stopPropagation(), r.stopImmediatePropagation(), a(v), h(false));
};
return n ? (document.addEventListener("click", c, { capture: true }), () => {
document.removeEventListener("click", c, { capture: true });
}) : () => 0;
}, [v, a, n]), import_react3.default.useEffect(() => {
n && e();
}, [n, e]), import_react3.default.createElement("div", { style: s2 }, import_react3.default.createElement("div", { role: "button", title: "Element Selector", onMouseOver: () => t(true), onMouseOut: () => t(false), onClick: (c) => {
var r;
c.preventDefault(), c.stopPropagation(), (r = document == null ? void 0 : document.activeElement) == null || r.blur(), h((i2) => !i2);
}, style: { padding: 0, margin: 0, height: "100%", width: "100%", transform: l2 ? "rotate(180deg)" : "rotate(0deg)", transition: "transform 0.2s ease-in-out" } }, p2), import_react3.default.createElement(G, { active: n }), n && m && (0, import_react_dom.createPortal)(import_react3.default.createElement(A, { ...w, name: v }), m));
};
var X = (e) => S.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: 157, height: 25, viewBox: "0 0 157 25", fill: "none", ...e }, S.createElement("g", null, S.createElement("path", { fill: "#1D1E30", d: "M17 1h123v24H17z" }), S.createElement("path", { fill: "#1D1E30", d: "M6.265 9.205A12 12 0 0 1 17.649 1H25v24H1L6.265 9.205ZM150.735 9.205A12 12 0 0 0 139.351 1H132v24h24l-5.265-15.795Z" }), S.createElement("path", { fill: "currentColor", d: "M25 14.333A1.333 1.333 0 1 1 25 17a1.333 1.333 0 0 1 0-2.667Z" }), S.createElement("path", { fill: "currentColor", fillRule: "evenodd", d: "M23.211 20.578a4 4 0 0 0 3.578 0l4-2A4 4 0 0 0 33 15v-4a4 4 0 0 0-2.211-3.578l-4-2a4 4 0 0 0-3.578 0l-4 2A4 4 0 0 0 17 11v4a4 4 0 0 0 2.211 3.578l4 2Zm-.878-4.911a2.667 2.667 0 0 0 5.334 0v-5.334a2.667 2.667 0 0 0-5.334 0v5.334Z", clipRule: "evenodd" }), S.createElement("path", { fill: "#CFD7E2", d: "M42.152 17a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h4.2c.288 0 .56.056.816.168a2.135 2.135 0 0 1 1.14 1.128c.112.256.168.532.168.828v3.984c0 .296-.056.572-.168.828a2.135 2.135 0 0 1-1.14 1.128 2.014 2.014 0 0 1-.816.168h-4.2Zm1.38-1.644h2.82a.455.455 0 0 0 .336-.132.497.497 0 0 0 .132-.348v-3.984a.455.455 0 0 0-.132-.336.436.436 0 0 0-.336-.144h-2.82v4.944Zm13.18-5.196a.244.244 0 0 1-.253.252h-4.44v1.656h4.02c.072 0 .132.024.18.072a.227.227 0 0 1 .084.18v1.128a.264.264 0 0 1-.084.192.244.244 0 0 1-.18.072h-4.02v1.644h4.44c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.116a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072h-5.832a.244.244 0 0 1-.18-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.227.227 0 0 1 .18-.084h5.832c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.128ZM63.014 17h-2.232a.387.387 0 0 1-.216-.072.356.356 0 0 1-.144-.168l-1.716-4.296a.853.853 0 0 1-.072-.24 1.783 1.783 0 0 1-.024-.264V9.032c0-.072.024-.132.072-.18a.227.227 0 0 1 .18-.084h1.128c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v2.616c0 .072.008.156.024.252s.04.176.072.24l1.284 3.216h.528l1.284-3.216a.853.853 0 0 0 .072-.24c.016-.096.024-.18.024-.252V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.128c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v2.928c0 .072-.008.16-.024.264a.853.853 0 0 1-.072.24l-1.716 4.296a.356.356 0 0 1-.144.168.387.387 0 0 1-.216.072ZM73.29 8.768c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v1.128a.227.227 0 0 1-.084.18.244.244 0 0 1-.18.072h-2.208v6.324a.264.264 0 0 1-.084.192.244.244 0 0 1-.18.072H69.69a.244.244 0 0 1-.18-.072.287.287 0 0 1-.072-.192v-6.324H67.23a.287.287 0 0 1-.192-.072.244.244 0 0 1-.072-.18V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h6.06Zm6.507.012c.296 0 .572.056.828.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v3.996c0 .288-.056.56-.168.816a2.171 2.171 0 0 1-1.128 1.128 2.043 2.043 0 0 1-.828.168h-2.34c-.296 0-.572-.056-.828-.168a2.171 2.171 0 0 1-1.128-1.128 2.014 2.014 0 0 1-.168-.816v-3.996c0-.288.056-.56.168-.816a2.171 2.171 0 0 1 1.128-1.128c.256-.112.532-.168.828-.168h2.34Zm.48 2.112a.436.436 0 0 0-.144-.336.455.455 0 0 0-.336-.132h-2.34a.497.497 0 0 0-.348.132.455.455 0 0 0-.132.336v3.996c0 .136.044.248.132.336a.497.497 0 0 0 .348.132h2.34a.455.455 0 0 0 .336-.132.436.436 0 0 0 .144-.336v-3.996Zm7.888-2.112c.295 0 .572.056.828.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v3.996c0 .288-.056.56-.168.816a2.171 2.171 0 0 1-1.128 1.128 2.043 2.043 0 0 1-.828.168h-2.34c-.297 0-.573-.056-.829-.168a2.171 2.171 0 0 1-1.127-1.128 2.014 2.014 0 0 1-.168-.816v-3.996c0-.288.056-.56.168-.816a2.171 2.171 0 0 1 1.127-1.128c.257-.112.532-.168.829-.168h2.34Zm.48 2.112a.436.436 0 0 0-.144-.336.455.455 0 0 0-.337-.132h-2.34a.497.497 0 0 0-.347.132.455.455 0 0 0-.133.336v3.996c0 .136.044.248.133.336a.497.497 0 0 0 .347.132h2.34a.455.455 0 0 0 .337-.132.436.436 0 0 0 .143-.336v-3.996ZM98.294 17H92.68a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192V9.032c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.116c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v6.324h4.236c.072 0 .132.028.18.084a.244.244 0 0 1 .072.18v1.116a.287.287 0 0 1-.072.192.244.244 0 0 1-.18.072Zm7.336-5.76a.287.287 0 0 1-.192-.072.287.287 0 0 1-.072-.192v-.084a.455.455 0 0 0-.132-.336.436.436 0 0 0-.336-.144h-2.352a.46.46 0 0 0-.336.144.455.455 0 0 0-.132.336v.696c0 .136.044.252.132.348a.482.482 0 0 0 .336.132h2.352c.288 0 .56.056.816.168a2.171 2.171 0 0 1 1.128 1.128c.112.256.168.528.168.816v.696c0 .296-.056.572-.168.828a2.171 2.171 0 0 1-1.128 1.128 2.014 2.014 0 0 1-.816.168h-2.352c-.288 0-.56-.056-.816-.168a2.171 2.171 0 0 1-1.128-1.128 2.043 2.043 0 0 1-.168-.828v-.084c0-.072.024-.132.072-.18a.264.264 0 0 1 .192-.084h1.116c.072 0 .132.028.18.084a.227.227 0 0 1 .084.18v.084c0 .136.044.252.132.348a.482.482 0 0 0 .336.132h2.352a.455.455 0 0 0 .336-.132.497.497 0 0 0 .132-.348v-.696a.455.455 0 0 0-.132-.336.455.455 0 0 0-.336-.132h-2.352c-.288 0-.56-.056-.816-.168a2.171 2.171 0 0 1-1.128-1.128 2.099 2.099 0 0 1-.168-.828v-.69Line truncated
var Y = (e) => import_react7.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", ...e }, import_react7.default.createElement("path", { fill: "#0FBDBD", fillRule: "evenodd", d: "M9 1a1 1 0 0 0-2 0v2.1A5.006 5.006 0 0 0 3.1 7H1a1 1 0 0 0 0 2h2.1A5.006 5.006 0 0 0 7 12.9V15a1 1 0 1 0 2 0v-2.1A5.006 5.006 0 0 0 12.9 9H15a1 1 0 1 0 0-2h-2.1A5.006 5.006 0 0 0 9 3.1V1Zm2 7a3 3 0 1 0-6 0 3 3 0 0 0 6 0Z", clipRule: "evenodd" }));
var U = ({ onClick: e, onSelectorHighlight: a, onSelectorOpen: p2 }) => {
let [s2, l2] = import_react2.default.useState(false);
return import_react2.default.createElement("div", { onMouseOver: () => l2(true), onMouseOut: () => l2(false), style: { position: "relative", userSelect: "none", WebkitUserSelect: "none", background: "none", border: "none", padding: 0, paddingRight: "1px", margin: 0, display: "flex", alignItems: "center", justifyContent: "center", cursor: "pointer", color: s2 ? "#0FBDBD" : "#6C7793", transition: "color 0.1s ease-in-out" }, onClick: e }, import_react2.default.createElement(X, null), import_react2.default.createElement(R, { style: { position: "absolute", top: 5, right: 18, width: "16px", height: "16px" }, icon: import_react2.default.createElement(Y, { width: 16, height: 16, style: { pointerEvents: "none" } }), onSelectorOpen: p2, onHighlight: a }));
};
var j = (e) => e ? "scaleX(1) translateY(0)" : "scaleX(0) translateY(25vw)";
var F2 = 50;
var f = 10;
var se = () => typeof window < "u" ? window.innerWidth * 0.7 : 1440 * 0.7;
var ae = () => typeof window < "u" ? window.innerHeight * 0.7 : 900 * 0.7;
var q = 640;
var K = 360;
var L2 = (e) => {
switch (e) {
case "left":
return { left: `calc(${F2}px + ${f}px)`, top: "50%", transform: "translateY(-50%)" };
case "right":
return { right: `calc(${F2}px + ${f}px)`, top: "50%", transform: "translateY(-50%)" };
case "top":
return { left: "50%", top: `calc(${F2}px + ${f}px)`, transform: "translateX(-50%)" };
case "bottom":
return { left: "50%", bottom: `calc(${F2}px + ${f}px)`, transform: "translateX(-50%)" };
}
};
var I = (e) => {
switch (e) {
case "left":
case "right":
return -f - F2 - f + (typeof window < "u" ? window.innerWidth : 1440) - f;
case "top":
case "bottom":
return -f + (typeof window < "u" ? window.innerWidth : 1440) - f;
}
};
var k = (e) => {
switch (e) {
case "left":
case "right":
return -f + (typeof window < "u" ? window.innerHeight : 900) - f;
case "top":
case "bottom":
return -f - F2 - f + (typeof window < "u" ? window.innerHeight : 900) - f;
}
};
var V = (e, a) => {
let p2 = { width: se(), height: ae() }, s2 = I(e), l2 = k(e), t = Math.min(s2, (a ?? p2).width), n = Math.min(l2, (a ?? p2).height);
return { width: t, height: n };
};
var P = (e) => {
let a = Math.round(e);
return a % 2 === 0 ? a : a + 1;
};
var H = (e) => import_react9.default.createElement("svg", { width: 10, height: 26, viewBox: "0 0 10 26", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...e }, import_react9.default.createElement("rect", { x: 0.5, y: 0.5, width: 9, height: 25, rx: 4.5, fill: "#1D1E30" }), import_react9.default.createElement("path", { d: "M7 5C7 6.10457 6.10457 7 5 7C3.89543 7 3 6.10457 3 5C3 3.89543 3.89543 3 5 3C6.10457 3 7 3.89543 7 5Z", fill: "#303450" }), import_react9.default.createElement("path", { d: "M7 13C7 14.1046 6.10457 15 5 15C3.89543 15 3 14.1046 3 13C3 11.8954 3.89543 11 5 11C6.10457 11 7 11.8954 7 13Z", fill: "#303450" }), import_react9.default.createElement("path", { d: "M7 21C7 22.1046 6.10457 23 5 23C3.89543 23 3 22.1046 3 21C3 19.8954 3.89543 19 5 19C6.10457 19 7 19.8954 7 21Z", fill: "#303450" }), import_react9.default.createElement("rect", { x: 0.5, y: 0.5, width: 9, height: 25, rx: 4.5, stroke: "#303450" }));
var J = ({ placement: e, visible: a, children: p2 }) => {
let [s2, l2] = import_react8.default.useState(false), [t, n] = import_react8.default.useState(null), [h, w] = import_react8.default.useState(null), [v, m] = import_react8.default.useState(() => {
let o2 = V(e);
return { width: P(o2.width), height: P(o2.height) };
});
return import_react8.default.useEffect(() => {
let o2 = () => {
m((c) => {
let r = V(e, c);
return { width: P(r.width), height: P(r.height) };
});
};
return o2(), window.addEventListener("resize", o2), () => {
window.removeEventListener("resize", o2);
};
}, [e]), import_react8.default.useEffect(() => {
let o2 = () => {
n(null);
};
if (t !== null)
return window.addEventListener("mouseup", o2), () => {
window.removeEventListener("mouseup", o2);
};
}, [t]), import_react8.default.useEffect(() => {
let o2 = document.body.style.cursor;
return t != null && t.includes("x") ? document.body.style.cursor = "col-resize" : t != null && t.includes("y") && (document.body.style.cursor = "row-resize"), () => {
document.body.style.cursor = o2;
};
}, [t]), import_react8.default.useEffect(() => {
let o2 = (c) => {
if ((t == null ? void 0 : t[1]) === "x") {
let r = c.clientX - ((h == null ? void 0 : h.x) ?? c.clientX), i2 = v.width + (t === "lx" ? -r : r) * 2;
m((d2) => ({ ...d2, width: P(Math.min(I(e), Math.max(q, i2))) }));
} else if ((t == null ? void 0 : t[1]) === "y") {
let r = c.clientY - ((h == null ? void 0 : h.y) ?? c.clientY), i2 = v.height + (t === "ty" ? -r : r) * 1;
m((d2) => ({ ...d2, height: P(Math.min(k(e), Math.max(K, i2))) }));
}
};
if (t !== null)
return window.addEventListener("mousemove", o2), () => {
window.removeEventListener("mousemove", o2);
};
}, [t, e]), import_react8.default.createElement("div", { style: { position: "absolute", borderRadius: "8px", boxShadow: "0 0 10px rgba(0, 0, 0, 0.5)", border: "1px solid rgba(0, 0, 0, 0.5)", transitionProperty: "transform, opacity", transitionTimingFunction: "ease-in-out", transitionDuration: "0.2s", ...L2(e), opacity: a ? 1 : 0, transform: `${L2(e).transform} ${j(a ?? false)}`, ...v }, onMouseEnter: () => {
l2(true);
}, onMouseLeave: () => {
l2(false);
} }, p2({ resizing: t }), import_react8.default.createElement(import_react8.default.Fragment, null, import_react8.default.createElement("div", { style: { position: "absolute", left: 0, top: "50%", width: "10px", height: "26px", transform: "translateY(-13px) translateX(-5px)", cursor: "col-resize", transition: "opacity ease-in-out 0.2s", pointerEvents: s2 || t ? "auto" : "none", opacity: s2 || t ? 1 : 0 }, onMouseDown: (o2) => {
n("lx"), w({ x: o2.clientX, y: o2.clientY }), o2.preventDefault();
} }, import_react8.default.createElement(H, null)), import_react8.default.createElement("div", { style: { position: "absolute", right: 0, top: "50%", width: "10px", height: "26px", transform: "translateY(-13px) translateX(5px)", cursor: "col-resize", transition: "opacity ease-in-out 0.2s", pointerEvents: s2 || t ? "auto" : "none", opacity: s2 || t ? 1 : 0 }, onMouseDown: (o2) => {
n("rx"), w({ x: o2.clientX, y: o2.clientY }), o2.preventDefault();
} }, import_react8.default.createElement(H, null)), import_react8.default.createElement("div", { style: { position: "absolute", left: "50%", top: 0, width: "26px", height: "10px", transform: "translateY(-5px) translateX(-13px)", cursor: "row-resize", transition: "opacity ease-in-out 0.2s", pointerEvents: s2 || t ? "auto" : "none", opacity: s2 || t ? 1 : 0 }, onMouseDown: (o2) => {
n("ty"), w({ x: o2.clientX, y: o2.clientY }), o2.preventDefault();
} }, import_react8.default.createElement(H, { style: { transform: "rotate(90deg)", transformOrigin: "13px 13px" } })), import_react8.default.createElement("div", { style: { position: "absolute", left: "50%", bottom: 0, width: "26px", height: "10px", transform: "translateY(5px) translateX(-13px)", cursor: "row-resize", transition: "opacity ease-in-out 0.2s", pointerEvents: s2 || t ? "auto" : "none", opacity: s2 || t ? 1 : 0 }, onMouseDown: (o2) => {
n("by"), w({ x: o2.clientX, y: o2.clientY }), o2.preventDefault();
} }, import_react8.default.createElement(H, { style: { transform: "rotate(90deg)", transformOrigin: "13px 13px" } }))));
};
var ue = false ? () => null : () => {
let [e, a] = import_react.default.useState(false), [p2, s2] = import_react.default.useState(false), [l2] = import_react.default.useState("bottom"), { devtoolsUrl: t, ws: n } = import_react.default.useContext(O), [h, w] = import_react.default.useState(0), v = import_react.default.useCallback((o2) => {
n && d(n, T.DEVTOOLS_HIGHLIGHT_IN_MONITOR, { name: o2 }), s2(true);
}, [n]), m = import_react.default.useCallback(() => {
s2(false);
}, []);
return import_react.default.useEffect(() => {
typeof window < "u" && a(true);
}, []), import_react.default.useEffect(() => {
if (e) {
w(window.innerWidth);
let o2 = () => {
w(window.innerWidth);
};
return window.addEventListener("resize", o2), () => {
window.removeEventListener("resize", o2);
};
}
return () => {
};
}, [e]), e ? import_react.default.createElement("div", { style: { position: "fixed", left: `${Math.round(h / 2)}px`, transform: "translateX(-50%)", bottom: 0, zIndex: 99999 } }, import_react.default.createElement(U, { onClick: () => s2((o2) => !o2), onSelectorHighlight: v, onSelectorOpen: m }), import_react.default.createElement(J, { visible: p2, placement: l2 }, ({ resizing: o2 }) => import_react.default.createElement("iframe", { allow: "clipboard-write;", src: t, srcDoc: t ? void 0 : `
<html style="height:100%;padding:0;margin:0;">
<body style="display:flex;justify-content:center;height:100%;padding:24px;margin:0;align-items:center;box-sizing:border-box;">
<h1 style="font-family:ui-monospace,monospace;color:#CFD7E2;text-align:center;">Could not connect to the devtools server</h1>
</body>
</html>
`, style: { width: "100%", height: "100%", border: "none", borderRadius: "7px", pointerEvents: o2 ? "none" : "auto", background: "#14141F" } }))) : null;
};
var he = false ? ({ children: e }) => e : ({ children: e }) => import_react10.default.createElement(L, null, e);
export {
ue as DevtoolsPanel,
he as DevtoolsProvider
};
//# sourceMappingURL=@refinedev_devtools.js.map
ï?¸8æ;eô^‘eô^‘F¬O1gÕ�£}O^partitionKey=%28http%2Clocalhost%2C5173%29,:http://localhost:5173/node_modules/.vite/deps/@refinedev_devtools.js?v=e565559anecko:classified1strongly-framed1request-methodGETresponse-headHTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: max-age=31536000,immutable
Etag: W/"8952-WWEPFO/u/LAJxopdr6YiAMGixl4"
Date: Fri, 15 Mar 2024 14:37:23 GMT
Content-Length: 35154
original-response-headersAccess-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: max-age=31536000,immutable
Etag: W/"8952-WWEPFO/u/LAJxopdr6YiAMGixl4"
Date: Fri, 15 Mar 2024 14:37:23 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 35154
ctid2uncompressed-len0net-response-time-onstart40net-response-time-onstop41‰R
@@ -0,0 +1,187 @@
import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/pages/blog-posts/list.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=e565559a"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
import RefreshRuntime from "/@react-refresh";
const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
let prevRefreshReg;
let prevRefreshSig;
if (import.meta.hot && !inWebWorker) {
if (!window.__vite_plugin_react_preamble_installed__) {
throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201");
}
prevRefreshReg = window.$RefreshReg$;
prevRefreshSig = window.$RefreshSig$;
window.$RefreshReg$ = (type, id) => {
RefreshRuntime.register(type, "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx " + id);
};
window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
}
var _s = $RefreshSig$();
import { DataGrid } from "/node_modules/.vite/deps/@mui_x-data-grid.js?v=e565559a";
import { useMany } from "/node_modules/.vite/deps/@refinedev_core.js?v=e565559a";
import {
DateField,
DeleteButton,
EditButton,
List,
MarkdownField,
ShowButton,
useDataGrid
} from "/node_modules/.vite/deps/@refinedev_mui.js?v=e565559a";
import __vite__cjsImport6_react from "/node_modules/.vite/deps/react.js?v=e565559a"; const React = __vite__cjsImport6_react.__esModule ? __vite__cjsImport6_react.default : __vite__cjsImport6_react;
export const BlogPostList = () => {
_s();
const { dataGridProps } = useDataGrid({
syncWithLocation: true
});
const { data: categoryData, isLoading: categoryIsLoading } = useMany({
resource: "categories",
ids: dataGridProps?.rows?.map((item) => item?.category?.id).filter(Boolean) ?? [],
queryOptions: {
enabled: !!dataGridProps?.rows
}
});
const columns = React.useMemo(
() => [
{
field: "id",
headerName: "ID",
type: "number",
minWidth: 50
},
{
field: "title",
flex: 1,
headerName: "Title",
minWidth: 200
},
{
field: "content",
flex: 1,
headerName: "content",
minWidth: 250,
renderCell: function render({ value }) {
if (!value)
return "-";
return /* @__PURE__ */ jsxDEV(MarkdownField, { value: value?.slice(0, 80) + "..." || "" }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 51,
columnNumber: 16
}, this);
}
},
{
field: "category",
flex: 1,
headerName: "Category",
minWidth: 300,
valueGetter: ({ row }) => {
const value = row?.category;
return value;
},
renderCell: function render({ value }) {
return categoryIsLoading ? /* @__PURE__ */ jsxDEV(Fragment, { children: "Loading..." }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 65,
columnNumber: 9
}, this) : categoryData?.data?.find((item) => item.id === value?.id)?.title;
}
},
{
field: "status",
flex: 1,
headerName: "Status",
minWidth: 200
},
{
field: "createdAt",
flex: 1,
headerName: "Created at",
minWidth: 250,
renderCell: function render({ value }) {
return /* @__PURE__ */ jsxDEV(DateField, { value }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 83,
columnNumber: 16
}, this);
}
},
{
field: "actions",
headerName: "Actions",
sortable: false,
renderCell: function render({ row }) {
return /* @__PURE__ */ jsxDEV(Fragment, { children: [
/* @__PURE__ */ jsxDEV(EditButton, { hideText: true, recordItemId: row.id }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 93,
columnNumber: 15
}, this),
/* @__PURE__ */ jsxDEV(ShowButton, { hideText: true, recordItemId: row.id }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 94,
columnNumber: 15
}, this),
/* @__PURE__ */ jsxDEV(DeleteButton, { hideText: true, recordItemId: row.id }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 95,
columnNumber: 15
}, this)
] }, void 0, true, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 92,
columnNumber: 11
}, this);
},
align: "center",
headerAlign: "center",
minWidth: 80
}
],
[categoryData]
);
return /* @__PURE__ */ jsxDEV(List, { children: /* @__PURE__ */ jsxDEV(DataGrid, { ...dataGridProps, columns, autoHeight: true }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 109,
columnNumber: 7
}, this) }, void 0, false, {
fileName: "/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx",
lineNumber: 108,
columnNumber: 5
}, this);
};
_s(BlogPostList, "aQCn/xrlApWGn5DUNHsurmWDa7w=", false, function() {
return [useDataGrid, useMany];
});
_c = BlogPostList;
var _c;
$RefreshReg$(_c, "BlogPostList");
if (import.meta.hot && !inWebWorker) {
window.$RefreshReg$ = prevRefreshReg;
window.$RefreshSig$ = prevRefreshSig;
RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
RefreshRuntime.registerExportsForReactRefresh("/home/markus/git/vrpmdvweb/vrpmdvfrontend/src/pages/blog-posts/list.tsx", currentExports);
import.meta.hot.accept((nextExports) => {
if (!nextExports)
return;
const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(currentExports, nextExports);
if (invalidateMessage)
import.meta.hot.invalidate(invalidateMessage);
});
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBa0RpQixTQWNMLFVBZEs7MkJBbERqQjtBQUFtQkEsb0JBQWtCLDZCQUFrQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUN2RCxTQUFTQyxlQUFlO0FBQ3hCO0FBQUEsRUFDRUM7QUFBQUEsRUFDQUM7QUFBQUEsRUFDQUM7QUFBQUEsRUFDQUM7QUFBQUEsRUFDQUM7QUFBQUEsRUFDQUM7QUFBQUEsRUFDQUM7QUFBQUEsT0FDSztBQUNQLE9BQU9DLFdBQVc7QUFFWCxhQUFNQyxlQUFlQSxNQUFNO0FBQUFDLEtBQUE7QUFDaEMsUUFBTSxFQUFFQyxjQUFjLElBQUlKLFlBQVk7QUFBQSxJQUNwQ0ssa0JBQWtCO0FBQUEsRUFDcEIsQ0FBQztBQUVELFFBQU0sRUFBRUMsTUFBTUMsY0FBY0MsV0FBV0Msa0JBQWtCLElBQUloQixRQUFRO0FBQUEsSUFDbkVpQixVQUFVO0FBQUEsSUFDVkMsS0FDRVAsZUFBZVEsTUFDWEMsSUFBSSxDQUFDQyxTQUFjQSxNQUFNQyxVQUFVQyxFQUFFLEVBQ3RDQyxPQUFPQyxPQUFPLEtBQUs7QUFBQSxJQUN4QkMsY0FBYztBQUFBLE1BQ1pDLFNBQVMsQ0FBQyxDQUFDaEIsZUFBZVE7QUFBQUEsSUFDNUI7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNUyxVQUFVcEIsTUFBTXFCO0FBQUFBLElBQ3BCLE1BQU07QUFBQSxNQUNKO0FBQUEsUUFDRUMsT0FBTztBQUFBLFFBQ1BDLFlBQVk7QUFBQSxRQUNaQyxNQUFNO0FBQUEsUUFDTkMsVUFBVTtBQUFBLE1BQ1o7QUFBQSxNQUNBO0FBQUEsUUFDRUgsT0FBTztBQUFBLFFBQ1BJLE1BQU07QUFBQSxRQUNOSCxZQUFZO0FBQUEsUUFDWkUsVUFBVTtBQUFBLE1BQ1o7QUFBQSxNQUNBO0FBQUEsUUFDRUgsT0FBTztBQUFBLFFBQ1BJLE1BQU07QUFBQSxRQUNOSCxZQUFZO0FBQUEsUUFDWkUsVUFBVTtBQUFBLFFBQ1ZFLFlBQVksU0FBU0MsT0FBTyxFQUFFQyxNQUFNLEdBQUc7QUFDckMsY0FBSSxDQUFDQTtBQUFPLG1CQUFPO0FBQ25CLGlCQUFPLHVCQUFDLGlCQUFjLE9BQU9BLE9BQU9DLE1BQU0sR0FBRyxFQUFFLElBQUksU0FBUyxNQUFyRDtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUF3RDtBQUFBLFFBQ2pFO0FBQUEsTUFDRjtBQUFBLE1BQ0E7QUFBQSxRQUNFUixPQUFPO0FBQUEsUUFDUEksTUFBTTtBQUFBLFFBQ05ILFlBQVk7QUFBQSxRQUNaRSxVQUFVO0FBQUEsUUFDVk0sYUFBYUEsQ0FBQyxFQUFFQyxJQUFJLE1BQU07QUFDeEIsZ0JBQU1ILFFBQVFHLEtBQUtsQjtBQUNuQixpQkFBT2U7QUFBQUEsUUFDVDtBQUFBLFFBQ0FGLFlBQVksU0FBU0MsT0FBTyxFQUFFQyxNQUFNLEdBQUc7QUFDckMsaUJBQU9yQixvQkFDTCxtQ0FBRSwwQkFBRjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFZLElBRVpGLGNBQWNELE1BQU00QixLQUFLLENBQUNwQixTQUFTQSxLQUFLRSxPQUFPYyxPQUFPZCxFQUFFLEdBQUdtQjtBQUFBQSxRQUUvRDtBQUFBLE1BQ0Y7QUFBQSxNQUNBO0FBQUEsUUFDRVosT0FBTztBQUFBLFFBQ1BJLE1BQU07QUFBQSxRQUNOSCxZQUFZO0FBQUEsUUFDWkUsVUFBVTtBQUFBLE1BQ1o7QUFBQSxNQUNBO0FBQUEsUUFDRUgsT0FBTztBQUFBLFFBQ1BJLE1BQU07QUFBQSxRQUNOSCxZQUFZO0FBQUEsUUFDWkUsVUFBVTtBQUFBLFFBQ1ZFLFlBQVksU0FBU0MsT0FBTyxFQUFFQyxNQUFNLEdBQUc7QUFDckMsaUJBQU8sdUJBQUMsYUFBVSxTQUFYO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBQXdCO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLFFBQ0VQLE9BQU87QUFBQSxRQUNQQyxZQUFZO0FBQUEsUUFDWlksVUFBVTtBQUFBLFFBQ1ZSLFlBQVksU0FBU0MsT0FBTyxFQUFFSSxJQUFJLEdBQUc7QUFDbkMsaUJBQ0UsbUNBQ0U7QUFBQSxtQ0FBQyxjQUFXLFVBQVEsTUFBQyxjQUFjQSxJQUFJakIsTUFBdkM7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBMEM7QUFBQSxZQUMxQyx1QkFBQyxjQUFXLFVBQVEsTUFBQyxjQUFjaUIsSUFBSWpCLE1BQXZDO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQTBDO0FBQUEsWUFDMUMsdUJBQUMsZ0JBQWEsVUFBUSxNQUFDLGNBQWNpQixJQUFJakIsTUFBekM7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBNEM7QUFBQSxlQUg5QztBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUlBO0FBQUEsUUFFSjtBQUFBLFFBQ0FxQixPQUFPO0FBQUEsUUFDUEMsYUFBYTtBQUFBLFFBQ2JaLFVBQVU7QUFBQSxNQUNaO0FBQUEsSUFBQztBQUFBLElBRUgsQ0FBQ25CLFlBQVk7QUFBQSxFQUNmO0FBRUEsU0FDRSx1QkFBQyxRQUNDLGlDQUFDLFlBQVMsR0FBSUgsZUFBZSxTQUFrQixZQUFVLFFBQXpEO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBeUQsS0FEM0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUVBO0FBRUo7QUFBRUQsR0FsR1dELGNBQVk7QUFBQSxVQUNHRixhQUltQ1AsT0FBTztBQUFBO0FBQUE4QyxLQUx6RHJDO0FBQVksSUFBQXFDO0FBQUFDLGFBQUFELElBQUEiLCJuYW1lcyI6WyJHcmlkQ29sRGVmIiwidXNlTWFueSIsIkRhdGVGaWVsZCIsIkRlbGV0ZUJ1dHRvbiIsIkVkaXRCdXR0b24iLCJMaXN0IiwiTWFya2Rvd25GaWVsZCIsIlNob3dCdXR0b24iLCJ1c2VEYXRhR3JpZCIsIlJlYWN0IiwiQmxvZ1Bvc3RMaXN0IiwiX3MiLCJkYXRhR3JpZFByb3BzIiwic3luY1dpdGhMb2NhdGlvbiIsImRhdGEiLCJjYXRlZ29yeURhdGEiLCJpc0xvYWRpbmciLCJjYXRlZ29yeUlzTG9hZGluZyIsInJlc291cmNlIiwiaWRzIiwicm93cyIsIm1hcCIsIml0ZW0iLCJjYXRlZ29yeSIsImlkIiwiZmlsdGVyIiwiQm9vbGVhbiIsInF1ZXJ5T3B0aW9ucyIsImVuYWJsZWQiLCJjb2x1bW5zIiwidXNlTWVtbyIsImZpZWxkIiwiaGVhZGVyTmFtZSIsInR5cGUiLCJtaW5XaWR0aCIsImZsZXgiLCJyZW5kZXJDZWxsIiwicmVuZGVyIiwidmFsdWUiLCJzbGljZSIsInZhbHVlR2V0dGVyIiwicm93IiwiZmluZCIsInRpdGxlIiwic29ydGFibGUiLCJhbGlnbiIsImhlYWRlckFsaWduIiwiX2MiLCIkUmVmcmVzaFJlZyQiXSwic291cmNlcyI6WyJsaXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhR3JpZCwgR3JpZENvbERlZiB9IGZyb20gXCJAbXVpL3gtZGF0YS1ncmlkXCI7XG5pbXBvcnQgeyB1c2VNYW55IH0gZnJvbSBcIkByZWZpbmVkZXYvY29yZVwiO1xuaW1wb3J0IHtcbiAgRGF0ZUZpZWxkLFxuICBEZWxldGVCdXR0b24sXG4gIEVkaXRCdXR0b24sXG4gIExpc3QsXG4gIE1hcmtkb3duRmllbGQsXG4gIFNob3dCdXR0b24sXG4gIHVzZURhdGFHcmlkLFxufSBmcm9tIFwiQHJlZmluZWRldi9tdWlcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNvbnN0IEJsb2dQb3N0TGlzdCA9ICgpID0+IHtcbiAgY29uc3QgeyBkYXRhR3JpZFByb3BzIH0gPSB1c2VEYXRhR3JpZCh7XG4gICAgc3luY1dpdGhMb2NhdGlvbjogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3QgeyBkYXRhOiBjYXRlZ29yeURhdGEsIGlzTG9hZGluZzogY2F0ZWdvcnlJc0xvYWRpbmcgfSA9IHVzZU1hbnkoe1xuICAgIHJlc291cmNlOiBcImNhdGVnb3JpZXNcIixcbiAgICBpZHM6XG4gICAgICBkYXRhR3JpZFByb3BzPy5yb3dzXG4gICAgICAgID8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNhdGVnb3J5Py5pZClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKSA/PyBbXSxcbiAgICBxdWVyeU9wdGlvbnM6IHtcbiAgICAgIGVuYWJsZWQ6ICEhZGF0YUdyaWRQcm9wcz8ucm93cyxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBjb2x1bW5zILine truncated
Content-Type: application/javascript
Cache-Control: no-cache
Etag: W/"1a42-3gUU8YZ24/UHCXMfqk5p0qKqk3o"
Content-Length: 14621
Access-Control-Allow-Origin: *
Date: Fri, 15 Mar 2024 14:43:29 GMT
original-response-headersAccess-Control-Allow-Origin: *
Content-Type: application/javascript
Cache-Control: no-cache
Etag: W/"1a42-3gUU8YZ24/UHCXMfqk5p0qKqk3o"
Date: Fri, 15 Mar 2024 14:37:23 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 14621
ctid2uncompressed-len0net-response-time-onstart25net-response-time-onstop259
@@ -0,0 +1,16 @@
{"version":3,"sources":["../../strict-uri-encode/index.js","../../decode-uri-component/index.js","../../split-on-first/index.js","../../filter-obj/index.js","../../query-string/index.js"],"sourcesContent":["'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn resulLine truncated
Access-Control-Allow-Origin: *
Content-Type: application/json
Cache-Control: no-cache
Etag: W/"6ec9-/bJztuul2Bo2X/e8xapCBEgr2f8"
Date: Fri, 15 Mar 2024 16:01:57 GMT
Content-Length: 28361
original-response-headersAccess-Control-Allow-Origin: *
Content-Type: application/json
Cache-Control: no-cache
Etag: W/"6ec9-/bJztuul2Bo2X/e8xapCBEgr2f8"
Date: Fri, 15 Mar 2024 16:01:57 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 28361
ctid1net-response-time-onstart170net-response-time-onstop186nÉ
Loaded 100 of 1948 files, more files were not shown because too many files have changed in this diff. Show more