dirk-cfx-react 1.1.2 → 1.1.6
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 +1413 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.cts +699 -0
- package/dist/components/index.d.ts +699 -0
- package/dist/components/index.js +1383 -0
- package/dist/components/index.js.map +1 -0
- package/dist/hooks/index.cjs +348 -0
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.d.cts +71 -0
- package/dist/hooks/index.d.ts +71 -0
- package/dist/hooks/index.js +340 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.cjs +178 -139
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -886
- package/dist/index.d.ts +10 -886
- package/dist/index.js +157 -119
- package/dist/index.js.map +1 -1
- package/dist/providers/index.cjs +315 -0
- package/dist/providers/index.cjs.map +1 -0
- package/dist/providers/index.d.cts +9 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.js +309 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/utils/index.cjs +844 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +120 -0
- package/dist/utils/index.d.ts +120 -0
- package/dist/utils/index.js +813 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('@mantine/core/styles.css');
|
|
4
|
+
require('@mantine/notifications/styles.css');
|
|
5
|
+
require('./styles/notify.css');
|
|
6
|
+
require('./styles/fonts.css');
|
|
7
|
+
require('./styles/scrollBar.css');
|
|
8
|
+
require('./styles/tornEdge.css');
|
|
9
|
+
var fontawesomeSvgCore = require('@fortawesome/fontawesome-svg-core');
|
|
10
|
+
var freeBrandsSvgIcons = require('@fortawesome/free-brands-svg-icons');
|
|
11
|
+
var freeRegularSvgIcons = require('@fortawesome/free-regular-svg-icons');
|
|
12
|
+
var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
|
|
13
|
+
var core = require('@mantine/core');
|
|
14
|
+
var React = require('react');
|
|
15
|
+
var zustand = require('zustand');
|
|
16
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
17
|
+
|
|
18
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
+
|
|
20
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
21
|
+
|
|
22
|
+
var __defProp = Object.defineProperty;
|
|
23
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
24
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
25
|
+
var label = {
|
|
26
|
+
fontSize: "var(--mantine-font-size-xs)",
|
|
27
|
+
fontFamily: "Akrobat Bold",
|
|
28
|
+
letterSpacing: "0.05em",
|
|
29
|
+
textTransform: "uppercase"
|
|
30
|
+
};
|
|
31
|
+
var error = {
|
|
32
|
+
fontSize: "var(--mantine-font-size-xs)",
|
|
33
|
+
fontFamily: "Akrobat Regular"
|
|
34
|
+
};
|
|
35
|
+
var theme = core.createTheme({
|
|
36
|
+
primaryColor: "dirk",
|
|
37
|
+
primaryShade: 9,
|
|
38
|
+
defaultRadius: "xs",
|
|
39
|
+
fontFamily: "Akrobat Regular, sans-serif",
|
|
40
|
+
radius: {
|
|
41
|
+
xxs: "0.3vh",
|
|
42
|
+
xs: "0.5vh",
|
|
43
|
+
sm: "0.75vh",
|
|
44
|
+
md: "1vh",
|
|
45
|
+
lg: "1.5vh",
|
|
46
|
+
xl: "2vh",
|
|
47
|
+
xxl: "3vh"
|
|
48
|
+
},
|
|
49
|
+
fontSizes: {
|
|
50
|
+
xxs: "1.2vh",
|
|
51
|
+
xs: "1.5vh",
|
|
52
|
+
sm: "1.8vh",
|
|
53
|
+
md: "2.2vh",
|
|
54
|
+
lg: "2.8vh",
|
|
55
|
+
xl: "3.3vh",
|
|
56
|
+
xxl: "3.8vh"
|
|
57
|
+
},
|
|
58
|
+
lineHeights: {
|
|
59
|
+
xxs: "1.4vh",
|
|
60
|
+
xs: "1.8vh",
|
|
61
|
+
sm: "2.2vh",
|
|
62
|
+
md: "2.8vh",
|
|
63
|
+
lg: "3.3vh",
|
|
64
|
+
xl: "3.8vh"
|
|
65
|
+
},
|
|
66
|
+
spacing: {
|
|
67
|
+
xxs: "0.5vh",
|
|
68
|
+
xs: "0.75vh",
|
|
69
|
+
sm: "1.5vh",
|
|
70
|
+
md: "2vh",
|
|
71
|
+
lg: "3vh",
|
|
72
|
+
xl: "4vh",
|
|
73
|
+
xxl: "5vh"
|
|
74
|
+
},
|
|
75
|
+
components: {
|
|
76
|
+
Progress: {
|
|
77
|
+
styles: {
|
|
78
|
+
label: {
|
|
79
|
+
fontFamily: "Akrobat Bold",
|
|
80
|
+
letterSpacing: "0.05em",
|
|
81
|
+
textTransform: "uppercase"
|
|
82
|
+
},
|
|
83
|
+
root: {
|
|
84
|
+
backgroundColor: "rgba(77, 77, 77, 0.4)"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
Textarea: {
|
|
89
|
+
styles: {
|
|
90
|
+
label,
|
|
91
|
+
error
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
Button: {
|
|
95
|
+
styles: {
|
|
96
|
+
root: {
|
|
97
|
+
fontSize: "var(--mantine-font-size-xs)"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
Select: {
|
|
102
|
+
styles: {
|
|
103
|
+
label,
|
|
104
|
+
input: {
|
|
105
|
+
padding: "var(--mantine-spacing-sm)"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
Pill: {
|
|
110
|
+
styles: (theme2) => ({
|
|
111
|
+
root: {
|
|
112
|
+
display: "inline-flex",
|
|
113
|
+
alignItems: "center",
|
|
114
|
+
justifyContent: "space-between",
|
|
115
|
+
backgroundColor: "rgba(76, 76, 76, 0.3)",
|
|
116
|
+
height: "fit-content",
|
|
117
|
+
textTransform: "uppercase",
|
|
118
|
+
letterSpacing: "0.05em",
|
|
119
|
+
fontFamily: "Akrobat Bold",
|
|
120
|
+
fontSize: theme2.fontSizes.xs,
|
|
121
|
+
borderRadius: theme2.defaultRadius,
|
|
122
|
+
padding: `${theme2.spacing.xs} ${theme2.spacing.sm}`
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
},
|
|
126
|
+
Input: {
|
|
127
|
+
styles: {
|
|
128
|
+
label,
|
|
129
|
+
error,
|
|
130
|
+
input: {
|
|
131
|
+
padding: "var(--mantine-spacing-sm)",
|
|
132
|
+
backgroundColor: "rgba(76, 76, 76, 0.3)"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
ColorInput: {
|
|
137
|
+
styles: {
|
|
138
|
+
label,
|
|
139
|
+
input: {
|
|
140
|
+
padding: "var(--mantine-spacing-sm)"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
TextInput: {
|
|
145
|
+
styles: {
|
|
146
|
+
label,
|
|
147
|
+
wrapper: {},
|
|
148
|
+
section: {
|
|
149
|
+
marginRight: "0.2vh"
|
|
150
|
+
},
|
|
151
|
+
input: {
|
|
152
|
+
padding: "var(--mantine-spacing-sm)"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
NumberInput: {
|
|
157
|
+
styles: {
|
|
158
|
+
label,
|
|
159
|
+
input: {
|
|
160
|
+
padding: "var(--mantine-spacing-sm)"
|
|
161
|
+
},
|
|
162
|
+
section: {
|
|
163
|
+
pointerEvents: "all"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
colors: {
|
|
169
|
+
dirk: [
|
|
170
|
+
"#ffffff",
|
|
171
|
+
"#f3fce9",
|
|
172
|
+
"#dbf5bd",
|
|
173
|
+
"#c3ee91",
|
|
174
|
+
"#ace765",
|
|
175
|
+
"#94e039",
|
|
176
|
+
"#7ac61f",
|
|
177
|
+
"#5f9a18",
|
|
178
|
+
"#29420a",
|
|
179
|
+
"#446e11"
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
var theme_default = theme;
|
|
184
|
+
|
|
185
|
+
// src/utils/misc.ts
|
|
186
|
+
var isEnvBrowser = () => !window.invokeNative;
|
|
187
|
+
|
|
188
|
+
// src/utils/fetchNui.ts
|
|
189
|
+
async function fetchNui(eventName, data, mockData) {
|
|
190
|
+
const options = {
|
|
191
|
+
method: "post",
|
|
192
|
+
headers: {
|
|
193
|
+
"Content-Type": "application/json; charset=UTF-8"
|
|
194
|
+
},
|
|
195
|
+
body: JSON.stringify(data)
|
|
196
|
+
};
|
|
197
|
+
if (isEnvBrowser() && mockData === void 0) {
|
|
198
|
+
console.warn(
|
|
199
|
+
`[fetchNui] Called fetchNui for event "${eventName}" in browser environment without mockData. Returning empty object.`
|
|
200
|
+
);
|
|
201
|
+
return {};
|
|
202
|
+
}
|
|
203
|
+
const resourceName = window.GetParentResourceName ? window.GetParentResourceName() : "nui-frame-app";
|
|
204
|
+
const resp = await fetch(`https://${resourceName}/${eventName}`, options);
|
|
205
|
+
return await resp.json();
|
|
206
|
+
}
|
|
207
|
+
async function registerInitialFetch(eventName, data, mockData) {
|
|
208
|
+
const fetcher = () => fetchNui(eventName, data, mockData);
|
|
209
|
+
return fetcher();
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// src/utils/useSettings.ts
|
|
213
|
+
var useSettings = zustand.create(() => ({
|
|
214
|
+
hydrated: false,
|
|
215
|
+
game: "fivem",
|
|
216
|
+
primaryColor: "dirk",
|
|
217
|
+
primaryShade: 9,
|
|
218
|
+
itemImgPath: "",
|
|
219
|
+
customTheme: [
|
|
220
|
+
"#f0f4ff",
|
|
221
|
+
"#d9e3ff",
|
|
222
|
+
"#bfcfff",
|
|
223
|
+
"#a6bbff",
|
|
224
|
+
"#8ca7ff",
|
|
225
|
+
"#7393ff",
|
|
226
|
+
"#5a7fff",
|
|
227
|
+
"#406bff",
|
|
228
|
+
"#2547ff",
|
|
229
|
+
"#0b33ff"
|
|
230
|
+
]
|
|
231
|
+
}));
|
|
232
|
+
registerInitialFetch("GET_SETTINGS").then((data) => {
|
|
233
|
+
useSettings.setState({
|
|
234
|
+
...data,
|
|
235
|
+
hydrated: true
|
|
236
|
+
});
|
|
237
|
+
}).catch(() => {
|
|
238
|
+
useSettings.setState({ hydrated: true });
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
// src/utils/mergeMantineTheme.ts
|
|
242
|
+
var isValidColorScale = (v) => Array.isArray(v) && v.length === 10 && v.every((shade) => typeof shade === "string");
|
|
243
|
+
function mergeMantineThemeSafe(base, custom, override) {
|
|
244
|
+
const colors = { ...base.colors };
|
|
245
|
+
if (custom && isValidColorScale(custom)) {
|
|
246
|
+
colors["custom"] = custom;
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
...base,
|
|
250
|
+
...override,
|
|
251
|
+
colors: {
|
|
252
|
+
...colors,
|
|
253
|
+
...override?.colors ?? {}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
var DirkErrorBoundary = class extends React__default.default.Component {
|
|
258
|
+
constructor() {
|
|
259
|
+
super(...arguments);
|
|
260
|
+
__publicField(this, "state", { error: null });
|
|
261
|
+
}
|
|
262
|
+
static getDerivedStateFromError(error2) {
|
|
263
|
+
return { error: error2 };
|
|
264
|
+
}
|
|
265
|
+
componentDidCatch(error2, info) {
|
|
266
|
+
console.group("\u{1F525} Dirk UI Crash");
|
|
267
|
+
console.error(error2);
|
|
268
|
+
console.error(info.componentStack);
|
|
269
|
+
console.groupEnd();
|
|
270
|
+
}
|
|
271
|
+
render() {
|
|
272
|
+
if (!this.state.error) return this.props.children;
|
|
273
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(core.Box, { p: "md", bg: "dark.8", children: [
|
|
274
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { c: "red", fw: 600, children: "UI crashed" }),
|
|
275
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Code, { block: true, mt: "sm", children: this.state.error.message })
|
|
276
|
+
] });
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
fontawesomeSvgCore.library.add(freeSolidSvgIcons.fas, freeRegularSvgIcons.far, freeBrandsSvgIcons.fab);
|
|
280
|
+
function DirkProvider({ children, themeOverride }) {
|
|
281
|
+
const {
|
|
282
|
+
hydrated,
|
|
283
|
+
primaryColor,
|
|
284
|
+
primaryShade,
|
|
285
|
+
customTheme,
|
|
286
|
+
game
|
|
287
|
+
} = useSettings();
|
|
288
|
+
if (!hydrated) return null;
|
|
289
|
+
const mergedTheme = React.useMemo(
|
|
290
|
+
() => mergeMantineThemeSafe(
|
|
291
|
+
{ ...theme_default, primaryColor, primaryShade },
|
|
292
|
+
customTheme,
|
|
293
|
+
themeOverride
|
|
294
|
+
),
|
|
295
|
+
[primaryColor, primaryShade, customTheme, themeOverride]
|
|
296
|
+
);
|
|
297
|
+
React.useEffect(() => {
|
|
298
|
+
document.body.style.fontFamily = game === "rdr3" ? '"Red Dead", sans-serif' : '"Akrobat Regular", sans-serif';
|
|
299
|
+
console.log(`%cNew Font Applied: ${document.body.style.fontFamily}`, "font-family: " + document.body.style.fontFamily);
|
|
300
|
+
}, [game]);
|
|
301
|
+
const content = isEnvBrowser() ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
302
|
+
core.BackgroundImage,
|
|
303
|
+
{
|
|
304
|
+
w: "100vw",
|
|
305
|
+
h: "100vh",
|
|
306
|
+
src: game === "fivem" ? "https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg" : "https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg",
|
|
307
|
+
children
|
|
308
|
+
}
|
|
309
|
+
) : children;
|
|
310
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DirkErrorBoundary, { children: /* @__PURE__ */ jsxRuntime.jsx(core.MantineProvider, { theme: mergedTheme, defaultColorScheme: "dark", children: content }) });
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
exports.DirkProvider = DirkProvider;
|
|
314
|
+
//# sourceMappingURL=index.cjs.map
|
|
315
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type DirkProviderProps = {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
themeOverride?: any;
|
|
6
|
+
};
|
|
7
|
+
declare function DirkProvider({ children, themeOverride }: DirkProviderProps): react_jsx_runtime.JSX.Element | null;
|
|
8
|
+
|
|
9
|
+
export { DirkProvider, type DirkProviderProps };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type DirkProviderProps = {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
themeOverride?: any;
|
|
6
|
+
};
|
|
7
|
+
declare function DirkProvider({ children, themeOverride }: DirkProviderProps): react_jsx_runtime.JSX.Element | null;
|
|
8
|
+
|
|
9
|
+
export { DirkProvider, type DirkProviderProps };
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import '@mantine/core/styles.css';
|
|
2
|
+
import '@mantine/notifications/styles.css';
|
|
3
|
+
import './styles/notify.css';
|
|
4
|
+
import './styles/fonts.css';
|
|
5
|
+
import './styles/scrollBar.css';
|
|
6
|
+
import './styles/tornEdge.css';
|
|
7
|
+
import { library } from '@fortawesome/fontawesome-svg-core';
|
|
8
|
+
import { fab } from '@fortawesome/free-brands-svg-icons';
|
|
9
|
+
import { far } from '@fortawesome/free-regular-svg-icons';
|
|
10
|
+
import { fas } from '@fortawesome/free-solid-svg-icons';
|
|
11
|
+
import { createTheme, Box, Text, Code, MantineProvider, BackgroundImage } from '@mantine/core';
|
|
12
|
+
import React, { useMemo, useEffect } from 'react';
|
|
13
|
+
import { create } from 'zustand';
|
|
14
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
15
|
+
|
|
16
|
+
var __defProp = Object.defineProperty;
|
|
17
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
18
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
19
|
+
var label = {
|
|
20
|
+
fontSize: "var(--mantine-font-size-xs)",
|
|
21
|
+
fontFamily: "Akrobat Bold",
|
|
22
|
+
letterSpacing: "0.05em",
|
|
23
|
+
textTransform: "uppercase"
|
|
24
|
+
};
|
|
25
|
+
var error = {
|
|
26
|
+
fontSize: "var(--mantine-font-size-xs)",
|
|
27
|
+
fontFamily: "Akrobat Regular"
|
|
28
|
+
};
|
|
29
|
+
var theme = createTheme({
|
|
30
|
+
primaryColor: "dirk",
|
|
31
|
+
primaryShade: 9,
|
|
32
|
+
defaultRadius: "xs",
|
|
33
|
+
fontFamily: "Akrobat Regular, sans-serif",
|
|
34
|
+
radius: {
|
|
35
|
+
xxs: "0.3vh",
|
|
36
|
+
xs: "0.5vh",
|
|
37
|
+
sm: "0.75vh",
|
|
38
|
+
md: "1vh",
|
|
39
|
+
lg: "1.5vh",
|
|
40
|
+
xl: "2vh",
|
|
41
|
+
xxl: "3vh"
|
|
42
|
+
},
|
|
43
|
+
fontSizes: {
|
|
44
|
+
xxs: "1.2vh",
|
|
45
|
+
xs: "1.5vh",
|
|
46
|
+
sm: "1.8vh",
|
|
47
|
+
md: "2.2vh",
|
|
48
|
+
lg: "2.8vh",
|
|
49
|
+
xl: "3.3vh",
|
|
50
|
+
xxl: "3.8vh"
|
|
51
|
+
},
|
|
52
|
+
lineHeights: {
|
|
53
|
+
xxs: "1.4vh",
|
|
54
|
+
xs: "1.8vh",
|
|
55
|
+
sm: "2.2vh",
|
|
56
|
+
md: "2.8vh",
|
|
57
|
+
lg: "3.3vh",
|
|
58
|
+
xl: "3.8vh"
|
|
59
|
+
},
|
|
60
|
+
spacing: {
|
|
61
|
+
xxs: "0.5vh",
|
|
62
|
+
xs: "0.75vh",
|
|
63
|
+
sm: "1.5vh",
|
|
64
|
+
md: "2vh",
|
|
65
|
+
lg: "3vh",
|
|
66
|
+
xl: "4vh",
|
|
67
|
+
xxl: "5vh"
|
|
68
|
+
},
|
|
69
|
+
components: {
|
|
70
|
+
Progress: {
|
|
71
|
+
styles: {
|
|
72
|
+
label: {
|
|
73
|
+
fontFamily: "Akrobat Bold",
|
|
74
|
+
letterSpacing: "0.05em",
|
|
75
|
+
textTransform: "uppercase"
|
|
76
|
+
},
|
|
77
|
+
root: {
|
|
78
|
+
backgroundColor: "rgba(77, 77, 77, 0.4)"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
Textarea: {
|
|
83
|
+
styles: {
|
|
84
|
+
label,
|
|
85
|
+
error
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
Button: {
|
|
89
|
+
styles: {
|
|
90
|
+
root: {
|
|
91
|
+
fontSize: "var(--mantine-font-size-xs)"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
Select: {
|
|
96
|
+
styles: {
|
|
97
|
+
label,
|
|
98
|
+
input: {
|
|
99
|
+
padding: "var(--mantine-spacing-sm)"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
Pill: {
|
|
104
|
+
styles: (theme2) => ({
|
|
105
|
+
root: {
|
|
106
|
+
display: "inline-flex",
|
|
107
|
+
alignItems: "center",
|
|
108
|
+
justifyContent: "space-between",
|
|
109
|
+
backgroundColor: "rgba(76, 76, 76, 0.3)",
|
|
110
|
+
height: "fit-content",
|
|
111
|
+
textTransform: "uppercase",
|
|
112
|
+
letterSpacing: "0.05em",
|
|
113
|
+
fontFamily: "Akrobat Bold",
|
|
114
|
+
fontSize: theme2.fontSizes.xs,
|
|
115
|
+
borderRadius: theme2.defaultRadius,
|
|
116
|
+
padding: `${theme2.spacing.xs} ${theme2.spacing.sm}`
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
},
|
|
120
|
+
Input: {
|
|
121
|
+
styles: {
|
|
122
|
+
label,
|
|
123
|
+
error,
|
|
124
|
+
input: {
|
|
125
|
+
padding: "var(--mantine-spacing-sm)",
|
|
126
|
+
backgroundColor: "rgba(76, 76, 76, 0.3)"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
ColorInput: {
|
|
131
|
+
styles: {
|
|
132
|
+
label,
|
|
133
|
+
input: {
|
|
134
|
+
padding: "var(--mantine-spacing-sm)"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
TextInput: {
|
|
139
|
+
styles: {
|
|
140
|
+
label,
|
|
141
|
+
wrapper: {},
|
|
142
|
+
section: {
|
|
143
|
+
marginRight: "0.2vh"
|
|
144
|
+
},
|
|
145
|
+
input: {
|
|
146
|
+
padding: "var(--mantine-spacing-sm)"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
NumberInput: {
|
|
151
|
+
styles: {
|
|
152
|
+
label,
|
|
153
|
+
input: {
|
|
154
|
+
padding: "var(--mantine-spacing-sm)"
|
|
155
|
+
},
|
|
156
|
+
section: {
|
|
157
|
+
pointerEvents: "all"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
colors: {
|
|
163
|
+
dirk: [
|
|
164
|
+
"#ffffff",
|
|
165
|
+
"#f3fce9",
|
|
166
|
+
"#dbf5bd",
|
|
167
|
+
"#c3ee91",
|
|
168
|
+
"#ace765",
|
|
169
|
+
"#94e039",
|
|
170
|
+
"#7ac61f",
|
|
171
|
+
"#5f9a18",
|
|
172
|
+
"#29420a",
|
|
173
|
+
"#446e11"
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
var theme_default = theme;
|
|
178
|
+
|
|
179
|
+
// src/utils/misc.ts
|
|
180
|
+
var isEnvBrowser = () => !window.invokeNative;
|
|
181
|
+
|
|
182
|
+
// src/utils/fetchNui.ts
|
|
183
|
+
async function fetchNui(eventName, data, mockData) {
|
|
184
|
+
const options = {
|
|
185
|
+
method: "post",
|
|
186
|
+
headers: {
|
|
187
|
+
"Content-Type": "application/json; charset=UTF-8"
|
|
188
|
+
},
|
|
189
|
+
body: JSON.stringify(data)
|
|
190
|
+
};
|
|
191
|
+
if (isEnvBrowser() && mockData === void 0) {
|
|
192
|
+
console.warn(
|
|
193
|
+
`[fetchNui] Called fetchNui for event "${eventName}" in browser environment without mockData. Returning empty object.`
|
|
194
|
+
);
|
|
195
|
+
return {};
|
|
196
|
+
}
|
|
197
|
+
const resourceName = window.GetParentResourceName ? window.GetParentResourceName() : "nui-frame-app";
|
|
198
|
+
const resp = await fetch(`https://${resourceName}/${eventName}`, options);
|
|
199
|
+
return await resp.json();
|
|
200
|
+
}
|
|
201
|
+
async function registerInitialFetch(eventName, data, mockData) {
|
|
202
|
+
const fetcher = () => fetchNui(eventName, data, mockData);
|
|
203
|
+
return fetcher();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// src/utils/useSettings.ts
|
|
207
|
+
var useSettings = create(() => ({
|
|
208
|
+
hydrated: false,
|
|
209
|
+
game: "fivem",
|
|
210
|
+
primaryColor: "dirk",
|
|
211
|
+
primaryShade: 9,
|
|
212
|
+
itemImgPath: "",
|
|
213
|
+
customTheme: [
|
|
214
|
+
"#f0f4ff",
|
|
215
|
+
"#d9e3ff",
|
|
216
|
+
"#bfcfff",
|
|
217
|
+
"#a6bbff",
|
|
218
|
+
"#8ca7ff",
|
|
219
|
+
"#7393ff",
|
|
220
|
+
"#5a7fff",
|
|
221
|
+
"#406bff",
|
|
222
|
+
"#2547ff",
|
|
223
|
+
"#0b33ff"
|
|
224
|
+
]
|
|
225
|
+
}));
|
|
226
|
+
registerInitialFetch("GET_SETTINGS").then((data) => {
|
|
227
|
+
useSettings.setState({
|
|
228
|
+
...data,
|
|
229
|
+
hydrated: true
|
|
230
|
+
});
|
|
231
|
+
}).catch(() => {
|
|
232
|
+
useSettings.setState({ hydrated: true });
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
// src/utils/mergeMantineTheme.ts
|
|
236
|
+
var isValidColorScale = (v) => Array.isArray(v) && v.length === 10 && v.every((shade) => typeof shade === "string");
|
|
237
|
+
function mergeMantineThemeSafe(base, custom, override) {
|
|
238
|
+
const colors = { ...base.colors };
|
|
239
|
+
if (custom && isValidColorScale(custom)) {
|
|
240
|
+
colors["custom"] = custom;
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
...base,
|
|
244
|
+
...override,
|
|
245
|
+
colors: {
|
|
246
|
+
...colors,
|
|
247
|
+
...override?.colors ?? {}
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
var DirkErrorBoundary = class extends React.Component {
|
|
252
|
+
constructor() {
|
|
253
|
+
super(...arguments);
|
|
254
|
+
__publicField(this, "state", { error: null });
|
|
255
|
+
}
|
|
256
|
+
static getDerivedStateFromError(error2) {
|
|
257
|
+
return { error: error2 };
|
|
258
|
+
}
|
|
259
|
+
componentDidCatch(error2, info) {
|
|
260
|
+
console.group("\u{1F525} Dirk UI Crash");
|
|
261
|
+
console.error(error2);
|
|
262
|
+
console.error(info.componentStack);
|
|
263
|
+
console.groupEnd();
|
|
264
|
+
}
|
|
265
|
+
render() {
|
|
266
|
+
if (!this.state.error) return this.props.children;
|
|
267
|
+
return /* @__PURE__ */ jsxs(Box, { p: "md", bg: "dark.8", children: [
|
|
268
|
+
/* @__PURE__ */ jsx(Text, { c: "red", fw: 600, children: "UI crashed" }),
|
|
269
|
+
/* @__PURE__ */ jsx(Code, { block: true, mt: "sm", children: this.state.error.message })
|
|
270
|
+
] });
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
library.add(fas, far, fab);
|
|
274
|
+
function DirkProvider({ children, themeOverride }) {
|
|
275
|
+
const {
|
|
276
|
+
hydrated,
|
|
277
|
+
primaryColor,
|
|
278
|
+
primaryShade,
|
|
279
|
+
customTheme,
|
|
280
|
+
game
|
|
281
|
+
} = useSettings();
|
|
282
|
+
if (!hydrated) return null;
|
|
283
|
+
const mergedTheme = useMemo(
|
|
284
|
+
() => mergeMantineThemeSafe(
|
|
285
|
+
{ ...theme_default, primaryColor, primaryShade },
|
|
286
|
+
customTheme,
|
|
287
|
+
themeOverride
|
|
288
|
+
),
|
|
289
|
+
[primaryColor, primaryShade, customTheme, themeOverride]
|
|
290
|
+
);
|
|
291
|
+
useEffect(() => {
|
|
292
|
+
document.body.style.fontFamily = game === "rdr3" ? '"Red Dead", sans-serif' : '"Akrobat Regular", sans-serif';
|
|
293
|
+
console.log(`%cNew Font Applied: ${document.body.style.fontFamily}`, "font-family: " + document.body.style.fontFamily);
|
|
294
|
+
}, [game]);
|
|
295
|
+
const content = isEnvBrowser() ? /* @__PURE__ */ jsx(
|
|
296
|
+
BackgroundImage,
|
|
297
|
+
{
|
|
298
|
+
w: "100vw",
|
|
299
|
+
h: "100vh",
|
|
300
|
+
src: game === "fivem" ? "https://i.ytimg.com/vi/TOxuNbXrO28/maxresdefault.jpg" : "https://raw.githubusercontent.com/Jump-On-Studios/RedM-jo_libs/refs/heads/main/source-repositories/Menu/public/assets/images/background_dev.jpg",
|
|
301
|
+
children
|
|
302
|
+
}
|
|
303
|
+
) : children;
|
|
304
|
+
return /* @__PURE__ */ jsx(DirkErrorBoundary, { children: /* @__PURE__ */ jsx(MantineProvider, { theme: mergedTheme, defaultColorScheme: "dark", children: content }) });
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export { DirkProvider };
|
|
308
|
+
//# sourceMappingURL=index.js.map
|
|
309
|
+
//# sourceMappingURL=index.js.map
|