dirk-cfx-react 1.1.94 → 1.1.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZPFW7C2A.js → chunk-3QPPR6OY.js} +3 -3
- package/dist/{chunk-ZPFW7C2A.js.map → chunk-3QPPR6OY.js.map} +1 -1
- package/dist/{chunk-MYNNCLMA.js → chunk-4QSXUENK.js} +325 -43
- package/dist/chunk-4QSXUENK.js.map +1 -0
- package/dist/{chunk-YA2PXBP6.cjs → chunk-5XODUPUE.cjs} +325 -43
- package/dist/chunk-5XODUPUE.cjs.map +1 -0
- package/dist/{chunk-3T2CCW5E.cjs → chunk-6CNT35D6.cjs} +9 -9
- package/dist/{chunk-3T2CCW5E.cjs.map → chunk-6CNT35D6.cjs.map} +1 -1
- package/dist/{chunk-KGLO3ZAS.js → chunk-ABBZHNLP.js} +3 -3
- package/dist/{chunk-KGLO3ZAS.js.map → chunk-ABBZHNLP.js.map} +1 -1
- package/dist/{chunk-QOQQ3ERZ.cjs → chunk-EOSHBZQK.cjs} +17 -17
- package/dist/{chunk-QOQQ3ERZ.cjs.map → chunk-EOSHBZQK.cjs.map} +1 -1
- package/dist/{chunk-Z7N5AQJW.js → chunk-GFODSZSP.js} +3 -3
- package/dist/{chunk-Z7N5AQJW.js.map → chunk-GFODSZSP.js.map} +1 -1
- package/dist/{chunk-K3GDU6EY.cjs → chunk-HG2J72NC.cjs} +167 -167
- package/dist/{chunk-K3GDU6EY.cjs.map → chunk-HG2J72NC.cjs.map} +1 -1
- package/dist/{chunk-E2SFEBBB.cjs → chunk-HOVRS2Z6.cjs} +4 -4
- package/dist/{chunk-E2SFEBBB.cjs.map → chunk-HOVRS2Z6.cjs.map} +1 -1
- package/dist/{chunk-VKYONY7E.cjs → chunk-MY3Z7LPB.cjs} +5 -5
- package/dist/{chunk-VKYONY7E.cjs.map → chunk-MY3Z7LPB.cjs.map} +1 -1
- package/dist/{chunk-HAB6H274.js → chunk-UGDMOWVM.js} +6 -6
- package/dist/{chunk-HAB6H274.js.map → chunk-UGDMOWVM.js.map} +1 -1
- package/dist/{chunk-NVMOGS7Y.js → chunk-WUALULEH.js} +4 -4
- package/dist/{chunk-NVMOGS7Y.js.map → chunk-WUALULEH.js.map} +1 -1
- package/dist/components/index.cjs +76 -76
- package/dist/components/index.js +5 -5
- package/dist/hooks/index.cjs +22 -22
- package/dist/hooks/index.js +4 -4
- package/dist/index.cjs +147 -147
- package/dist/index.js +6 -6
- package/dist/providers/index.cjs +5 -5
- package/dist/providers/index.js +3 -3
- package/dist/utils/index.cjs +48 -48
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-MYNNCLMA.js.map +0 -1
- package/dist/chunk-YA2PXBP6.cjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useNuiEvent, getScriptConfigInstance } from './chunk-
|
|
2
|
-
import { useSettings, localeStore, fetchNui, isEnvBrowser } from './chunk-
|
|
1
|
+
import { useNuiEvent, getScriptConfigInstance } from './chunk-GFODSZSP.js';
|
|
2
|
+
import { useSettings, localeStore, fetchNui, isEnvBrowser } from './chunk-4QSXUENK.js';
|
|
3
3
|
import { __publicField } from './chunk-V6TY7KAL.js';
|
|
4
4
|
import { create } from 'zustand';
|
|
5
5
|
import '@mantine/core/styles.css';
|
|
@@ -433,5 +433,5 @@ function DirkProvider({ children, overideResourceName, themeOverride }) {
|
|
|
433
433
|
}
|
|
434
434
|
|
|
435
435
|
export { DirkProvider, dirkQueryClient, useAdminToolStore };
|
|
436
|
-
//# sourceMappingURL=chunk-
|
|
437
|
-
//# sourceMappingURL=chunk-
|
|
436
|
+
//# sourceMappingURL=chunk-WUALULEH.js.map
|
|
437
|
+
//# sourceMappingURL=chunk-WUALULEH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AdminTools/adminToolStore.ts","../src/theme.ts","../src/utils/mergeMantineTheme.ts","../src/providers/DirkErrorBoundary.tsx","../src/components/AdminTools/AdminOverlays.tsx","../src/providers/DirkProvider.tsx"],"names":["theme","error","useEffect","jsx","jsxs"],"mappings":"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","file":"chunk-NVMOGS7Y.js","sourcesContent":["// Shared store for \"in-world admin tools\" — flows where the React admin UI\r\n// releases NUI focus, lets the player do something in the game world, and\r\n// resolves a Promise when they confirm or cancel.\r\n//\r\n// Every tool (capture position, place object, etc.) plugs into the same\r\n// store so AdminOverlays can render at most one InstructionPanel at a time\r\n// and the tool's start() returns a typed Promise. Lua side fires the\r\n// matching SendNUIMessage('<TOOL_ID>_RESULT' / '<TOOL_ID>_CANCELLED'),\r\n// which AdminOverlays routes back to whichever tool is active.\r\nimport { create } from \"zustand\";\r\n\r\nexport type ActiveTool<Result = unknown> = {\r\n /** Tool id matching the SendNUIMessage event names from Lua. */\r\n id: string;\r\n /** Title shown in the InstructionPanel header. */\r\n title: string;\r\n /** Optional sub-text under the title. */\r\n hint?: string;\r\n /** Key bindings shown as labelled key caps. */\r\n keys?: { key: string; action: string }[];\r\n /** Resolve handler for the in-flight Promise. */\r\n resolve: (v: Result | null) => void;\r\n};\r\n\r\ntype AdminToolStore = {\r\n active: ActiveTool | null;\r\n /**\r\n * Begin a tool flow. Returns a Promise resolving to the tool's typed\r\n * result (or null on cancel / replacement). Replaces any currently-active\r\n * tool by cancelling it first — only one in-world prompt at a time.\r\n */\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) => Promise<Result | null>;\r\n /** Settle the currently-active tool with a value (called by SendNUIMessage handler). */\r\n resolveActive: (value: unknown) => void;\r\n /** Cancel the currently-active tool (called by SendNUIMessage handler or programmatic cancel). */\r\n cancelActive: () => void;\r\n};\r\n\r\nexport const useAdminToolStore = create<AdminToolStore>((set, get) => ({\r\n active: null,\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) =>\r\n new Promise<Result | null>((resolve) => {\r\n const prev = get().active;\r\n if (prev) prev.resolve(null); // bump the previous tool out\r\n set({ active: { ...spec, resolve: resolve as ActiveTool[\"resolve\"] } });\r\n }),\r\n resolveActive: (value) => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(value);\r\n set({ active: null });\r\n },\r\n cancelActive: () => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(null);\r\n set({ active: null });\r\n },\r\n}));\r\n","import { alpha, ColorInput, createTheme, MantineTheme, MultiSelect, NumberInput, TextInput } from \"@mantine/core\";\r\n\r\nexport const label = {\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase', \r\n};\r\nexport const error = {\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n fontFamily: 'Akrobat Regular',\r\n};\r\nexport const description = {\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n};\r\n\r\nexport const genericInputStyles = {\r\n styles: {\r\n label: label,\r\n error: error,\r\n description: description,\r\n \r\n input:{\r\n background: 'rgba(255,255,255,0.04)',\r\n border: '0.1vh solid rgba(255,255,255,0.08)',\r\n color: 'rgba(255,255,255,0.85)',\r\n minHeight: '4vh',\r\n },\r\n },\r\n};\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.3vh',\r\n xs: '0.5vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n lineHeights: {\r\n xxs: '1.4vh',\r\n xs: '1.8vh',\r\n sm: '2.2vh',\r\n md: '2.8vh',\r\n lg: '3.3vh',\r\n xl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n label: {\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase', \r\n },\r\n\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n \r\n \r\n Input: genericInputStyles,\r\n TextInput: genericInputStyles,\r\n NumberInput: genericInputStyles,\r\n Select: genericInputStyles,\r\n MultiSelect: genericInputStyles,\r\n Textarea: genericInputStyles,\r\n ColorInput: genericInputStyles,\r\n DateInput: genericInputStyles,\r\n\r\n // Mantine's <Button> defaults to rem-based heights (xs ≈ 1.875rem)\r\n // which doesn't match this theme's vh-based input min-heights, so\r\n // `<Button size=\"xs\">` rendered next to `<TextInput size=\"xs\">` ends\r\n // up visibly shorter. Pin the button heights to the same vh values\r\n // the inputs use so xs-everything lines up out of the box.\r\n Button: {\r\n styles: {\r\n label: {\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n },\r\n root: {\r\n // Mantine maps these to --button-height per size; setting them\r\n // directly here keeps native Button sizing logic intact.\r\n },\r\n },\r\n vars: (_theme: MantineTheme, props: { size?: string }) => {\r\n const heights: Record<string, string> = {\r\n xs: '4vh',\r\n sm: '4.5vh',\r\n md: '5vh',\r\n lg: '5.5vh',\r\n xl: '6vh',\r\n };\r\n const h = heights[props.size ?? 'sm'] ?? '4.5vh';\r\n return {\r\n root: {\r\n '--button-height': h,\r\n },\r\n };\r\n },\r\n },\r\n\r\n Pill: {\r\n styles: (theme: MantineTheme) => ({\r\n root: {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n backgroundColor: 'rgba(76, 76, 76, 0.3)',\r\n height: 'fit-content',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n fontFamily: 'Akrobat Bold',\r\n fontSize: '1.25vh',\r\n borderRadius: theme.defaultRadius,\r\n paddingBottom: '0.5vh',\r\n paddingTop: '0.5vh',\r\n }\r\n })\r\n },\r\n\r\n // Mantine's <Tooltip> defaults to a white card with black text — looks\r\n // jarring against every dirk consumer's dark configurator. Every script\r\n // used to hand-paste this dark style block per Tooltip; centralised here\r\n // so consumers get the right look automatically and never need to think\r\n // about it again.\r\n Tooltip: {\r\n styles: (theme: MantineTheme) => ({\r\n tooltip: {\r\n background: alpha(theme.colors.dark[7], 0.95),\r\n border: '0.1vh solid rgba(255,255,255,0.1)',\r\n color: 'rgba(255,255,255,0.75)',\r\n fontFamily: 'Akrobat Bold',\r\n fontSize: '1.3vh',\r\n lineHeight: 1.3,\r\n padding: '0.6vh 0.8vh',\r\n letterSpacing: '0.03em',\r\n },\r\n }),\r\n },\r\n\r\n },\r\n\r\n colors: {\r\n\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import type { MantineColorsTuple, MantineThemeOverride } from \"@mantine/core\";\r\n\r\nconst isValidColorScale = (v: unknown): v is MantineColorsTuple =>\r\n Array.isArray(v) && v.length === 10 && v.every((shade) => typeof shade === \"string\");\r\n\r\nexport function mergeMantineThemeSafe(\r\n base: MantineThemeOverride,\r\n custom?: MantineColorsTuple,\r\n override?: MantineThemeOverride\r\n): MantineThemeOverride {\r\n const colors = { ...base.colors };\r\n\r\n if (custom && isValidColorScale(custom)) {\r\n colors[\"custom\"] = custom;\r\n } else if (!colors[\"custom\"]) {\r\n // Always register a \"custom\" entry so primaryColor === \"custom\" never\r\n // points at undefined and silently falls back to Mantine's default\r\n // (which surfaces as \"the configured palette didn't apply\").\r\n const fallback = (base.colors && (base.colors as any).dirk) as MantineColorsTuple | undefined;\r\n if (fallback && isValidColorScale(fallback)) {\r\n colors[\"custom\"] = fallback;\r\n }\r\n }\r\n\r\n return {\r\n ...base,\r\n ...override,\r\n colors: {\r\n ...colors,\r\n ...(override?.colors ?? {}),\r\n },\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Box, Code, Stack, Text, Title } from \"@mantine/core\";\r\n\r\ntype State = {\r\n error: Error | null;\r\n stack?: string;\r\n};\r\n\r\nexport class DirkErrorBoundary extends React.Component<\r\n { children: React.ReactNode },\r\n State\r\n> {\r\n state: State = { error: null, stack: undefined };\r\n\r\n static getDerivedStateFromError(error: Error) {\r\n // We can't get component stack here, so just store the error\r\n return { error };\r\n }\r\n\r\n componentDidCatch(error: Error, info: React.ErrorInfo) {\r\n console.group(\"🔥 Dirk UI Crash\");\r\n console.error(\"Error:\", error);\r\n console.error(\"Component Stack:\", info.componentStack);\r\n console.groupEnd();\r\n\r\n // Only log here, don't call setState — the error state is already captured\r\n }\r\n\r\n render() {\r\n if (!this.state.error) return this.props.children;\r\n\r\n return (\r\n <Box\r\n style={{\r\n position: \"fixed\",\r\n inset: 0,\r\n width: \"100vw\",\r\n height: \"100vh\",\r\n background: \"rgba(10, 10, 12, 0.92)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: \"2rem\",\r\n zIndex: 999999,\r\n }}\r\n >\r\n <Box\r\n maw={900}\r\n w=\"100%\"\r\n p=\"lg\"\r\n style={{\r\n background: \"rgba(20,20,24,0.75)\",\r\n border: \"1px solid rgba(255,255,255,0.08)\",\r\n borderRadius: \"10px\",\r\n boxShadow: \"0 10px 40px rgba(0,0,0,0.6)\",\r\n }}\r\n >\r\n <Stack gap=\"sm\">\r\n <Title order={2} c=\"red.5\">\r\n Dirk UI Crash\r\n </Title>\r\n\r\n <Text c=\"dimmed\" size=\"sm\">\r\n The interface encountered a fatal error and stopped rendering.\r\n </Text>\r\n\r\n <Code block style={{ maxHeight: 150, overflow: \"auto\" }}>\r\n {this.state.error?.message}\r\n </Code>\r\n\r\n {/* Optional: show component stack if you pass it from props */}\r\n <Text size=\"xs\" c=\"dimmed\">\r\n Check console for full stack trace\r\n </Text>\r\n </Stack>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n}","// Internal. Auto-mounted by DirkProvider. Consumers never reference this\r\n// directly — it just exists in the tree so any admin-tool flow has its\r\n// NUI-message routing and admin-UI-hide effect wired up automatically.\r\n//\r\n// What it does (and DOESN'T do anymore):\r\n// • Subscribes to <toolId>_RESULT and <toolId>_CANCELLED NUI messages\r\n// from any admin tool and routes them into useAdminToolStore so\r\n// `await pickDoor()` etc. resolve.\r\n// • While a tool is active, applies a body attribute so the consumer\r\n// admin UI hides itself (so the player sees the world).\r\n//\r\n// What used to live here but doesn't anymore:\r\n// • Rendering the bottom-right InstructionPanel — that's now ALWAYS\r\n// driven by dirk_lib's own NUI via `lib.showInstructions`, so the\r\n// panel renders in one place regardless of where the tool was\r\n// triggered from. Avoids dual code paths and per-resource iframe\r\n// compositing differences that were eating immediate-mode draws.\r\n\r\nimport { useEffect } from \"react\";\r\nimport { useAdminToolStore } from \"./adminToolStore\";\r\n\r\n// Single global listener registration so multiple DirkProviders (if a\r\n// consumer ever stacks them) don't multiply-route the same message into\r\n// the store. Guarded by a module-level flag.\r\nlet listenerInstalled = false;\r\n\r\nfunction installNuiListener() {\r\n if (listenerInstalled || typeof window === \"undefined\") return;\r\n listenerInstalled = true;\r\n window.addEventListener(\"message\", (e) => {\r\n const msg = e?.data;\r\n if (!msg || typeof msg !== \"object\" || typeof msg.action !== \"string\") return;\r\n const action: string = msg.action;\r\n const cur = useAdminToolStore.getState().active;\r\n if (!cur) return;\r\n if (action === `${cur.id}_RESULT`) {\r\n useAdminToolStore.getState().resolveActive(msg.data ?? null);\r\n } else if (action === `${cur.id}_CANCELLED`) {\r\n useAdminToolStore.getState().cancelActive();\r\n }\r\n });\r\n}\r\n\r\n// CSS injected once that hides every body child except things tagged\r\n// with data-dirk-instruction-overlay. Used to make the consumer's\r\n// admin panel disappear so the player sees the world while picking.\r\nconst BODY_HIDE_STYLE_ID = \"dirk-instruction-panel-style\";\r\nconst BODY_HIDE_ATTR = \"data-dirk-instruction-active\";\r\nconst OVERLAY_ATTR = \"data-dirk-instruction-overlay\";\r\n\r\nfunction ensureBodyHideStyle() {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(BODY_HIDE_STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = BODY_HIDE_STYLE_ID;\r\n el.textContent = `\r\n body[${BODY_HIDE_ATTR}] > *:not([${OVERLAY_ATTR}]) {\r\n visibility: hidden !important;\r\n opacity: 0 !important;\r\n pointer-events: none !important;\r\n }\r\n `;\r\n document.head.appendChild(el);\r\n}\r\n\r\nexport function AdminOverlays() {\r\n const active = useAdminToolStore((s) => s.active);\r\n\r\n useEffect(() => {\r\n installNuiListener();\r\n }, []);\r\n\r\n // Body-hide effect — toggles the attribute while a tool is in flight\r\n // so the consumer admin UI vanishes and the player sees the world.\r\n useEffect(() => {\r\n if (!active || typeof document === \"undefined\") return;\r\n ensureBodyHideStyle();\r\n document.body.setAttribute(BODY_HIDE_ATTR, \"\");\r\n return () => {\r\n document.body.removeAttribute(BODY_HIDE_ATTR);\r\n };\r\n }, [active]);\r\n\r\n // Nothing visual to render — dirk_lib's NUI handles the bottom-right\r\n // InstructionPanel via lib.showInstructions.\r\n return null;\r\n}\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/fonts.css';\r\nimport './styles/notify.css';\r\nimport './styles/scrollBar.css';\r\nimport './styles/tornEdge.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nlibrary.add(fas, far, fab);\r\n\r\nimport theme from \"@/theme\";\r\nimport { BackgroundImage, MantineColorShade, MantineColorsTuple, MantineProvider } from \"@mantine/core\";\r\nimport { useEffect, useLayoutEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useNuiEvent } from \"@/hooks/useNuiEvent\";\r\nimport { fetchNui, isEnvBrowser } from \"@/utils\";\r\nimport { localeStore } from \"@/utils/locales\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { SettingsState, useSettings } from \"@/utils/useSettings\";\r\nimport { getScriptConfigInstance } from \"@/hooks/useScriptConfig\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { AdminOverlays } from \"@/components/AdminTools/AdminOverlays\";\r\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\r\n\r\n// Shared QueryClient for every consumer of <DirkProvider>. Hooks in this\r\n// library (usePlayers, ConfigPanel's history pagination, MissingItemsBanner\r\n// audit, etc.) all consume this so consumers don't need to wire their own\r\n// QueryClientProvider. Defaults match what ConfigPanel previously used in\r\n// its private QueryClient so the move doesn't change refetch cadence.\r\n//\r\n// Consumers that already wrap in their own outer QueryClientProvider (e.g.\r\n// dirk_fishing's App.tsx) still work — react-query picks the nearest\r\n// provider in the tree, and \"nearest\" here means this inner one. Anything\r\n// inside DirkProvider uses this client; anything outside uses the consumer's\r\n// outer one (if present).\r\nexport const dirkQueryClient = new QueryClient({\r\n defaultOptions: { queries: { staleTime: 30_000, gcTime: 5 * 60_000 } },\r\n});\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n overideResourceName?: string;\r\n themeOverride?: any;\r\n};\r\n\r\n// Shape DirkProvider looks for at `scriptConfig.theme` to detect a per-resource\r\n// theme override. Consumers opt in by adding a `theme` block to their schema.json\r\n// with these four fields — DirkProvider auto-detects and applies it. Resources\r\n// with no `theme` block (or `useOverride: false`) follow the global dirk_lib\r\n// theme as before. No bridge component, no extra wiring required from consumers.\r\ntype ScriptConfigThemeOverride = {\r\n useOverride?: boolean;\r\n primaryColor?: string;\r\n primaryShade?: number;\r\n customTheme?: MantineColorsTuple | string[];\r\n};\r\n\r\nexport function DirkProvider({ children, overideResourceName, themeOverride }: DirkProviderProps) {\r\n const {\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // Subscribe to locale changes so the entire tree re-renders when an admin\r\n // updates `language` via dirk_lib's scriptConfig — components calling\r\n // `locale(\"Foo\")` directly (no hook) get fresh strings on the next render.\r\n const _locales = localeStore((s) => s.locales);\r\n void _locales;\r\n\r\n // Per-resource theme override snapshot, read from `scriptConfig.theme` when\r\n // the consumer has a scriptConfig registered. Updated by the subscription\r\n // below; survives Mantine recomputes via useMemo deps.\r\n const [scTheme, setScTheme] = useState<ScriptConfigThemeOverride | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n useSettings.setState({\r\n overideResourceName,\r\n });\r\n }, [overideResourceName]);\r\n\r\n useEffect(() => {\r\n fetchNui('NUI_READY').catch(() => {});\r\n Promise.all([\r\n fetchNui<Partial<SettingsState>>('GET_SETTINGS'),\r\n fetchNui<{ version?: string }>('GET_RESOURCE_VERSION', undefined, { version: 'dev' }),\r\n ]).then(([data, resourceInfo]) => {\r\n useSettings.setState({\r\n ...data,\r\n resourceVersion: resourceInfo?.version || 'dev',\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n }, []);\r\n\r\n // Live updates: dirk_lib broadcasts UPDATE_DIRK_LIB_SETTINGS whenever an admin\r\n // changes appearance/localization via the scriptConfig UI. Merge the partial\r\n // patch into the settings store so theme / currency / branding update live\r\n // without a resource restart. Per-resource theme override is handled below\r\n // via the scriptConfig subscription — pushes here can flow through unchanged.\r\n useNuiEvent<Partial<SettingsState>>('UPDATE_DIRK_LIB_SETTINGS', (data) => {\r\n if (!data || typeof data !== 'object') return;\r\n useSettings.setState(data);\r\n });\r\n\r\n // ── Per-resource theme auto-detect ────────────────────────────────────────\r\n // If the consumer has called createScriptConfig() (i.e. has a registered\r\n // scriptConfig instance) AND their schema has a `theme` block with\r\n // `useOverride: true`, DirkProvider uses those theme values instead of\r\n // dirk_lib's global appearance. Consumers don't have to write any glue\r\n // code — they just add the `theme` block to schema.json and a Theme tab\r\n // (via ThemeOverrideSection) to their configurator. Everything else is\r\n // handled here.\r\n //\r\n // We also forward UPDATE_SCRIPT_CONFIG pushes into the store so this works\r\n // whether or not the consumer remembers to call useScriptConfigHooks().\r\n useNuiEvent<{ config?: Record<string, unknown>; clientVersion?: number }>(\r\n 'UPDATE_SCRIPT_CONFIG',\r\n (data) => {\r\n if (!data || !data.config || typeof data.config !== 'object') return;\r\n try {\r\n const inst = getScriptConfigInstance<Record<string, unknown>>();\r\n inst.store.setState((prev) => ({ ...prev, ...(data.config as Record<string, unknown>) }));\r\n } catch {\r\n // No scriptConfig instance registered — consumer doesn't use scriptConfig, ignore.\r\n }\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n let unsubscribe: (() => void) | undefined;\r\n try {\r\n const inst = getScriptConfigInstance<{ theme?: ScriptConfigThemeOverride }>();\r\n\r\n // Seed from whatever's already in the store (covers cases where the\r\n // store was hydrated before DirkProvider mounted, e.g. by an upstream\r\n // ConfigPanel open).\r\n setScTheme((inst.store.getState() as { theme?: ScriptConfigThemeOverride })?.theme ?? null);\r\n\r\n // Subscribe to store mutations so live edits / hydration completion\r\n // re-trigger the override application.\r\n const subscribable = inst.store as unknown as {\r\n subscribe?: (listener: (s: { theme?: ScriptConfigThemeOverride }) => void) => () => void;\r\n };\r\n if (typeof subscribable.subscribe === 'function') {\r\n unsubscribe = subscribable.subscribe((s) => {\r\n setScTheme(s?.theme ?? null);\r\n });\r\n }\r\n\r\n // Option B: NO proactive GET_FULL_SCRIPT_CONFIG round-trip here. The\r\n // client-visible config (which includes the `theme` block — it is NOT\r\n // server-only) is pushed by dirk_lib via UPDATE_SCRIPT_CONFIG and lands\r\n // in the store. The store `subscribe` above updates `scTheme` the moment\r\n // that push arrives, and the seed `setScTheme(...)` from the current\r\n // store state covers the case where the push beat this mount. This drops\r\n // the per-mount full-config fetch entirely — reopen/reload = store hit,\r\n // 0 bytes. The cold-start NUI-readiness race is handled on the Lua side\r\n // (the push is (re)sent once the NUI signals NUI_READY).\r\n } catch {\r\n // No scriptConfig instance — consumer doesn't use scriptConfig at all.\r\n // Fall through silently; global theme behaviour is unchanged.\r\n }\r\n return () => { unsubscribe?.(); };\r\n }, []);\r\n\r\n const overrideActive = scTheme?.useOverride === true;\r\n const effectivePrimaryColor = overrideActive ? (scTheme!.primaryColor ?? primaryColor) : primaryColor;\r\n const effectivePrimaryShade = overrideActive ? (scTheme!.primaryShade ?? primaryShade) : primaryShade;\r\n const effectiveCustomTheme = overrideActive\r\n ? ((scTheme!.customTheme as MantineColorsTuple | undefined) ?? customTheme)\r\n : customTheme;\r\n\r\n const mergedTheme = useMemo(\r\n () => mergeMantineThemeSafe(\r\n { ...theme, primaryColor: effectivePrimaryColor, primaryShade: effectivePrimaryShade as MantineColorShade },\r\n effectiveCustomTheme,\r\n themeOverride\r\n ),\r\n [effectivePrimaryColor, effectivePrimaryShade, effectiveCustomTheme, themeOverride]\r\n );\r\n\r\n useEffect(() => {\r\n document.body.style.fontFamily =\r\n game === \"rdr3\"\r\n ? '\"Red Dead\", sans-serif'\r\n : '\"Akrobat Regular\", sans-serif';\r\n }, [game]);\r\n\r\n const content = isEnvBrowser() ? (\r\n <BackgroundImage\r\n w=\"100vw\"\r\n h=\"100vh\"\r\n src={game === \"fivem\"\r\n ? \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n >\r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n children\r\n );\r\n\r\n return (\r\n <QueryClientProvider client={dirkQueryClient}>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n <DirkErrorBoundary>\r\n {content}\r\n {/* Auto-mounted. Renders nothing unless an admin tool is active.\r\n Consumers never have to wire this up themselves — every admin\r\n tool flow that uses useAdminToolStore.begin() gets the\r\n bottom-right InstructionPanel + NUI message routing for free. */}\r\n <AdminOverlays />\r\n </DirkErrorBoundary>\r\n </MantineProvider>\r\n </QueryClientProvider>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AdminTools/adminToolStore.ts","../src/theme.ts","../src/utils/mergeMantineTheme.ts","../src/providers/DirkErrorBoundary.tsx","../src/components/AdminTools/AdminOverlays.tsx","../src/providers/DirkProvider.tsx"],"names":["theme","error","useEffect","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;AAsCO,IAAM,iBAAA,GAAoB,MAAA,CAAuB,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,EACrE,MAAA,EAAQ,IAAA;AAAA,EACR,OAAO,CAAS,IAAA,KACd,IAAI,OAAA,CAAuB,CAAC,OAAA,KAAY;AACtC,IAAA,MAAM,IAAA,GAAO,KAAI,CAAE,MAAA;AACnB,IAAA,IAAI,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC3B,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAA,IAA6C,CAAA;AAAA,EACxE,CAAC,CAAA;AAAA,EACH,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,IAAA,MAAM,GAAA,GAAM,KAAI,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACjB,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACtB,CAAA;AAAA,EACA,cAAc,MAAM;AAClB,IAAA,MAAM,GAAA,GAAM,KAAI,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAChB,IAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,EACtB;AACF,CAAA,CAAE;ACxDK,IAAM,KAAA,GAAQ;AAAA,EACnB,QAAA,EAAU,6BAAA;AAAA,EACV,UAAA,EAAY,cAAA;AAAA,EACZ,aAAA,EAAe,QAAA;AAAA,EACf,aAAA,EAAe;AACjB,CAAA;AACO,IAAM,KAAA,GAAQ;AAAA,EACnB,QAAA,EAAU,6BAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAA;AACO,IAAM,WAAA,GAAc;AAAA,EACzB,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC,MAAA,EAAQ;AAAA,IACN,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IAEA,KAAA,EAAM;AAAA,MACJ,UAAA,EAAY,wBAAA;AAAA,MACZ,MAAA,EAAQ,oCAAA;AAAA,MACR,KAAA,EAAO,wBAAA;AAAA,MACP,SAAA,EAAW;AAAA;AACb;AAEJ,CAAA;AAEA,IAAM,QAAQ,WAAA,CAAY;AAAA,EACxB,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc,CAAA;AAAA,EACd,aAAA,EAAe,IAAA;AAAA,EACf,UAAA,EAAY,6BAAA;AAAA,EAEZ,MAAA,EAAO;AAAA,IACL,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EAEA,OAAA,EAAQ;AAAA,IACN,GAAA,EAAK,OAAA;AAAA,IACL,EAAA,EAAI,QAAA;AAAA,IACJ,EAAA,EAAI,OAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,GAAA,EAAK;AAAA,GACP;AAAA,EAEA,UAAA,EAAW;AAAA,IACT,QAAA,EAAS;AAAA,MACP,MAAA,EAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,cAAA;AAAA,UACZ,aAAA,EAAe,QAAA;AAAA,UACf,aAAA,EAAe;AAAA,SACjB;AAAA,QAEA,IAAA,EAAK;AAAA,UACH,eAAA,EAAiB;AAAA;AACnB;AAEF,KACF;AAAA,IAGA,KAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW,kBAAA;AAAA,IACX,WAAA,EAAa,kBAAA;AAAA,IACb,MAAA,EAAQ,kBAAA;AAAA,IACR,WAAA,EAAc,kBAAA;AAAA,IACd,QAAA,EAAU,kBAAA;AAAA,IACV,UAAA,EAAY,kBAAA;AAAA,IACZ,SAAA,EAAW,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOX,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,cAAA;AAAA,UACZ,aAAA,EAAe,QAAA;AAAA,UACf,aAAA,EAAe;AAAA,SACjB;AAAA,QACA,IAAA,EAAM;AAAA;AAAA;AAAA;AAGN,OACF;AAAA,MACA,IAAA,EAAM,CAAC,MAAA,EAAsB,KAAA,KAA6B;AACxD,QAAA,MAAM,OAAA,GAAkC;AAAA,UACtC,EAAA,EAAI,KAAA;AAAA,UACJ,EAAA,EAAI,OAAA;AAAA,UACJ,EAAA,EAAI,KAAA;AAAA,UACJ,EAAA,EAAI,OAAA;AAAA,UACJ,EAAA,EAAI;AAAA,SACN;AACA,QAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,IAAA,IAAQ,IAAI,CAAA,IAAK,OAAA;AACzC,QAAA,OAAO;AAAA,UACL,IAAA,EAAM;AAAA,YACJ,iBAAA,EAAmB;AAAA;AACrB,SACF;AAAA,MACF;AAAA,KACF;AAAA,IAEA,IAAA,EAAM;AAAA,MACJ,MAAA,EAAQ,CAACA,MAAAA,MAAyB;AAAA,QAChC,IAAA,EAAM;AAAA,UACJ,OAAA,EAAS,aAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,eAAA,EAAiB,uBAAA;AAAA,UACjB,MAAA,EAAQ,aAAA;AAAA,UACR,aAAA,EAAe,WAAA;AAAA,UACf,aAAA,EAAe,QAAA;AAAA,UACf,UAAA,EAAY,cAAA;AAAA,UACZ,QAAA,EAAU,QAAA;AAAA,UACV,cAAcA,MAAAA,CAAM,aAAA;AAAA,UACpB,aAAA,EAAe,OAAA;AAAA,UACf,UAAA,EAAY;AAAA;AACd,OACF;AAAA,KACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,CAACA,MAAAA,MAAyB;AAAA,QAChC,OAAA,EAAS;AAAA,UACP,YAAY,KAAA,CAAMA,MAAAA,CAAM,OAAO,IAAA,CAAK,CAAC,GAAG,IAAI,CAAA;AAAA,UAC5C,MAAA,EAAQ,mCAAA;AAAA,UACR,KAAA,EAAO,wBAAA;AAAA,UACP,UAAA,EAAY,cAAA;AAAA,UACZ,QAAA,EAAU,OAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,OAAA,EAAS,aAAA;AAAA,UACT,aAAA,EAAe;AAAA;AACjB,OACF;AAAA;AACF,GAEF;AAAA,EAEA,MAAA,EAAQ;AAAA,IAEN,IAAA,EAAK;AAAA,MACH,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC,CAAA;AAGD,IAAO,aAAA,GAAQ,KAAA;;;ACjMf,IAAM,oBAAoB,CAAC,CAAA,KACzB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,MAAA,KAAW,EAAA,IAAM,EAAE,KAAA,CAAM,CAAC,KAAA,KAAU,OAAO,UAAU,QAAQ,CAAA;AAE9E,SAAS,qBAAA,CACd,IAAA,EACA,MAAA,EACA,QAAA,EACsB;AACtB,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAEhC,EAAA,IAAI,MAAA,IAAU,iBAAA,CAAkB,MAAM,CAAA,EAAG;AACvC,IAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA;AAAA,EACrB,CAAA,MAAA,IAAW,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAG;AAI5B,IAAA,MAAM,QAAA,GAAY,IAAA,CAAK,MAAA,IAAW,IAAA,CAAK,MAAA,CAAe,IAAA;AACtD,IAAA,IAAI,QAAA,IAAY,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC3C,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,QAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,MAAA,EAAQ;AAAA,MACN,GAAG,MAAA;AAAA,MACH,GAAI,QAAA,EAAU,MAAA,IAAU;AAAC;AAC3B,GACF;AACF;ACtBO,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM,SAAA,CAG3C;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAIL,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,EAAe,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAA,EAAU,CAAA;AAAA,EAAA;AAAA,EAE/C,OAAO,yBAAyBC,MAAAA,EAAc;AAE5C,IAAA,OAAO,EAAE,OAAAA,MAAAA,EAAM;AAAA,EACjB;AAAA,EAEA,iBAAA,CAAkBA,QAAc,IAAA,EAAuB;AACrD,IAAA,OAAA,CAAQ,MAAM,yBAAkB,CAAA;AAChC,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAUA,MAAK,CAAA;AAC7B,IAAA,OAAA,CAAQ,KAAA,CAAM,kBAAA,EAAoB,IAAA,CAAK,cAAc,CAAA;AACrD,IAAA,OAAA,CAAQ,QAAA,EAAS;AAAA,EAGnB;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,OAAO,KAAK,KAAA,CAAM,QAAA;AAEzC,IAAA,uBACE,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAA,EAAO,CAAA;AAAA,UACP,KAAA,EAAO,OAAA;AAAA,UACP,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,wBAAA;AAAA,UACZ,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,OAAA,EAAS,MAAA;AAAA,UACT,MAAA,EAAQ;AAAA,SACV;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,GAAA;AAAA,YACL,CAAA,EAAE,MAAA;AAAA,YACF,CAAA,EAAE,IAAA;AAAA,YACF,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,qBAAA;AAAA,cACZ,MAAA,EAAQ,kCAAA;AAAA,cACR,YAAA,EAAc,MAAA;AAAA,cACd,SAAA,EAAW;AAAA,aACb;AAAA,YAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,GAAA,EAAI,IAAA,EACT,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,CAAA,EAAG,CAAA,EAAE,SAAQ,QAAA,EAAA,eAAA,EAE3B,CAAA;AAAA,kCAEC,IAAA,EAAA,EAAK,CAAA,EAAE,QAAA,EAAS,IAAA,EAAK,MAAK,QAAA,EAAA,gEAAA,EAE3B,CAAA;AAAA,8BAEA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAK,IAAA,EAAC,OAAO,EAAE,SAAA,EAAW,GAAA,EAAK,QAAA,EAAU,MAAA,EAAO,EACnD,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,OAAA,EACrB,CAAA;AAAA,kCAGC,IAAA,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,CAAA,EAAE,UAAS,QAAA,EAAA,oCAAA,EAE3B;AAAA,aAAA,EACF;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;ACzDA,IAAI,iBAAA,GAAoB,KAAA;AAExB,SAAS,kBAAA,GAAqB;AAC5B,EAAA,IAAI,iBAAA,IAAqB,OAAO,MAAA,KAAW,WAAA,EAAa;AACxD,EAAA,iBAAA,GAAoB,IAAA;AACpB,EAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,CAAC,CAAA,KAAM;AACxC,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA;AACf,IAAA,IAAI,CAAC,OAAO,OAAO,GAAA,KAAQ,YAAY,OAAO,GAAA,CAAI,WAAW,QAAA,EAAU;AACvE,IAAA,MAAM,SAAiB,GAAA,CAAI,MAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,QAAA,EAAS,CAAE,MAAA;AACzC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAI,MAAA,KAAW,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,OAAA,CAAA,EAAW;AACjC,MAAA,iBAAA,CAAkB,QAAA,EAAS,CAAE,aAAA,CAAc,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAC7D,CAAA,MAAA,IAAW,MAAA,KAAW,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,UAAA,CAAA,EAAc;AAC3C,MAAA,iBAAA,CAAkB,QAAA,GAAW,YAAA,EAAa;AAAA,IAC5C;AAAA,EACF,CAAC,CAAA;AACH;AAKA,IAAM,kBAAA,GAAqB,8BAAA;AAC3B,IAAM,cAAA,GAAiB,8BAAA;AACvB,IAAM,YAAA,GAAe,+BAAA;AAErB,SAAS,mBAAA,GAAsB;AAC7B,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,kBAAkB,CAAA,EAAG;AACjD,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AACzC,EAAA,EAAA,CAAG,EAAA,GAAK,kBAAA;AACR,EAAA,EAAA,CAAG,WAAA,GAAc;AAAA,SAAA,EACR,cAAc,cAAc,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAMjD,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC9B;AAEO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,kBAAA,EAAmB;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,QAAA,KAAa,WAAA,EAAa;AAChD,IAAA,mBAAA,EAAoB;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,EAAE,CAAA;AAC7C,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,gBAAgB,cAAc,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAIX,EAAA,OAAO,IAAA;AACT;ACxEA,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AA2BlB,IAAM,eAAA,GAAkB,IAAI,WAAA,CAAY;AAAA,EAC7C,cAAA,EAAgB,EAAE,OAAA,EAAS,EAAE,WAAW,GAAA,EAAQ,MAAA,EAAQ,CAAA,GAAI,GAAA,EAAO;AACrE,CAAC;AAoBM,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,mBAAA,EAAqB,eAAc,EAAsB;AAChG,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,MACE,WAAA,EAAY;AAKhB,EAAiB,WAAA,CAAY,CAAC,CAAA,KAAM,EAAE,OAAO;AAM7C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAA2C,IAAI,CAAA;AAE7E,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,WAAA,CAAY,QAAA,CAAS;AAAA,MACnB;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAExB,EAAAC,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,WAAW,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AACpC,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,MACV,SAAiC,cAAc,CAAA;AAAA,MAC/C,SAA+B,sBAAA,EAAwB,MAAA,EAAW,EAAE,OAAA,EAAS,OAAO;AAAA,KACrF,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,IAAA,EAAM,YAAY,CAAA,KAAM;AAChC,MAAA,WAAA,CAAY,QAAA,CAAS;AAAA,QACnB,GAAG,IAAA;AAAA,QACH,eAAA,EAAiB,cAAc,OAAA,IAAW;AAAA,OAC3C,CAAA;AAAA,IACH,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,2DAA2D,GAAG,CAAA;AAAA,IAC9E,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAOL,EAAA,WAAA,CAAoC,0BAAA,EAA4B,CAAC,IAAA,KAAS;AACxE,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACvC,IAAA,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AAaD,EAAA,WAAA;AAAA,IACE,sBAAA;AAAA,IACA,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,CAAC,QAAQ,CAAC,IAAA,CAAK,UAAU,OAAO,IAAA,CAAK,WAAW,QAAA,EAAU;AAC9D,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,uBAAA,EAAiD;AAC9D,QAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,GAAI,IAAA,CAAK,MAAA,EAAmC,CAAE,CAAA;AAAA,MAC1F,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,GACF;AAEA,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,uBAAA,EAA+D;AAK5E,MAAA,UAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS,EAA6C,SAAS,IAAI,CAAA;AAI1F,MAAA,MAAM,eAAe,IAAA,CAAK,KAAA;AAG1B,MAAA,IAAI,OAAO,YAAA,CAAa,SAAA,KAAc,UAAA,EAAY;AAChD,QAAA,WAAA,GAAc,YAAA,CAAa,SAAA,CAAU,CAAC,CAAA,KAAM;AAC1C,UAAA,UAAA,CAAW,CAAA,EAAG,SAAS,IAAI,CAAA;AAAA,QAC7B,CAAC,CAAA;AAAA,MACH;AAAA,IAWF,CAAA,CAAA,MAAQ;AAAA,IAGR;AACA,IAAA,OAAO,MAAM;AAAE,MAAA,WAAA,IAAc;AAAA,IAAG,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAA,GAAiB,SAAS,WAAA,KAAgB,IAAA;AAChD,EAAA,MAAM,qBAAA,GAAwB,cAAA,GAAkB,OAAA,CAAS,YAAA,IAAgB,YAAA,GAAgB,YAAA;AACzF,EAAA,MAAM,qBAAA,GAAwB,cAAA,GAAkB,OAAA,CAAS,YAAA,IAAgB,YAAA,GAAgB,YAAA;AACzF,EAAA,MAAM,oBAAA,GAAuB,cAAA,GACvB,OAAA,CAAS,WAAA,IAAkD,WAAA,GAC7D,WAAA;AAEJ,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,qBAAA;AAAA,MACJ,EAAE,GAAG,aAAA,EAAO,YAAA,EAAc,qBAAA,EAAuB,cAAc,qBAAA,EAA2C;AAAA,MAC1G,oBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,CAAC,qBAAA,EAAuB,qBAAA,EAAuB,oBAAA,EAAsB,aAAa;AAAA,GACpF;AAEA,EAAAA,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,UAAA,GAClB,IAAA,KAAS,SACL,wBAAA,GACA,+BAAA;AAAA,EACR,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,OAAA,GAAU,YAAA,EAAa,mBAC3BC,GAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,OAAA;AAAA,MACF,CAAA,EAAE,OAAA;AAAA,MACF,GAAA,EAAK,IAAA,KAAS,OAAA,GACV,sDAAA,GACA,iJAAA;AAAA,MAEH;AAAA;AAAA,GACH,GAEA,QAAA;AAGF,EAAA,uBACIA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,MAAA,EAAQ,iBAC3B,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,WAAA,EAAa,kBAAA,EAAmB,MAAA,EACtD,QAAA,kBAAAC,KAAC,iBAAA,EAAA,EACI,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,oBAKDD,IAAC,aAAA,EAAA,EAAc;AAAA,GAAA,EACnB,GACF,CAAA,EACF,CAAA;AAEN","file":"chunk-WUALULEH.js","sourcesContent":["// Shared store for \"in-world admin tools\" — flows where the React admin UI\r\n// releases NUI focus, lets the player do something in the game world, and\r\n// resolves a Promise when they confirm or cancel.\r\n//\r\n// Every tool (capture position, place object, etc.) plugs into the same\r\n// store so AdminOverlays can render at most one InstructionPanel at a time\r\n// and the tool's start() returns a typed Promise. Lua side fires the\r\n// matching SendNUIMessage('<TOOL_ID>_RESULT' / '<TOOL_ID>_CANCELLED'),\r\n// which AdminOverlays routes back to whichever tool is active.\r\nimport { create } from \"zustand\";\r\n\r\nexport type ActiveTool<Result = unknown> = {\r\n /** Tool id matching the SendNUIMessage event names from Lua. */\r\n id: string;\r\n /** Title shown in the InstructionPanel header. */\r\n title: string;\r\n /** Optional sub-text under the title. */\r\n hint?: string;\r\n /** Key bindings shown as labelled key caps. */\r\n keys?: { key: string; action: string }[];\r\n /** Resolve handler for the in-flight Promise. */\r\n resolve: (v: Result | null) => void;\r\n};\r\n\r\ntype AdminToolStore = {\r\n active: ActiveTool | null;\r\n /**\r\n * Begin a tool flow. Returns a Promise resolving to the tool's typed\r\n * result (or null on cancel / replacement). Replaces any currently-active\r\n * tool by cancelling it first — only one in-world prompt at a time.\r\n */\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) => Promise<Result | null>;\r\n /** Settle the currently-active tool with a value (called by SendNUIMessage handler). */\r\n resolveActive: (value: unknown) => void;\r\n /** Cancel the currently-active tool (called by SendNUIMessage handler or programmatic cancel). */\r\n cancelActive: () => void;\r\n};\r\n\r\nexport const useAdminToolStore = create<AdminToolStore>((set, get) => ({\r\n active: null,\r\n begin: <Result>(spec: Omit<ActiveTool<Result>, \"resolve\">) =>\r\n new Promise<Result | null>((resolve) => {\r\n const prev = get().active;\r\n if (prev) prev.resolve(null); // bump the previous tool out\r\n set({ active: { ...spec, resolve: resolve as ActiveTool[\"resolve\"] } });\r\n }),\r\n resolveActive: (value) => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(value);\r\n set({ active: null });\r\n },\r\n cancelActive: () => {\r\n const cur = get().active;\r\n if (!cur) return;\r\n cur.resolve(null);\r\n set({ active: null });\r\n },\r\n}));\r\n","import { alpha, ColorInput, createTheme, MantineTheme, MultiSelect, NumberInput, TextInput } from \"@mantine/core\";\r\n\r\nexport const label = {\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase', \r\n};\r\nexport const error = {\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n fontFamily: 'Akrobat Regular',\r\n};\r\nexport const description = {\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n};\r\n\r\nexport const genericInputStyles = {\r\n styles: {\r\n label: label,\r\n error: error,\r\n description: description,\r\n \r\n input:{\r\n background: 'rgba(255,255,255,0.04)',\r\n border: '0.1vh solid rgba(255,255,255,0.08)',\r\n color: 'rgba(255,255,255,0.85)',\r\n minHeight: '4vh',\r\n },\r\n },\r\n};\r\n\r\nconst theme = createTheme({\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n defaultRadius: \"xs\",\r\n fontFamily: \"Akrobat Regular, sans-serif\",\r\n\r\n radius:{\r\n xxs: '0.3vh',\r\n xs: '0.5vh',\r\n sm: '0.75vh',\r\n md: '1vh',\r\n lg: '1.5vh',\r\n xl: '2vh',\r\n xxl: '3vh',\r\n },\r\n\r\n fontSizes: {\r\n xxs: '1.2vh',\r\n xs: '1.5vh',\r\n sm: '1.8vh',\r\n md: '2.2vh',\r\n lg: '2.8vh',\r\n xl: '3.3vh',\r\n xxl: '3.8vh',\r\n },\r\n\r\n lineHeights: {\r\n xxs: '1.4vh',\r\n xs: '1.8vh',\r\n sm: '2.2vh',\r\n md: '2.8vh',\r\n lg: '3.3vh',\r\n xl: '3.8vh',\r\n },\r\n\r\n spacing:{\r\n xxs: '0.5vh',\r\n xs: '0.75vh',\r\n sm: '1.5vh',\r\n md: '2vh',\r\n lg: '3vh',\r\n xl: '4vh',\r\n xxl: '5vh',\r\n },\r\n\r\n components:{\r\n Progress:{\r\n styles:{\r\n label: {\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase', \r\n },\r\n\r\n root:{\r\n backgroundColor: 'rgba(77, 77, 77, 0.4)',\r\n },\r\n \r\n }\r\n },\r\n \r\n \r\n Input: genericInputStyles,\r\n TextInput: genericInputStyles,\r\n NumberInput: genericInputStyles,\r\n Select: genericInputStyles,\r\n MultiSelect: genericInputStyles,\r\n Textarea: genericInputStyles,\r\n ColorInput: genericInputStyles,\r\n DateInput: genericInputStyles,\r\n\r\n // Mantine's <Button> defaults to rem-based heights (xs ≈ 1.875rem)\r\n // which doesn't match this theme's vh-based input min-heights, so\r\n // `<Button size=\"xs\">` rendered next to `<TextInput size=\"xs\">` ends\r\n // up visibly shorter. Pin the button heights to the same vh values\r\n // the inputs use so xs-everything lines up out of the box.\r\n Button: {\r\n styles: {\r\n label: {\r\n fontFamily: 'Akrobat Bold',\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n },\r\n root: {\r\n // Mantine maps these to --button-height per size; setting them\r\n // directly here keeps native Button sizing logic intact.\r\n },\r\n },\r\n vars: (_theme: MantineTheme, props: { size?: string }) => {\r\n const heights: Record<string, string> = {\r\n xs: '4vh',\r\n sm: '4.5vh',\r\n md: '5vh',\r\n lg: '5.5vh',\r\n xl: '6vh',\r\n };\r\n const h = heights[props.size ?? 'sm'] ?? '4.5vh';\r\n return {\r\n root: {\r\n '--button-height': h,\r\n },\r\n };\r\n },\r\n },\r\n\r\n Pill: {\r\n styles: (theme: MantineTheme) => ({\r\n root: {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n backgroundColor: 'rgba(76, 76, 76, 0.3)',\r\n height: 'fit-content',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n fontFamily: 'Akrobat Bold',\r\n fontSize: '1.25vh',\r\n borderRadius: theme.defaultRadius,\r\n paddingBottom: '0.5vh',\r\n paddingTop: '0.5vh',\r\n }\r\n })\r\n },\r\n\r\n // Mantine's <Tooltip> defaults to a white card with black text — looks\r\n // jarring against every dirk consumer's dark configurator. Every script\r\n // used to hand-paste this dark style block per Tooltip; centralised here\r\n // so consumers get the right look automatically and never need to think\r\n // about it again.\r\n Tooltip: {\r\n styles: (theme: MantineTheme) => ({\r\n tooltip: {\r\n background: alpha(theme.colors.dark[7], 0.95),\r\n border: '0.1vh solid rgba(255,255,255,0.1)',\r\n color: 'rgba(255,255,255,0.75)',\r\n fontFamily: 'Akrobat Bold',\r\n fontSize: '1.3vh',\r\n lineHeight: 1.3,\r\n padding: '0.6vh 0.8vh',\r\n letterSpacing: '0.03em',\r\n },\r\n }),\r\n },\r\n\r\n },\r\n\r\n colors: {\r\n\r\n dirk:[\r\n \"#ffffff\",\r\n \"#f3fce9\",\r\n \"#dbf5bd\",\r\n \"#c3ee91\",\r\n \"#ace765\",\r\n \"#94e039\",\r\n \"#7ac61f\",\r\n \"#5f9a18\",\r\n \"#29420a\",\r\n \"#446e11\",\r\n ],\r\n },\r\n});\r\n\r\n\r\nexport default theme;","import type { MantineColorsTuple, MantineThemeOverride } from \"@mantine/core\";\r\n\r\nconst isValidColorScale = (v: unknown): v is MantineColorsTuple =>\r\n Array.isArray(v) && v.length === 10 && v.every((shade) => typeof shade === \"string\");\r\n\r\nexport function mergeMantineThemeSafe(\r\n base: MantineThemeOverride,\r\n custom?: MantineColorsTuple,\r\n override?: MantineThemeOverride\r\n): MantineThemeOverride {\r\n const colors = { ...base.colors };\r\n\r\n if (custom && isValidColorScale(custom)) {\r\n colors[\"custom\"] = custom;\r\n } else if (!colors[\"custom\"]) {\r\n // Always register a \"custom\" entry so primaryColor === \"custom\" never\r\n // points at undefined and silently falls back to Mantine's default\r\n // (which surfaces as \"the configured palette didn't apply\").\r\n const fallback = (base.colors && (base.colors as any).dirk) as MantineColorsTuple | undefined;\r\n if (fallback && isValidColorScale(fallback)) {\r\n colors[\"custom\"] = fallback;\r\n }\r\n }\r\n\r\n return {\r\n ...base,\r\n ...override,\r\n colors: {\r\n ...colors,\r\n ...(override?.colors ?? {}),\r\n },\r\n };\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Box, Code, Stack, Text, Title } from \"@mantine/core\";\r\n\r\ntype State = {\r\n error: Error | null;\r\n stack?: string;\r\n};\r\n\r\nexport class DirkErrorBoundary extends React.Component<\r\n { children: React.ReactNode },\r\n State\r\n> {\r\n state: State = { error: null, stack: undefined };\r\n\r\n static getDerivedStateFromError(error: Error) {\r\n // We can't get component stack here, so just store the error\r\n return { error };\r\n }\r\n\r\n componentDidCatch(error: Error, info: React.ErrorInfo) {\r\n console.group(\"🔥 Dirk UI Crash\");\r\n console.error(\"Error:\", error);\r\n console.error(\"Component Stack:\", info.componentStack);\r\n console.groupEnd();\r\n\r\n // Only log here, don't call setState — the error state is already captured\r\n }\r\n\r\n render() {\r\n if (!this.state.error) return this.props.children;\r\n\r\n return (\r\n <Box\r\n style={{\r\n position: \"fixed\",\r\n inset: 0,\r\n width: \"100vw\",\r\n height: \"100vh\",\r\n background: \"rgba(10, 10, 12, 0.92)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: \"2rem\",\r\n zIndex: 999999,\r\n }}\r\n >\r\n <Box\r\n maw={900}\r\n w=\"100%\"\r\n p=\"lg\"\r\n style={{\r\n background: \"rgba(20,20,24,0.75)\",\r\n border: \"1px solid rgba(255,255,255,0.08)\",\r\n borderRadius: \"10px\",\r\n boxShadow: \"0 10px 40px rgba(0,0,0,0.6)\",\r\n }}\r\n >\r\n <Stack gap=\"sm\">\r\n <Title order={2} c=\"red.5\">\r\n Dirk UI Crash\r\n </Title>\r\n\r\n <Text c=\"dimmed\" size=\"sm\">\r\n The interface encountered a fatal error and stopped rendering.\r\n </Text>\r\n\r\n <Code block style={{ maxHeight: 150, overflow: \"auto\" }}>\r\n {this.state.error?.message}\r\n </Code>\r\n\r\n {/* Optional: show component stack if you pass it from props */}\r\n <Text size=\"xs\" c=\"dimmed\">\r\n Check console for full stack trace\r\n </Text>\r\n </Stack>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n}","// Internal. Auto-mounted by DirkProvider. Consumers never reference this\r\n// directly — it just exists in the tree so any admin-tool flow has its\r\n// NUI-message routing and admin-UI-hide effect wired up automatically.\r\n//\r\n// What it does (and DOESN'T do anymore):\r\n// • Subscribes to <toolId>_RESULT and <toolId>_CANCELLED NUI messages\r\n// from any admin tool and routes them into useAdminToolStore so\r\n// `await pickDoor()` etc. resolve.\r\n// • While a tool is active, applies a body attribute so the consumer\r\n// admin UI hides itself (so the player sees the world).\r\n//\r\n// What used to live here but doesn't anymore:\r\n// • Rendering the bottom-right InstructionPanel — that's now ALWAYS\r\n// driven by dirk_lib's own NUI via `lib.showInstructions`, so the\r\n// panel renders in one place regardless of where the tool was\r\n// triggered from. Avoids dual code paths and per-resource iframe\r\n// compositing differences that were eating immediate-mode draws.\r\n\r\nimport { useEffect } from \"react\";\r\nimport { useAdminToolStore } from \"./adminToolStore\";\r\n\r\n// Single global listener registration so multiple DirkProviders (if a\r\n// consumer ever stacks them) don't multiply-route the same message into\r\n// the store. Guarded by a module-level flag.\r\nlet listenerInstalled = false;\r\n\r\nfunction installNuiListener() {\r\n if (listenerInstalled || typeof window === \"undefined\") return;\r\n listenerInstalled = true;\r\n window.addEventListener(\"message\", (e) => {\r\n const msg = e?.data;\r\n if (!msg || typeof msg !== \"object\" || typeof msg.action !== \"string\") return;\r\n const action: string = msg.action;\r\n const cur = useAdminToolStore.getState().active;\r\n if (!cur) return;\r\n if (action === `${cur.id}_RESULT`) {\r\n useAdminToolStore.getState().resolveActive(msg.data ?? null);\r\n } else if (action === `${cur.id}_CANCELLED`) {\r\n useAdminToolStore.getState().cancelActive();\r\n }\r\n });\r\n}\r\n\r\n// CSS injected once that hides every body child except things tagged\r\n// with data-dirk-instruction-overlay. Used to make the consumer's\r\n// admin panel disappear so the player sees the world while picking.\r\nconst BODY_HIDE_STYLE_ID = \"dirk-instruction-panel-style\";\r\nconst BODY_HIDE_ATTR = \"data-dirk-instruction-active\";\r\nconst OVERLAY_ATTR = \"data-dirk-instruction-overlay\";\r\n\r\nfunction ensureBodyHideStyle() {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(BODY_HIDE_STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = BODY_HIDE_STYLE_ID;\r\n el.textContent = `\r\n body[${BODY_HIDE_ATTR}] > *:not([${OVERLAY_ATTR}]) {\r\n visibility: hidden !important;\r\n opacity: 0 !important;\r\n pointer-events: none !important;\r\n }\r\n `;\r\n document.head.appendChild(el);\r\n}\r\n\r\nexport function AdminOverlays() {\r\n const active = useAdminToolStore((s) => s.active);\r\n\r\n useEffect(() => {\r\n installNuiListener();\r\n }, []);\r\n\r\n // Body-hide effect — toggles the attribute while a tool is in flight\r\n // so the consumer admin UI vanishes and the player sees the world.\r\n useEffect(() => {\r\n if (!active || typeof document === \"undefined\") return;\r\n ensureBodyHideStyle();\r\n document.body.setAttribute(BODY_HIDE_ATTR, \"\");\r\n return () => {\r\n document.body.removeAttribute(BODY_HIDE_ATTR);\r\n };\r\n }, [active]);\r\n\r\n // Nothing visual to render — dirk_lib's NUI handles the bottom-right\r\n // InstructionPanel via lib.showInstructions.\r\n return null;\r\n}\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/fonts.css';\r\nimport './styles/notify.css';\r\nimport './styles/scrollBar.css';\r\nimport './styles/tornEdge.css';\r\n\r\n\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nlibrary.add(fas, far, fab);\r\n\r\nimport theme from \"@/theme\";\r\nimport { BackgroundImage, MantineColorShade, MantineColorsTuple, MantineProvider } from \"@mantine/core\";\r\nimport { useEffect, useLayoutEffect, useMemo, useState } from \"react\";\r\n\r\nimport { useNuiEvent } from \"@/hooks/useNuiEvent\";\r\nimport { fetchNui, isEnvBrowser } from \"@/utils\";\r\nimport { localeStore } from \"@/utils/locales\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { SettingsState, useSettings } from \"@/utils/useSettings\";\r\nimport { getScriptConfigInstance } from \"@/hooks/useScriptConfig\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { AdminOverlays } from \"@/components/AdminTools/AdminOverlays\";\r\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\r\n\r\n// Shared QueryClient for every consumer of <DirkProvider>. Hooks in this\r\n// library (usePlayers, ConfigPanel's history pagination, MissingItemsBanner\r\n// audit, etc.) all consume this so consumers don't need to wire their own\r\n// QueryClientProvider. Defaults match what ConfigPanel previously used in\r\n// its private QueryClient so the move doesn't change refetch cadence.\r\n//\r\n// Consumers that already wrap in their own outer QueryClientProvider (e.g.\r\n// dirk_fishing's App.tsx) still work — react-query picks the nearest\r\n// provider in the tree, and \"nearest\" here means this inner one. Anything\r\n// inside DirkProvider uses this client; anything outside uses the consumer's\r\n// outer one (if present).\r\nexport const dirkQueryClient = new QueryClient({\r\n defaultOptions: { queries: { staleTime: 30_000, gcTime: 5 * 60_000 } },\r\n});\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n overideResourceName?: string;\r\n themeOverride?: any;\r\n};\r\n\r\n// Shape DirkProvider looks for at `scriptConfig.theme` to detect a per-resource\r\n// theme override. Consumers opt in by adding a `theme` block to their schema.json\r\n// with these four fields — DirkProvider auto-detects and applies it. Resources\r\n// with no `theme` block (or `useOverride: false`) follow the global dirk_lib\r\n// theme as before. No bridge component, no extra wiring required from consumers.\r\ntype ScriptConfigThemeOverride = {\r\n useOverride?: boolean;\r\n primaryColor?: string;\r\n primaryShade?: number;\r\n customTheme?: MantineColorsTuple | string[];\r\n};\r\n\r\nexport function DirkProvider({ children, overideResourceName, themeOverride }: DirkProviderProps) {\r\n const {\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // Subscribe to locale changes so the entire tree re-renders when an admin\r\n // updates `language` via dirk_lib's scriptConfig — components calling\r\n // `locale(\"Foo\")` directly (no hook) get fresh strings on the next render.\r\n const _locales = localeStore((s) => s.locales);\r\n void _locales;\r\n\r\n // Per-resource theme override snapshot, read from `scriptConfig.theme` when\r\n // the consumer has a scriptConfig registered. Updated by the subscription\r\n // below; survives Mantine recomputes via useMemo deps.\r\n const [scTheme, setScTheme] = useState<ScriptConfigThemeOverride | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n useSettings.setState({\r\n overideResourceName,\r\n });\r\n }, [overideResourceName]);\r\n\r\n useEffect(() => {\r\n fetchNui('NUI_READY').catch(() => {});\r\n Promise.all([\r\n fetchNui<Partial<SettingsState>>('GET_SETTINGS'),\r\n fetchNui<{ version?: string }>('GET_RESOURCE_VERSION', undefined, { version: 'dev' }),\r\n ]).then(([data, resourceInfo]) => {\r\n useSettings.setState({\r\n ...data,\r\n resourceVersion: resourceInfo?.version || 'dev',\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n }, []);\r\n\r\n // Live updates: dirk_lib broadcasts UPDATE_DIRK_LIB_SETTINGS whenever an admin\r\n // changes appearance/localization via the scriptConfig UI. Merge the partial\r\n // patch into the settings store so theme / currency / branding update live\r\n // without a resource restart. Per-resource theme override is handled below\r\n // via the scriptConfig subscription — pushes here can flow through unchanged.\r\n useNuiEvent<Partial<SettingsState>>('UPDATE_DIRK_LIB_SETTINGS', (data) => {\r\n if (!data || typeof data !== 'object') return;\r\n useSettings.setState(data);\r\n });\r\n\r\n // ── Per-resource theme auto-detect ────────────────────────────────────────\r\n // If the consumer has called createScriptConfig() (i.e. has a registered\r\n // scriptConfig instance) AND their schema has a `theme` block with\r\n // `useOverride: true`, DirkProvider uses those theme values instead of\r\n // dirk_lib's global appearance. Consumers don't have to write any glue\r\n // code — they just add the `theme` block to schema.json and a Theme tab\r\n // (via ThemeOverrideSection) to their configurator. Everything else is\r\n // handled here.\r\n //\r\n // We also forward UPDATE_SCRIPT_CONFIG pushes into the store so this works\r\n // whether or not the consumer remembers to call useScriptConfigHooks().\r\n useNuiEvent<{ config?: Record<string, unknown>; clientVersion?: number }>(\r\n 'UPDATE_SCRIPT_CONFIG',\r\n (data) => {\r\n if (!data || !data.config || typeof data.config !== 'object') return;\r\n try {\r\n const inst = getScriptConfigInstance<Record<string, unknown>>();\r\n inst.store.setState((prev) => ({ ...prev, ...(data.config as Record<string, unknown>) }));\r\n } catch {\r\n // No scriptConfig instance registered — consumer doesn't use scriptConfig, ignore.\r\n }\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n let unsubscribe: (() => void) | undefined;\r\n try {\r\n const inst = getScriptConfigInstance<{ theme?: ScriptConfigThemeOverride }>();\r\n\r\n // Seed from whatever's already in the store (covers cases where the\r\n // store was hydrated before DirkProvider mounted, e.g. by an upstream\r\n // ConfigPanel open).\r\n setScTheme((inst.store.getState() as { theme?: ScriptConfigThemeOverride })?.theme ?? null);\r\n\r\n // Subscribe to store mutations so live edits / hydration completion\r\n // re-trigger the override application.\r\n const subscribable = inst.store as unknown as {\r\n subscribe?: (listener: (s: { theme?: ScriptConfigThemeOverride }) => void) => () => void;\r\n };\r\n if (typeof subscribable.subscribe === 'function') {\r\n unsubscribe = subscribable.subscribe((s) => {\r\n setScTheme(s?.theme ?? null);\r\n });\r\n }\r\n\r\n // Option B: NO proactive GET_FULL_SCRIPT_CONFIG round-trip here. The\r\n // client-visible config (which includes the `theme` block — it is NOT\r\n // server-only) is pushed by dirk_lib via UPDATE_SCRIPT_CONFIG and lands\r\n // in the store. The store `subscribe` above updates `scTheme` the moment\r\n // that push arrives, and the seed `setScTheme(...)` from the current\r\n // store state covers the case where the push beat this mount. This drops\r\n // the per-mount full-config fetch entirely — reopen/reload = store hit,\r\n // 0 bytes. The cold-start NUI-readiness race is handled on the Lua side\r\n // (the push is (re)sent once the NUI signals NUI_READY).\r\n } catch {\r\n // No scriptConfig instance — consumer doesn't use scriptConfig at all.\r\n // Fall through silently; global theme behaviour is unchanged.\r\n }\r\n return () => { unsubscribe?.(); };\r\n }, []);\r\n\r\n const overrideActive = scTheme?.useOverride === true;\r\n const effectivePrimaryColor = overrideActive ? (scTheme!.primaryColor ?? primaryColor) : primaryColor;\r\n const effectivePrimaryShade = overrideActive ? (scTheme!.primaryShade ?? primaryShade) : primaryShade;\r\n const effectiveCustomTheme = overrideActive\r\n ? ((scTheme!.customTheme as MantineColorsTuple | undefined) ?? customTheme)\r\n : customTheme;\r\n\r\n const mergedTheme = useMemo(\r\n () => mergeMantineThemeSafe(\r\n { ...theme, primaryColor: effectivePrimaryColor, primaryShade: effectivePrimaryShade as MantineColorShade },\r\n effectiveCustomTheme,\r\n themeOverride\r\n ),\r\n [effectivePrimaryColor, effectivePrimaryShade, effectiveCustomTheme, themeOverride]\r\n );\r\n\r\n useEffect(() => {\r\n document.body.style.fontFamily =\r\n game === \"rdr3\"\r\n ? '\"Red Dead\", sans-serif'\r\n : '\"Akrobat Regular\", sans-serif';\r\n }, [game]);\r\n\r\n const content = isEnvBrowser() ? (\r\n <BackgroundImage\r\n w=\"100vw\"\r\n h=\"100vh\"\r\n src={game === \"fivem\"\r\n ? \"https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg\"\r\n : \"https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg\"}\r\n >\r\n {children}\r\n </BackgroundImage>\r\n ) : (\r\n children\r\n );\r\n\r\n return (\r\n <QueryClientProvider client={dirkQueryClient}>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n <DirkErrorBoundary>\r\n {content}\r\n {/* Auto-mounted. Renders nothing unless an admin tool is active.\r\n Consumers never have to wire this up themselves — every admin\r\n tool flow that uses useAdminToolStore.begin() gets the\r\n bottom-right InstructionPanel + NUI message routing for free. */}\r\n <AdminOverlays />\r\n </DirkErrorBoundary>\r\n </MantineProvider>\r\n </QueryClientProvider>\r\n );\r\n}\r\n"]}
|
|
@@ -1,297 +1,297 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
3
|
+
var chunkHG2J72NC_cjs = require('../chunk-HG2J72NC.cjs');
|
|
4
|
+
require('../chunk-HOVRS2Z6.cjs');
|
|
5
|
+
var chunkEOSHBZQK_cjs = require('../chunk-EOSHBZQK.cjs');
|
|
6
|
+
require('../chunk-6CNT35D6.cjs');
|
|
7
|
+
require('../chunk-5XODUPUE.cjs');
|
|
8
8
|
require('../chunk-4DE2IREA.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
Object.defineProperty(exports, "AccessOverrideSection", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkHG2J72NC_cjs.AccessOverrideSection; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "AccountSelect", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkHG2J72NC_cjs.AccountSelect; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "AdminPageTitle", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkHG2J72NC_cjs.AdminPageTitle; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "AnimPostFxSelect", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkHG2J72NC_cjs.AnimPostFxSelect; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "AsyncSaveButton", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkHG2J72NC_cjs.AsyncSaveButton; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "BlipColorSelect", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkHG2J72NC_cjs.BlipColorSelect; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "BlipDisplaySelect", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkHG2J72NC_cjs.BlipDisplaySelect; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "BlipIconSelect", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkHG2J72NC_cjs.BlipIconSelect; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "BlipMarker", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkHG2J72NC_cjs.BlipMarker; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "BorderedIcon", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkHG2J72NC_cjs.BorderedIcon; }
|
|
51
51
|
});
|
|
52
52
|
Object.defineProperty(exports, "CategorySelect", {
|
|
53
53
|
enumerable: true,
|
|
54
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunkHG2J72NC_cjs.CategorySelect; }
|
|
55
55
|
});
|
|
56
56
|
Object.defineProperty(exports, "ConfigPanel", {
|
|
57
57
|
enumerable: true,
|
|
58
|
-
get: function () { return
|
|
58
|
+
get: function () { return chunkHG2J72NC_cjs.ConfigPanel; }
|
|
59
59
|
});
|
|
60
60
|
Object.defineProperty(exports, "ConfirmModal", {
|
|
61
61
|
enumerable: true,
|
|
62
|
-
get: function () { return
|
|
62
|
+
get: function () { return chunkHG2J72NC_cjs.ConfirmModal; }
|
|
63
63
|
});
|
|
64
64
|
Object.defineProperty(exports, "ControlMultiSelect", {
|
|
65
65
|
enumerable: true,
|
|
66
|
-
get: function () { return
|
|
66
|
+
get: function () { return chunkHG2J72NC_cjs.ControlMultiSelect; }
|
|
67
67
|
});
|
|
68
68
|
Object.defineProperty(exports, "ControlSelect", {
|
|
69
69
|
enumerable: true,
|
|
70
|
-
get: function () { return
|
|
70
|
+
get: function () { return chunkHG2J72NC_cjs.ControlSelect; }
|
|
71
71
|
});
|
|
72
72
|
Object.defineProperty(exports, "Counter", {
|
|
73
73
|
enumerable: true,
|
|
74
|
-
get: function () { return
|
|
74
|
+
get: function () { return chunkHG2J72NC_cjs.Counter; }
|
|
75
75
|
});
|
|
76
76
|
Object.defineProperty(exports, "DiscordRoleSelect", {
|
|
77
77
|
enumerable: true,
|
|
78
|
-
get: function () { return
|
|
78
|
+
get: function () { return chunkHG2J72NC_cjs.DiscordRoleSelect; }
|
|
79
79
|
});
|
|
80
80
|
Object.defineProperty(exports, "DoorPickerButton", {
|
|
81
81
|
enumerable: true,
|
|
82
|
-
get: function () { return
|
|
82
|
+
get: function () { return chunkHG2J72NC_cjs.DoorPickerButton; }
|
|
83
83
|
});
|
|
84
84
|
Object.defineProperty(exports, "FiveMKeyBindInput", {
|
|
85
85
|
enumerable: true,
|
|
86
|
-
get: function () { return
|
|
86
|
+
get: function () { return chunkHG2J72NC_cjs.FiveMKeyBindInput; }
|
|
87
87
|
});
|
|
88
88
|
Object.defineProperty(exports, "FloatingParticles", {
|
|
89
89
|
enumerable: true,
|
|
90
|
-
get: function () { return
|
|
90
|
+
get: function () { return chunkHG2J72NC_cjs.FloatingParticles; }
|
|
91
91
|
});
|
|
92
92
|
Object.defineProperty(exports, "GroupName", {
|
|
93
93
|
enumerable: true,
|
|
94
|
-
get: function () { return
|
|
94
|
+
get: function () { return chunkHG2J72NC_cjs.GroupName; }
|
|
95
95
|
});
|
|
96
96
|
Object.defineProperty(exports, "GroupRank", {
|
|
97
97
|
enumerable: true,
|
|
98
|
-
get: function () { return
|
|
98
|
+
get: function () { return chunkHG2J72NC_cjs.GroupRank; }
|
|
99
99
|
});
|
|
100
100
|
Object.defineProperty(exports, "GroupSelect", {
|
|
101
101
|
enumerable: true,
|
|
102
|
-
get: function () { return
|
|
102
|
+
get: function () { return chunkHG2J72NC_cjs.GroupSelect; }
|
|
103
103
|
});
|
|
104
104
|
Object.defineProperty(exports, "InfoBox", {
|
|
105
105
|
enumerable: true,
|
|
106
|
-
get: function () { return
|
|
106
|
+
get: function () { return chunkHG2J72NC_cjs.InfoBox; }
|
|
107
107
|
});
|
|
108
108
|
Object.defineProperty(exports, "InputContainer", {
|
|
109
109
|
enumerable: true,
|
|
110
|
-
get: function () { return
|
|
110
|
+
get: function () { return chunkHG2J72NC_cjs.InputContainer; }
|
|
111
111
|
});
|
|
112
112
|
Object.defineProperty(exports, "InstructionPanel", {
|
|
113
113
|
enumerable: true,
|
|
114
|
-
get: function () { return
|
|
114
|
+
get: function () { return chunkHG2J72NC_cjs.InstructionPanel; }
|
|
115
115
|
});
|
|
116
116
|
Object.defineProperty(exports, "LevelBanner", {
|
|
117
117
|
enumerable: true,
|
|
118
|
-
get: function () { return
|
|
118
|
+
get: function () { return chunkHG2J72NC_cjs.LevelBanner; }
|
|
119
119
|
});
|
|
120
120
|
Object.defineProperty(exports, "LevelPanel", {
|
|
121
121
|
enumerable: true,
|
|
122
|
-
get: function () { return
|
|
122
|
+
get: function () { return chunkHG2J72NC_cjs.LevelPanel; }
|
|
123
123
|
});
|
|
124
124
|
Object.defineProperty(exports, "Map", {
|
|
125
125
|
enumerable: true,
|
|
126
|
-
get: function () { return
|
|
126
|
+
get: function () { return chunkHG2J72NC_cjs.Map; }
|
|
127
127
|
});
|
|
128
128
|
Object.defineProperty(exports, "MapLayer", {
|
|
129
129
|
enumerable: true,
|
|
130
|
-
get: function () { return
|
|
130
|
+
get: function () { return chunkHG2J72NC_cjs.MapLayer; }
|
|
131
131
|
});
|
|
132
132
|
Object.defineProperty(exports, "MissingItemsBanner", {
|
|
133
133
|
enumerable: true,
|
|
134
|
-
get: function () { return
|
|
134
|
+
get: function () { return chunkHG2J72NC_cjs.MissingItemsBanner; }
|
|
135
135
|
});
|
|
136
136
|
Object.defineProperty(exports, "Modal", {
|
|
137
137
|
enumerable: true,
|
|
138
|
-
get: function () { return
|
|
138
|
+
get: function () { return chunkHG2J72NC_cjs.Modal; }
|
|
139
139
|
});
|
|
140
140
|
Object.defineProperty(exports, "ModalContext", {
|
|
141
141
|
enumerable: true,
|
|
142
|
-
get: function () { return
|
|
142
|
+
get: function () { return chunkHG2J72NC_cjs.ModalContext; }
|
|
143
143
|
});
|
|
144
144
|
Object.defineProperty(exports, "ModalProvider", {
|
|
145
145
|
enumerable: true,
|
|
146
|
-
get: function () { return
|
|
146
|
+
get: function () { return chunkHG2J72NC_cjs.ModalProvider; }
|
|
147
147
|
});
|
|
148
148
|
Object.defineProperty(exports, "ModelSelect", {
|
|
149
149
|
enumerable: true,
|
|
150
|
-
get: function () { return
|
|
150
|
+
get: function () { return chunkHG2J72NC_cjs.ModelSelect; }
|
|
151
151
|
});
|
|
152
152
|
Object.defineProperty(exports, "MotionFlex", {
|
|
153
153
|
enumerable: true,
|
|
154
|
-
get: function () { return
|
|
154
|
+
get: function () { return chunkHG2J72NC_cjs.MotionFlex; }
|
|
155
155
|
});
|
|
156
156
|
Object.defineProperty(exports, "MotionIcon", {
|
|
157
157
|
enumerable: true,
|
|
158
|
-
get: function () { return
|
|
158
|
+
get: function () { return chunkHG2J72NC_cjs.MotionIcon; }
|
|
159
159
|
});
|
|
160
160
|
Object.defineProperty(exports, "MotionImage", {
|
|
161
161
|
enumerable: true,
|
|
162
|
-
get: function () { return
|
|
162
|
+
get: function () { return chunkHG2J72NC_cjs.MotionImage; }
|
|
163
163
|
});
|
|
164
164
|
Object.defineProperty(exports, "MotionText", {
|
|
165
165
|
enumerable: true,
|
|
166
|
-
get: function () { return
|
|
166
|
+
get: function () { return chunkHG2J72NC_cjs.MotionText; }
|
|
167
167
|
});
|
|
168
168
|
Object.defineProperty(exports, "NavBar", {
|
|
169
169
|
enumerable: true,
|
|
170
|
-
get: function () { return
|
|
170
|
+
get: function () { return chunkHG2J72NC_cjs.NavBar; }
|
|
171
171
|
});
|
|
172
172
|
Object.defineProperty(exports, "NavigationContext", {
|
|
173
173
|
enumerable: true,
|
|
174
|
-
get: function () { return
|
|
174
|
+
get: function () { return chunkHG2J72NC_cjs.NavigationContext; }
|
|
175
175
|
});
|
|
176
176
|
Object.defineProperty(exports, "NavigationProvider", {
|
|
177
177
|
enumerable: true,
|
|
178
|
-
get: function () { return
|
|
178
|
+
get: function () { return chunkHG2J72NC_cjs.NavigationProvider; }
|
|
179
179
|
});
|
|
180
180
|
Object.defineProperty(exports, "PlayerSelect", {
|
|
181
181
|
enumerable: true,
|
|
182
|
-
get: function () { return
|
|
182
|
+
get: function () { return chunkHG2J72NC_cjs.PlayerSelect; }
|
|
183
183
|
});
|
|
184
184
|
Object.defineProperty(exports, "PositionPicker", {
|
|
185
185
|
enumerable: true,
|
|
186
|
-
get: function () { return
|
|
186
|
+
get: function () { return chunkHG2J72NC_cjs.PositionPicker; }
|
|
187
187
|
});
|
|
188
188
|
Object.defineProperty(exports, "PromptModal", {
|
|
189
189
|
enumerable: true,
|
|
190
|
-
get: function () { return
|
|
190
|
+
get: function () { return chunkHG2J72NC_cjs.PromptModal; }
|
|
191
191
|
});
|
|
192
192
|
Object.defineProperty(exports, "ScenarioSelect", {
|
|
193
193
|
enumerable: true,
|
|
194
|
-
get: function () { return
|
|
194
|
+
get: function () { return chunkHG2J72NC_cjs.ScenarioSelect; }
|
|
195
195
|
});
|
|
196
196
|
Object.defineProperty(exports, "SegmentedControl", {
|
|
197
197
|
enumerable: true,
|
|
198
|
-
get: function () { return
|
|
198
|
+
get: function () { return chunkHG2J72NC_cjs.SegmentedControl; }
|
|
199
199
|
});
|
|
200
200
|
Object.defineProperty(exports, "SegmentedProgress", {
|
|
201
201
|
enumerable: true,
|
|
202
|
-
get: function () { return
|
|
202
|
+
get: function () { return chunkHG2J72NC_cjs.SegmentedProgress; }
|
|
203
203
|
});
|
|
204
204
|
Object.defineProperty(exports, "SelectItem", {
|
|
205
205
|
enumerable: true,
|
|
206
|
-
get: function () { return
|
|
206
|
+
get: function () { return chunkHG2J72NC_cjs.SelectItem; }
|
|
207
207
|
});
|
|
208
208
|
Object.defineProperty(exports, "SwitchPanel", {
|
|
209
209
|
enumerable: true,
|
|
210
|
-
get: function () { return
|
|
210
|
+
get: function () { return chunkHG2J72NC_cjs.SwitchPanel; }
|
|
211
211
|
});
|
|
212
212
|
Object.defineProperty(exports, "TestBed", {
|
|
213
213
|
enumerable: true,
|
|
214
|
-
get: function () { return
|
|
214
|
+
get: function () { return chunkHG2J72NC_cjs.TestBed; }
|
|
215
215
|
});
|
|
216
216
|
Object.defineProperty(exports, "ThemeOverrideSection", {
|
|
217
217
|
enumerable: true,
|
|
218
|
-
get: function () { return
|
|
218
|
+
get: function () { return chunkHG2J72NC_cjs.ThemeOverrideSection; }
|
|
219
219
|
});
|
|
220
220
|
Object.defineProperty(exports, "Title", {
|
|
221
221
|
enumerable: true,
|
|
222
|
-
get: function () { return
|
|
222
|
+
get: function () { return chunkHG2J72NC_cjs.Title; }
|
|
223
223
|
});
|
|
224
224
|
Object.defineProperty(exports, "Vector4DeleteButton", {
|
|
225
225
|
enumerable: true,
|
|
226
|
-
get: function () { return
|
|
226
|
+
get: function () { return chunkHG2J72NC_cjs.Vector4DeleteButton; }
|
|
227
227
|
});
|
|
228
228
|
Object.defineProperty(exports, "Vector4Display", {
|
|
229
229
|
enumerable: true,
|
|
230
|
-
get: function () { return
|
|
230
|
+
get: function () { return chunkHG2J72NC_cjs.Vector4Display; }
|
|
231
231
|
});
|
|
232
232
|
Object.defineProperty(exports, "VehicleSelect", {
|
|
233
233
|
enumerable: true,
|
|
234
|
-
get: function () { return
|
|
234
|
+
get: function () { return chunkHG2J72NC_cjs.VehicleSelect; }
|
|
235
235
|
});
|
|
236
236
|
Object.defineProperty(exports, "WorldPositionGotoButton", {
|
|
237
237
|
enumerable: true,
|
|
238
|
-
get: function () { return
|
|
238
|
+
get: function () { return chunkHG2J72NC_cjs.WorldPositionGotoButton; }
|
|
239
239
|
});
|
|
240
240
|
Object.defineProperty(exports, "WorldPositionPicker", {
|
|
241
241
|
enumerable: true,
|
|
242
|
-
get: function () { return
|
|
242
|
+
get: function () { return chunkHG2J72NC_cjs.WorldPositionPicker; }
|
|
243
243
|
});
|
|
244
244
|
Object.defineProperty(exports, "WorldPositionSetButton", {
|
|
245
245
|
enumerable: true,
|
|
246
|
-
get: function () { return
|
|
246
|
+
get: function () { return chunkHG2J72NC_cjs.WorldPositionSetButton; }
|
|
247
247
|
});
|
|
248
248
|
Object.defineProperty(exports, "ZoomControls", {
|
|
249
249
|
enumerable: true,
|
|
250
|
-
get: function () { return
|
|
250
|
+
get: function () { return chunkHG2J72NC_cjs.ZoomControls; }
|
|
251
251
|
});
|
|
252
252
|
Object.defineProperty(exports, "blipUrl", {
|
|
253
253
|
enumerable: true,
|
|
254
|
-
get: function () { return
|
|
254
|
+
get: function () { return chunkHG2J72NC_cjs.blipUrl; }
|
|
255
255
|
});
|
|
256
256
|
Object.defineProperty(exports, "blipUrlForSprite", {
|
|
257
257
|
enumerable: true,
|
|
258
|
-
get: function () { return
|
|
258
|
+
get: function () { return chunkHG2J72NC_cjs.blipUrlForSprite; }
|
|
259
259
|
});
|
|
260
260
|
Object.defineProperty(exports, "getBlipColor", {
|
|
261
261
|
enumerable: true,
|
|
262
|
-
get: function () { return
|
|
262
|
+
get: function () { return chunkHG2J72NC_cjs.getBlipColor; }
|
|
263
263
|
});
|
|
264
264
|
Object.defineProperty(exports, "getBlipEntry", {
|
|
265
265
|
enumerable: true,
|
|
266
|
-
get: function () { return
|
|
266
|
+
get: function () { return chunkHG2J72NC_cjs.getBlipEntry; }
|
|
267
267
|
});
|
|
268
268
|
Object.defineProperty(exports, "useMissingItemsAudit", {
|
|
269
269
|
enumerable: true,
|
|
270
|
-
get: function () { return
|
|
270
|
+
get: function () { return chunkHG2J72NC_cjs.useMissingItemsAudit; }
|
|
271
271
|
});
|
|
272
272
|
Object.defineProperty(exports, "useModal", {
|
|
273
273
|
enumerable: true,
|
|
274
|
-
get: function () { return
|
|
274
|
+
get: function () { return chunkHG2J72NC_cjs.useModal; }
|
|
275
275
|
});
|
|
276
276
|
Object.defineProperty(exports, "useModalActions", {
|
|
277
277
|
enumerable: true,
|
|
278
|
-
get: function () { return
|
|
278
|
+
get: function () { return chunkHG2J72NC_cjs.useModalActions; }
|
|
279
279
|
});
|
|
280
280
|
Object.defineProperty(exports, "useNavigation", {
|
|
281
281
|
enumerable: true,
|
|
282
|
-
get: function () { return
|
|
282
|
+
get: function () { return chunkHG2J72NC_cjs.useNavigation; }
|
|
283
283
|
});
|
|
284
284
|
Object.defineProperty(exports, "useNavigationStore", {
|
|
285
285
|
enumerable: true,
|
|
286
|
-
get: function () { return
|
|
286
|
+
get: function () { return chunkHG2J72NC_cjs.useNavigationStore; }
|
|
287
287
|
});
|
|
288
288
|
Object.defineProperty(exports, "usePickDoor", {
|
|
289
289
|
enumerable: true,
|
|
290
|
-
get: function () { return
|
|
290
|
+
get: function () { return chunkHG2J72NC_cjs.usePickDoor; }
|
|
291
291
|
});
|
|
292
292
|
Object.defineProperty(exports, "useAdminToolStore", {
|
|
293
293
|
enumerable: true,
|
|
294
|
-
get: function () { return
|
|
294
|
+
get: function () { return chunkEOSHBZQK_cjs.useAdminToolStore; }
|
|
295
295
|
});
|
|
296
296
|
//# sourceMappingURL=index.cjs.map
|
|
297
297
|
//# sourceMappingURL=index.cjs.map
|
package/dist/components/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { AccessOverrideSection, AccountSelect, AdminPageTitle, AnimPostFxSelect, AsyncSaveButton, BlipColorSelect, BlipDisplaySelect, BlipIconSelect, BlipMarker, BorderedIcon, CategorySelect, ConfigPanel, ConfirmModal, ControlMultiSelect, ControlSelect, Counter, DiscordRoleSelect, DoorPickerButton, FiveMKeyBindInput, FloatingParticles, GroupName, GroupRank, GroupSelect, InfoBox, InputContainer, InstructionPanel, LevelBanner, LevelPanel, Map, MapLayer, MissingItemsBanner, Modal, ModalContext, ModalProvider, ModelSelect, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, NavigationContext, NavigationProvider, PlayerSelect, PositionPicker, PromptModal, ScenarioSelect, SegmentedControl, SegmentedProgress, SelectItem, SwitchPanel, TestBed, ThemeOverrideSection, Title, Vector4DeleteButton, Vector4Display, VehicleSelect, WorldPositionGotoButton, WorldPositionPicker, WorldPositionSetButton, ZoomControls, blipUrl, blipUrlForSprite, getBlipColor, getBlipEntry, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore, usePickDoor } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
export { useAdminToolStore } from '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { AccessOverrideSection, AccountSelect, AdminPageTitle, AnimPostFxSelect, AsyncSaveButton, BlipColorSelect, BlipDisplaySelect, BlipIconSelect, BlipMarker, BorderedIcon, CategorySelect, ConfigPanel, ConfirmModal, ControlMultiSelect, ControlSelect, Counter, DiscordRoleSelect, DoorPickerButton, FiveMKeyBindInput, FloatingParticles, GroupName, GroupRank, GroupSelect, InfoBox, InputContainer, InstructionPanel, LevelBanner, LevelPanel, Map, MapLayer, MissingItemsBanner, Modal, ModalContext, ModalProvider, ModelSelect, MotionFlex, MotionIcon, MotionImage, MotionText, NavBar, NavigationContext, NavigationProvider, PlayerSelect, PositionPicker, PromptModal, ScenarioSelect, SegmentedControl, SegmentedProgress, SelectItem, SwitchPanel, TestBed, ThemeOverrideSection, Title, Vector4DeleteButton, Vector4Display, VehicleSelect, WorldPositionGotoButton, WorldPositionPicker, WorldPositionSetButton, ZoomControls, blipUrl, blipUrlForSprite, getBlipColor, getBlipEntry, useMissingItemsAudit, useModal, useModalActions, useNavigation, useNavigationStore, usePickDoor } from '../chunk-UGDMOWVM.js';
|
|
2
|
+
import '../chunk-ABBZHNLP.js';
|
|
3
|
+
export { useAdminToolStore } from '../chunk-WUALULEH.js';
|
|
4
|
+
import '../chunk-GFODSZSP.js';
|
|
5
|
+
import '../chunk-4QSXUENK.js';
|
|
6
6
|
import '../chunk-V6TY7KAL.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
8
8
|
//# sourceMappingURL=index.js.map
|