UNPKG

@allma/admin-shell

Version:

The web-based administration panel for the Allma platform.

1,298 lines (1,268 loc) 614 kB
'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"