dirk-cfx-react 1.1.7 → 1.1.8
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/components/index.cjs +8 -10
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +9 -11
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.cjs +3 -5
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +3 -5
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.cjs +8 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -12
- package/dist/index.js.map +1 -1
- package/dist/providers/index.cjs +3 -6
- package/dist/providers/index.cjs.map +1 -1
- package/dist/providers/index.js +3 -6
- package/dist/providers/index.js.map +1 -1
- package/dist/utils/index.cjs +3 -5
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +0 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +3 -5
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
package/dist/providers/index.cjs
CHANGED
|
@@ -211,7 +211,6 @@ async function registerInitialFetch(eventName, data, mockData) {
|
|
|
211
211
|
|
|
212
212
|
// src/utils/useSettings.ts
|
|
213
213
|
var useSettings = zustand.create(() => ({
|
|
214
|
-
hydrated: false,
|
|
215
214
|
game: "fivem",
|
|
216
215
|
primaryColor: "dirk",
|
|
217
216
|
primaryShade: 9,
|
|
@@ -231,11 +230,10 @@ var useSettings = zustand.create(() => ({
|
|
|
231
230
|
}));
|
|
232
231
|
registerInitialFetch("GET_SETTINGS").then((data) => {
|
|
233
232
|
useSettings.setState({
|
|
234
|
-
...data
|
|
235
|
-
hydrated: true
|
|
233
|
+
...data
|
|
236
234
|
});
|
|
237
|
-
}).catch(() => {
|
|
238
|
-
|
|
235
|
+
}).catch((err) => {
|
|
236
|
+
console.error("Failed to fetch initial settings within dirk-cfx-react:", err);
|
|
239
237
|
});
|
|
240
238
|
|
|
241
239
|
// src/utils/mergeMantineTheme.ts
|
|
@@ -279,7 +277,6 @@ var DirkErrorBoundary = class extends React__default.default.Component {
|
|
|
279
277
|
fontawesomeSvgCore.library.add(freeSolidSvgIcons.fas, freeRegularSvgIcons.far, freeBrandsSvgIcons.fab);
|
|
280
278
|
function DirkProvider({ children, themeOverride }) {
|
|
281
279
|
const {
|
|
282
|
-
hydrated,
|
|
283
280
|
primaryColor,
|
|
284
281
|
primaryShade,
|
|
285
282
|
customTheme,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme.ts","../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/useSettings.ts","../../src/utils/mergeMantineTheme.ts","../../src/providers/DirkErrorBoundary.tsx","../../src/providers/DirkProvider.tsx"],"names":["createTheme","theme","create","React","error","jsxs","Box","jsx","Text","Code","library","fas","far","fab","useMemo","useEffect","BackgroundImage","MantineProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createTheme, MantineTheme, NumberInput } 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\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 Textarea: {\r\n styles:{\r\n label: label,\r\n error: error,\r\n },\r\n },\r\n\r\n Button:{\r\n styles:{\r\n root:{\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n },\r\n },\r\n },\r\n\r\n Select:{\r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\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: theme.fontSizes.xs,\r\n borderRadius: theme.defaultRadius,\r\n padding: `${theme.spacing.xs} ${theme.spacing.sm}`,\r\n }\r\n })\r\n },\r\n\r\n Input:{\r\n styles: {\r\n label: label,\r\n error: error,\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n backgroundColor: 'rgba(76, 76, 76, 0.3)', \r\n },\r\n },\r\n },\r\n ColorInput:{\r\n styles: {\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n },\r\n },\r\n TextInput:{\r\n styles:{\r\n label: label,\r\n wrapper:{\r\n \r\n },\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n \r\n \r\n },\r\n }\r\n },\r\n NumberInput:{\r\n \r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n section:{\r\n pointerEvents: 'all',\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;","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n const run = async () => {\r\n const results = await runFetches();\r\n };\r\n run();\r\n }, []);\r\n};\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\nimport { MantineColorsTuple } from \"@mantine/core\";\r\n\r\nexport type SettingsState = {\r\n hydrated: boolean;\r\n game: \"fivem\" | \"rdr3\";\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n customTheme?: MantineColorsTuple;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n hydrated: false,\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n customTheme: [\r\n \"#f0f4ff\",\r\n \"#d9e3ff\",\r\n \"#bfcfff\",\r\n \"#a6bbff\",\r\n \"#8ca7ff\",\r\n \"#7393ff\",\r\n \"#5a7fff\",\r\n \"#406bff\",\r\n \"#2547ff\",\r\n \"#0b33ff\",\r\n ],\r\n}));\r\n\r\n\r\nregisterInitialFetch<Partial<SettingsState>>(\"GET_SETTINGS\")\r\n .then((data) => {\r\n useSettings.setState({\r\n ...data,\r\n hydrated: true,\r\n });\r\n })\r\n .catch(() => {\r\n useSettings.setState({ hydrated: true });\r\n });\r\n","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 } \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, Text } from \"@mantine/core\";\r\n\r\nexport class DirkErrorBoundary extends React.Component<\r\n { children: React.ReactNode },\r\n { error: Error | null }\r\n> {\r\n state: { error: Error | null } = { error: null };\r\n\r\n static getDerivedStateFromError(error: 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);\r\n console.error(info.componentStack);\r\n console.groupEnd();\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 p=\"md\" bg=\"dark.8\">\r\n <Text c=\"red\" fw={600}>UI crashed</Text>\r\n <Code block mt=\"sm\">{this.state.error.message}</Code>\r\n </Box>\r\n );\r\n }\r\n}\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/notify.css';\r\nimport './styles/fonts.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 { MantineProvider, BackgroundImage, MantineColorShade } from \"@mantine/core\";\r\nimport { useMemo, useEffect } from \"react\";\r\nimport theme from \"@/theme\";\r\n\r\nimport { useSettings } from \"@/utils/useSettings\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { isEnvBrowser } from \"@/utils\";\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n themeOverride?: any;\r\n};\r\n\r\nexport function DirkProvider({ children, themeOverride }: DirkProviderProps) {\r\n const {\r\n hydrated,\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // 🚫 do not render until state is stable\r\n // if (!hydrated) return null;\r\n\r\n const mergedTheme = useMemo(\r\n () =>\r\n mergeMantineThemeSafe(\r\n { ...theme, primaryColor, primaryShade: primaryShade as MantineColorShade },\r\n customTheme,\r\n themeOverride\r\n ),\r\n [primaryColor, primaryShade, customTheme, 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 console.log(`%cNew Font Applied: ${document.body.style.fontFamily}`, \"font-family: \" + document.body.style.fontFamily); \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 <DirkErrorBoundary>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n {content}\r\n </MantineProvider>\r\n </DirkErrorBoundary>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/theme.ts","../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/useSettings.ts","../../src/utils/mergeMantineTheme.ts","../../src/providers/DirkErrorBoundary.tsx","../../src/providers/DirkProvider.tsx"],"names":["createTheme","theme","create","React","error","jsxs","Box","jsx","Text","Code","library","fas","far","fab","useMemo","useEffect","BackgroundImage","MantineProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createTheme, MantineTheme, NumberInput } 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\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 Textarea: {\r\n styles:{\r\n label: label,\r\n error: error,\r\n },\r\n },\r\n\r\n Button:{\r\n styles:{\r\n root:{\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n },\r\n },\r\n },\r\n\r\n Select:{\r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\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: theme.fontSizes.xs,\r\n borderRadius: theme.defaultRadius,\r\n padding: `${theme.spacing.xs} ${theme.spacing.sm}`,\r\n }\r\n })\r\n },\r\n\r\n Input:{\r\n styles: {\r\n label: label,\r\n error: error,\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n backgroundColor: 'rgba(76, 76, 76, 0.3)', \r\n },\r\n },\r\n },\r\n ColorInput:{\r\n styles: {\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n },\r\n },\r\n TextInput:{\r\n styles:{\r\n label: label,\r\n wrapper:{\r\n \r\n },\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n \r\n \r\n },\r\n }\r\n },\r\n NumberInput:{\r\n \r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n section:{\r\n pointerEvents: 'all',\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;","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n const run = async () => {\r\n const results = await runFetches();\r\n };\r\n run();\r\n }, []);\r\n};\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\nimport { MantineColorsTuple } from \"@mantine/core\";\r\n\r\nexport type SettingsState = {\r\n game: \"fivem\" | \"rdr3\";\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n customTheme?: MantineColorsTuple;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n customTheme: [\r\n \"#f0f4ff\",\r\n \"#d9e3ff\",\r\n \"#bfcfff\",\r\n \"#a6bbff\",\r\n \"#8ca7ff\",\r\n \"#7393ff\",\r\n \"#5a7fff\",\r\n \"#406bff\",\r\n \"#2547ff\",\r\n \"#0b33ff\",\r\n ],\r\n}));\r\n\r\n\r\nregisterInitialFetch<Partial<SettingsState>>(\"GET_SETTINGS\")\r\n .then((data) => {\r\n useSettings.setState({\r\n ...data,\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n","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 } \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, Text } from \"@mantine/core\";\r\n\r\nexport class DirkErrorBoundary extends React.Component<\r\n { children: React.ReactNode },\r\n { error: Error | null }\r\n> {\r\n state: { error: Error | null } = { error: null };\r\n\r\n static getDerivedStateFromError(error: 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);\r\n console.error(info.componentStack);\r\n console.groupEnd();\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 p=\"md\" bg=\"dark.8\">\r\n <Text c=\"red\" fw={600}>UI crashed</Text>\r\n <Code block mt=\"sm\">{this.state.error.message}</Code>\r\n </Box>\r\n );\r\n }\r\n}\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/notify.css';\r\nimport './styles/fonts.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 { MantineProvider, BackgroundImage, MantineColorShade } from \"@mantine/core\";\r\nimport { useMemo, useEffect } from \"react\";\r\nimport theme from \"@/theme\";\r\n\r\nimport { useSettings } from \"@/utils/useSettings\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { isEnvBrowser } from \"@/utils\";\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n themeOverride?: any;\r\n};\r\n\r\nexport function DirkProvider({ children, themeOverride }: DirkProviderProps) {\r\n const {\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // 🚫 do not render until state is stable\r\n\r\n const mergedTheme = useMemo(\r\n () =>\r\n mergeMantineThemeSafe(\r\n { ...theme, primaryColor, primaryShade: primaryShade as MantineColorShade },\r\n customTheme,\r\n themeOverride\r\n ),\r\n [primaryColor, primaryShade, customTheme, 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 console.log(`%cNew Font Applied: ${document.body.style.fontFamily}`, \"font-family: \" + document.body.style.fontFamily); \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 <DirkErrorBoundary>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n {content}\r\n </MantineProvider>\r\n </DirkErrorBoundary>\r\n );\r\n}\r\n"]}
|
package/dist/providers/index.js
CHANGED
|
@@ -205,7 +205,6 @@ async function registerInitialFetch(eventName, data, mockData) {
|
|
|
205
205
|
|
|
206
206
|
// src/utils/useSettings.ts
|
|
207
207
|
var useSettings = create(() => ({
|
|
208
|
-
hydrated: false,
|
|
209
208
|
game: "fivem",
|
|
210
209
|
primaryColor: "dirk",
|
|
211
210
|
primaryShade: 9,
|
|
@@ -225,11 +224,10 @@ var useSettings = create(() => ({
|
|
|
225
224
|
}));
|
|
226
225
|
registerInitialFetch("GET_SETTINGS").then((data) => {
|
|
227
226
|
useSettings.setState({
|
|
228
|
-
...data
|
|
229
|
-
hydrated: true
|
|
227
|
+
...data
|
|
230
228
|
});
|
|
231
|
-
}).catch(() => {
|
|
232
|
-
|
|
229
|
+
}).catch((err) => {
|
|
230
|
+
console.error("Failed to fetch initial settings within dirk-cfx-react:", err);
|
|
233
231
|
});
|
|
234
232
|
|
|
235
233
|
// src/utils/mergeMantineTheme.ts
|
|
@@ -273,7 +271,6 @@ var DirkErrorBoundary = class extends React.Component {
|
|
|
273
271
|
library.add(fas, far, fab);
|
|
274
272
|
function DirkProvider({ children, themeOverride }) {
|
|
275
273
|
const {
|
|
276
|
-
hydrated,
|
|
277
274
|
primaryColor,
|
|
278
275
|
primaryShade,
|
|
279
276
|
customTheme,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme.ts","../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/useSettings.ts","../../src/utils/mergeMantineTheme.ts","../../src/providers/DirkErrorBoundary.tsx","../../src/providers/DirkProvider.tsx"],"names":["theme","error","useEffect","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { createTheme, MantineTheme, NumberInput } 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\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 Textarea: {\r\n styles:{\r\n label: label,\r\n error: error,\r\n },\r\n },\r\n\r\n Button:{\r\n styles:{\r\n root:{\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n },\r\n },\r\n },\r\n\r\n Select:{\r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\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: theme.fontSizes.xs,\r\n borderRadius: theme.defaultRadius,\r\n padding: `${theme.spacing.xs} ${theme.spacing.sm}`,\r\n }\r\n })\r\n },\r\n\r\n Input:{\r\n styles: {\r\n label: label,\r\n error: error,\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n backgroundColor: 'rgba(76, 76, 76, 0.3)', \r\n },\r\n },\r\n },\r\n ColorInput:{\r\n styles: {\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n },\r\n },\r\n TextInput:{\r\n styles:{\r\n label: label,\r\n wrapper:{\r\n \r\n },\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n \r\n \r\n },\r\n }\r\n },\r\n NumberInput:{\r\n \r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n section:{\r\n pointerEvents: 'all',\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;","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n const run = async () => {\r\n const results = await runFetches();\r\n };\r\n run();\r\n }, []);\r\n};\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\nimport { MantineColorsTuple } from \"@mantine/core\";\r\n\r\nexport type SettingsState = {\r\n hydrated: boolean;\r\n game: \"fivem\" | \"rdr3\";\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n customTheme?: MantineColorsTuple;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n hydrated: false,\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n customTheme: [\r\n \"#f0f4ff\",\r\n \"#d9e3ff\",\r\n \"#bfcfff\",\r\n \"#a6bbff\",\r\n \"#8ca7ff\",\r\n \"#7393ff\",\r\n \"#5a7fff\",\r\n \"#406bff\",\r\n \"#2547ff\",\r\n \"#0b33ff\",\r\n ],\r\n}));\r\n\r\n\r\nregisterInitialFetch<Partial<SettingsState>>(\"GET_SETTINGS\")\r\n .then((data) => {\r\n useSettings.setState({\r\n ...data,\r\n hydrated: true,\r\n });\r\n })\r\n .catch(() => {\r\n useSettings.setState({ hydrated: true });\r\n });\r\n","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 } \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, Text } from \"@mantine/core\";\r\n\r\nexport class DirkErrorBoundary extends React.Component<\r\n { children: React.ReactNode },\r\n { error: Error | null }\r\n> {\r\n state: { error: Error | null } = { error: null };\r\n\r\n static getDerivedStateFromError(error: 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);\r\n console.error(info.componentStack);\r\n console.groupEnd();\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 p=\"md\" bg=\"dark.8\">\r\n <Text c=\"red\" fw={600}>UI crashed</Text>\r\n <Code block mt=\"sm\">{this.state.error.message}</Code>\r\n </Box>\r\n );\r\n }\r\n}\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/notify.css';\r\nimport './styles/fonts.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 { MantineProvider, BackgroundImage, MantineColorShade } from \"@mantine/core\";\r\nimport { useMemo, useEffect } from \"react\";\r\nimport theme from \"@/theme\";\r\n\r\nimport { useSettings } from \"@/utils/useSettings\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { isEnvBrowser } from \"@/utils\";\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n themeOverride?: any;\r\n};\r\n\r\nexport function DirkProvider({ children, themeOverride }: DirkProviderProps) {\r\n const {\r\n hydrated,\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // 🚫 do not render until state is stable\r\n // if (!hydrated) return null;\r\n\r\n const mergedTheme = useMemo(\r\n () =>\r\n mergeMantineThemeSafe(\r\n { ...theme, primaryColor, primaryShade: primaryShade as MantineColorShade },\r\n customTheme,\r\n themeOverride\r\n ),\r\n [primaryColor, primaryShade, customTheme, 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 console.log(`%cNew Font Applied: ${document.body.style.fontFamily}`, \"font-family: \" + document.body.style.fontFamily); \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 <DirkErrorBoundary>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n {content}\r\n </MantineProvider>\r\n </DirkErrorBoundary>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/theme.ts","../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/useSettings.ts","../../src/utils/mergeMantineTheme.ts","../../src/providers/DirkErrorBoundary.tsx","../../src/providers/DirkProvider.tsx"],"names":["theme","error","useEffect","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { createTheme, MantineTheme, NumberInput } 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\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 Textarea: {\r\n styles:{\r\n label: label,\r\n error: error,\r\n },\r\n },\r\n\r\n Button:{\r\n styles:{\r\n root:{\r\n fontSize: 'var(--mantine-font-size-xs)',\r\n },\r\n },\r\n },\r\n\r\n Select:{\r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\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: theme.fontSizes.xs,\r\n borderRadius: theme.defaultRadius,\r\n padding: `${theme.spacing.xs} ${theme.spacing.sm}`,\r\n }\r\n })\r\n },\r\n\r\n Input:{\r\n styles: {\r\n label: label,\r\n error: error,\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n backgroundColor: 'rgba(76, 76, 76, 0.3)', \r\n },\r\n },\r\n },\r\n ColorInput:{\r\n styles: {\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n },\r\n },\r\n TextInput:{\r\n styles:{\r\n label: label,\r\n wrapper:{\r\n \r\n },\r\n section:{\r\n marginRight: '0.2vh',\r\n },\r\n\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n \r\n \r\n },\r\n }\r\n },\r\n NumberInput:{\r\n \r\n styles:{\r\n label: label,\r\n input:{\r\n padding: 'var(--mantine-spacing-sm)',\r\n },\r\n section:{\r\n pointerEvents: 'all',\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;","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n const run = async () => {\r\n const results = await runFetches();\r\n };\r\n run();\r\n }, []);\r\n};\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\nimport { MantineColorsTuple } from \"@mantine/core\";\r\n\r\nexport type SettingsState = {\r\n game: \"fivem\" | \"rdr3\";\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n customTheme?: MantineColorsTuple;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n customTheme: [\r\n \"#f0f4ff\",\r\n \"#d9e3ff\",\r\n \"#bfcfff\",\r\n \"#a6bbff\",\r\n \"#8ca7ff\",\r\n \"#7393ff\",\r\n \"#5a7fff\",\r\n \"#406bff\",\r\n \"#2547ff\",\r\n \"#0b33ff\",\r\n ],\r\n}));\r\n\r\n\r\nregisterInitialFetch<Partial<SettingsState>>(\"GET_SETTINGS\")\r\n .then((data) => {\r\n useSettings.setState({\r\n ...data,\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n","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 } \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, Text } from \"@mantine/core\";\r\n\r\nexport class DirkErrorBoundary extends React.Component<\r\n { children: React.ReactNode },\r\n { error: Error | null }\r\n> {\r\n state: { error: Error | null } = { error: null };\r\n\r\n static getDerivedStateFromError(error: 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);\r\n console.error(info.componentStack);\r\n console.groupEnd();\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 p=\"md\" bg=\"dark.8\">\r\n <Text c=\"red\" fw={600}>UI crashed</Text>\r\n <Code block mt=\"sm\">{this.state.error.message}</Code>\r\n </Box>\r\n );\r\n }\r\n}\r\n","\"use client\";\r\n\r\nimport \"@mantine/core/styles.css\";\r\nimport \"@mantine/notifications/styles.css\";\r\nimport './styles/notify.css';\r\nimport './styles/fonts.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 { MantineProvider, BackgroundImage, MantineColorShade } from \"@mantine/core\";\r\nimport { useMemo, useEffect } from \"react\";\r\nimport theme from \"@/theme\";\r\n\r\nimport { useSettings } from \"@/utils/useSettings\";\r\nimport { mergeMantineThemeSafe } from \"@/utils/mergeMantineTheme\";\r\nimport { DirkErrorBoundary } from \"./DirkErrorBoundary\";\r\nimport { isEnvBrowser } from \"@/utils\";\r\n\r\nexport type DirkProviderProps = {\r\n children: React.ReactNode;\r\n themeOverride?: any;\r\n};\r\n\r\nexport function DirkProvider({ children, themeOverride }: DirkProviderProps) {\r\n const {\r\n primaryColor,\r\n primaryShade,\r\n customTheme,\r\n game,\r\n } = useSettings();\r\n\r\n // 🚫 do not render until state is stable\r\n\r\n const mergedTheme = useMemo(\r\n () =>\r\n mergeMantineThemeSafe(\r\n { ...theme, primaryColor, primaryShade: primaryShade as MantineColorShade },\r\n customTheme,\r\n themeOverride\r\n ),\r\n [primaryColor, primaryShade, customTheme, 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 console.log(`%cNew Font Applied: ${document.body.style.fontFamily}`, \"font-family: \" + document.body.style.fontFamily); \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 <DirkErrorBoundary>\r\n <MantineProvider theme={mergedTheme} defaultColorScheme=\"dark\">\r\n {content}\r\n </MantineProvider>\r\n </DirkErrorBoundary>\r\n );\r\n}\r\n"]}
|
package/dist/utils/index.cjs
CHANGED
|
@@ -787,7 +787,6 @@ async function getImageShape(file) {
|
|
|
787
787
|
});
|
|
788
788
|
}
|
|
789
789
|
var useSettings = zustand.create(() => ({
|
|
790
|
-
hydrated: false,
|
|
791
790
|
game: "fivem",
|
|
792
791
|
primaryColor: "dirk",
|
|
793
792
|
primaryShade: 9,
|
|
@@ -807,11 +806,10 @@ var useSettings = zustand.create(() => ({
|
|
|
807
806
|
}));
|
|
808
807
|
registerInitialFetch("GET_SETTINGS").then((data) => {
|
|
809
808
|
useSettings.setState({
|
|
810
|
-
...data
|
|
811
|
-
hydrated: true
|
|
809
|
+
...data
|
|
812
810
|
});
|
|
813
|
-
}).catch(() => {
|
|
814
|
-
|
|
811
|
+
}).catch((err) => {
|
|
812
|
+
console.error("Failed to fetch initial settings within dirk-cfx-react:", err);
|
|
815
813
|
});
|
|
816
814
|
|
|
817
815
|
exports.colorWithAlpha = colorWithAlpha;
|
package/dist/utils/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/colorWithAlpha.ts","../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/internalEvent.ts","../../src/utils/locales.ts","../../src/utils/map.ts","../../src/utils/profanity.ts","../../src/utils/createSkill.ts","../../src/utils/images.ts","../../src/utils/useSettings.ts"],"names":["useEffect","create","useMemo","axios"],"mappings":"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","file":"index.cjs","sourcesContent":["\r\nconst colorNames = {\r\n AliceBlue: { r: 240, g: 248, b: 255 },\r\n AntiqueWhite: { r: 250, g: 235, b: 215 },\r\n Aqua: { r: 0, g: 255, b: 255 },\r\n Aquamarine: { r: 127, g: 255, b: 212 },\r\n Azure: { r: 240, g: 255, b: 255 },\r\n Beige: { r: 245, g: 245, b: 220 },\r\n Bisque: { r: 255, g: 228, b: 196 },\r\n Black: { r: 0, g: 0, b: 0 },\r\n BlanchedAlmond: { r: 255, g: 235, b: 205 },\r\n Blue: { r: 0, g: 0, b: 255 },\r\n BlueViolet: { r: 138, g: 43, b: 226 },\r\n Brown: { r: 165, g: 42, b: 42 },\r\n BurlyWood: { r: 222, g: 184, b: 135 },\r\n CadetBlue: { r: 95, g: 158, b: 160 },\r\n Chartreuse: { r: 127, g: 255, b: 0 },\r\n Chocolate: { r: 210, g: 105, b: 30 },\r\n Coral: { r: 255, g: 127, b: 80 },\r\n CornflowerBlue: { r: 100, g: 149, b: 237 },\r\n Cornsilk: { r: 255, g: 248, b: 220 },\r\n Crimson: { r: 220, g: 20, b: 60 },\r\n Cyan: { r: 0, g: 255, b: 255 },\r\n DarkBlue: { r: 0, g: 0, b: 139 },\r\n DarkCyan: { r: 0, g: 139, b: 139 },\r\n DarkGoldenRod: { r: 184, g: 134, b: 11 },\r\n DarkGray: { r: 169, g: 169, b: 169 },\r\n DarkGreen: { r: 0, g: 100, b: 0 },\r\n DarkKhaki: { r: 189, g: 183, b: 107 },\r\n DarkMagenta: { r: 139, g: 0, b: 139 },\r\n DarkOliveGreen: { r: 85, g: 107, b: 47 },\r\n DarkOrange: { r: 255, g: 140, b: 0 },\r\n DarkOrchid: { r: 153, g: 50, b: 204 },\r\n DarkRed: { r: 139, g: 0, b: 0 },\r\n DarkSalmon: { r: 233, g: 150, b: 122 },\r\n DarkSeaGreen: { r: 143, g: 188, b: 143 },\r\n DarkSlateBlue: { r: 72, g: 61, b: 139 },\r\n DarkSlateGray: { r: 47, g: 79, b: 79 },\r\n DarkTurquoise: { r: 0, g: 206, b: 209 },\r\n DarkViolet: { r: 148, g: 0, b: 211 },\r\n DeepPink: { r: 255, g: 20, b: 147 },\r\n DeepSkyBlue: { r: 0, g: 191, b: 255 },\r\n DimGray: { r: 105, g: 105, b: 105 },\r\n DodgerBlue: { r: 30, g: 144, b: 255 },\r\n FireBrick: { r: 178, g: 34, b: 34 },\r\n FloralWhite: { r: 255, g: 250, b: 240 },\r\n ForestGreen: { r: 34, g: 139, b: 34 },\r\n Fuchsia: { r: 255, g: 0, b: 255 },\r\n Gainsboro: { r: 220, g: 220, b: 220 },\r\n GhostWhite: { r: 248, g: 248, b: 255 },\r\n Gold: { r: 255, g: 215, b: 0 },\r\n GoldenRod: { r: 218, g: 165, b: 32 },\r\n Gray: { r: 128, g: 128, b: 128 },\r\n Green: { r: 0, g: 128, b: 0 },\r\n GreenYellow: { r: 173, g: 255, b: 47 },\r\n HoneyDew: { r: 240, g: 255, b: 240 },\r\n HotPink: { r: 255, g: 105, b: 180 },\r\n IndianRed: { r: 205, g: 92, b: 92 },\r\n Indigo: { r: 75, g: 0, b: 130 },\r\n Ivory: { r: 255, g: 255, b: 240 },\r\n Khaki: { r: 240, g: 230, b: 140 },\r\n Lavender: { r: 230, g: 230, b: 250 },\r\n LavenderBlush: { r: 255, g: 240, b: 245 },\r\n LawnGreen: { r: 124, g: 252, b: 0 },\r\n LemonChiffon: { r: 255, g: 250, b: 205 },\r\n LightBlue: { r: 173, g: 216, b: 230 },\r\n LightCoral: { r: 240, g: 128, b: 128 },\r\n LightCyan: { r: 224, g: 255, b: 255 },\r\n LightGoldenRodYellow: { r: 250, g: 250, b: 210 },\r\n LightGray: { r: 211, g: 211, b: 211 },\r\n LightGreen: { r: 144, g: 238, b: 144 },\r\n LightPink: { r: 255, g: 182, b: 193 },\r\n LightSalmon: { r: 255, g: 160, b: 122 },\r\n LightSeaGreen: { r: 32, g: 178, b: 170 },\r\n LightSkyBlue: { r: 135, g: 206, b: 250 },\r\n LightSlateGray: { r: 119, g: 136, b: 153 },\r\n LightSteelBlue: { r: 176, g: 196, b: 222 },\r\n LightYellow: { r: 255, g: 255, b: 224 },\r\n Lime: { r: 0, g: 255, b: 0 },\r\n LimeGreen: { r: 50, g: 205, b: 50 },\r\n Linen: { r: 250, g: 240, b: 230 },\r\n Magenta: { r: 255, g: 0, b: 255 },\r\n Maroon: { r: 128, g: 0, b: 0 }, // Maroon\r\n MediumAquaMarine: { r: 102, g: 205, b: 170 },\r\n MediumBlue: { r: 0, g: 0, b: 205 },\r\n MediumOrchid: { r: 186, g: 85, b: 211 },\r\n MediumPurple: { r: 147, g: 112, b: 219 },\r\n MediumSeaGreen: { r: 60, g: 179, b: 113 },\r\n MediumSlateBlue: { r: 123, g: 104, b: 238 },\r\n MediumSpringGreen: { r: 0, g: 250, b: 154 },\r\n MediumTurquoise: { r: 72, g: 209, b: 204 },\r\n MediumVioletRed: { r: 199, g: 21, b: 133 },\r\n MidnightBlue: { r: 25, g: 25, b: 112 },\r\n MintCream: { r: 245, g: 255, b: 250 },\r\n MistyRose: { r: 255, g: 228, b: 225 },\r\n Moccasin: { r: 255, g: 228, b: 181 },\r\n NavajoWhite: { r: 255, g: 222, b: 173 },\r\n Navy: { r: 0, g: 0, b: 128 },\r\n OldLace: { r: 253, g: 245, b: 230 },\r\n Olive: { r: 128, g: 128, b: 0 },\r\n OliveDrab: { r: 107, g: 142, b: 35 },\r\n Orange: { r: 255, g: 165, b: 0 },\r\n OrangeRed: { r: 255, g: 69, b: 0 },\r\n Orchid: { r: 218, g: 112, b: 214 },\r\n PaleGoldenRod: { r: 238, g: 232, b: 170 },\r\n PaleGreen: { r: 152, g: 251, b: 152 },\r\n PaleTurquoise: { r: 175, g: 238, b: 238 },\r\n PaleVioletRed: { r: 219, g: 112, b: 147 },\r\n PapayaWhip: { r: 255, g: 239, b: 213 },\r\n PeachPuff: { r: 255, g: 218, b: 185 },\r\n Peru: { r: 205, g: 133, b: 63 },\r\n Pink: { r: 255, g: 192, b: 203 },\r\n Plum: { r: 221, g: 160, b: 221 },\r\n PowderBlue: { r: 176, g: 224, b: 230 },\r\n Purple: { r: 128, g: 0, b: 128 },\r\n RebeccaPurple: { r: 102, g: 51, b: 153 },\r\n Red: { r: 255, g: 0, b: 0 },\r\n RosyBrown: { r: 188, g: 143, b: 143 },\r\n RoyalBlue: { r: 65, g: 105, b: 225 },\r\n SaddleBrown: { r: 139, g: 69, b: 19 },\r\n Salmon: { r: 250, g: 128, b: 114 },\r\n SandyBrown: { r: 244, g: 164, b: 96 },\r\n SeaGreen: { r: 46, g: 139, b: 87 },\r\n SeaShell: { r: 255, g: 245, b: 238 },\r\n Sienna: { r: 160, g: 82, b: 45 },\r\n Silver: { r: 192, g: 192, b: 192 },\r\n SkyBlue: { r: 135, g: 206, b: 235 },\r\n SlateBlue: { r: 106, g: 90, b: 205 },\r\n SlateGray: { r: 112, g: 128, b: 144 },\r\n Snow: { r: 255, g: 250, b: 250 },\r\n SpringGreen: { r: 0, g: 255, b: 127 },\r\n SteelBlue: { r: 70, g: 130, b: 180 },\r\n Tan: { r: 210, g: 180, b: 140 },\r\n Teal: { r: 0, g: 128, b: 128 },\r\n Thistle: { r: 216, g: 191, b: 216 },\r\n Tomato: { r: 255, g: 99, b: 71 },\r\n Turquoise: { r: 64, g: 224, b: 208 },\r\n Violet: { r: 238, g: 130, b: 238 },\r\n Wheat: { r: 245, g: 222, b: 179 },\r\n White: { r: 255, g: 255, b: 255 },\r\n WhiteSmoke: { r: 245, g: 245, b: 245 },\r\n Yellow: { r: 255, g: 255, b: 0 },\r\n YellowGreen: { r: 154, g: 205, b: 50 }\r\n};\r\n\r\n\r\n\r\n\r\nexport function colorWithAlpha(color: string, alpha: number): string {\r\n const lowerCasedColor = color.toLowerCase() as keyof typeof colorNames;\r\n \r\n if (colorNames[lowerCasedColor]) {\r\n const rgb = colorNames[lowerCasedColor];\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\r\n }\r\n \r\n // If color is in hex format (#RRGGBB)\r\n if (/^#([A-Fa-f0-9]{6})$/.test(color)) {\r\n const hex = color.slice(1);\r\n const bigint = parseInt(hex, 16);\r\n const r = (bigint >> 16) & 255;\r\n const g = (bigint >> 8) & 255;\r\n const b = bigint & 255;\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n \r\n // If color is in rgb format (rgb(r, g, b))\r\n if (/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/.test(color)) {\r\n const result = color.match(/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/);\r\n if (result) {\r\n return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha})`;\r\n }\r\n }\r\n \r\n // Default to original color if format is not recognized\r\n return color;\r\n}","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n const run = async () => {\r\n const results = await runFetches();\r\n };\r\n run();\r\n }, []);\r\n};\r\n","import { isEnvBrowser } from \"./misc\";\r\n\r\nexport interface InternalEvent<T = unknown> {\r\n action: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Emulates dispatching an event using SendNuiMessage in the lua scripts.\r\n * This is used when developing in browser\r\n *\r\n * @param events - The event you want to cover\r\n * @param timer - How long until it should trigger (ms)\r\n */\r\nexport const internalEvent = <P>(events: InternalEvent<P>[], timer = 1000): void => {\r\n if (isEnvBrowser()) {\r\n for (const event of events) {\r\n setTimeout(() => {\r\n window.dispatchEvent(\r\n new MessageEvent(\"message\", {\r\n data: {\r\n action: event.action,\r\n data: event.data,\r\n },\r\n }),\r\n );\r\n }, timer);\r\n }\r\n }\r\n};\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nregisterInitialFetch<LocalesProps>('GET_LOCALES', undefined).then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","// ------------------ Game <-> Map Conversion ------------------\r\nexport const mapCenter: [number, number] = [-119.43, 58.84]\r\nexport const latPr100 = 1.421\r\n\r\n/** Convert game world coordinates -> Leaflet map coordinates */\r\nexport function gameToMap(x: number, y: number): [number, number] {\r\n return [\r\n mapCenter[0] + (latPr100 / 100) * y, // lng\r\n mapCenter[1] + (latPr100 / 100) * x, // lat\r\n ]\r\n}\r\n\r\n/** Convert Leaflet map coordinates -> game world coordinates */\r\nexport function mapToGame(lat: number, lng: number): [number, number] {\r\n return [\r\n ((lng - mapCenter[1]) * 100) / latPr100,\r\n ((lat - mapCenter[0]) * 100) / latPr100,\r\n ]\r\n}\r\n","import { create } from \"zustand\";\r\n\r\n\r\nexport const useProfanityStore = create<string[]>(() => ([\r\n 'ars3',\r\n 'a55',\r\n 'a55hole',\r\n 'ahole',\r\n 'anus',\r\n 'ash0le',\r\n 'ash0les',\r\n 'asholes',\r\n \"4r5e\",\r\n \"5h1t\",\r\n \"5hit\",\r\n \"a55\",\r\n \"anal\",\r\n \"anus\",\r\n \"ar5e\",\r\n \"arrse\",\r\n \"arse\",\r\n \"ass\",\r\n \"ass-fucker\",\r\n \"asses\",\r\n \"assfucker\",\r\n \"assfukka\",\r\n \"asshole\",\r\n \"assholes\",\r\n \"asswhole\",\r\n \"a_s_s\",\r\n \"b!tch\",\r\n \"b00bs\",\r\n \"b17ch\",\r\n \"b1tch\",\r\n \"ballsack\",\r\n \"beastial\",\r\n \"beastiality\",\r\n \"bestial\",\r\n \"bestiality\",\r\n \"bi+ch\",\r\n \"biatch\",\r\n \"bitch\",\r\n \"bitcher\",\r\n \"bitchers\",\r\n \"bitches\",\r\n \"bitchin\",\r\n \"bitching\",\r\n \"blow job\",\r\n \"blowjob\",\r\n \"blowjobs\",\r\n \"boiolas\",\r\n \"bollock\",\r\n \"bollok\",\r\n \"boner\",\r\n \"boob\",\r\n \"boobs\",\r\n \"booobs\",\r\n \"boooobs\",\r\n \"booooobs\",\r\n \"booooooobs\",\r\n \"breasts\",\r\n \"buceta\",\r\n \"bunny fucker\",\r\n \"butthole\",\r\n \"buttmuch\",\r\n \"buttplug\",\r\n \"c0ck\",\r\n \"c0cksucker\",\r\n \"carpet muncher\",\r\n \"chink\",\r\n \"cipa\",\r\n \"cl1t\",\r\n \"clit\",\r\n \"clitoris\",\r\n \"clits\",\r\n \"cnut\",\r\n \"cock\",\r\n \"cock-sucker\",\r\n \"cockface\",\r\n \"cockhead\",\r\n \"cockmunch\",\r\n \"cockmuncher\",\r\n \"cocks\",\r\n \"cocksuck\",\r\n \"cocksucked\",\r\n \"cocksucker\",\r\n \"cocksucking\",\r\n \"cocksucks\",\r\n \"cocksuka\",\r\n \"cocksukka\",\r\n \"cokmuncher\",\r\n \"coksucka\",\r\n \"coon\",\r\n \"cum\",\r\n \"cummer\",\r\n \"cumming\",\r\n \"cums\",\r\n \"cumshot\",\r\n \"cunilingus\",\r\n \"cunillingus\",\r\n \"cunnilingus\",\r\n \"cunt\",\r\n \"cuntlick\",\r\n \"cuntlicker\",\r\n \"cuntlicking\",\r\n \"cunts\",\r\n \"cyalis\",\r\n \"cyberfuc\",\r\n \"cyberfuck\",\r\n \"cyberfucked\",\r\n \"cyberfucker\",\r\n \"cyberfuckers\",\r\n \"cyberfucking\",\r\n \"d1ck\",\r\n \"dlck\",\r\n \"dog-fucker\",\r\n \"doggin\",\r\n \"dogging\",\r\n \"donkeyribber\",\r\n \"dyke\",\r\n \"ejaculate\",\r\n \"ejaculated\",\r\n \"ejaculates\",\r\n \"ejaculating\",\r\n \"ejaculatings\",\r\n \"ejaculation\",\r\n \"ejakulate\",\r\n \"f u c k\",\r\n \"f u c k e r\",\r\n \"f4nny\",\r\n \"fag\",\r\n \"fagging\",\r\n \"faggitt\",\r\n \"faggot\",\r\n \"faggs\",\r\n \"fagot\",\r\n \"fagots\",\r\n \"fags\",\r\n \"fannyflaps\",\r\n \"fannyfucker\",\r\n \"fatass\",\r\n \"fcuk\",\r\n \"fcuker\",\r\n \"fcuking\",\r\n \"feck\",\r\n \"fecker\",\r\n \"felching\",\r\n \"fellate\",\r\n \"fellatio\",\r\n \"fingerfuck\",\r\n \"fingerfucked\",\r\n \"fingerfucker\",\r\n \"fingerfuckers\",\r\n \"fingerfucking\",\r\n \"fingerfucks\",\r\n \"fistfuck\",\r\n \"fistfucked\",\r\n \"fistfucker\",\r\n \"fistfuckers\",\r\n \"fistfucking\",\r\n \"fistfuckings\",\r\n \"fistfucks\",\r\n \"fuck\",\r\n \"fucka\",\r\n \"fucked\",\r\n \"fucker\",\r\n \"fuckers\",\r\n \"fuckhead\",\r\n \"fuckheads\",\r\n \"fuckin\",\r\n \"fucking\",\r\n \"fuckings\",\r\n \"fuckingshitmotherfucker\",\r\n \"fuckme\",\r\n \"fucks\",\r\n \"fuckwhit\",\r\n \"fuckwit\",\r\n \"fudge packer\",\r\n \"fudgepacker\",\r\n \"fuk\",\r\n \"fuker\",\r\n \"fukker\",\r\n \"fukkin\",\r\n \"fuks\",\r\n \"fukwhit\",\r\n \"fukwit\",\r\n \"fux\",\r\n \"fux0r\",\r\n \"f_u_c_k\",\r\n \"gangbang\",\r\n \"gangbanged\",\r\n \"gangbangs\",\r\n \"gaysex\",\r\n \"God\",\r\n \"god-dam\",\r\n \"god-damned\",\r\n \"goddamn\",\r\n \"goddamned\",\r\n \"homo\",\r\n \"jack-off\",\r\n \"jerk-off\",\r\n \"l3i+ch\",\r\n \"l3itch\",\r\n \"labia\",\r\n \"lusting\",\r\n \"m0f0\",\r\n \"m0fo\",\r\n \"m45terbate\",\r\n \"ma5terb8\",\r\n \"ma5terbate\",\r\n \"masochist\",\r\n \"master-bate\",\r\n \"masterb8\",\r\n \"masterbat*\",\r\n \"masterbat3\",\r\n \"masterbate\",\r\n \"masterbation\",\r\n \"masterbations\",\r\n \"masturbate\",\r\n \"mo-fo\",\r\n \"mof0\",\r\n \"mothafuck\",\r\n \"mothafucka\",\r\n \"mothafuckas\",\r\n \"mothafuckaz\",\r\n \"mothafucked\",\r\n \"mothafucker\",\r\n \"mothafuckers\",\r\n \"mothafuckin\",\r\n \"mothafucking\",\r\n \"mothafuckings\",\r\n \"mothafucks\",\r\n \"mother fucker\",\r\n \"motherfuck\",\r\n \"motherfucked\",\r\n \"motherfucker\",\r\n \"motherfuckers\",\r\n \"motherfuckin\",\r\n \"motherfucking\",\r\n \"motherfuckings\",\r\n \"motherfuckka\",\r\n \"motherfucks\",\r\n \"muthafecker\",\r\n \"muthafuckker\",\r\n \"mutherfucker\",\r\n \"n1gga\",\r\n \"n1gger\",\r\n \"nazi\",\r\n \"nigg3r\",\r\n \"nigg4h\",\r\n \"nigga\",\r\n \"niggah\",\r\n \"niggas\",\r\n \"niggaz\",\r\n \"nigger\",\r\n \"niggers\",\r\n \"nob jokey\",\r\n \"nobjocky\",\r\n \"nobjokey\",\r\n \"orgasim\",\r\n \"orgasims\",\r\n \"orgasm\",\r\n \"orgasms\",\r\n \"p0rn\",\r\n \"penis\",\r\n \"penisfucker\",\r\n \"phonesex\",\r\n \"phuck\",\r\n \"phuked\",\r\n \"phuking\",\r\n \"phukked\",\r\n \"phukking\",\r\n \"phuks\",\r\n \"phuq\",\r\n \"pigfucker\",\r\n \"pimpis\",\r\n \"piss\",\r\n \"pissed\",\r\n \"pisser\",\r\n \"pissers\",\r\n \"pisses\",\r\n \"pissflaps\",\r\n \"pissin\",\r\n \"pissing\",\r\n \"pissoff\",\r\n \"poop\",\r\n \"porn\",\r\n \"porno\",\r\n \"pornography\",\r\n \"pornos\",\r\n \"prick\",\r\n \"pricks\",\r\n \"pron\",\r\n \"pube\",\r\n \"pusse\",\r\n \"pussi\",\r\n \"pussies\",\r\n \"pussy\",\r\n \"pussys\",\r\n \"rectum\",\r\n \"retard\",\r\n \"rimjaw\",\r\n \"rimming\",\r\n \"s hit\",\r\n \"s.o.b.\",\r\n \"scroat\",\r\n \"scrote\",\r\n \"scrotum\",\r\n \"semen\",\r\n \"sex\",\r\n \"sh!+\",\r\n \"sh!t\",\r\n \"sh1t\",\r\n \"shemale\",\r\n \"shit\",\r\n \"shitdick\",\r\n \"shite\",\r\n \"shited\",\r\n \"shitey\",\r\n \"shitfuck\",\r\n \"shitfull\",\r\n \"shithead\",\r\n \"shiting\",\r\n \"shitings\",\r\n \"shits\",\r\n \"shitted\",\r\n \"shitter\",\r\n \"shitters\",\r\n \"shitting\",\r\n \"shittings\",\r\n \"shitty\",\r\n \"skank\",\r\n \"slut\",\r\n \"sluts\",\r\n \"smegma\",\r\n \"smut\",\r\n \"son-of-a-bitch\",\r\n \"spac\",\r\n \"s_h_i_t\",\r\n \"t1tt1e5\",\r\n \"t1tties\",\r\n \"teets\",\r\n \"teez\",\r\n \"testical\",\r\n \"testicle\",\r\n \"titfuck\",\r\n \"tits\",\r\n \"titt\",\r\n \"tittie5\",\r\n \"tittiefucker\",\r\n \"titties\",\r\n \"tittyfuck\",\r\n \"tittywank\",\r\n \"titwank\",\r\n \"tosser\",\r\n \"tw4t\",\r\n \"twat\",\r\n \"twathead\",\r\n \"twatty\",\r\n \"twunt\",\r\n \"twunter\",\r\n \"v14gra\",\r\n \"v1gra\",\r\n \"vagina\",\r\n \"viagra\",\r\n \"vulva\",\r\n \"w00se\",\r\n \"whoar\",\r\n \"whore\",\r\n \"xrated\",\r\n]));\r\n\r\nexport const isProfanity = (word: string) => {\r\n const all = useProfanityStore.getState();\r\n \r\n // Convert to array if needed\r\n const profanityArray = Array.isArray(all) \r\n ? all \r\n : typeof all === 'object' && all !== null\r\n ? Object.values(all)\r\n : [];\r\n return profanityArray.includes(word);\r\n};\r\n\r\n","import { create } from 'zustand';\r\nimport { useMemo } from 'react';\r\n\r\nexport type SkillSettings = {\r\n baseLevel: number;\r\n maxLevel: number;\r\n baseXP: number;\r\n modifier: number;\r\n};\r\n\r\ntype SkillStore = {\r\n settings: SkillSettings;\r\n levelMap: Record<string, number>;\r\n setSettings: (updater: SkillSettings | ((prev: SkillSettings) => SkillSettings)) => void;\r\n};\r\n\r\ntype SkillHookResult = {\r\n prevLevelXP: number;\r\n currentLevel: number;\r\n nextLevel: number;\r\n currentLevelXP: number;\r\n nextLevelXP: number;\r\n progressToLevel: number;\r\n xpToNextLevel: number;\r\n};\r\n\r\nfunction calculateXPForLevel(level: number, settings: SkillSettings): number {\r\n if (level < settings.baseLevel) return 0;\r\n if (level === 1) return 0;\r\n if (level === 2) return settings.baseXP;\r\n\r\n let totalXP = settings.baseXP;\r\n\r\n for (let i = 2; i <= level - 1; i++) {\r\n const baseRuneScapeXP = Math.floor((i + 300 * 2 ** (i / 7)) / 4);\r\n totalXP += baseRuneScapeXP * settings.modifier;\r\n }\r\n\r\n return Math.floor(totalXP);\r\n}\r\n\r\nfunction generateLevelMap(settings: SkillSettings): Record<string, number> {\r\n const levelMap: Record<string, number> = {};\r\n for (let level = settings.baseLevel; level <= settings.maxLevel; level++) {\r\n levelMap[level.toString()] = calculateXPForLevel(level, settings);\r\n }\r\n return levelMap;\r\n}\r\n\r\nfunction getLevelFromXP(xp: number, levelMap: Record<string, number>, settings: SkillSettings): number {\r\n for (let level = settings.baseLevel; level <= settings.maxLevel; level++) {\r\n const xpForLevel = levelMap[level.toString()];\r\n if (xpForLevel > xp) return level - 1;\r\n }\r\n return settings.maxLevel;\r\n}\r\n\r\nexport function createSkill(defaultSettings: SkillSettings) {\r\n const useStore = create<SkillStore>((set) => ({\r\n settings: defaultSettings,\r\n levelMap: generateLevelMap(defaultSettings),\r\n setSettings: (updater) =>\r\n set((state) => {\r\n const newSettings = typeof updater === 'function' ? updater(state.settings) : updater;\r\n return {\r\n settings: newSettings,\r\n levelMap: generateLevelMap(newSettings),\r\n };\r\n }),\r\n }));\r\n\r\n const useSkill = (xp: number): SkillHookResult => {\r\n const { settings, levelMap } = useStore();\r\n\r\n return useMemo(() => {\r\n const currentLevel = getLevelFromXP(xp, levelMap, settings);\r\n const nextLevel = Math.min(currentLevel + 1, settings.maxLevel);\r\n \r\n const currentLevelXP = levelMap[currentLevel.toString()] || 0;\r\n const nextLevelXP = levelMap[nextLevel.toString()] || 0;\r\n\r\n const xpInCurrentLevel = xp - currentLevelXP;\r\n const xpRequiredForLevel = nextLevelXP - currentLevelXP;\r\n const progressToLevel = xpRequiredForLevel > 0 \r\n ? (xpInCurrentLevel / xpRequiredForLevel) * 100 \r\n : 100;\r\n\r\n const xpToNextLevel = Math.max(0, nextLevelXP - xp);\r\n const prevLevelXP = calculateXPForLevel(currentLevel - 1, settings);\r\n return {\r\n currentLevel,\r\n nextLevel,\r\n currentLevelXP,\r\n prevLevelXP,\r\n nextLevelXP,\r\n progressToLevel: Math.min(100, Math.max(0, progressToLevel)),\r\n xpToNextLevel,\r\n };\r\n }, [xp, levelMap, settings]);\r\n };\r\n\r\n // Return settings object with access to store\r\n const skill = {\r\n get settings() {\r\n return useStore.getState().settings;\r\n },\r\n setSettings: (updater: SkillSettings | ((prev: SkillSettings) => SkillSettings)) => {\r\n useStore.getState().setSettings(updater);\r\n },\r\n useSettings: () => useStore((state) => state.settings),\r\n };\r\n\r\n return {\r\n skill,\r\n useSkill,\r\n };\r\n}\r\n\r\n// Example usage:\r\n// export const { skill: drugSkill, useSkill: useDrugSkill } = createSkill({\r\n// baseLevel: 1,\r\n// maxLevel: 99,\r\n// baseXP: 83,\r\n// modifier: 1,\r\n// });","import axios from \"axios\";\r\nimport { fetchNui } from \"./fetchNui\";\r\n\r\nconst dummyURL = 'https://fmapi.net/api/v2/presigned-url/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJON0UxM0tzejFRM0NuSzRHWFBPbmUiLCJ0ZWFtSWQiOiJlMDQ1YnpwZzg5TGpoaUFTaURIdVoiLCJmaWxlVHlwZSI6ImltYWdlIiwidG9rZW5JZCI6ImpwczJ4Z0M1eFZqcnRoeWZTZnFsYSIsInNldHRpbmdzIjp7IlRlYW1JRCI6ImUwNDVienBnODlMamhpQVNpREh1WiIsIkltYWdlTm90aWZpY2F0aW9uVHlwZSI6IiIsIkRpc2NvcmRXZWJob29rIjoiIiwiRGlzY29yZEltYWdlQ2hhbm5lbCI6IiIsIlZpZGVvTm90aWZpY2F0aW9uVHlwZSI6IiIsIkRpc2NvcmRWaWRlb1dlYmhvb2siOiIiLCJEaXNjb3JkVmlkZW9DaGFubmVsIjoiIiwiQXVkaW9Ob3RpZmljYXRpb25UeXBlIjoiIiwiRGlzY29yZEF1ZGlvV2ViaG9vayI6IiIsIkRpc2NvcmRBdWRpb0NoYW5uZWwiOiIiLCJEaXNjb3JkQm90VG9rZW4iOiIiLCJSZXRlbnRpb25FbmFibGVkIjpmYWxzZSwiUmV0ZW50aW9uRGF5cyI6NywiVmlkZW9SZXRlbnRpb25FbmFibGVkIjpmYWxzZSwiVmlkZW9SZXRlbnRpb25EYXlzIjo3LCJBdWRpb1JldGVudGlvbkVuYWJsZWQiOmZhbHNlLCJBdWRpb1JldGVudGlvbkRheXMiOjcsIkxvZ0FsZXJ0RW5hYmxlZCI6ZmFsc2UsIkxvZ0FsZXJ0TGV2ZWxzIjpbXSwiTG9nQWxlcnREaXNjb3JkV2ViaG9vayI6IiIsIk92ZXJyaWRlSW1hZ2VRdWFsaXR5IjpmYWxzZSwiSW1hZ2VRdWFsaXR5Ijo1MH0sImV4cCI6MTc2MTg1MTEzNH0.fpPeQ0GCm5GNTddjttUQ78VMqRUAufXoOvv5C7Vh3WA';\r\n\r\nexport async function updatePresignedURL(): Promise<string> {\r\n return await fetchNui<string>('GET_PRESIGNED_URL', undefined, dummyURL);\r\n}\r\n\r\nexport type UploadImageProps = {\r\n fileURL: string;\r\n name?: string;\r\n description?: string;\r\n};\r\n\r\nexport async function uploadImage(props: UploadImageProps): Promise<string> {\r\n // 1. Get presigned URL\r\n const uploadURL = await updatePresignedURL();\r\n\r\n // 2. Load file data from blob URL\r\n const response = await fetch(props.fileURL);\r\n const blob = await response.blob();\r\n\r\n // 👇 3. Wrap it as a File so it behaves properly\r\n const file = new File([blob], \"upload.png\", { type: blob.type });\r\n // 4. Build form data\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\r\n \"metadata\",\r\n JSON.stringify({\r\n name: props.name || file.name,\r\n description: props.description || \"Uploaded via DirkScripts\",\r\n })\r\n );\r\n\r\n // 5. Upload to the presigned URL\r\n const uploadRes = await axios.post(uploadURL, formData, {\r\n headers: { \"Content-Type\": \"multipart/form-data\" },\r\n });\r\n\r\n // 6. Return final URL\r\n const finalUrl = uploadRes.data?.data?.url ?? uploadRes.data?.url;\r\n if (!finalUrl) throw new Error(\"Upload succeeded but no URL returned\");\r\n return finalUrl;\r\n}\r\n\r\n\r\nexport async function getImageShape(file: File | string): Promise<\"square\" | \"wide\"> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n\r\n img.onload = () => {\r\n if (img.width > img.height) resolve(\"wide\");\r\n else resolve(\"square\"); // tall or equal treated as square\r\n };\r\n\r\n img.onerror = () => reject(new Error(\"Failed to load image\"));\r\n\r\n img.src = typeof file === \"string\" ? file : URL.createObjectURL(file);\r\n });\r\n}\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\nimport { MantineColorsTuple } from \"@mantine/core\";\r\n\r\nexport type SettingsState = {\r\n hydrated: boolean;\r\n game: \"fivem\" | \"rdr3\";\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n customTheme?: MantineColorsTuple;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n hydrated: false,\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n customTheme: [\r\n \"#f0f4ff\",\r\n \"#d9e3ff\",\r\n \"#bfcfff\",\r\n \"#a6bbff\",\r\n \"#8ca7ff\",\r\n \"#7393ff\",\r\n \"#5a7fff\",\r\n \"#406bff\",\r\n \"#2547ff\",\r\n \"#0b33ff\",\r\n ],\r\n}));\r\n\r\n\r\nregisterInitialFetch<Partial<SettingsState>>(\"GET_SETTINGS\")\r\n .then((data) => {\r\n useSettings.setState({\r\n ...data,\r\n hydrated: true,\r\n });\r\n })\r\n .catch(() => {\r\n useSettings.setState({ hydrated: true });\r\n });\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/colorWithAlpha.ts","../../src/utils/misc.ts","../../src/utils/fetchNui.ts","../../src/utils/internalEvent.ts","../../src/utils/locales.ts","../../src/utils/map.ts","../../src/utils/profanity.ts","../../src/utils/createSkill.ts","../../src/utils/images.ts","../../src/utils/useSettings.ts"],"names":["useEffect","create","useMemo","axios"],"mappings":"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","file":"index.cjs","sourcesContent":["\r\nconst colorNames = {\r\n AliceBlue: { r: 240, g: 248, b: 255 },\r\n AntiqueWhite: { r: 250, g: 235, b: 215 },\r\n Aqua: { r: 0, g: 255, b: 255 },\r\n Aquamarine: { r: 127, g: 255, b: 212 },\r\n Azure: { r: 240, g: 255, b: 255 },\r\n Beige: { r: 245, g: 245, b: 220 },\r\n Bisque: { r: 255, g: 228, b: 196 },\r\n Black: { r: 0, g: 0, b: 0 },\r\n BlanchedAlmond: { r: 255, g: 235, b: 205 },\r\n Blue: { r: 0, g: 0, b: 255 },\r\n BlueViolet: { r: 138, g: 43, b: 226 },\r\n Brown: { r: 165, g: 42, b: 42 },\r\n BurlyWood: { r: 222, g: 184, b: 135 },\r\n CadetBlue: { r: 95, g: 158, b: 160 },\r\n Chartreuse: { r: 127, g: 255, b: 0 },\r\n Chocolate: { r: 210, g: 105, b: 30 },\r\n Coral: { r: 255, g: 127, b: 80 },\r\n CornflowerBlue: { r: 100, g: 149, b: 237 },\r\n Cornsilk: { r: 255, g: 248, b: 220 },\r\n Crimson: { r: 220, g: 20, b: 60 },\r\n Cyan: { r: 0, g: 255, b: 255 },\r\n DarkBlue: { r: 0, g: 0, b: 139 },\r\n DarkCyan: { r: 0, g: 139, b: 139 },\r\n DarkGoldenRod: { r: 184, g: 134, b: 11 },\r\n DarkGray: { r: 169, g: 169, b: 169 },\r\n DarkGreen: { r: 0, g: 100, b: 0 },\r\n DarkKhaki: { r: 189, g: 183, b: 107 },\r\n DarkMagenta: { r: 139, g: 0, b: 139 },\r\n DarkOliveGreen: { r: 85, g: 107, b: 47 },\r\n DarkOrange: { r: 255, g: 140, b: 0 },\r\n DarkOrchid: { r: 153, g: 50, b: 204 },\r\n DarkRed: { r: 139, g: 0, b: 0 },\r\n DarkSalmon: { r: 233, g: 150, b: 122 },\r\n DarkSeaGreen: { r: 143, g: 188, b: 143 },\r\n DarkSlateBlue: { r: 72, g: 61, b: 139 },\r\n DarkSlateGray: { r: 47, g: 79, b: 79 },\r\n DarkTurquoise: { r: 0, g: 206, b: 209 },\r\n DarkViolet: { r: 148, g: 0, b: 211 },\r\n DeepPink: { r: 255, g: 20, b: 147 },\r\n DeepSkyBlue: { r: 0, g: 191, b: 255 },\r\n DimGray: { r: 105, g: 105, b: 105 },\r\n DodgerBlue: { r: 30, g: 144, b: 255 },\r\n FireBrick: { r: 178, g: 34, b: 34 },\r\n FloralWhite: { r: 255, g: 250, b: 240 },\r\n ForestGreen: { r: 34, g: 139, b: 34 },\r\n Fuchsia: { r: 255, g: 0, b: 255 },\r\n Gainsboro: { r: 220, g: 220, b: 220 },\r\n GhostWhite: { r: 248, g: 248, b: 255 },\r\n Gold: { r: 255, g: 215, b: 0 },\r\n GoldenRod: { r: 218, g: 165, b: 32 },\r\n Gray: { r: 128, g: 128, b: 128 },\r\n Green: { r: 0, g: 128, b: 0 },\r\n GreenYellow: { r: 173, g: 255, b: 47 },\r\n HoneyDew: { r: 240, g: 255, b: 240 },\r\n HotPink: { r: 255, g: 105, b: 180 },\r\n IndianRed: { r: 205, g: 92, b: 92 },\r\n Indigo: { r: 75, g: 0, b: 130 },\r\n Ivory: { r: 255, g: 255, b: 240 },\r\n Khaki: { r: 240, g: 230, b: 140 },\r\n Lavender: { r: 230, g: 230, b: 250 },\r\n LavenderBlush: { r: 255, g: 240, b: 245 },\r\n LawnGreen: { r: 124, g: 252, b: 0 },\r\n LemonChiffon: { r: 255, g: 250, b: 205 },\r\n LightBlue: { r: 173, g: 216, b: 230 },\r\n LightCoral: { r: 240, g: 128, b: 128 },\r\n LightCyan: { r: 224, g: 255, b: 255 },\r\n LightGoldenRodYellow: { r: 250, g: 250, b: 210 },\r\n LightGray: { r: 211, g: 211, b: 211 },\r\n LightGreen: { r: 144, g: 238, b: 144 },\r\n LightPink: { r: 255, g: 182, b: 193 },\r\n LightSalmon: { r: 255, g: 160, b: 122 },\r\n LightSeaGreen: { r: 32, g: 178, b: 170 },\r\n LightSkyBlue: { r: 135, g: 206, b: 250 },\r\n LightSlateGray: { r: 119, g: 136, b: 153 },\r\n LightSteelBlue: { r: 176, g: 196, b: 222 },\r\n LightYellow: { r: 255, g: 255, b: 224 },\r\n Lime: { r: 0, g: 255, b: 0 },\r\n LimeGreen: { r: 50, g: 205, b: 50 },\r\n Linen: { r: 250, g: 240, b: 230 },\r\n Magenta: { r: 255, g: 0, b: 255 },\r\n Maroon: { r: 128, g: 0, b: 0 }, // Maroon\r\n MediumAquaMarine: { r: 102, g: 205, b: 170 },\r\n MediumBlue: { r: 0, g: 0, b: 205 },\r\n MediumOrchid: { r: 186, g: 85, b: 211 },\r\n MediumPurple: { r: 147, g: 112, b: 219 },\r\n MediumSeaGreen: { r: 60, g: 179, b: 113 },\r\n MediumSlateBlue: { r: 123, g: 104, b: 238 },\r\n MediumSpringGreen: { r: 0, g: 250, b: 154 },\r\n MediumTurquoise: { r: 72, g: 209, b: 204 },\r\n MediumVioletRed: { r: 199, g: 21, b: 133 },\r\n MidnightBlue: { r: 25, g: 25, b: 112 },\r\n MintCream: { r: 245, g: 255, b: 250 },\r\n MistyRose: { r: 255, g: 228, b: 225 },\r\n Moccasin: { r: 255, g: 228, b: 181 },\r\n NavajoWhite: { r: 255, g: 222, b: 173 },\r\n Navy: { r: 0, g: 0, b: 128 },\r\n OldLace: { r: 253, g: 245, b: 230 },\r\n Olive: { r: 128, g: 128, b: 0 },\r\n OliveDrab: { r: 107, g: 142, b: 35 },\r\n Orange: { r: 255, g: 165, b: 0 },\r\n OrangeRed: { r: 255, g: 69, b: 0 },\r\n Orchid: { r: 218, g: 112, b: 214 },\r\n PaleGoldenRod: { r: 238, g: 232, b: 170 },\r\n PaleGreen: { r: 152, g: 251, b: 152 },\r\n PaleTurquoise: { r: 175, g: 238, b: 238 },\r\n PaleVioletRed: { r: 219, g: 112, b: 147 },\r\n PapayaWhip: { r: 255, g: 239, b: 213 },\r\n PeachPuff: { r: 255, g: 218, b: 185 },\r\n Peru: { r: 205, g: 133, b: 63 },\r\n Pink: { r: 255, g: 192, b: 203 },\r\n Plum: { r: 221, g: 160, b: 221 },\r\n PowderBlue: { r: 176, g: 224, b: 230 },\r\n Purple: { r: 128, g: 0, b: 128 },\r\n RebeccaPurple: { r: 102, g: 51, b: 153 },\r\n Red: { r: 255, g: 0, b: 0 },\r\n RosyBrown: { r: 188, g: 143, b: 143 },\r\n RoyalBlue: { r: 65, g: 105, b: 225 },\r\n SaddleBrown: { r: 139, g: 69, b: 19 },\r\n Salmon: { r: 250, g: 128, b: 114 },\r\n SandyBrown: { r: 244, g: 164, b: 96 },\r\n SeaGreen: { r: 46, g: 139, b: 87 },\r\n SeaShell: { r: 255, g: 245, b: 238 },\r\n Sienna: { r: 160, g: 82, b: 45 },\r\n Silver: { r: 192, g: 192, b: 192 },\r\n SkyBlue: { r: 135, g: 206, b: 235 },\r\n SlateBlue: { r: 106, g: 90, b: 205 },\r\n SlateGray: { r: 112, g: 128, b: 144 },\r\n Snow: { r: 255, g: 250, b: 250 },\r\n SpringGreen: { r: 0, g: 255, b: 127 },\r\n SteelBlue: { r: 70, g: 130, b: 180 },\r\n Tan: { r: 210, g: 180, b: 140 },\r\n Teal: { r: 0, g: 128, b: 128 },\r\n Thistle: { r: 216, g: 191, b: 216 },\r\n Tomato: { r: 255, g: 99, b: 71 },\r\n Turquoise: { r: 64, g: 224, b: 208 },\r\n Violet: { r: 238, g: 130, b: 238 },\r\n Wheat: { r: 245, g: 222, b: 179 },\r\n White: { r: 255, g: 255, b: 255 },\r\n WhiteSmoke: { r: 245, g: 245, b: 245 },\r\n Yellow: { r: 255, g: 255, b: 0 },\r\n YellowGreen: { r: 154, g: 205, b: 50 }\r\n};\r\n\r\n\r\n\r\n\r\nexport function colorWithAlpha(color: string, alpha: number): string {\r\n const lowerCasedColor = color.toLowerCase() as keyof typeof colorNames;\r\n \r\n if (colorNames[lowerCasedColor]) {\r\n const rgb = colorNames[lowerCasedColor];\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\r\n }\r\n \r\n // If color is in hex format (#RRGGBB)\r\n if (/^#([A-Fa-f0-9]{6})$/.test(color)) {\r\n const hex = color.slice(1);\r\n const bigint = parseInt(hex, 16);\r\n const r = (bigint >> 16) & 255;\r\n const g = (bigint >> 8) & 255;\r\n const b = bigint & 255;\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n }\r\n \r\n // If color is in rgb format (rgb(r, g, b))\r\n if (/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/.test(color)) {\r\n const result = color.match(/^rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)$/);\r\n if (result) {\r\n return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha})`;\r\n }\r\n }\r\n \r\n // Default to original color if format is not recognized\r\n return color;\r\n}","export const isEnvBrowser = (): boolean => !(window as any).invokeNative;\r\n\r\n// Basic no operation function\r\nexport const noop = () => {};\r\n\r\nexport const splitFAString = (faString:string) => {\r\n const [prefix, newIcon] = faString.split('-');\r\n if (!prefix || !newIcon) return {prefix: 'fas', newIcon: 'question'};\r\n return {prefix, newIcon};\r\n}\r\n\r\nexport const numberToRoman = (num:number) => {\r\n const romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'] \r\n return romanNumerals[num]\r\n}\r\n\r\nexport const copyToClipboard = (text:string) => {\r\n const el = document.createElement('textarea');\r\n el.value = text;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n}\r\n\r\nexport const openLink = (url:string) => {\r\n if (isEnvBrowser()) {\r\n window.open(url, '_blank');\r\n } else {\r\n // @ts-expect-error -- invokeNative exists in NUI\r\n window.invokeNative('openLink', url);\r\n } \r\n}","import { useEffect } from \"react\";\r\nimport { isEnvBrowser } from \"./misc\";\r\n\r\n/**\r\n * Simple wrapper around fetch API tailored for CEF/NUI use.\r\n */\r\nexport async function fetchNui<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const options = {\r\n method: \"post\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=UTF-8\",\r\n },\r\n body: JSON.stringify(data),\r\n };\r\n\r\n if (isEnvBrowser() && mockData) return mockData;\r\n if (isEnvBrowser() && mockData === undefined) {\r\n console.warn(\r\n `[fetchNui] Called fetchNui for event \"${eventName}\" in browser environment without mockData. Returning empty object.`,\r\n );\r\n return {} as T;\r\n }\r\n\r\n const resourceName = (window as any).GetParentResourceName\r\n ? (window as any).GetParentResourceName()\r\n : \"nui-frame-app\";\r\n\r\n const resp = await fetch(`https://${resourceName}/${eventName}`, options);\r\n return await resp.json();\r\n}\r\n\r\n// -----------------------------\r\n// Initial fetch registration\r\n// -----------------------------\r\nexport type InitialFetch<T> = () => Promise<T>;\r\nexport const initialFetches: Record<string, InitialFetch<unknown>> = {};\r\n\r\n/**\r\n * Registers an initial fetch that automatically uses fetchNui.\r\n * Works like:\r\n * ```ts\r\n * registerInitialFetch<{ name: string }>(\"MY_EVENT_NAME\", undefined, { name: \"Mocky\" });\r\n * ```\r\n * and returns a Promise resolving to the same type as fetchNui.\r\n */\r\nexport async function registerInitialFetch<T = unknown>(\r\n eventName: string,\r\n data?: unknown,\r\n mockData?: T,\r\n): Promise<T> {\r\n const fetcher = () => fetchNui<T>(eventName, data, mockData);\r\n initialFetches[eventName] = fetcher;\r\n return fetcher(); // run immediately if needed\r\n}\r\n\r\n/**\r\n * Runs all registered initial fetches in parallel.\r\n */\r\nexport async function runFetches() {\r\n return Promise.all(\r\n Object.entries(initialFetches).map(async ([eventName, fetcher]) => {\r\n const data = await fetcher();\r\n return { eventName, data };\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * React hook to automatically run all registered fetches on mount.\r\n */\r\nexport const useAutoFetcher = () => {\r\n useEffect(() => {\r\n if (isEnvBrowser()) return;\r\n const run = async () => {\r\n const results = await runFetches();\r\n };\r\n run();\r\n }, []);\r\n};\r\n","import { isEnvBrowser } from \"./misc\";\r\n\r\nexport interface InternalEvent<T = unknown> {\r\n action: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Emulates dispatching an event using SendNuiMessage in the lua scripts.\r\n * This is used when developing in browser\r\n *\r\n * @param events - The event you want to cover\r\n * @param timer - How long until it should trigger (ms)\r\n */\r\nexport const internalEvent = <P>(events: InternalEvent<P>[], timer = 1000): void => {\r\n if (isEnvBrowser()) {\r\n for (const event of events) {\r\n setTimeout(() => {\r\n window.dispatchEvent(\r\n new MessageEvent(\"message\", {\r\n data: {\r\n action: event.action,\r\n data: event.data,\r\n },\r\n }),\r\n );\r\n }, timer);\r\n }\r\n }\r\n};\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"../utils/fetchNui\";\r\n\r\n\r\ntype localeType = (key: string, ...args: string[]) => string;\r\n\r\ntype LocalesProps = {\r\n [key: string]: string;\r\n}\r\n\r\ntype LocaleStoreProps = {\r\n locale: localeType;\r\n locales: LocalesProps;\r\n};\r\n\r\n\r\nexport const localeStore = create<LocaleStoreProps>((set, get) => {\r\n return {\r\n locales: {\r\n \"OccupantsDesc\": \"Here you can view and manage the occupants of your traphouse. These occupants can be used mainly for selling drugs to the NPCs surrounding your traphouse. However they have other uses to so be careful who you add as an occupant.\", \r\n },\r\n locale: (key: string, ...args: (string|number)[]): string => {\r\n const exists = get().locales[key];\r\n if (!exists){\r\n // add to a jsonfile called missing_locales.json within src of project \r\n \r\n }\r\n let translation = exists || key;\r\n if (args.length) {\r\n // convert the arg to a string and replace the %s in the translation\r\n \r\n\r\n translation = translation.replace(/%s/g, () => String(args.shift() || ''));\r\n }\r\n return translation;\r\n },\r\n };\r\n});\r\n\r\n// export locale as a standalone function \r\nexport const locale = localeStore.getState().locale;\r\n\r\nregisterInitialFetch<LocalesProps>('GET_LOCALES', undefined).then((data) => {\r\n localeStore.setState({ locales: data });\r\n});\r\n","// ------------------ Game <-> Map Conversion ------------------\r\nexport const mapCenter: [number, number] = [-119.43, 58.84]\r\nexport const latPr100 = 1.421\r\n\r\n/** Convert game world coordinates -> Leaflet map coordinates */\r\nexport function gameToMap(x: number, y: number): [number, number] {\r\n return [\r\n mapCenter[0] + (latPr100 / 100) * y, // lng\r\n mapCenter[1] + (latPr100 / 100) * x, // lat\r\n ]\r\n}\r\n\r\n/** Convert Leaflet map coordinates -> game world coordinates */\r\nexport function mapToGame(lat: number, lng: number): [number, number] {\r\n return [\r\n ((lng - mapCenter[1]) * 100) / latPr100,\r\n ((lat - mapCenter[0]) * 100) / latPr100,\r\n ]\r\n}\r\n","import { create } from \"zustand\";\r\n\r\n\r\nexport const useProfanityStore = create<string[]>(() => ([\r\n 'ars3',\r\n 'a55',\r\n 'a55hole',\r\n 'ahole',\r\n 'anus',\r\n 'ash0le',\r\n 'ash0les',\r\n 'asholes',\r\n \"4r5e\",\r\n \"5h1t\",\r\n \"5hit\",\r\n \"a55\",\r\n \"anal\",\r\n \"anus\",\r\n \"ar5e\",\r\n \"arrse\",\r\n \"arse\",\r\n \"ass\",\r\n \"ass-fucker\",\r\n \"asses\",\r\n \"assfucker\",\r\n \"assfukka\",\r\n \"asshole\",\r\n \"assholes\",\r\n \"asswhole\",\r\n \"a_s_s\",\r\n \"b!tch\",\r\n \"b00bs\",\r\n \"b17ch\",\r\n \"b1tch\",\r\n \"ballsack\",\r\n \"beastial\",\r\n \"beastiality\",\r\n \"bestial\",\r\n \"bestiality\",\r\n \"bi+ch\",\r\n \"biatch\",\r\n \"bitch\",\r\n \"bitcher\",\r\n \"bitchers\",\r\n \"bitches\",\r\n \"bitchin\",\r\n \"bitching\",\r\n \"blow job\",\r\n \"blowjob\",\r\n \"blowjobs\",\r\n \"boiolas\",\r\n \"bollock\",\r\n \"bollok\",\r\n \"boner\",\r\n \"boob\",\r\n \"boobs\",\r\n \"booobs\",\r\n \"boooobs\",\r\n \"booooobs\",\r\n \"booooooobs\",\r\n \"breasts\",\r\n \"buceta\",\r\n \"bunny fucker\",\r\n \"butthole\",\r\n \"buttmuch\",\r\n \"buttplug\",\r\n \"c0ck\",\r\n \"c0cksucker\",\r\n \"carpet muncher\",\r\n \"chink\",\r\n \"cipa\",\r\n \"cl1t\",\r\n \"clit\",\r\n \"clitoris\",\r\n \"clits\",\r\n \"cnut\",\r\n \"cock\",\r\n \"cock-sucker\",\r\n \"cockface\",\r\n \"cockhead\",\r\n \"cockmunch\",\r\n \"cockmuncher\",\r\n \"cocks\",\r\n \"cocksuck\",\r\n \"cocksucked\",\r\n \"cocksucker\",\r\n \"cocksucking\",\r\n \"cocksucks\",\r\n \"cocksuka\",\r\n \"cocksukka\",\r\n \"cokmuncher\",\r\n \"coksucka\",\r\n \"coon\",\r\n \"cum\",\r\n \"cummer\",\r\n \"cumming\",\r\n \"cums\",\r\n \"cumshot\",\r\n \"cunilingus\",\r\n \"cunillingus\",\r\n \"cunnilingus\",\r\n \"cunt\",\r\n \"cuntlick\",\r\n \"cuntlicker\",\r\n \"cuntlicking\",\r\n \"cunts\",\r\n \"cyalis\",\r\n \"cyberfuc\",\r\n \"cyberfuck\",\r\n \"cyberfucked\",\r\n \"cyberfucker\",\r\n \"cyberfuckers\",\r\n \"cyberfucking\",\r\n \"d1ck\",\r\n \"dlck\",\r\n \"dog-fucker\",\r\n \"doggin\",\r\n \"dogging\",\r\n \"donkeyribber\",\r\n \"dyke\",\r\n \"ejaculate\",\r\n \"ejaculated\",\r\n \"ejaculates\",\r\n \"ejaculating\",\r\n \"ejaculatings\",\r\n \"ejaculation\",\r\n \"ejakulate\",\r\n \"f u c k\",\r\n \"f u c k e r\",\r\n \"f4nny\",\r\n \"fag\",\r\n \"fagging\",\r\n \"faggitt\",\r\n \"faggot\",\r\n \"faggs\",\r\n \"fagot\",\r\n \"fagots\",\r\n \"fags\",\r\n \"fannyflaps\",\r\n \"fannyfucker\",\r\n \"fatass\",\r\n \"fcuk\",\r\n \"fcuker\",\r\n \"fcuking\",\r\n \"feck\",\r\n \"fecker\",\r\n \"felching\",\r\n \"fellate\",\r\n \"fellatio\",\r\n \"fingerfuck\",\r\n \"fingerfucked\",\r\n \"fingerfucker\",\r\n \"fingerfuckers\",\r\n \"fingerfucking\",\r\n \"fingerfucks\",\r\n \"fistfuck\",\r\n \"fistfucked\",\r\n \"fistfucker\",\r\n \"fistfuckers\",\r\n \"fistfucking\",\r\n \"fistfuckings\",\r\n \"fistfucks\",\r\n \"fuck\",\r\n \"fucka\",\r\n \"fucked\",\r\n \"fucker\",\r\n \"fuckers\",\r\n \"fuckhead\",\r\n \"fuckheads\",\r\n \"fuckin\",\r\n \"fucking\",\r\n \"fuckings\",\r\n \"fuckingshitmotherfucker\",\r\n \"fuckme\",\r\n \"fucks\",\r\n \"fuckwhit\",\r\n \"fuckwit\",\r\n \"fudge packer\",\r\n \"fudgepacker\",\r\n \"fuk\",\r\n \"fuker\",\r\n \"fukker\",\r\n \"fukkin\",\r\n \"fuks\",\r\n \"fukwhit\",\r\n \"fukwit\",\r\n \"fux\",\r\n \"fux0r\",\r\n \"f_u_c_k\",\r\n \"gangbang\",\r\n \"gangbanged\",\r\n \"gangbangs\",\r\n \"gaysex\",\r\n \"God\",\r\n \"god-dam\",\r\n \"god-damned\",\r\n \"goddamn\",\r\n \"goddamned\",\r\n \"homo\",\r\n \"jack-off\",\r\n \"jerk-off\",\r\n \"l3i+ch\",\r\n \"l3itch\",\r\n \"labia\",\r\n \"lusting\",\r\n \"m0f0\",\r\n \"m0fo\",\r\n \"m45terbate\",\r\n \"ma5terb8\",\r\n \"ma5terbate\",\r\n \"masochist\",\r\n \"master-bate\",\r\n \"masterb8\",\r\n \"masterbat*\",\r\n \"masterbat3\",\r\n \"masterbate\",\r\n \"masterbation\",\r\n \"masterbations\",\r\n \"masturbate\",\r\n \"mo-fo\",\r\n \"mof0\",\r\n \"mothafuck\",\r\n \"mothafucka\",\r\n \"mothafuckas\",\r\n \"mothafuckaz\",\r\n \"mothafucked\",\r\n \"mothafucker\",\r\n \"mothafuckers\",\r\n \"mothafuckin\",\r\n \"mothafucking\",\r\n \"mothafuckings\",\r\n \"mothafucks\",\r\n \"mother fucker\",\r\n \"motherfuck\",\r\n \"motherfucked\",\r\n \"motherfucker\",\r\n \"motherfuckers\",\r\n \"motherfuckin\",\r\n \"motherfucking\",\r\n \"motherfuckings\",\r\n \"motherfuckka\",\r\n \"motherfucks\",\r\n \"muthafecker\",\r\n \"muthafuckker\",\r\n \"mutherfucker\",\r\n \"n1gga\",\r\n \"n1gger\",\r\n \"nazi\",\r\n \"nigg3r\",\r\n \"nigg4h\",\r\n \"nigga\",\r\n \"niggah\",\r\n \"niggas\",\r\n \"niggaz\",\r\n \"nigger\",\r\n \"niggers\",\r\n \"nob jokey\",\r\n \"nobjocky\",\r\n \"nobjokey\",\r\n \"orgasim\",\r\n \"orgasims\",\r\n \"orgasm\",\r\n \"orgasms\",\r\n \"p0rn\",\r\n \"penis\",\r\n \"penisfucker\",\r\n \"phonesex\",\r\n \"phuck\",\r\n \"phuked\",\r\n \"phuking\",\r\n \"phukked\",\r\n \"phukking\",\r\n \"phuks\",\r\n \"phuq\",\r\n \"pigfucker\",\r\n \"pimpis\",\r\n \"piss\",\r\n \"pissed\",\r\n \"pisser\",\r\n \"pissers\",\r\n \"pisses\",\r\n \"pissflaps\",\r\n \"pissin\",\r\n \"pissing\",\r\n \"pissoff\",\r\n \"poop\",\r\n \"porn\",\r\n \"porno\",\r\n \"pornography\",\r\n \"pornos\",\r\n \"prick\",\r\n \"pricks\",\r\n \"pron\",\r\n \"pube\",\r\n \"pusse\",\r\n \"pussi\",\r\n \"pussies\",\r\n \"pussy\",\r\n \"pussys\",\r\n \"rectum\",\r\n \"retard\",\r\n \"rimjaw\",\r\n \"rimming\",\r\n \"s hit\",\r\n \"s.o.b.\",\r\n \"scroat\",\r\n \"scrote\",\r\n \"scrotum\",\r\n \"semen\",\r\n \"sex\",\r\n \"sh!+\",\r\n \"sh!t\",\r\n \"sh1t\",\r\n \"shemale\",\r\n \"shit\",\r\n \"shitdick\",\r\n \"shite\",\r\n \"shited\",\r\n \"shitey\",\r\n \"shitfuck\",\r\n \"shitfull\",\r\n \"shithead\",\r\n \"shiting\",\r\n \"shitings\",\r\n \"shits\",\r\n \"shitted\",\r\n \"shitter\",\r\n \"shitters\",\r\n \"shitting\",\r\n \"shittings\",\r\n \"shitty\",\r\n \"skank\",\r\n \"slut\",\r\n \"sluts\",\r\n \"smegma\",\r\n \"smut\",\r\n \"son-of-a-bitch\",\r\n \"spac\",\r\n \"s_h_i_t\",\r\n \"t1tt1e5\",\r\n \"t1tties\",\r\n \"teets\",\r\n \"teez\",\r\n \"testical\",\r\n \"testicle\",\r\n \"titfuck\",\r\n \"tits\",\r\n \"titt\",\r\n \"tittie5\",\r\n \"tittiefucker\",\r\n \"titties\",\r\n \"tittyfuck\",\r\n \"tittywank\",\r\n \"titwank\",\r\n \"tosser\",\r\n \"tw4t\",\r\n \"twat\",\r\n \"twathead\",\r\n \"twatty\",\r\n \"twunt\",\r\n \"twunter\",\r\n \"v14gra\",\r\n \"v1gra\",\r\n \"vagina\",\r\n \"viagra\",\r\n \"vulva\",\r\n \"w00se\",\r\n \"whoar\",\r\n \"whore\",\r\n \"xrated\",\r\n]));\r\n\r\nexport const isProfanity = (word: string) => {\r\n const all = useProfanityStore.getState();\r\n \r\n // Convert to array if needed\r\n const profanityArray = Array.isArray(all) \r\n ? all \r\n : typeof all === 'object' && all !== null\r\n ? Object.values(all)\r\n : [];\r\n return profanityArray.includes(word);\r\n};\r\n\r\n","import { create } from 'zustand';\r\nimport { useMemo } from 'react';\r\n\r\nexport type SkillSettings = {\r\n baseLevel: number;\r\n maxLevel: number;\r\n baseXP: number;\r\n modifier: number;\r\n};\r\n\r\ntype SkillStore = {\r\n settings: SkillSettings;\r\n levelMap: Record<string, number>;\r\n setSettings: (updater: SkillSettings | ((prev: SkillSettings) => SkillSettings)) => void;\r\n};\r\n\r\ntype SkillHookResult = {\r\n prevLevelXP: number;\r\n currentLevel: number;\r\n nextLevel: number;\r\n currentLevelXP: number;\r\n nextLevelXP: number;\r\n progressToLevel: number;\r\n xpToNextLevel: number;\r\n};\r\n\r\nfunction calculateXPForLevel(level: number, settings: SkillSettings): number {\r\n if (level < settings.baseLevel) return 0;\r\n if (level === 1) return 0;\r\n if (level === 2) return settings.baseXP;\r\n\r\n let totalXP = settings.baseXP;\r\n\r\n for (let i = 2; i <= level - 1; i++) {\r\n const baseRuneScapeXP = Math.floor((i + 300 * 2 ** (i / 7)) / 4);\r\n totalXP += baseRuneScapeXP * settings.modifier;\r\n }\r\n\r\n return Math.floor(totalXP);\r\n}\r\n\r\nfunction generateLevelMap(settings: SkillSettings): Record<string, number> {\r\n const levelMap: Record<string, number> = {};\r\n for (let level = settings.baseLevel; level <= settings.maxLevel; level++) {\r\n levelMap[level.toString()] = calculateXPForLevel(level, settings);\r\n }\r\n return levelMap;\r\n}\r\n\r\nfunction getLevelFromXP(xp: number, levelMap: Record<string, number>, settings: SkillSettings): number {\r\n for (let level = settings.baseLevel; level <= settings.maxLevel; level++) {\r\n const xpForLevel = levelMap[level.toString()];\r\n if (xpForLevel > xp) return level - 1;\r\n }\r\n return settings.maxLevel;\r\n}\r\n\r\nexport function createSkill(defaultSettings: SkillSettings) {\r\n const useStore = create<SkillStore>((set) => ({\r\n settings: defaultSettings,\r\n levelMap: generateLevelMap(defaultSettings),\r\n setSettings: (updater) =>\r\n set((state) => {\r\n const newSettings = typeof updater === 'function' ? updater(state.settings) : updater;\r\n return {\r\n settings: newSettings,\r\n levelMap: generateLevelMap(newSettings),\r\n };\r\n }),\r\n }));\r\n\r\n const useSkill = (xp: number): SkillHookResult => {\r\n const { settings, levelMap } = useStore();\r\n\r\n return useMemo(() => {\r\n const currentLevel = getLevelFromXP(xp, levelMap, settings);\r\n const nextLevel = Math.min(currentLevel + 1, settings.maxLevel);\r\n \r\n const currentLevelXP = levelMap[currentLevel.toString()] || 0;\r\n const nextLevelXP = levelMap[nextLevel.toString()] || 0;\r\n\r\n const xpInCurrentLevel = xp - currentLevelXP;\r\n const xpRequiredForLevel = nextLevelXP - currentLevelXP;\r\n const progressToLevel = xpRequiredForLevel > 0 \r\n ? (xpInCurrentLevel / xpRequiredForLevel) * 100 \r\n : 100;\r\n\r\n const xpToNextLevel = Math.max(0, nextLevelXP - xp);\r\n const prevLevelXP = calculateXPForLevel(currentLevel - 1, settings);\r\n return {\r\n currentLevel,\r\n nextLevel,\r\n currentLevelXP,\r\n prevLevelXP,\r\n nextLevelXP,\r\n progressToLevel: Math.min(100, Math.max(0, progressToLevel)),\r\n xpToNextLevel,\r\n };\r\n }, [xp, levelMap, settings]);\r\n };\r\n\r\n // Return settings object with access to store\r\n const skill = {\r\n get settings() {\r\n return useStore.getState().settings;\r\n },\r\n setSettings: (updater: SkillSettings | ((prev: SkillSettings) => SkillSettings)) => {\r\n useStore.getState().setSettings(updater);\r\n },\r\n useSettings: () => useStore((state) => state.settings),\r\n };\r\n\r\n return {\r\n skill,\r\n useSkill,\r\n };\r\n}\r\n\r\n// Example usage:\r\n// export const { skill: drugSkill, useSkill: useDrugSkill } = createSkill({\r\n// baseLevel: 1,\r\n// maxLevel: 99,\r\n// baseXP: 83,\r\n// modifier: 1,\r\n// });","import axios from \"axios\";\r\nimport { fetchNui } from \"./fetchNui\";\r\n\r\nconst dummyURL = 'https://fmapi.net/api/v2/presigned-url/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJON0UxM0tzejFRM0NuSzRHWFBPbmUiLCJ0ZWFtSWQiOiJlMDQ1YnpwZzg5TGpoaUFTaURIdVoiLCJmaWxlVHlwZSI6ImltYWdlIiwidG9rZW5JZCI6ImpwczJ4Z0M1eFZqcnRoeWZTZnFsYSIsInNldHRpbmdzIjp7IlRlYW1JRCI6ImUwNDVienBnODlMamhpQVNpREh1WiIsIkltYWdlTm90aWZpY2F0aW9uVHlwZSI6IiIsIkRpc2NvcmRXZWJob29rIjoiIiwiRGlzY29yZEltYWdlQ2hhbm5lbCI6IiIsIlZpZGVvTm90aWZpY2F0aW9uVHlwZSI6IiIsIkRpc2NvcmRWaWRlb1dlYmhvb2siOiIiLCJEaXNjb3JkVmlkZW9DaGFubmVsIjoiIiwiQXVkaW9Ob3RpZmljYXRpb25UeXBlIjoiIiwiRGlzY29yZEF1ZGlvV2ViaG9vayI6IiIsIkRpc2NvcmRBdWRpb0NoYW5uZWwiOiIiLCJEaXNjb3JkQm90VG9rZW4iOiIiLCJSZXRlbnRpb25FbmFibGVkIjpmYWxzZSwiUmV0ZW50aW9uRGF5cyI6NywiVmlkZW9SZXRlbnRpb25FbmFibGVkIjpmYWxzZSwiVmlkZW9SZXRlbnRpb25EYXlzIjo3LCJBdWRpb1JldGVudGlvbkVuYWJsZWQiOmZhbHNlLCJBdWRpb1JldGVudGlvbkRheXMiOjcsIkxvZ0FsZXJ0RW5hYmxlZCI6ZmFsc2UsIkxvZ0FsZXJ0TGV2ZWxzIjpbXSwiTG9nQWxlcnREaXNjb3JkV2ViaG9vayI6IiIsIk92ZXJyaWRlSW1hZ2VRdWFsaXR5IjpmYWxzZSwiSW1hZ2VRdWFsaXR5Ijo1MH0sImV4cCI6MTc2MTg1MTEzNH0.fpPeQ0GCm5GNTddjttUQ78VMqRUAufXoOvv5C7Vh3WA';\r\n\r\nexport async function updatePresignedURL(): Promise<string> {\r\n return await fetchNui<string>('GET_PRESIGNED_URL', undefined, dummyURL);\r\n}\r\n\r\nexport type UploadImageProps = {\r\n fileURL: string;\r\n name?: string;\r\n description?: string;\r\n};\r\n\r\nexport async function uploadImage(props: UploadImageProps): Promise<string> {\r\n // 1. Get presigned URL\r\n const uploadURL = await updatePresignedURL();\r\n\r\n // 2. Load file data from blob URL\r\n const response = await fetch(props.fileURL);\r\n const blob = await response.blob();\r\n\r\n // 👇 3. Wrap it as a File so it behaves properly\r\n const file = new File([blob], \"upload.png\", { type: blob.type });\r\n // 4. Build form data\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\r\n \"metadata\",\r\n JSON.stringify({\r\n name: props.name || file.name,\r\n description: props.description || \"Uploaded via DirkScripts\",\r\n })\r\n );\r\n\r\n // 5. Upload to the presigned URL\r\n const uploadRes = await axios.post(uploadURL, formData, {\r\n headers: { \"Content-Type\": \"multipart/form-data\" },\r\n });\r\n\r\n // 6. Return final URL\r\n const finalUrl = uploadRes.data?.data?.url ?? uploadRes.data?.url;\r\n if (!finalUrl) throw new Error(\"Upload succeeded but no URL returned\");\r\n return finalUrl;\r\n}\r\n\r\n\r\nexport async function getImageShape(file: File | string): Promise<\"square\" | \"wide\"> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n\r\n img.onload = () => {\r\n if (img.width > img.height) resolve(\"wide\");\r\n else resolve(\"square\"); // tall or equal treated as square\r\n };\r\n\r\n img.onerror = () => reject(new Error(\"Failed to load image\"));\r\n\r\n img.src = typeof file === \"string\" ? file : URL.createObjectURL(file);\r\n });\r\n}\r\n","import { create } from \"zustand\";\r\nimport { registerInitialFetch } from \"./fetchNui\";\r\nimport { MantineColorsTuple } from \"@mantine/core\";\r\n\r\nexport type SettingsState = {\r\n game: \"fivem\" | \"rdr3\";\r\n primaryColor: string;\r\n primaryShade: number;\r\n itemImgPath: string;\r\n customTheme?: MantineColorsTuple;\r\n};\r\n\r\nexport const useSettings = create<SettingsState>(() => ({\r\n game: \"fivem\",\r\n primaryColor: \"dirk\",\r\n primaryShade: 9,\r\n itemImgPath: \"\",\r\n customTheme: [\r\n \"#f0f4ff\",\r\n \"#d9e3ff\",\r\n \"#bfcfff\",\r\n \"#a6bbff\",\r\n \"#8ca7ff\",\r\n \"#7393ff\",\r\n \"#5a7fff\",\r\n \"#406bff\",\r\n \"#2547ff\",\r\n \"#0b33ff\",\r\n ],\r\n}));\r\n\r\n\r\nregisterInitialFetch<Partial<SettingsState>>(\"GET_SETTINGS\")\r\n .then((data) => {\r\n useSettings.setState({\r\n ...data,\r\n });\r\n }).catch((err) => {\r\n console.error(\"Failed to fetch initial settings within dirk-cfx-react:\", err);\r\n });\r\n"]}
|
package/dist/utils/index.d.cts
CHANGED
|
@@ -108,7 +108,6 @@ declare function uploadImage(props: UploadImageProps): Promise<string>;
|
|
|
108
108
|
declare function getImageShape(file: File | string): Promise<"square" | "wide">;
|
|
109
109
|
|
|
110
110
|
type SettingsState = {
|
|
111
|
-
hydrated: boolean;
|
|
112
111
|
game: "fivem" | "rdr3";
|
|
113
112
|
primaryColor: string;
|
|
114
113
|
primaryShade: number;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -108,7 +108,6 @@ declare function uploadImage(props: UploadImageProps): Promise<string>;
|
|
|
108
108
|
declare function getImageShape(file: File | string): Promise<"square" | "wide">;
|
|
109
109
|
|
|
110
110
|
type SettingsState = {
|
|
111
|
-
hydrated: boolean;
|
|
112
111
|
game: "fivem" | "rdr3";
|
|
113
112
|
primaryColor: string;
|
|
114
113
|
primaryShade: number;
|