@allma/admin-shell
Version:
The web-based administration panel for the Allma platform.
1,298 lines (1,268 loc) • 614 kB
JavaScript
'use client'
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
// ../../node_modules/@babel/runtime/helpers/extends.js
var require_extends = __commonJS({
"../../node_modules/@babel/runtime/helpers/extends.js"(exports, module) {
"use strict";
function _extends23() {
return module.exports = _extends23 = Object.assign ? Object.assign.bind() : function(n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends23.apply(null, arguments);
}
module.exports = _extends23, module.exports.__esModule = true, module.exports["default"] = module.exports;
}
});
// ../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js
var require_objectWithoutPropertiesLoose = __commonJS({
"../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js"(exports, module) {
"use strict";
function _objectWithoutPropertiesLoose12(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (-1 !== e.indexOf(n)) continue;
t[n] = r[n];
}
return t;
}
module.exports = _objectWithoutPropertiesLoose12, module.exports.__esModule = true, module.exports["default"] = module.exports;
}
});
// ../../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js
var require_objectDestructuringEmpty = __commonJS({
"../../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js"(exports, module) {
"use strict";
function _objectDestructuringEmpty2(t) {
if (null == t) throw new TypeError("Cannot destructure " + t);
}
module.exports = _objectDestructuringEmpty2, module.exports.__esModule = true, module.exports["default"] = module.exports;
}
});
// src/createAllmaAdminApp.tsx
import React14 from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import { MantineProvider } from "@mantine/core";
import { Notifications } from "@mantine/notifications";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { ModalsProvider } from "@mantine/modals";
import { Amplify } from "aws-amplify";
import "@aws-amplify/ui-react/styles.css";
import "@mantine/core/styles.css";
import "@mantine/notifications/styles.css";
import { Authenticator as Authenticator2 } from "@aws-amplify/ui-react";
// src/AuthenticatedApp.tsx
import { useRoutes, Navigate } from "react-router-dom";
import { Container as Container3, Paper as Paper20, Title as Title14, Button as Button25, Loader as Loader6, Group as Group39, Text as Text44 } from "@mantine/core";
import { IconAlertCircle as IconAlertCircle15, IconGauge as IconGauge2, IconListDetails as IconListDetails2, IconActivity as IconActivity2, IconPrompt as IconPrompt2, IconTemplate as IconTemplate3, IconPlugConnected as IconPlugConnected3 } from "@tabler/icons-react";
import { useAuthenticator as useAuthenticator2, Authenticator } from "@aws-amplify/ui-react";
import { ADMIN_COGNITO_GROUP_NAME } from "@allma/core-sdk";
// src/hooks/useAdminAuth.ts
import { useQuery } from "@tanstack/react-query";
import { fetchAuthSession } from "aws-amplify/auth";
import {
AdminUserPermissionsSchema,
getDefaultPermissionsForRole
} from "@allma/core-types";
import { CUSTOM_ADMIN_ROLES_ATTRIBUTE } from "@allma/core-sdk";
async function fetchAuthContext() {
try {
const session = await fetchAuthSession();
const idToken = session.tokens?.idToken;
if (!idToken) {
throw new Error("Not authenticated. No ID token found.");
}
const claims = idToken.payload;
const cognitoGroups = claims["cognito:groups"] || [];
const customRolesString = claims[CUSTOM_ADMIN_ROLES_ATTRIBUTE];
let roles = [];
let explicitPermissions = [];
if (customRolesString) {
try {
const parsed = JSON.parse(customRolesString);
const validationResult = AdminUserPermissionsSchema.safeParse(parsed);
if (validationResult.success) {
roles = validationResult.data.roles ?? [];
explicitPermissions = validationResult.data.permissions ?? [];
} else {
console.warn("Could not parse custom:admin_roles attribute", validationResult.error);
}
} catch (e) {
console.error("Failed to JSON.parse custom:admin_roles attribute", e);
}
}
const effectivePermissions = new Set(explicitPermissions);
roles.forEach((role) => {
getDefaultPermissionsForRole(role).forEach((p) => effectivePermissions.add(p));
});
const isSuperAdmin = roles.includes("SUPER_ADMIN");
return {
userId: claims.sub,
username: claims.email || claims.username,
cognitoGroups,
roles,
permissions: Array.from(effectivePermissions),
hasPermission: (permission) => isSuperAdmin || effectivePermissions.has(permission)
};
} catch (err) {
console.error("Error fetching auth context:", err);
throw new Error(err.message || "Failed to fetch user session.");
}
}
function useAdminAuth() {
const { data, isLoading, error, isError } = useQuery({
queryKey: ["adminAuthContext"],
queryFn: fetchAuthContext,
staleTime: 1e3 * 60 * 5,
// Cache for 5 minutes
retry: false
// Don't retry on auth errors
});
return {
authContext: data,
isLoading,
error,
isError
};
}
// src/features/layout/AdminLayout.tsx
import { useState, useEffect } from "react";
import { Link, useLocation } from "react-router-dom";
import { AppShell, Burger, Group, NavLink, ScrollArea, Title, Text, ActionIcon, useMantineColorScheme, Tooltip, Stack, Image } from "@mantine/core";
import { IconLogout, IconSun, IconMoon, IconLayoutSidebarLeftCollapse, IconLayoutSidebarRightExpand } from "@tabler/icons-react";
import { useAuthenticator } from "@aws-amplify/ui-react";
import { useLocalStorage } from "@mantine/hooks";
// assets/powered-by-logo.png
var powered_by_logo_default = "data:image/png;base64,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";
// src/features/layout/AdminLayout.tsx
import { jsx, jsxs } from "react/jsx-runtime";
function AdminLayout({ navItems, children }) {
const [opened, setOpened] = useState(false);
const [navbarCollapsed, setNavbarCollapsed] = useLocalStorage({
key: "allma-admin-navbar-collapsed",
defaultValue: false
});
const location = useLocation();
const { signOut, user } = useAuthenticator();
const { authContext } = useAdminAuth();
const { colorScheme, setColorScheme } = useMantineColorScheme();
const [appTitle, setAppTitle] = useState("ALLMA Admin");
useEffect(() => {
if (document.title && document.title.trim().length > 0) {
setAppTitle(document.title);
}
}, []);
return /* @__PURE__ */ jsxs(
AppShell,
{
padding: "md",
navbar: {
width: navbarCollapsed ? 60 : 220,
breakpoint: "sm",
collapsed: { mobile: !opened }
},
header: { height: 60 },
children: [
/* @__PURE__ */ jsx(AppShell.Header, { children: /* @__PURE__ */ jsxs(Group, { h: "100%", px: "md", justify: "space-between", children: [
/* @__PURE__ */ jsxs(Group, { children: [
/* @__PURE__ */ jsx(Burger, { opened, onClick: () => setOpened((o) => !o), hiddenFrom: "sm", size: "sm" }),
/* @__PURE__ */ jsx(
ActionIcon,
{
onClick: () => setNavbarCollapsed((c) => !c),
variant: "default",
size: "lg",
visibleFrom: "sm",
"aria-label": navbarCollapsed ? "Expand sidebar" : "Collapse sidebar",
children: navbarCollapsed ? /* @__PURE__ */ jsx(IconLayoutSidebarRightExpand, {}) : /* @__PURE__ */ jsx(IconLayoutSidebarLeftCollapse, {})
}
),
/* @__PURE__ */ jsx(Title, { order: 3, children: appTitle })
] }),
/* @__PURE__ */ jsxs(Group, { children: [
/* @__PURE__ */ jsx(Text, { size: "sm", children: user?.signInDetails?.loginId }),
/* @__PURE__ */ jsx(ActionIcon, { onClick: () => setColorScheme(colorScheme === "dark" ? "light" : "dark"), variant: "default", "aria-label": "Toggle color scheme", children: colorScheme === "dark" ? /* @__PURE__ */ jsx(IconSun, { size: "1rem" }) : /* @__PURE__ */ jsx(IconMoon, { size: "1rem" }) }),
/* @__PURE__ */ jsx(ActionIcon, { onClick: () => signOut(), variant: "default", title: "Sign Out", children: /* @__PURE__ */ jsx(IconLogout, { size: "1rem" }) })
] })
] }) }),
/* @__PURE__ */ jsx(AppShell.Navbar, { p: navbarCollapsed ? "xs" : "md", children: /* @__PURE__ */ jsx(ScrollArea, { children: /* @__PURE__ */ jsx(Stack, { gap: "xs", children: navItems.map((link) => {
const Icon = link.icon;
const navLinkComponent = /* @__PURE__ */ jsx(
NavLink,
{
label: !navbarCollapsed ? link.label : void 0,
leftSection: Icon ? /* @__PURE__ */ jsx(Icon, { size: 16 }) : void 0,
component: Link,
to: link.path,
onClick: () => setOpened(false),
active: location.pathname.startsWith(link.path)
},
link.path
);
if (navbarCollapsed) {
return /* @__PURE__ */ jsx(
Tooltip,
{
label: link.label,
position: "right",
withArrow: true,
children: navLinkComponent
},
link.path
);
}
return navLinkComponent;
}) }) }) }),
/* @__PURE__ */ jsxs(AppShell.Main, { style: { display: "flex", flexDirection: "column", minHeight: "100vh" }, children: [
/* @__PURE__ */ jsx("div", { style: { flex: 1 }, children }),
/* @__PURE__ */ jsx(Group, { justify: "flex-end", mt: "xl", pt: "lg", pb: "sm", px: "md", children: /* @__PURE__ */ jsxs(
Group,
{
component: "a",
href: "https://allma.dev",
target: "_blank",
rel: "noopener noreferrer",
gap: "xs",
align: "center",
opacity: 0.6,
style: { textDecoration: "none", cursor: "pointer" },
children: [
/* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", fw: 500, children: "Powered by" }),
/* @__PURE__ */ jsx(
Image,
{
src: powered_by_logo_default,
h: 22,
w: "auto",
fit: "contain",
alt: "Logo"
}
)
]
}
) })
] })
]
}
);
}
// src/AuthenticatedApp.tsx
import { AdminPermission } from "@allma/core-types";
// src/features/dashboard/DashboardPage.tsx
import { SimpleGrid, Paper as Paper3, Title as Title3, Text as Text3, Group as Group4, Alert, useMantineTheme as useMantineTheme2, Table } from "@mantine/core";
// ../ui-components/dist/index.mjs
import { Paper, Title as Title2, Box, Group as Group2, Stack as Stack2, LoadingOverlay } from "@mantine/core";
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
import { useState as useState4, useEffect as useEffect6 } from "react";
import { useMantineColorScheme as useMantineColorScheme2, JsonInput, Group as Group22, ActionIcon as ActionIcon2, Tooltip as Tooltip2, Stack as Stack22, Paper as Paper2, Button, useMantineTheme, Code } from "@mantine/core";
import { IconPencil, IconDeviceFloppy, IconX } from "@tabler/icons-react";
// ../../node_modules/@uiw/react-json-view/esm/index.js
var import_extends22 = __toESM(require_extends());
var import_objectWithoutPropertiesLoose11 = __toESM(require_objectWithoutPropertiesLoose());
import { forwardRef as forwardRef2 } from "react";
// ../../node_modules/@uiw/react-json-view/esm/store.js
var import_extends7 = __toESM(require_extends());
import React3, { createContext as createContext6, useContext as useContext6, useEffect as useEffect2, useReducer as useReducer6 } from "react";
// ../../node_modules/@uiw/react-json-view/esm/store/ShowTools.js
var import_extends = __toESM(require_extends());
import { createContext, useContext, useReducer } from "react";
import { jsx as _jsx } from "react/jsx-runtime";
var initialState = {};
var Context = /* @__PURE__ */ createContext(initialState);
var reducer = (state, action) => (0, import_extends.default)({}, state, action);
var useShowToolsStore = () => {
return useContext(Context);
};
var DispatchShowTools = /* @__PURE__ */ createContext(() => {
});
DispatchShowTools.displayName = "JVR.DispatchShowTools";
function useShowTools() {
return useReducer(reducer, initialState);
}
function useShowToolsDispatch() {
return useContext(DispatchShowTools);
}
var ShowTools = (_ref) => {
var {
initial,
dispatch,
children
} = _ref;
return /* @__PURE__ */ _jsx(Context.Provider, {
value: initial,
children: /* @__PURE__ */ _jsx(DispatchShowTools.Provider, {
value: dispatch,
children
})
});
};
ShowTools.displayName = "JVR.ShowTools";
// ../../node_modules/@uiw/react-json-view/esm/store/Expands.js
var import_extends2 = __toESM(require_extends());
import { createContext as createContext2, useContext as useContext2, useReducer as useReducer2 } from "react";
import { jsx as _jsx2 } from "react/jsx-runtime";
var initialState2 = {};
var Context2 = /* @__PURE__ */ createContext2(initialState2);
var reducer2 = (state, action) => (0, import_extends2.default)({}, state, action);
var useExpandsStore = () => {
return useContext2(Context2);
};
var DispatchExpands = /* @__PURE__ */ createContext2(() => {
});
DispatchExpands.displayName = "JVR.DispatchExpands";
function useExpands() {
return useReducer2(reducer2, initialState2);
}
function useExpandsDispatch() {
return useContext2(DispatchExpands);
}
var Expands = (_ref) => {
var {
initial,
dispatch,
children
} = _ref;
return /* @__PURE__ */ _jsx2(Context2.Provider, {
value: initial,
children: /* @__PURE__ */ _jsx2(DispatchExpands.Provider, {
value: dispatch,
children
})
});
};
Expands.displayName = "JVR.Expands";
// ../../node_modules/@uiw/react-json-view/esm/store/Types.js
var import_extends3 = __toESM(require_extends());
import { createContext as createContext3, useContext as useContext3, useReducer as useReducer3 } from "react";
import { jsx as _jsx3 } from "react/jsx-runtime";
var initialState3 = {
Str: {
as: "span",
"data-type": "string",
style: {
color: "var(--w-rjv-type-string-color, #cb4b16)"
},
className: "w-rjv-type",
children: "string"
},
Url: {
as: "a",
style: {
color: "var(--w-rjv-type-url-color, #0969da)"
},
"data-type": "url",
className: "w-rjv-type",
children: "url"
},
Undefined: {
style: {
color: "var(--w-rjv-type-undefined-color, #586e75)"
},
as: "span",
"data-type": "undefined",
className: "w-rjv-type",
children: "undefined"
},
Null: {
style: {
color: "var(--w-rjv-type-null-color, #d33682)"
},
as: "span",
"data-type": "null",
className: "w-rjv-type",
children: "null"
},
Map: {
style: {
color: "var(--w-rjv-type-map-color, #268bd2)",
marginRight: 3
},
as: "span",
"data-type": "map",
className: "w-rjv-type",
children: "Map"
},
Nan: {
style: {
color: "var(--w-rjv-type-nan-color, #859900)"
},
as: "span",
"data-type": "nan",
className: "w-rjv-type",
children: "NaN"
},
Bigint: {
style: {
color: "var(--w-rjv-type-bigint-color, #268bd2)"
},
as: "span",
"data-type": "bigint",
className: "w-rjv-type",
children: "bigint"
},
Int: {
style: {
color: "var(--w-rjv-type-int-color, #268bd2)"
},
as: "span",
"data-type": "int",
className: "w-rjv-type",
children: "int"
},
Set: {
style: {
color: "var(--w-rjv-type-set-color, #268bd2)",
marginRight: 3
},
as: "span",
"data-type": "set",
className: "w-rjv-type",
children: "Set"
},
Float: {
style: {
color: "var(--w-rjv-type-float-color, #859900)"
},
as: "span",
"data-type": "float",
className: "w-rjv-type",
children: "float"
},
True: {
style: {
color: "var(--w-rjv-type-boolean-color, #2aa198)"
},
as: "span",
"data-type": "bool",
className: "w-rjv-type",
children: "bool"
},
False: {
style: {
color: "var(--w-rjv-type-boolean-color, #2aa198)"
},
as: "span",
"data-type": "bool",
className: "w-rjv-type",
children: "bool"
},
Date: {
style: {
color: "var(--w-rjv-type-date-color, #268bd2)"
},
as: "span",
"data-type": "date",
className: "w-rjv-type",
children: "date"
}
};
var Context3 = /* @__PURE__ */ createContext3(initialState3);
var reducer3 = (state, action) => (0, import_extends3.default)({}, state, action);
var useTypesStore = () => {
return useContext3(Context3);
};
var DispatchTypes = /* @__PURE__ */ createContext3(() => {
});
DispatchTypes.displayName = "JVR.DispatchTypes";
function useTypes() {
return useReducer3(reducer3, initialState3);
}
function useTypesDispatch() {
return useContext3(DispatchTypes);
}
function Types(_ref) {
var {
initial,
dispatch,
children
} = _ref;
return /* @__PURE__ */ _jsx3(Context3.Provider, {
value: initial,
children: /* @__PURE__ */ _jsx3(DispatchTypes.Provider, {
value: dispatch,
children
})
});
}
Types.displayName = "JVR.Types";
// ../../node_modules/@uiw/react-json-view/esm/store/Symbols.js
var import_extends5 = __toESM(require_extends());
import { createContext as createContext4, useContext as useContext4, useReducer as useReducer4 } from "react";
// ../../node_modules/@uiw/react-json-view/esm/arrow/TriangleArrow.js
var import_extends4 = __toESM(require_extends());
var import_objectWithoutPropertiesLoose = __toESM(require_objectWithoutPropertiesLoose());
import React from "react";
import { jsx as _jsx4 } from "react/jsx-runtime";
var _excluded = ["style"];
function TriangleArrow(props) {
var {
style
} = props, reset = (0, import_objectWithoutPropertiesLoose.default)(props, _excluded);
var defaultStyle = (0, import_extends4.default)({
cursor: "pointer",
height: "1em",
width: "1em",
userSelect: "none",
display: "inline-flex"
}, style);
return /* @__PURE__ */ _jsx4("svg", (0, import_extends4.default)({
viewBox: "0 0 24 24",
fill: "var(--w-rjv-arrow-color, currentColor)",
style: defaultStyle
}, reset, {
children: /* @__PURE__ */ _jsx4("path", {
d: "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"
})
}));
}
TriangleArrow.displayName = "JVR.TriangleArrow";
// ../../node_modules/@uiw/react-json-view/esm/store/Symbols.js
import { jsx as _jsx5 } from "react/jsx-runtime";
var initialState4 = {
Arrow: {
as: "span",
className: "w-rjv-arrow",
style: {
transform: "rotate(0deg)",
transition: "all 0.3s"
},
children: /* @__PURE__ */ _jsx5(TriangleArrow, {})
},
Colon: {
as: "span",
style: {
color: "var(--w-rjv-colon-color, var(--w-rjv-color))",
marginLeft: 0,
marginRight: 2
},
className: "w-rjv-colon",
children: ":"
},
Quote: {
as: "span",
style: {
color: "var(--w-rjv-quotes-color, #236a7c)"
},
className: "w-rjv-quotes",
children: '"'
},
ValueQuote: {
as: "span",
style: {
color: "var(--w-rjv-quotes-string-color, #cb4b16)"
},
className: "w-rjv-quotes",
children: '"'
},
BracketsLeft: {
as: "span",
style: {
color: "var(--w-rjv-brackets-color, #236a7c)"
},
className: "w-rjv-brackets-start",
children: "["
},
BracketsRight: {
as: "span",
style: {
color: "var(--w-rjv-brackets-color, #236a7c)"
},
className: "w-rjv-brackets-end",
children: "]"
},
BraceLeft: {
as: "span",
style: {
color: "var(--w-rjv-curlybraces-color, #236a7c)"
},
className: "w-rjv-curlybraces-start",
children: "{"
},
BraceRight: {
as: "span",
style: {
color: "var(--w-rjv-curlybraces-color, #236a7c)"
},
className: "w-rjv-curlybraces-end",
children: "}"
}
};
var Context4 = /* @__PURE__ */ createContext4(initialState4);
var reducer4 = (state, action) => (0, import_extends5.default)({}, state, action);
var useSymbolsStore = () => {
return useContext4(Context4);
};
var DispatchSymbols = /* @__PURE__ */ createContext4(() => {
});
DispatchSymbols.displayName = "JVR.DispatchSymbols";
function useSymbols() {
return useReducer4(reducer4, initialState4);
}
function useSymbolsDispatch() {
return useContext4(DispatchSymbols);
}
var Symbols = (_ref) => {
var {
initial,
dispatch,
children
} = _ref;
return /* @__PURE__ */ _jsx5(Context4.Provider, {
value: initial,
children: /* @__PURE__ */ _jsx5(DispatchSymbols.Provider, {
value: dispatch,
children
})
});
};
Symbols.displayName = "JVR.Symbols";
// ../../node_modules/@uiw/react-json-view/esm/store/Section.js
var import_extends6 = __toESM(require_extends());
import React2, { createContext as createContext5, useContext as useContext5, useReducer as useReducer5 } from "react";
import { jsx as _jsx6 } from "react/jsx-runtime";
var initialState5 = {
Copied: {
className: "w-rjv-copied",
style: {
height: "1em",
width: "1em",
cursor: "pointer",
verticalAlign: "middle",
marginLeft: 5
}
},
CountInfo: {
as: "span",
className: "w-rjv-object-size",
style: {
color: "var(--w-rjv-info-color, #0000004d)",
paddingLeft: 8,
fontStyle: "italic"
}
},
CountInfoExtra: {
as: "span",
className: "w-rjv-object-extra",
style: {
paddingLeft: 8
}
},
Ellipsis: {
as: "span",
style: {
cursor: "pointer",
color: "var(--w-rjv-ellipsis-color, #cb4b16)",
userSelect: "none"
},
className: "w-rjv-ellipsis",
children: "..."
},
Row: {
as: "div",
className: "w-rjv-line"
},
KeyName: {
as: "span",
className: "w-rjv-object-key"
}
};
var Context5 = /* @__PURE__ */ createContext5(initialState5);
var reducer5 = (state, action) => (0, import_extends6.default)({}, state, action);
var useSectionStore = () => {
return useContext5(Context5);
};
var DispatchSection = /* @__PURE__ */ createContext5(() => {
});
DispatchSection.displayName = "JVR.DispatchSection";
function useSection() {
return useReducer5(reducer5, initialState5);
}
function useSectionDispatch() {
return useContext5(DispatchSection);
}
var Section = (_ref) => {
var {
initial,
dispatch,
children
} = _ref;
return /* @__PURE__ */ _jsx6(Context5.Provider, {
value: initial,
children: /* @__PURE__ */ _jsx6(DispatchSection.Provider, {
value: dispatch,
children
})
});
};
Section.displayName = "JVR.Section";
// ../../node_modules/@uiw/react-json-view/esm/store.js
import { jsx as _jsx7 } from "react/jsx-runtime";
var initialState6 = {
objectSortKeys: false,
indentWidth: 15
};
var Context6 = /* @__PURE__ */ createContext6(initialState6);
Context6.displayName = "JVR.Context";
var DispatchContext = /* @__PURE__ */ createContext6(() => {
});
DispatchContext.displayName = "JVR.DispatchContext";
function reducer6(state, action) {
return (0, import_extends7.default)({}, state, action);
}
var useStore = () => {
return useContext6(Context6);
};
var Provider = (_ref) => {
var {
children,
initialState: init,
initialTypes
} = _ref;
var [state, dispatch] = useReducer6(reducer6, Object.assign({}, initialState6, init));
var [showTools, showToolsDispatch] = useShowTools();
var [expands, expandsDispatch] = useExpands();
var [types, typesDispatch] = useTypes();
var [symbols, symbolsDispatch] = useSymbols();
var [section, sectionDispatch] = useSection();
useEffect2(() => dispatch((0, import_extends7.default)({}, init)), [init]);
return /* @__PURE__ */ _jsx7(Context6.Provider, {
value: state,
children: /* @__PURE__ */ _jsx7(DispatchContext.Provider, {
value: dispatch,
children: /* @__PURE__ */ _jsx7(ShowTools, {
initial: showTools,
dispatch: showToolsDispatch,
children: /* @__PURE__ */ _jsx7(Expands, {
initial: expands,
dispatch: expandsDispatch,
children: /* @__PURE__ */ _jsx7(Types, {
initial: (0, import_extends7.default)({}, types, initialTypes),
dispatch: typesDispatch,
children: /* @__PURE__ */ _jsx7(Symbols, {
initial: symbols,
dispatch: symbolsDispatch,
children: /* @__PURE__ */ _jsx7(Section, {
initial: section,
dispatch: sectionDispatch,
children
})
})
})
})
})
})
});
};
Provider.displayName = "JVR.Provider";
// ../../node_modules/@uiw/react-json-view/esm/Container.js
var import_extends21 = __toESM(require_extends());
var import_objectWithoutPropertiesLoose10 = __toESM(require_objectWithoutPropertiesLoose());
import React4, { forwardRef } from "react";
// ../../node_modules/@uiw/react-json-view/esm/comps/NestedClose.js
var import_extends9 = __toESM(require_extends());
// ../../node_modules/@uiw/react-json-view/esm/symbol/index.js
var import_objectDestructuringEmpty = __toESM(require_objectDestructuringEmpty());
var import_extends8 = __toESM(require_extends());
var import_objectWithoutPropertiesLoose2 = __toESM(require_objectWithoutPropertiesLoose());
import { jsx as _jsx8 } from "react/jsx-runtime";
var _excluded2 = ["isNumber", "value", "parentValue", "keyName", "keys"];
var _excluded22 = ["as", "render"];
var _excluded3 = ["as", "render"];
var _excluded4 = ["as", "render"];
var _excluded5 = ["as", "style", "render"];
var _excluded6 = ["as", "render"];
var _excluded7 = ["as", "render"];
var _excluded8 = ["as", "render"];
var _excluded9 = ["as", "render"];
var Quote = (props) => {
var {
Quote: Comp = {}
} = useSymbolsStore();
var {
isNumber,
value,
parentValue,
keyName,
keys
} = props, other = (0, import_objectWithoutPropertiesLoose2.default)(props, _excluded2);
if (isNumber) return null;
var {
as,
render
} = Comp, reset = (0, import_objectWithoutPropertiesLoose2.default)(Comp, _excluded22);
var Elm = as || "span";
var elmProps = (0, import_extends8.default)({}, other, reset);
var result = {
value,
parentValue,
keyName,
keys: keys || (keyName ? [keyName] : [])
};
var child = render && typeof render === "function" && render(elmProps, result);
if (child) return child;
return /* @__PURE__ */ _jsx8(Elm, (0, import_extends8.default)({}, elmProps));
};
Quote.displayName = "JVR.Quote";
var ValueQuote = (props) => {
var {
ValueQuote: Comp = {}
} = useSymbolsStore();
var other = (0, import_extends8.default)({}, ((0, import_objectDestructuringEmpty.default)(props), props));
var {
as,
render
} = Comp, reset = (0, import_objectWithoutPropertiesLoose2.default)(Comp, _excluded3);
var Elm = as || "span";
var elmProps = (0, import_extends8.default)({}, other, reset);
var child = render && typeof render === "function" && render(elmProps, {});
if (child) return child;
return /* @__PURE__ */ _jsx8(Elm, (0, import_extends8.default)({}, elmProps));
};
ValueQuote.displayName = "JVR.ValueQuote";
var Colon = (props) => {
var {
value,
parentValue,
keyName,
keys
} = props;
var {
Colon: Comp = {}
} = useSymbolsStore();
var {
as,
render
} = Comp, reset = (0, import_objectWithoutPropertiesLoose2.default)(Comp, _excluded4);
var Elm = as || "span";
var child = render && typeof render === "function" && render(reset, {
value,
parentValue,
keyName,
keys: keys || (keyName ? [keyName] : [])
});
if (child) return child;
return /* @__PURE__ */ _jsx8(Elm, (0, import_extends8.default)({}, reset));
};
Colon.displayName = "JVR.Colon";
var Arrow = (props) => {
var {
Arrow: Comp = {}
} = useSymbolsStore();
var expands = useExpandsStore();
var {
expandKey,
style: resetStyle,
value,
parentValue,
keyName,
keys
} = props;
var isExpanded = !!expands[expandKey];
var {
as,
style,
render
} = Comp, reset = (0, import_objectWithoutPropertiesLoose2.default)(Comp, _excluded5);
var Elm = as || "span";
var isRender = render && typeof render === "function";
var elmProps = (0, import_extends8.default)({}, reset, {
"data-expanded": isExpanded,
style: (0, import_extends8.default)({}, style, resetStyle)
});
var result = {
value,
parentValue,
keyName,
keys: keys || (keyName ? [keyName] : [])
};
var child = isRender && render(elmProps, result);
if (child) return child;
return /* @__PURE__ */ _jsx8(Elm, (0, import_extends8.default)({}, reset, {
style: (0, import_extends8.default)({}, style, resetStyle)
}));
};
Arrow.displayName = "JVR.Arrow";
var BracketsOpen = (props) => {
var {
isBrackets,
value,
parentValue,
keyName,
keys
} = props;
var {
BracketsLeft: BracketsLeft2 = {},
BraceLeft: BraceLeft2 = {}
} = useSymbolsStore();
var result = {
value,
parentValue,
keyName,
keys: keys || (keyName ? [keyName] : [])
};
if (isBrackets) {
var {
as,
render: _render
} = BracketsLeft2, reset = (0, import_objectWithoutPropertiesLoose2.default)(BracketsLeft2, _excluded6);
var BracketsLeftComp = as || "span";
var _child = _render && typeof _render === "function" && _render(reset, result);
if (_child) return _child;
return /* @__PURE__ */ _jsx8(BracketsLeftComp, (0, import_extends8.default)({}, reset));
}
var {
as: elm,
render
} = BraceLeft2, resetProps = (0, import_objectWithoutPropertiesLoose2.default)(BraceLeft2, _excluded7);
var BraceLeftComp = elm || "span";
var child = render && typeof render === "function" && render(resetProps, result);
if (child) return child;
return /* @__PURE__ */ _jsx8(BraceLeftComp, (0, import_extends8.default)({}, resetProps));
};
BracketsOpen.displayName = "JVR.BracketsOpen";
var BracketsClose = (props) => {
var {
isBrackets,
isVisiable,
value,
parentValue,
keyName,
keys
} = props;
var result = {
value,
parentValue,
keyName,
keys: keys || (keyName ? [keyName] : [])
};
if (!isVisiable) return null;
var {
BracketsRight: BracketsRight2 = {},
BraceRight: BraceRight2 = {}
} = useSymbolsStore();
if (isBrackets) {
var {
as,
render: _render2
} = BracketsRight2, _reset = (0, import_objectWithoutPropertiesLoose2.default)(BracketsRight2, _excluded8);
var BracketsRightComp = as || "span";
var _child2 = _render2 && typeof _render2 === "function" && _render2(_reset, result);
if (_child2) return _child2;
return /* @__PURE__ */ _jsx8(BracketsRightComp, (0, import_extends8.default)({}, _reset));
}
var {
as: elm,
render
} = BraceRight2, reset = (0, import_objectWithoutPropertiesLoose2.default)(BraceRight2, _excluded9);
var BraceRightComp = elm || "span";
var child = render && typeof render === "function" && render(reset, result);
if (child) return child;
return /* @__PURE__ */ _jsx8(BraceRightComp, (0, import_extends8.default)({}, reset));
};
BracketsClose.displayName = "JVR.BracketsClose";
// ../../node_modules/@uiw/react-json-view/esm/comps/NestedClose.js
import { jsx as _jsx9 } from "react/jsx-runtime";
var NestedClose = (props) => {
var _expands$expandKey;
var {
keyName,
value,
expandKey,
parentValue,
level,
keys = []
} = props;
var expands = useExpandsStore();
var {
collapsed,
shouldExpandNodeInitially
} = useStore();
var defaultExpanded = typeof collapsed === "boolean" ? collapsed : typeof collapsed === "number" ? level > collapsed : false;
var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : shouldExpandNodeInitially ? false : defaultExpanded;
var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(!isExpanded, {
value,
keys,
level,
keyName,
parentValue
});
if (expands[expandKey] === void 0 && !shouldExpand) {
return null;
}
var len = Object.keys(value).length;
if (isExpanded || len === 0) {
return null;
}
var style = {
paddingLeft: 4
};
var compProps = {
keyName,
value,
keys,
parentValue
};
var isArray = Array.isArray(value);
var isMySet = value instanceof Set;
return /* @__PURE__ */ _jsx9("div", {
style,
children: /* @__PURE__ */ _jsx9(BracketsClose, (0, import_extends9.default)({
isBrackets: isArray || isMySet
}, compProps, {
isVisiable: true
}))
});
};
NestedClose.displayName = "JVR.NestedClose";
// ../../node_modules/@uiw/react-json-view/esm/comps/NestedOpen.js
var import_extends20 = __toESM(require_extends());
// ../../node_modules/@uiw/react-json-view/esm/comps/KeyValues.js
var import_extends16 = __toESM(require_extends());
import { Fragment as Fragment2, useRef as useRef3 } from "react";
// ../../node_modules/@uiw/react-json-view/esm/comps/Value.js
var import_extends11 = __toESM(require_extends());
// ../../node_modules/@uiw/react-json-view/esm/types/index.js
var import_extends10 = __toESM(require_extends());
var import_objectWithoutPropertiesLoose3 = __toESM(require_objectWithoutPropertiesLoose());
import { Fragment, useEffect as useEffect3, useState as useState2 } from "react";
import { jsx as _jsx10, jsxs as _jsxs } from "react/jsx-runtime";
var _excluded10 = ["as", "render"];
var _excluded23 = ["as", "render"];
var _excluded32 = ["as", "render"];
var _excluded42 = ["as", "render"];
var _excluded52 = ["as", "render"];
var _excluded62 = ["as", "render"];
var _excluded72 = ["as", "render"];
var _excluded82 = ["as", "render"];
var _excluded92 = ["as", "render"];
var _excluded0 = ["as", "render"];
var _excluded1 = ["as", "render"];
var _excluded102 = ["as", "render"];
var _excluded11 = ["as", "render"];
var bigIntToString = (bi) => {
if (bi === void 0) {
return "0n";
} else if (typeof bi === "string") {
try {
bi = BigInt(bi);
} catch (e) {
return "0n";
}
}
return bi ? bi.toString() + "n" : "0n";
};
var SetComp = (_ref) => {
var {
value,
keyName
} = _ref;
var {
Set: Comp = {},
displayDataTypes
} = useTypesStore();
var isSet = value instanceof Set;
if (!isSet || !displayDataTypes) return null;
var {
as,
render
} = Comp, reset = (0, import_objectWithoutPropertiesLoose3.default)(Comp, _excluded10);
var isRender = render && typeof render === "function";
var type = isRender && render(reset, {
type: "type",
value,
keyName
});
if (type) return type;
var Elm = as || "span";
return /* @__PURE__ */ _jsx10(Elm, (0, import_extends10.default)({}, reset));
};
SetComp.displayName = "JVR.SetComp";
var MapComp = (_ref2) => {
var {
value,
keyName
} = _ref2;
var {
Map: Comp = {},
displayDataTypes
} = useTypesStore();
var isMap = value instanceof Map;
if (!isMap || !displayDataTypes) return null;
var {
as,
render
} = Comp, reset = (0, import_objectWithoutPropertiesLoose3.default)(Comp, _excluded23);
var isRender = render && typeof render === "function";
var type = isRender && render(reset, {
type: "type",
value,
keyName
});
if (type) return type;
var Elm = as || "span";
return /* @__PURE__ */ _jsx10(Elm, (0, import_extends10.default)({}, reset));
};
MapComp.displayName = "JVR.MapComp";
var defalutStyle = {
opacity: 0.75,
paddingRight: 4
};
var TypeString = (_ref3) => {
var {
children = "",
keyName,
keys
} = _ref3;
var {
Str = {},
displayDataTypes
} = useTypesStore();
var {
shortenTextAfterLength: length = 30,
stringEllipsis = "..."
} = useStore();
var {
as,
render
} = Str, reset = (0, import_objectWithoutPropertiesLoose3.default)(Str, _excluded32);
var childrenStr = children;
var [shorten, setShorten] = useState2(length && childrenStr.length > length);
useEffect3(() => setShorten(length && childrenStr.length > length), [length]);
var Comp = as || "span";
var style = (0, import_extends10.default)({}, defalutStyle, Str.style || {});
if (length > 0) {
reset.style = (0, import_extends10.default)({}, reset.style, {
cursor: childrenStr.length <= length ? "initial" : "pointer"
});
if (childrenStr.length > length) {
reset.onClick = () => {
setShorten(!shorten);
};
}
}
var text = shorten ? "" + childrenStr.slice(0, length) + stringEllipsis : childrenStr;
var isRender = render && typeof render === "function";
var type = isRender && render((0, import_extends10.default)({}, reset, {
style
}), {
type: "type",
value: children,
keyName,
keys
});
var cls = shorten ? "w-rjv-value w-rjv-value-short" : "w-rjv-value";
var child = isRender && render((0, import_extends10.default)({}, reset, {
children: text,
className: cls
}), {
type: "value",
value: children,
keyName,
keys
});
return /* @__PURE__ */ _jsxs(Fragment, {
children: [displayDataTypes && (type || /* @__PURE__ */ _jsx10(Comp, (0, import_extends10.default)({}, reset, {
style
}))), child || /* @__PURE__ */ _jsxs(Fragment, {
children: [/* @__PURE__ */ _jsx10(ValueQuote, {}), /* @__PURE__ */ _jsx10(Comp, (0, import_extends10.default)({}, reset, {
className: cls,
children: text
})), /* @__PURE__ */ _jsx10(ValueQuote, {})]
})]
});
};
TypeString.displayName = "JVR.TypeString";
var TypeTrue = (_ref4) => {
var {
children,
keyName,
keys
} = _ref4;
var {
True: True2 = {},
displayDataTypes
} = useTypesStore();
var {
as,
render
} = True2, reset = (0, import_objectWithoutPropertiesLoose3.default)(True2, _excluded42);
var Comp = as || "span";
var style = (0, import_extends10.default)({}, defalutStyle, True2.style || {});
var isRender = render && typeof render === "function";
var type = isRender && render((0, import_extends10.default)({}, reset, {
style
}), {
type: "type",
value: children,
keyName,
keys
});
var child = isRender && render((0, import_extends10.default)({}, reset, {
children,
className: "w-rjv-value"
}), {
type: "value",
value: children,
keyName,
keys
});
return /* @__PURE__ */ _jsxs(Fragment, {
children: [displayDataTypes && (type || /* @__PURE__ */ _jsx10(Comp, (0, import_extends10.default)({}, reset, {
style
}))), child || /* @__PURE__ */ _jsx10(Comp, (0, import_extends10.default)({}, reset, {
className: "w-rjv-value",
children: children == null ? void 0 : children.toString()
}))]
});
};
TypeTrue.displayName = "JVR.TypeTrue";
var TypeFalse = (_ref5) => {
var {
children,
keyName,
keys
} = _ref5;
var {
False: False2 = {},
displayDataTypes
} = useTypesStore();
var {
as,
render
} = False2, reset = (0, import_objectWithoutPropertiesLoose3.default)(False2, _excluded52);
var Comp = as || "span";
var style = (0, import_extends10.default)({}, defalutStyle, False2.style || {});
var isRender = render && typeof render === "function"