dirk-cfx-react 1.1.95 → 1.1.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-E2SFEBBB.cjs → chunk-7EICODPM.cjs} +4 -4
- package/dist/{chunk-E2SFEBBB.cjs.map → chunk-7EICODPM.cjs.map} +1 -1
- package/dist/{chunk-MYNNCLMA.js → chunk-BXP4HEYF.js} +334 -43
- package/dist/chunk-BXP4HEYF.js.map +1 -0
- package/dist/{chunk-KGLO3ZAS.js → chunk-F6EV4VBH.js} +3 -3
- package/dist/{chunk-KGLO3ZAS.js.map → chunk-F6EV4VBH.js.map} +1 -1
- package/dist/{chunk-K3GDU6EY.cjs → chunk-I4YJBITG.cjs} +298 -256
- package/dist/chunk-I4YJBITG.cjs.map +1 -0
- package/dist/{chunk-VKYONY7E.cjs → chunk-J5VNINGK.cjs} +5 -5
- package/dist/{chunk-VKYONY7E.cjs.map → chunk-J5VNINGK.cjs.map} +1 -1
- package/dist/{chunk-YA2PXBP6.cjs → chunk-JIBWKY7H.cjs} +334 -43
- package/dist/chunk-JIBWKY7H.cjs.map +1 -0
- package/dist/{chunk-ZPFW7C2A.js → chunk-JQHQYPEL.js} +3 -3
- package/dist/{chunk-ZPFW7C2A.js.map → chunk-JQHQYPEL.js.map} +1 -1
- package/dist/{chunk-3T2CCW5E.cjs → chunk-K64EX3U2.cjs} +9 -9
- package/dist/{chunk-3T2CCW5E.cjs.map → chunk-K64EX3U2.cjs.map} +1 -1
- package/dist/{chunk-HAB6H274.js → chunk-M5NZAOYQ.js} +145 -103
- package/dist/chunk-M5NZAOYQ.js.map +1 -0
- package/dist/{chunk-Z7N5AQJW.js → chunk-M7H4JKEL.js} +3 -3
- package/dist/{chunk-Z7N5AQJW.js.map → chunk-M7H4JKEL.js.map} +1 -1
- package/dist/{chunk-QOQQ3ERZ.cjs → chunk-NBLBFWZQ.cjs} +18 -17
- package/dist/chunk-NBLBFWZQ.cjs.map +1 -0
- package/dist/{chunk-NVMOGS7Y.js → chunk-Y25C6YMN.js} +5 -5
- package/dist/chunk-Y25C6YMN.js.map +1 -0
- package/dist/components/index.cjs +76 -76
- package/dist/components/index.d.cts +1 -5
- package/dist/components/index.d.ts +1 -5
- package/dist/components/index.js +5 -5
- package/dist/hooks/index.cjs +22 -22
- package/dist/hooks/index.js +4 -4
- package/dist/index.cjs +147 -147
- package/dist/index.js +6 -6
- package/dist/providers/index.cjs +5 -5
- package/dist/providers/index.js +3 -3
- package/dist/utils/index.cjs +48 -48
- package/dist/utils/index.js +1 -1
- package/package.json +123 -123
- package/dist/chunk-HAB6H274.js.map +0 -1
- package/dist/chunk-K3GDU6EY.cjs.map +0 -1
- package/dist/chunk-MYNNCLMA.js.map +0 -1
- package/dist/chunk-NVMOGS7Y.js.map +0 -1
- package/dist/chunk-QOQQ3ERZ.cjs.map +0 -1
- package/dist/chunk-YA2PXBP6.cjs.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
3
|
+
var chunk7EICODPM_cjs = require('./chunk-7EICODPM.cjs');
|
|
4
|
+
var chunkNBLBFWZQ_cjs = require('./chunk-NBLBFWZQ.cjs');
|
|
5
|
+
var chunkK64EX3U2_cjs = require('./chunk-K64EX3U2.cjs');
|
|
6
|
+
var chunkJIBWKY7H_cjs = require('./chunk-JIBWKY7H.cjs');
|
|
7
7
|
var core = require('@mantine/core');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
var reactFontawesome = require('@fortawesome/react-fontawesome');
|
|
@@ -1117,14 +1117,14 @@ function BorderedIcon(props) {
|
|
|
1117
1117
|
aspectRatio: "1/1",
|
|
1118
1118
|
borderRadius: theme.radius.xs,
|
|
1119
1119
|
// border: `2px solid var(--mantine-primary-color-9)`,
|
|
1120
|
-
outline: `0.2vh solid ${
|
|
1121
|
-
boxShadow: `inset 0 0 2vh ${
|
|
1120
|
+
outline: `0.2vh solid ${chunkJIBWKY7H_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][9], 0.8)}`,
|
|
1121
|
+
boxShadow: `inset 0 0 2vh ${chunkJIBWKY7H_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][7], 0.5)}`
|
|
1122
1122
|
},
|
|
1123
1123
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1124
1124
|
reactFontawesome.FontAwesomeIcon,
|
|
1125
1125
|
{
|
|
1126
1126
|
icon: props.icon,
|
|
1127
|
-
color:
|
|
1127
|
+
color: chunkJIBWKY7H_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][theme.primaryShade], props.hovered ? 0.9 : 0.9),
|
|
1128
1128
|
style: {
|
|
1129
1129
|
fontSize: props.fontSize ? props.fontSize : "2.5vh"
|
|
1130
1130
|
}
|
|
@@ -1514,7 +1514,7 @@ function InputContainer(props) {
|
|
|
1514
1514
|
}
|
|
1515
1515
|
function SegmentedControl(props) {
|
|
1516
1516
|
const theme = core.useMantineTheme();
|
|
1517
|
-
const play =
|
|
1517
|
+
const play = chunk7EICODPM_cjs.useAudio((state) => state.play);
|
|
1518
1518
|
const handleChange = (newValue) => {
|
|
1519
1519
|
if (props.sounds) play("click");
|
|
1520
1520
|
if (props.onChange) {
|
|
@@ -1580,7 +1580,7 @@ function Segment(props) {
|
|
|
1580
1580
|
direction: "column",
|
|
1581
1581
|
align: "center",
|
|
1582
1582
|
h: "100%",
|
|
1583
|
-
bg: props.selected ? props.color ?
|
|
1583
|
+
bg: props.selected ? props.color ? chunkJIBWKY7H_cjs.colorWithAlpha(props.color, 0.2) : chunkJIBWKY7H_cjs.colorWithAlpha(theme.colors[theme.primaryColor][theme.primaryShade], 0.2) : "transparent",
|
|
1584
1584
|
pos: "relative",
|
|
1585
1585
|
style: {
|
|
1586
1586
|
// position: "relative",
|
|
@@ -1799,7 +1799,7 @@ function getSizePreset(size, themeMdFontSize) {
|
|
|
1799
1799
|
}
|
|
1800
1800
|
}
|
|
1801
1801
|
function Title(props) {
|
|
1802
|
-
const game =
|
|
1802
|
+
const game = chunkJIBWKY7H_cjs.useSettings((state) => state.game);
|
|
1803
1803
|
const theme = core.useMantineTheme();
|
|
1804
1804
|
const preset = getSizePreset(props.size ?? "md", theme.fontSizes.md);
|
|
1805
1805
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1813,7 +1813,7 @@ function Title(props) {
|
|
|
1813
1813
|
pb: !props.p ? preset.bottomPad : props.p,
|
|
1814
1814
|
style: {
|
|
1815
1815
|
userSelect: "none",
|
|
1816
|
-
borderBottom: props.removeBorder ? "none" : `0.3vh solid ${props.borderColor ||
|
|
1816
|
+
borderBottom: props.removeBorder ? "none" : `0.3vh solid ${props.borderColor || chunkJIBWKY7H_cjs.colorWithAlpha(theme.colors[theme.primaryColor][9], 0.5)}`
|
|
1817
1817
|
},
|
|
1818
1818
|
children: /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", justify: "center", children: [
|
|
1819
1819
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: preset.innerGap, pr: "xs", children: [
|
|
@@ -1969,7 +1969,7 @@ function LevelPanel(props) {
|
|
|
1969
1969
|
size: 190,
|
|
1970
1970
|
roundCaps: true,
|
|
1971
1971
|
thickness: 10,
|
|
1972
|
-
sections: [{ value: props.progressToLevel, color:
|
|
1972
|
+
sections: [{ value: props.progressToLevel, color: chunkJIBWKY7H_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.9) }],
|
|
1973
1973
|
label: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1974
1974
|
core.Flex,
|
|
1975
1975
|
{
|
|
@@ -1980,10 +1980,10 @@ function LevelPanel(props) {
|
|
|
1980
1980
|
core.Text,
|
|
1981
1981
|
{
|
|
1982
1982
|
size: "6vh",
|
|
1983
|
-
c:
|
|
1983
|
+
c: chunkJIBWKY7H_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.9),
|
|
1984
1984
|
style: {
|
|
1985
1985
|
fontFamily: "Akrobat Black",
|
|
1986
|
-
textShadow: `0 0 10px ${
|
|
1986
|
+
textShadow: `0 0 10px ${chunkJIBWKY7H_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.7)}`
|
|
1987
1987
|
},
|
|
1988
1988
|
children: props.level
|
|
1989
1989
|
}
|
|
@@ -2001,7 +2001,7 @@ function LevelPanel(props) {
|
|
|
2001
2001
|
letterSpacing: "0.05em",
|
|
2002
2002
|
textTransform: "uppercase"
|
|
2003
2003
|
},
|
|
2004
|
-
children: props.text ||
|
|
2004
|
+
children: props.text || chunkJIBWKY7H_cjs.locale("Level")
|
|
2005
2005
|
}
|
|
2006
2006
|
),
|
|
2007
2007
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -2014,7 +2014,7 @@ function LevelPanel(props) {
|
|
|
2014
2014
|
"/",
|
|
2015
2015
|
props.nextLevelXP,
|
|
2016
2016
|
" ",
|
|
2017
|
-
|
|
2017
|
+
chunkJIBWKY7H_cjs.locale("EXP")
|
|
2018
2018
|
]
|
|
2019
2019
|
}
|
|
2020
2020
|
)
|
|
@@ -2511,10 +2511,17 @@ function ConfirmModal({
|
|
|
2511
2511
|
}
|
|
2512
2512
|
) });
|
|
2513
2513
|
}
|
|
2514
|
-
var
|
|
2515
|
-
{
|
|
2516
|
-
{
|
|
2517
|
-
{
|
|
2514
|
+
var INVENTORY_META = [
|
|
2515
|
+
{ key: "ox_inventory", label: "ox_inventory" },
|
|
2516
|
+
{ key: "qb-inventory", label: "qb-inventory" },
|
|
2517
|
+
{ key: "qs-inventory", label: "qs-inventory" },
|
|
2518
|
+
{ key: "codem-inventory", label: "codem-inventory" },
|
|
2519
|
+
{ key: "tgiann-inventory", label: "tgiann-inventory" },
|
|
2520
|
+
{ key: "one_inventory", label: "one_inventory" },
|
|
2521
|
+
{ key: "ak47_inventory", label: "ak47_inventory" },
|
|
2522
|
+
{ key: "core_inventory", label: "core_inventory" },
|
|
2523
|
+
{ key: "devix-inventory", label: "devix-inventory" },
|
|
2524
|
+
{ key: "esx", label: "ESX (legacy SQL)" }
|
|
2518
2525
|
];
|
|
2519
2526
|
var useMissingItemsAudit = zustand.create((set, get) => ({
|
|
2520
2527
|
data: null,
|
|
@@ -2524,9 +2531,9 @@ var useMissingItemsAudit = zustand.create((set, get) => ({
|
|
|
2524
2531
|
if (get().inFlight) return;
|
|
2525
2532
|
set({ inFlight: true });
|
|
2526
2533
|
try {
|
|
2527
|
-
const res = await
|
|
2534
|
+
const res = await chunkJIBWKY7H_cjs.fetchNui("GET_MISSING_ITEMS", void 0, {
|
|
2528
2535
|
success: true,
|
|
2529
|
-
data: { missing: [], snippets: {
|
|
2536
|
+
data: { missing: [], snippets: {} }
|
|
2530
2537
|
});
|
|
2531
2538
|
if (res?.success && res.data) {
|
|
2532
2539
|
set({ data: res.data, loaded: true });
|
|
@@ -2546,22 +2553,31 @@ function MissingItemsBanner() {
|
|
|
2546
2553
|
const loaded = useMissingItemsAudit((s) => s.loaded);
|
|
2547
2554
|
const inFlight = useMissingItemsAudit((s) => s.inFlight);
|
|
2548
2555
|
const refresh = useMissingItemsAudit((s) => s.refresh);
|
|
2556
|
+
const serverInventory = chunkJIBWKY7H_cjs.useSettings((s) => s.inventory);
|
|
2549
2557
|
const [expanded, setExpanded] = react.useState(false);
|
|
2550
|
-
const [
|
|
2551
|
-
const [
|
|
2552
|
-
const [copied, setCopied] = react.useState(null);
|
|
2558
|
+
const [selected, setSelected] = react.useState(null);
|
|
2559
|
+
const [copied, setCopied] = react.useState(false);
|
|
2553
2560
|
react.useEffect(() => {
|
|
2554
2561
|
if (!loaded) refresh();
|
|
2555
2562
|
}, [loaded, refresh]);
|
|
2556
|
-
const
|
|
2557
|
-
|
|
2558
|
-
|
|
2563
|
+
const options = react.useMemo(() => {
|
|
2564
|
+
const keys = audit ? Object.keys(audit.snippets) : [];
|
|
2565
|
+
return INVENTORY_META.filter((m) => keys.includes(m.key)).map((m) => ({ value: m.key, label: m.label }));
|
|
2566
|
+
}, [audit]);
|
|
2567
|
+
const defaultKey = react.useMemo(() => {
|
|
2568
|
+
if (serverInventory && options.some((o) => o.value === serverInventory)) return serverInventory;
|
|
2569
|
+
return options[0]?.value ?? null;
|
|
2570
|
+
}, [serverInventory, options]);
|
|
2571
|
+
const active = selected ?? defaultKey;
|
|
2572
|
+
const handleCopy = react.useCallback(() => {
|
|
2573
|
+
if (!audit || !active) return;
|
|
2574
|
+
const text = audit.snippets[active] ?? "";
|
|
2559
2575
|
navigator.clipboard.writeText(text).then(() => {
|
|
2560
|
-
setCopied(
|
|
2561
|
-
setTimeout(() => setCopied(
|
|
2576
|
+
setCopied(true);
|
|
2577
|
+
setTimeout(() => setCopied(false), 1500);
|
|
2562
2578
|
}).catch(() => {
|
|
2563
2579
|
});
|
|
2564
|
-
}, [audit]);
|
|
2580
|
+
}, [audit, active]);
|
|
2565
2581
|
const handleRefresh = react.useCallback((e) => {
|
|
2566
2582
|
e.stopPropagation();
|
|
2567
2583
|
refresh();
|
|
@@ -2633,48 +2649,40 @@ function MissingItemsBanner() {
|
|
|
2633
2649
|
transition: { duration: 0.18, ease: "easeOut" },
|
|
2634
2650
|
style: { overflow: "hidden", borderTop: `0.1vh solid ${core.alpha(warnColor, 0.18)}` },
|
|
2635
2651
|
children: [
|
|
2636
|
-
/* @__PURE__ */ jsxRuntime.
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
if (active) bg = core.alpha(warnColor, 0.12);
|
|
2641
|
-
else if (hovered) bg = core.alpha(warnColor, 0.08);
|
|
2642
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2643
|
-
"button",
|
|
2652
|
+
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: "0.8vh", p: "0.8vh 1vh", onClick: (e) => e.stopPropagation(), children: [
|
|
2653
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.07em", c: "rgba(255,255,255,0.5)", style: { whiteSpace: "nowrap" }, children: "Your inventory" }),
|
|
2654
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2655
|
+
core.Select,
|
|
2644
2656
|
{
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
style: {
|
|
2652
|
-
flex: 1,
|
|
2653
|
-
background: bg,
|
|
2654
|
-
border: "none",
|
|
2655
|
-
borderBottom: active ? `0.2vh solid ${warnColor}` : "0.2vh solid transparent",
|
|
2656
|
-
padding: "0.3vh 1vh",
|
|
2657
|
-
cursor: active ? "default" : "pointer",
|
|
2658
|
-
color: active ? warnColor : "rgba(255,255,255,0.5)",
|
|
2659
|
-
fontFamily: "Akrobat Bold",
|
|
2660
|
-
fontSize: "var(--mantine-font-size-xxs)",
|
|
2661
|
-
letterSpacing: "0.07em",
|
|
2662
|
-
textTransform: "uppercase",
|
|
2663
|
-
transition: "background 0.12s"
|
|
2657
|
+
size: "xs",
|
|
2658
|
+
data: options,
|
|
2659
|
+
value: active,
|
|
2660
|
+
onChange: (v) => {
|
|
2661
|
+
setSelected(v);
|
|
2662
|
+
setCopied(false);
|
|
2664
2663
|
},
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2664
|
+
allowDeselect: false,
|
|
2665
|
+
comboboxProps: { withinPortal: false },
|
|
2666
|
+
style: { flex: 1, maxWidth: "28vh" },
|
|
2667
|
+
styles: {
|
|
2668
|
+
input: {
|
|
2669
|
+
background: core.alpha(warnColor, 0.06),
|
|
2670
|
+
borderColor: core.alpha(warnColor, 0.35),
|
|
2671
|
+
color: warnColor,
|
|
2672
|
+
fontFamily: "Akrobat Bold"
|
|
2673
|
+
}
|
|
2674
|
+
}
|
|
2675
|
+
}
|
|
2676
|
+
)
|
|
2677
|
+
] }),
|
|
2670
2678
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2671
2679
|
CodeView,
|
|
2672
2680
|
{
|
|
2673
|
-
code: audit.snippets[
|
|
2674
|
-
copied
|
|
2681
|
+
code: active && audit.snippets[active] || "",
|
|
2682
|
+
copied,
|
|
2675
2683
|
onCopy: (e) => {
|
|
2676
2684
|
e.stopPropagation();
|
|
2677
|
-
handleCopy(
|
|
2685
|
+
handleCopy();
|
|
2678
2686
|
},
|
|
2679
2687
|
warnColor
|
|
2680
2688
|
}
|
|
@@ -2751,6 +2759,31 @@ function CodeView({
|
|
|
2751
2759
|
] }, i)) }) }) })
|
|
2752
2760
|
] });
|
|
2753
2761
|
}
|
|
2762
|
+
var panelTheme = {
|
|
2763
|
+
// Sections read theme.colors.dark[5/6/7/8/9] for row fills, dividers and
|
|
2764
|
+
// modal backdrops (the markup dirk_fishing established). Mantine's own dark
|
|
2765
|
+
// ramp is what that markup was designed against.
|
|
2766
|
+
colors: {
|
|
2767
|
+
dark: core.DEFAULT_THEME.colors.dark
|
|
2768
|
+
},
|
|
2769
|
+
// Type. The panel is sized in `vh` throughout, so it wants the library's vh
|
|
2770
|
+
// line-heights. A consumer whose own UI is sized in container units will
|
|
2771
|
+
// reasonably have swapped these for unitless ratios — correct for them,
|
|
2772
|
+
// wrong here.
|
|
2773
|
+
fontSizes: chunkNBLBFWZQ_cjs.theme_default.fontSizes,
|
|
2774
|
+
lineHeights: chunkNBLBFWZQ_cjs.theme_default.lineHeights
|
|
2775
|
+
};
|
|
2776
|
+
var panelCssVars = {
|
|
2777
|
+
...Object.fromEntries(
|
|
2778
|
+
Object.entries(chunkNBLBFWZQ_cjs.theme_default.fontSizes ?? {}).map(([k, v]) => [`--mantine-font-size-${k}`, v])
|
|
2779
|
+
),
|
|
2780
|
+
...Object.fromEntries(
|
|
2781
|
+
Object.entries(chunkNBLBFWZQ_cjs.theme_default.lineHeights ?? {}).map(([k, v]) => [`--mantine-line-height-${k}`, v])
|
|
2782
|
+
),
|
|
2783
|
+
...Object.fromEntries(
|
|
2784
|
+
core.DEFAULT_THEME.colors.dark.map((c, i) => [`--mantine-color-dark-${i}`, c])
|
|
2785
|
+
)
|
|
2786
|
+
};
|
|
2754
2787
|
function NavItemButton({
|
|
2755
2788
|
icon: Icon,
|
|
2756
2789
|
label,
|
|
@@ -2798,7 +2831,7 @@ function ConfigJsonModal({
|
|
|
2798
2831
|
}) {
|
|
2799
2832
|
const theme = core.useMantineTheme();
|
|
2800
2833
|
const color = theme.colors[theme.primaryColor][5];
|
|
2801
|
-
const form =
|
|
2834
|
+
const form = chunk7EICODPM_cjs.useForm();
|
|
2802
2835
|
const [json, setJson] = react.useState(() => JSON.stringify(form.values, null, 2));
|
|
2803
2836
|
const [error, setError] = react.useState(null);
|
|
2804
2837
|
const handleSave = () => {
|
|
@@ -2829,7 +2862,7 @@ function ConfigJsonModal({
|
|
|
2829
2862
|
setError(e.message);
|
|
2830
2863
|
}
|
|
2831
2864
|
};
|
|
2832
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title:
|
|
2865
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title: chunkJIBWKY7H_cjs.locale("cfgpanel_json_title"), icon: lucideReact.Code2, iconColor: color, onClose, width: "60vh", maxHeight: "80vh", zIndex: 200, children: [
|
|
2833
2866
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Box, { flex: 1, p: "0.8vh", style: { overflowY: "auto" }, children: [
|
|
2834
2867
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2835
2868
|
core.JsonInput,
|
|
@@ -2857,7 +2890,7 @@ function ConfigJsonModal({
|
|
|
2857
2890
|
style: { background: "transparent", border: `0.1vh solid ${theme.colors.dark[6]}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: "pointer", display: "flex", alignItems: "center", gap: theme.spacing.xxs },
|
|
2858
2891
|
children: [
|
|
2859
2892
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { color: "rgba(255,255,255,0.4)" }),
|
|
2860
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.4)", children:
|
|
2893
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.4)", children: chunkJIBWKY7H_cjs.locale("cfgpanel_cancel") })
|
|
2861
2894
|
]
|
|
2862
2895
|
}
|
|
2863
2896
|
),
|
|
@@ -2870,7 +2903,7 @@ function ConfigJsonModal({
|
|
|
2870
2903
|
style: { background: core.alpha(color, 0.14), border: `0.1vh solid ${core.alpha(color, 0.4)}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: "pointer", display: "flex", alignItems: "center", gap: theme.spacing.xxs },
|
|
2871
2904
|
children: [
|
|
2872
2905
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { color }),
|
|
2873
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: color, children:
|
|
2906
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: color, children: chunkJIBWKY7H_cjs.locale("cfgpanel_apply") })
|
|
2874
2907
|
]
|
|
2875
2908
|
}
|
|
2876
2909
|
)
|
|
@@ -2974,7 +3007,7 @@ function HistoryTableHeader() {
|
|
|
2974
3007
|
function ConfigHistoryModal({
|
|
2975
3008
|
onClose
|
|
2976
3009
|
}) {
|
|
2977
|
-
const { getHistory } =
|
|
3010
|
+
const { getHistory } = chunkK64EX3U2_cjs.getScriptConfigInstance();
|
|
2978
3011
|
const theme = core.useMantineTheme();
|
|
2979
3012
|
const color = theme.colors[theme.primaryColor][5];
|
|
2980
3013
|
const [queryInput, setQueryInput] = react.useState("");
|
|
@@ -3011,7 +3044,7 @@ function ConfigHistoryModal({
|
|
|
3011
3044
|
historyQuery.fetchNextPage();
|
|
3012
3045
|
}
|
|
3013
3046
|
};
|
|
3014
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title:
|
|
3047
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title: chunkJIBWKY7H_cjs.locale("cfgpanel_history_title"), icon: lucideReact.History, iconColor: color, onClose, width: "88vh", maxHeight: "82vh", zIndex: 260, children: [
|
|
3015
3048
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", style: { flex: 1, minHeight: 0 }, children: [
|
|
3016
3049
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { gap: "xs", p: "sm", style: { borderBottom: `0.1vh solid ${core.alpha(theme.colors.dark[7], 0.8)}` }, children: [
|
|
3017
3050
|
/* @__PURE__ */ jsxRuntime.jsx(core.TextInput, { leftSection: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { size: "1.4vh" }), placeholder: "Search path/admin/value", value: queryInput, onChange: (e) => setQueryInput(e.currentTarget.value), size: "xs", style: { flex: 1 } }),
|
|
@@ -3054,7 +3087,7 @@ function ConfigHistoryModal({
|
|
|
3054
3087
|
style: { background: "transparent", border: `0.1vh solid ${theme.colors.dark[6]}`, borderRadius: theme.radius.xs, padding: `${theme.spacing.xxs} ${theme.spacing.xs}`, cursor: "pointer", display: "flex", alignItems: "center", gap: theme.spacing.xxs },
|
|
3055
3088
|
children: [
|
|
3056
3089
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { color: "rgba(255,255,255,0.4)", size: "1.5vh" }),
|
|
3057
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.4)", children:
|
|
3090
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.4)", children: chunkJIBWKY7H_cjs.locale("cfgpanel_close") })
|
|
3058
3091
|
]
|
|
3059
3092
|
}
|
|
3060
3093
|
) })
|
|
@@ -3074,12 +3107,12 @@ function ConfigPanelInner({
|
|
|
3074
3107
|
height,
|
|
3075
3108
|
suppressMissingItemsBanner
|
|
3076
3109
|
}) {
|
|
3077
|
-
const { updateConfig, resetConfig, getHistory } =
|
|
3078
|
-
const form =
|
|
3110
|
+
const { updateConfig, resetConfig, getHistory } = chunkK64EX3U2_cjs.getScriptConfigInstance();
|
|
3111
|
+
const form = chunk7EICODPM_cjs.useForm();
|
|
3079
3112
|
const theme = core.useMantineTheme();
|
|
3080
3113
|
const color = theme.colors[theme.primaryColor][5];
|
|
3081
|
-
const version =
|
|
3082
|
-
const [activeTab, setActiveTab] =
|
|
3114
|
+
const version = chunkJIBWKY7H_cjs.useSettings((s) => s.resourceVersion);
|
|
3115
|
+
const [activeTab, setActiveTab] = chunk7EICODPM_cjs.useAdminState("__dirkConfigPanel:activeTab", navItems[0]?.id ?? "");
|
|
3083
3116
|
const firstMountRef = react.useRef(true);
|
|
3084
3117
|
const [jsonOpen, setJsonOpen] = react.useState(false);
|
|
3085
3118
|
const [historyOpen, setHistoryOpen] = react.useState(false);
|
|
@@ -3087,7 +3120,7 @@ function ConfigPanelInner({
|
|
|
3087
3120
|
const [pendingAction, setPendingAction] = react.useState(null);
|
|
3088
3121
|
const changedCount = form.changedCount ?? 0;
|
|
3089
3122
|
const isDirty = changedCount > 0;
|
|
3090
|
-
const goBack = () =>
|
|
3123
|
+
const goBack = () => chunkJIBWKY7H_cjs.fetchNui("CONFIG_PANEL_BACK");
|
|
3091
3124
|
const handleBack = () => {
|
|
3092
3125
|
if (isDirty) {
|
|
3093
3126
|
setPendingAction("back");
|
|
@@ -3114,20 +3147,20 @@ function ConfigPanelInner({
|
|
|
3114
3147
|
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: resetOpen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3115
3148
|
ConfirmModal,
|
|
3116
3149
|
{
|
|
3117
|
-
title:
|
|
3118
|
-
description:
|
|
3119
|
-
confirmLabel:
|
|
3150
|
+
title: chunkJIBWKY7H_cjs.locale("cfgpanel_reset_title"),
|
|
3151
|
+
description: chunkJIBWKY7H_cjs.locale("cfgpanel_reset_desc"),
|
|
3152
|
+
confirmLabel: chunkJIBWKY7H_cjs.locale("cfgpanel_reset_confirm"),
|
|
3120
3153
|
confirmText: resetConfirmText,
|
|
3121
3154
|
onConfirm: async () => {
|
|
3122
3155
|
setResetOpen(false);
|
|
3123
3156
|
const result = await resetConfig();
|
|
3124
3157
|
if (result?.success) {
|
|
3125
|
-
const { store } =
|
|
3158
|
+
const { store } = chunkK64EX3U2_cjs.getScriptConfigInstance();
|
|
3126
3159
|
form.reinitialize(cloneConfig(store.getState()));
|
|
3127
3160
|
notifications.notifications.show({
|
|
3128
3161
|
color: "green",
|
|
3129
|
-
title:
|
|
3130
|
-
message:
|
|
3162
|
+
title: chunkJIBWKY7H_cjs.locale("ConfigResetSuccessTitle"),
|
|
3163
|
+
message: chunkJIBWKY7H_cjs.locale("ConfigResetSuccessBody"),
|
|
3131
3164
|
autoClose: 3e3
|
|
3132
3165
|
});
|
|
3133
3166
|
return;
|
|
@@ -3136,8 +3169,8 @@ function ConfigPanelInner({
|
|
|
3136
3169
|
console.warn(`[ConfigPanel] config reset failed: ${err}`);
|
|
3137
3170
|
notifications.notifications.show({
|
|
3138
3171
|
color: "red",
|
|
3139
|
-
title:
|
|
3140
|
-
message:
|
|
3172
|
+
title: chunkJIBWKY7H_cjs.locale("ConfigResetFailedTitle"),
|
|
3173
|
+
message: chunkJIBWKY7H_cjs.locale("ConfigResetFailedBody", err),
|
|
3141
3174
|
autoClose: 6e3
|
|
3142
3175
|
});
|
|
3143
3176
|
},
|
|
@@ -3148,9 +3181,9 @@ function ConfigPanelInner({
|
|
|
3148
3181
|
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: pendingAction !== null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3149
3182
|
ConfirmModal,
|
|
3150
3183
|
{
|
|
3151
|
-
title:
|
|
3152
|
-
description: pendingAction === "back" ?
|
|
3153
|
-
confirmLabel: pendingAction === "back" ?
|
|
3184
|
+
title: chunkJIBWKY7H_cjs.locale("cfgpanel_discard_title"),
|
|
3185
|
+
description: pendingAction === "back" ? chunkJIBWKY7H_cjs.locale("cfgpanel_discard_desc_back") : chunkJIBWKY7H_cjs.locale("cfgpanel_discard_desc_close"),
|
|
3186
|
+
confirmLabel: pendingAction === "back" ? chunkJIBWKY7H_cjs.locale("cfgpanel_discard_confirm_back") : chunkJIBWKY7H_cjs.locale("cfgpanel_discard_confirm_close"),
|
|
3154
3187
|
onConfirm: () => {
|
|
3155
3188
|
const action = pendingAction;
|
|
3156
3189
|
setPendingAction(null);
|
|
@@ -3172,6 +3205,10 @@ function ConfigPanelInner({
|
|
|
3172
3205
|
h: height ?? "80vh",
|
|
3173
3206
|
bdrs: "sm",
|
|
3174
3207
|
style: {
|
|
3208
|
+
// Re-declare the library's own type scale and greys for this subtree.
|
|
3209
|
+
// Custom properties inherit, so every Mantine `size=` inside the
|
|
3210
|
+
// panel resolves against these instead of the host resource's.
|
|
3211
|
+
...panelCssVars,
|
|
3175
3212
|
userSelect: "none",
|
|
3176
3213
|
overflow: "hidden",
|
|
3177
3214
|
transform: "translate(-50%, -50%)",
|
|
@@ -3188,7 +3225,7 @@ function ConfigPanelInner({
|
|
|
3188
3225
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3189
3226
|
framerMotion.motion.button,
|
|
3190
3227
|
{
|
|
3191
|
-
title:
|
|
3228
|
+
title: chunkJIBWKY7H_cjs.locale("cfgpanel_back_title"),
|
|
3192
3229
|
onClick: handleBack,
|
|
3193
3230
|
whileHover: { background: core.alpha(color, 0.16), borderColor: core.alpha(color, 0.45) },
|
|
3194
3231
|
whileTap: { scale: 0.95 },
|
|
@@ -3216,7 +3253,7 @@ function ConfigPanelInner({
|
|
|
3216
3253
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3217
3254
|
framerMotion.motion.button,
|
|
3218
3255
|
{
|
|
3219
|
-
title:
|
|
3256
|
+
title: chunkJIBWKY7H_cjs.locale("cfgpanel_undo"),
|
|
3220
3257
|
onClick: () => form.canBack && form.back(),
|
|
3221
3258
|
disabled: !form.canBack,
|
|
3222
3259
|
whileHover: form.canBack ? { background: "rgba(255,255,255,0.07)" } : void 0,
|
|
@@ -3228,7 +3265,7 @@ function ConfigPanelInner({
|
|
|
3228
3265
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3229
3266
|
framerMotion.motion.button,
|
|
3230
3267
|
{
|
|
3231
|
-
title:
|
|
3268
|
+
title: chunkJIBWKY7H_cjs.locale("cfgpanel_redo"),
|
|
3232
3269
|
onClick: () => form.canForward && form.forward(),
|
|
3233
3270
|
disabled: !form.canForward,
|
|
3234
3271
|
whileHover: form.canForward ? { background: "rgba(255,255,255,0.07)" } : void 0,
|
|
@@ -3240,7 +3277,7 @@ function ConfigPanelInner({
|
|
|
3240
3277
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3241
3278
|
framerMotion.motion.button,
|
|
3242
3279
|
{
|
|
3243
|
-
title: isSaving ?
|
|
3280
|
+
title: isSaving ? chunkJIBWKY7H_cjs.locale("cfgpanel_saving") : isDirty ? `${chunkJIBWKY7H_cjs.locale("cfgpanel_save")} (${changedCount})` : chunkJIBWKY7H_cjs.locale("cfgpanel_save"),
|
|
3244
3281
|
onClick: () => isDirty && !isSaving && form.submit(),
|
|
3245
3282
|
disabled: !isDirty || isSaving,
|
|
3246
3283
|
whileHover: isDirty && !isSaving ? { background: core.alpha(color, 0.25), borderColor: core.alpha(color, 0.5) } : void 0,
|
|
@@ -3252,7 +3289,7 @@ function ConfigPanelInner({
|
|
|
3252
3289
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3253
3290
|
framerMotion.motion.button,
|
|
3254
3291
|
{
|
|
3255
|
-
title:
|
|
3292
|
+
title: chunkJIBWKY7H_cjs.locale("cfgpanel_history"),
|
|
3256
3293
|
onClick: () => setHistoryOpen(true),
|
|
3257
3294
|
whileHover: { background: core.alpha("#22d3ee", 0.16), borderColor: core.alpha("#22d3ee", 0.5) },
|
|
3258
3295
|
whileTap: { scale: 0.97 },
|
|
@@ -3273,7 +3310,7 @@ function ConfigPanelInner({
|
|
|
3273
3310
|
style: { width: "100%", background: "transparent", border: `0.1vh solid ${isDirty ? core.alpha("#f97316", 0.35) : core.alpha(theme.colors.dark[5], 0.3)}`, borderRadius: theme.radius.xs, padding: "0.65vh 0.8vh", cursor: isDirty ? "pointer" : "default", display: "flex", alignItems: "center", gap: "0.55vh", opacity: isDirty ? 1 : 0.35, transition: "opacity 0.2s" },
|
|
3274
3311
|
children: [
|
|
3275
3312
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XCircle, { color: isDirty ? "#f97316" : "rgba(255,255,255,0.35)", size: "1.6vh" }),
|
|
3276
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: isDirty ? "#f97316" : "rgba(255,255,255,0.35)", children:
|
|
3313
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: isDirty ? "#f97316" : "rgba(255,255,255,0.35)", children: chunkJIBWKY7H_cjs.locale("cfgpanel_discard") })
|
|
3277
3314
|
]
|
|
3278
3315
|
}
|
|
3279
3316
|
),
|
|
@@ -3287,7 +3324,7 @@ function ConfigPanelInner({
|
|
|
3287
3324
|
style: { width: "100%", background: core.alpha(color, 0.07), border: `0.1vh solid ${core.alpha(color, 0.28)}`, borderRadius: theme.radius.xs, padding: "0.65vh 0.8vh", cursor: "pointer", display: "flex", alignItems: "center", gap: "0.55vh" },
|
|
3288
3325
|
children: [
|
|
3289
3326
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code2, { color, size: "1.6vh" }),
|
|
3290
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children:
|
|
3327
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: chunkJIBWKY7H_cjs.locale("cfgpanel_manual_edit") })
|
|
3291
3328
|
]
|
|
3292
3329
|
}
|
|
3293
3330
|
),
|
|
@@ -3300,12 +3337,12 @@ function ConfigPanelInner({
|
|
|
3300
3337
|
style: { width: "100%", background: core.alpha("#ef4444", 0.07), border: `0.1vh solid ${core.alpha("#ef4444", 0.25)}`, borderRadius: theme.radius.xs, padding: "0.65vh 0.8vh", cursor: "pointer", display: "flex", alignItems: "center", gap: "0.55vh" },
|
|
3301
3338
|
children: [
|
|
3302
3339
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { color: "#ef4444", size: "1.6vh" }),
|
|
3303
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: "#ef4444", children:
|
|
3340
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: "#ef4444", children: chunkJIBWKY7H_cjs.locale("cfgpanel_reset_defaults") })
|
|
3304
3341
|
]
|
|
3305
3342
|
}
|
|
3306
3343
|
),
|
|
3307
3344
|
version && /* @__PURE__ */ jsxRuntime.jsxs(core.Text, { size: "0.95vh", c: "dimmed", ta: "center", style: { letterSpacing: "0.04em", opacity: 0.8 }, children: [
|
|
3308
|
-
|
|
3345
|
+
chunkJIBWKY7H_cjs.locale("cfgpanel_version"),
|
|
3309
3346
|
" ",
|
|
3310
3347
|
version
|
|
3311
3348
|
] })
|
|
@@ -3335,8 +3372,8 @@ function cloneConfig(value) {
|
|
|
3335
3372
|
return JSON.parse(JSON.stringify(value));
|
|
3336
3373
|
}
|
|
3337
3374
|
function ServerOnlyFetcher() {
|
|
3338
|
-
const { fetchServerOnly } =
|
|
3339
|
-
const { reinitialize } =
|
|
3375
|
+
const { fetchServerOnly } = chunkK64EX3U2_cjs.getScriptConfigInstance();
|
|
3376
|
+
const { reinitialize } = chunk7EICODPM_cjs.useFormActions();
|
|
3340
3377
|
react.useEffect(() => {
|
|
3341
3378
|
let cancelled = false;
|
|
3342
3379
|
fetchServerOnly().then((full) => {
|
|
@@ -3349,61 +3386,66 @@ function ServerOnlyFetcher() {
|
|
|
3349
3386
|
}, []);
|
|
3350
3387
|
return null;
|
|
3351
3388
|
}
|
|
3352
|
-
var defaultOnClose = () =>
|
|
3389
|
+
var defaultOnClose = () => chunkJIBWKY7H_cjs.fetchNui("CLOSE_ADMIN_SECTION");
|
|
3353
3390
|
function ConfigPanel(props) {
|
|
3354
3391
|
const { open, onClose = defaultOnClose } = props;
|
|
3355
|
-
const { store, updateConfig } =
|
|
3392
|
+
const { store, updateConfig } = chunkK64EX3U2_cjs.getScriptConfigInstance();
|
|
3356
3393
|
const [isSaving, setIsSaving] = react.useState(false);
|
|
3357
3394
|
if (!open) return null;
|
|
3358
|
-
return
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
if (
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3395
|
+
return (
|
|
3396
|
+
// Outside FormProvider and ConfigPanelInner on purpose: the panel's own
|
|
3397
|
+
// chrome calls useMantineTheme(), so it has to be inside this scope too,
|
|
3398
|
+
// not just the consumer's sections.
|
|
3399
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.MantineThemeProvider, { theme: panelTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3400
|
+
chunk7EICODPM_cjs.FormProvider,
|
|
3401
|
+
{
|
|
3402
|
+
initialValues: cloneConfig(store.getState()),
|
|
3403
|
+
onSubmit: async (form) => {
|
|
3404
|
+
if (isSaving) return;
|
|
3405
|
+
setIsSaving(true);
|
|
3406
|
+
try {
|
|
3407
|
+
const result = await updateConfig(form.values, form.changedFields);
|
|
3408
|
+
if (result?.success) {
|
|
3409
|
+
form.reinitialize(cloneConfig(form.values));
|
|
3410
|
+
chunkNBLBFWZQ_cjs.dirkQueryClient.invalidateQueries({ queryKey: ["scriptConfigHistory"] });
|
|
3411
|
+
useMissingItemsAudit.getState().refresh();
|
|
3412
|
+
notifications.notifications.show({
|
|
3413
|
+
color: "green",
|
|
3414
|
+
title: chunkJIBWKY7H_cjs.locale("ConfigSaveSuccessTitle"),
|
|
3415
|
+
message: chunkJIBWKY7H_cjs.locale("ConfigSaveSuccessBody"),
|
|
3416
|
+
autoClose: 3e3
|
|
3417
|
+
});
|
|
3418
|
+
return;
|
|
3419
|
+
}
|
|
3420
|
+
form.reinitialize(cloneConfig(store.getState()));
|
|
3421
|
+
const err = result?._error || "Unknown";
|
|
3422
|
+
console.warn(`[ConfigPanel] config save failed: ${err}`);
|
|
3423
|
+
const titleKey = err === "NoPermission" ? "ConfigSaveNoPermissionTitle" : err === "VersionConflict" ? "ConfigSaveVersionConflictTitle" : err === "NotReady" ? "ConfigSaveNotReadyTitle" : "ConfigSaveFailedTitle";
|
|
3424
|
+
const bodyKey = err === "NoPermission" ? "ConfigSaveNoPermissionBody" : err === "VersionConflict" ? "ConfigSaveVersionConflictBody" : err === "NotReady" ? "ConfigSaveNotReadyBody" : "ConfigSaveFailedBody";
|
|
3371
3425
|
notifications.notifications.show({
|
|
3372
|
-
color: "
|
|
3373
|
-
title:
|
|
3374
|
-
message:
|
|
3375
|
-
autoClose:
|
|
3426
|
+
color: "red",
|
|
3427
|
+
title: chunkJIBWKY7H_cjs.locale(titleKey),
|
|
3428
|
+
message: chunkJIBWKY7H_cjs.locale(bodyKey, err),
|
|
3429
|
+
autoClose: 6e3
|
|
3376
3430
|
});
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
form.reinitialize(cloneConfig(store.getState()));
|
|
3380
|
-
const err = result?._error || "Unknown";
|
|
3381
|
-
console.warn(`[ConfigPanel] config save failed: ${err}`);
|
|
3382
|
-
const titleKey = err === "NoPermission" ? "ConfigSaveNoPermissionTitle" : err === "VersionConflict" ? "ConfigSaveVersionConflictTitle" : err === "NotReady" ? "ConfigSaveNotReadyTitle" : "ConfigSaveFailedTitle";
|
|
3383
|
-
const bodyKey = err === "NoPermission" ? "ConfigSaveNoPermissionBody" : err === "VersionConflict" ? "ConfigSaveVersionConflictBody" : err === "NotReady" ? "ConfigSaveNotReadyBody" : "ConfigSaveFailedBody";
|
|
3384
|
-
notifications.notifications.show({
|
|
3385
|
-
color: "red",
|
|
3386
|
-
title: chunkYA2PXBP6_cjs.locale(titleKey),
|
|
3387
|
-
message: chunkYA2PXBP6_cjs.locale(bodyKey, err),
|
|
3388
|
-
autoClose: 6e3
|
|
3389
|
-
});
|
|
3390
|
-
} finally {
|
|
3391
|
-
setIsSaving(false);
|
|
3392
|
-
}
|
|
3393
|
-
},
|
|
3394
|
-
children: [
|
|
3395
|
-
/* @__PURE__ */ jsxRuntime.jsx(ServerOnlyFetcher, {}),
|
|
3396
|
-
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: open && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3397
|
-
ConfigPanelInner,
|
|
3398
|
-
{
|
|
3399
|
-
...props,
|
|
3400
|
-
onClose,
|
|
3401
|
-
isSaving
|
|
3431
|
+
} finally {
|
|
3432
|
+
setIsSaving(false);
|
|
3402
3433
|
}
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3434
|
+
},
|
|
3435
|
+
children: [
|
|
3436
|
+
/* @__PURE__ */ jsxRuntime.jsx(ServerOnlyFetcher, {}),
|
|
3437
|
+
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: open && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3438
|
+
ConfigPanelInner,
|
|
3439
|
+
{
|
|
3440
|
+
...props,
|
|
3441
|
+
onClose,
|
|
3442
|
+
isSaving
|
|
3443
|
+
}
|
|
3444
|
+
) })
|
|
3445
|
+
]
|
|
3446
|
+
}
|
|
3447
|
+
) })
|
|
3448
|
+
);
|
|
3407
3449
|
}
|
|
3408
3450
|
var MISSING_COLOR = "#f59e0b";
|
|
3409
3451
|
function LazyImage({ src, style }) {
|
|
@@ -3422,12 +3464,12 @@ function LazyImage({ src, style }) {
|
|
|
3422
3464
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, style: { width: "4vh", height: "4vh" }, children: visible && /* @__PURE__ */ jsxRuntime.jsx(core.Image, { src, fit: "contain", style }) });
|
|
3423
3465
|
}
|
|
3424
3466
|
function SelectItem(props) {
|
|
3425
|
-
const invItems =
|
|
3467
|
+
const invItems = chunkJIBWKY7H_cjs.useItems();
|
|
3426
3468
|
const [search, setSearch] = react.useState("");
|
|
3427
3469
|
const isMissing = !!props.value && !invItems[props.value];
|
|
3428
3470
|
const formattedItems = react.useMemo(() => {
|
|
3429
3471
|
const seen = /* @__PURE__ */ new Set();
|
|
3430
|
-
const list =
|
|
3472
|
+
const list = chunkJIBWKY7H_cjs.useItemsList(props.excludeItemNames ?? []).filter((item) => {
|
|
3431
3473
|
if (seen.has(item.name)) return false;
|
|
3432
3474
|
seen.add(item.name);
|
|
3433
3475
|
return true;
|
|
@@ -3438,7 +3480,7 @@ function SelectItem(props) {
|
|
|
3438
3480
|
if (props.allowCustom) {
|
|
3439
3481
|
const q = search.trim();
|
|
3440
3482
|
if (q && q !== props.value && !list.some((i) => i.value.toLowerCase() === q.toLowerCase())) {
|
|
3441
|
-
list.unshift({ value: q, label: `${
|
|
3483
|
+
list.unshift({ value: q, label: `${chunkJIBWKY7H_cjs.locale("UseCustomItem")}: ${q}`, image: "" });
|
|
3442
3484
|
}
|
|
3443
3485
|
}
|
|
3444
3486
|
return list;
|
|
@@ -3447,7 +3489,7 @@ function SelectItem(props) {
|
|
|
3447
3489
|
core.Select,
|
|
3448
3490
|
{
|
|
3449
3491
|
maxDropdownHeight: "30vh",
|
|
3450
|
-
label:
|
|
3492
|
+
label: chunkJIBWKY7H_cjs.locale(props.label),
|
|
3451
3493
|
size: "xs",
|
|
3452
3494
|
flex: 1,
|
|
3453
3495
|
style: props.style,
|
|
@@ -3472,7 +3514,7 @@ function SelectItem(props) {
|
|
|
3472
3514
|
style: { aspectRatio: "1 / 1" }
|
|
3473
3515
|
}
|
|
3474
3516
|
) : null,
|
|
3475
|
-
nothingFoundMessage:
|
|
3517
|
+
nothingFoundMessage: chunkJIBWKY7H_cjs.locale("NoItemsFound"),
|
|
3476
3518
|
renderOption: (item) => {
|
|
3477
3519
|
const optionMissing = !invItems[item.option.value] && item.option.value === props.value;
|
|
3478
3520
|
if (optionMissing) {
|
|
@@ -3480,14 +3522,14 @@ function SelectItem(props) {
|
|
|
3480
3522
|
/* @__PURE__ */ jsxRuntime.jsx(core.Flex, { align: "center", justify: "center", w: "4vh", h: "4vh", style: { flexShrink: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { size: "2vh", color: MISSING_COLOR, strokeWidth: 2.5 }) }),
|
|
3481
3523
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", style: { flex: 1, minWidth: 0 }, children: [
|
|
3482
3524
|
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "sm", c: MISSING_COLOR, style: { fontFamily: "monospace" }, children: item.option.value }),
|
|
3483
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: "dimmed", children:
|
|
3525
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: "dimmed", children: chunkJIBWKY7H_cjs.locale("ItemNotInInventory") })
|
|
3484
3526
|
] }),
|
|
3485
3527
|
/* @__PURE__ */ jsxRuntime.jsx("div", { style: {
|
|
3486
3528
|
background: "rgba(245,158,11,0.12)",
|
|
3487
3529
|
border: `0.1vh solid ${MISSING_COLOR}59`,
|
|
3488
3530
|
borderRadius: "0.3vh",
|
|
3489
3531
|
padding: "0.1vh 0.6vh"
|
|
3490
|
-
}, children: /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: MISSING_COLOR, ff: "Akrobat Bold", tt: "uppercase", lts: "0.06em", children:
|
|
3532
|
+
}, children: /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: MISSING_COLOR, ff: "Akrobat Bold", tt: "uppercase", lts: "0.06em", children: chunkJIBWKY7H_cjs.locale("Missing") }) })
|
|
3491
3533
|
] });
|
|
3492
3534
|
}
|
|
3493
3535
|
return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: "xs", w: "100%", children: [
|
|
@@ -3527,7 +3569,7 @@ function PositionPicker(props) {
|
|
|
3527
3569
|
react.useEffect(() => {
|
|
3528
3570
|
return () => {
|
|
3529
3571
|
if (previewingRef.current) {
|
|
3530
|
-
|
|
3572
|
+
chunkJIBWKY7H_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
|
|
3531
3573
|
});
|
|
3532
3574
|
}
|
|
3533
3575
|
};
|
|
@@ -3536,13 +3578,13 @@ function PositionPicker(props) {
|
|
|
3536
3578
|
const next = { ...value, [key]: val };
|
|
3537
3579
|
onChange(next);
|
|
3538
3580
|
if (previewingRef.current) {
|
|
3539
|
-
|
|
3581
|
+
chunkJIBWKY7H_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
|
|
3540
3582
|
});
|
|
3541
3583
|
}
|
|
3542
3584
|
};
|
|
3543
3585
|
const grab = async () => {
|
|
3544
3586
|
try {
|
|
3545
|
-
const resp = await
|
|
3587
|
+
const resp = await chunkJIBWKY7H_cjs.fetchNui(fetchEvent, { relativeTo }, value);
|
|
3546
3588
|
if (resp && typeof resp === "object") {
|
|
3547
3589
|
const next = {
|
|
3548
3590
|
x: Number(resp.x ?? 0),
|
|
@@ -3552,7 +3594,7 @@ function PositionPicker(props) {
|
|
|
3552
3594
|
};
|
|
3553
3595
|
onChange(next);
|
|
3554
3596
|
if (previewingRef.current) {
|
|
3555
|
-
|
|
3597
|
+
chunkJIBWKY7H_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
|
|
3556
3598
|
});
|
|
3557
3599
|
}
|
|
3558
3600
|
}
|
|
@@ -3564,17 +3606,17 @@ function PositionPicker(props) {
|
|
|
3564
3606
|
setPreviewing(nextState);
|
|
3565
3607
|
previewingRef.current = nextState;
|
|
3566
3608
|
if (nextState) {
|
|
3567
|
-
await
|
|
3609
|
+
await chunkJIBWKY7H_cjs.fetchNui(previewEvent, { value, relativeTo }).catch(() => {
|
|
3568
3610
|
});
|
|
3569
3611
|
} else {
|
|
3570
|
-
await
|
|
3612
|
+
await chunkJIBWKY7H_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
|
|
3571
3613
|
});
|
|
3572
3614
|
}
|
|
3573
3615
|
};
|
|
3574
3616
|
const reset = () => {
|
|
3575
3617
|
onChange({ ...ZERO });
|
|
3576
3618
|
if (previewingRef.current) {
|
|
3577
|
-
|
|
3619
|
+
chunkJIBWKY7H_cjs.fetchNui(previewEvent, { value: ZERO, relativeTo }).catch(() => {
|
|
3578
3620
|
});
|
|
3579
3621
|
}
|
|
3580
3622
|
};
|
|
@@ -3605,31 +3647,31 @@ function PositionPicker(props) {
|
|
|
3605
3647
|
tt: "uppercase",
|
|
3606
3648
|
lts: "0.05em",
|
|
3607
3649
|
c: "rgba(255,255,255,0.75)",
|
|
3608
|
-
children:
|
|
3650
|
+
children: chunkJIBWKY7H_cjs.locale(label)
|
|
3609
3651
|
}
|
|
3610
3652
|
),
|
|
3611
3653
|
relativeTo && /* @__PURE__ */ jsxRuntime.jsxs(core.Text, { ff: "Akrobat Bold", size: "xxs", c: core.alpha(color, 0.5), lts: "0.05em", children: [
|
|
3612
3654
|
"\xB7 ",
|
|
3613
|
-
|
|
3655
|
+
chunkJIBWKY7H_cjs.locale("RelativeTo"),
|
|
3614
3656
|
" ",
|
|
3615
3657
|
relativeTo
|
|
3616
3658
|
] })
|
|
3617
3659
|
] }),
|
|
3618
|
-
description && /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", c: "dimmed", lh: 1.3, children:
|
|
3660
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", c: "dimmed", lh: 1.3, children: chunkJIBWKY7H_cjs.locale(description) })
|
|
3619
3661
|
] }),
|
|
3620
3662
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { gap: "xxs", style: { flexShrink: 0 }, children: [
|
|
3621
|
-
/* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip:
|
|
3663
|
+
/* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip: chunkJIBWKY7H_cjs.locale("GrabMyPosition"), onClick: grab, color, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: "1.4vh", color }) }),
|
|
3622
3664
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3623
3665
|
PickerButton,
|
|
3624
3666
|
{
|
|
3625
|
-
tooltip: previewing ?
|
|
3667
|
+
tooltip: previewing ? chunkJIBWKY7H_cjs.locale("StopPreview") : chunkJIBWKY7H_cjs.locale("PreviewInWorld"),
|
|
3626
3668
|
onClick: togglePreview,
|
|
3627
3669
|
color,
|
|
3628
3670
|
active: previewing,
|
|
3629
3671
|
children: previewing ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { size: "1.4vh", color }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { size: "1.4vh", color: core.alpha(color, 0.7) })
|
|
3630
3672
|
}
|
|
3631
3673
|
),
|
|
3632
|
-
/* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip:
|
|
3674
|
+
/* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip: chunkJIBWKY7H_cjs.locale("Reset"), onClick: reset, color: "#ef4444", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: "1.4vh", color: "#ef4444" }) })
|
|
3633
3675
|
] })
|
|
3634
3676
|
] }),
|
|
3635
3677
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { gap: "xxs", children: [
|
|
@@ -3800,7 +3842,7 @@ function WorldPositionSetButton({
|
|
|
3800
3842
|
const color = theme.colors[theme.primaryColor][5];
|
|
3801
3843
|
const grab = async () => {
|
|
3802
3844
|
try {
|
|
3803
|
-
const resp = await
|
|
3845
|
+
const resp = await chunkJIBWKY7H_cjs.fetchNui("GET_POSITION", {}, value);
|
|
3804
3846
|
if (!resp || typeof resp !== "object") return;
|
|
3805
3847
|
onChange({
|
|
3806
3848
|
x: Number(resp.x ?? 0),
|
|
@@ -3815,8 +3857,8 @@ function WorldPositionSetButton({
|
|
|
3815
3857
|
Vector4ActionButton,
|
|
3816
3858
|
{
|
|
3817
3859
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
3818
|
-
label:
|
|
3819
|
-
tooltip:
|
|
3860
|
+
label: chunkJIBWKY7H_cjs.locale("Set"),
|
|
3861
|
+
tooltip: chunkJIBWKY7H_cjs.locale("SetWorldTooltip"),
|
|
3820
3862
|
onClick: grab,
|
|
3821
3863
|
color,
|
|
3822
3864
|
compact
|
|
@@ -3830,15 +3872,15 @@ function WorldPositionGotoButton({
|
|
|
3830
3872
|
const theme = core.useMantineTheme();
|
|
3831
3873
|
const color = theme.colors[theme.primaryColor][5];
|
|
3832
3874
|
const goto = () => {
|
|
3833
|
-
|
|
3875
|
+
chunkJIBWKY7H_cjs.fetchNui("GOTO_POSITION", value).catch(() => {
|
|
3834
3876
|
});
|
|
3835
3877
|
};
|
|
3836
3878
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3837
3879
|
Vector4ActionButton,
|
|
3838
3880
|
{
|
|
3839
3881
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPin, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
3840
|
-
label:
|
|
3841
|
-
tooltip:
|
|
3882
|
+
label: chunkJIBWKY7H_cjs.locale("Goto"),
|
|
3883
|
+
tooltip: chunkJIBWKY7H_cjs.locale("GotoWorldTooltip"),
|
|
3842
3884
|
onClick: goto,
|
|
3843
3885
|
color,
|
|
3844
3886
|
compact
|
|
@@ -3854,8 +3896,8 @@ function Vector4DeleteButton({
|
|
|
3854
3896
|
Vector4ActionButton,
|
|
3855
3897
|
{
|
|
3856
3898
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
3857
|
-
label:
|
|
3858
|
-
tooltip:
|
|
3899
|
+
label: chunkJIBWKY7H_cjs.locale("Delete"),
|
|
3900
|
+
tooltip: chunkJIBWKY7H_cjs.locale("Delete"),
|
|
3859
3901
|
onClick,
|
|
3860
3902
|
color,
|
|
3861
3903
|
compact
|
|
@@ -3879,25 +3921,25 @@ function filterByType(jobs, gangs, type) {
|
|
|
3879
3921
|
}
|
|
3880
3922
|
function GroupName(props) {
|
|
3881
3923
|
const ctx = react.useContext(GroupSelectContext);
|
|
3882
|
-
const jobs =
|
|
3883
|
-
const gangs =
|
|
3924
|
+
const jobs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.jobs);
|
|
3925
|
+
const gangs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.gangs);
|
|
3884
3926
|
react.useEffect(() => {
|
|
3885
|
-
|
|
3927
|
+
chunkJIBWKY7H_cjs.ensureFrameworkGroups();
|
|
3886
3928
|
}, []);
|
|
3887
3929
|
const inCompound = ctx !== null;
|
|
3888
3930
|
const currentValue = inCompound ? ctx.value.name : props.value;
|
|
3889
3931
|
const filterType = inCompound ? ctx.type : props.type;
|
|
3890
3932
|
const list = filterByType(jobs, gangs, filterType);
|
|
3891
3933
|
const data = filterType === void 0 ? [
|
|
3892
|
-
{ group:
|
|
3893
|
-
{ group:
|
|
3934
|
+
{ group: chunkJIBWKY7H_cjs.locale("Jobs") || "Jobs", items: jobs.map((g) => ({ value: g.name, label: g.label })) },
|
|
3935
|
+
{ group: chunkJIBWKY7H_cjs.locale("Gangs") || "Gangs", items: gangs.map((g) => ({ value: g.name, label: g.label })) }
|
|
3894
3936
|
] : list.map((g) => ({ value: g.name, label: g.label }));
|
|
3895
3937
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3896
3938
|
core.Select,
|
|
3897
3939
|
{
|
|
3898
3940
|
label: props.label,
|
|
3899
3941
|
description: props.description,
|
|
3900
|
-
placeholder: props.placeholder ?? (
|
|
3942
|
+
placeholder: props.placeholder ?? (chunkJIBWKY7H_cjs.locale("SelectGroup") || "Select\u2026"),
|
|
3901
3943
|
size: props.size ?? "xs",
|
|
3902
3944
|
disabled: props.disabled,
|
|
3903
3945
|
style: props.style,
|
|
@@ -3921,10 +3963,10 @@ function GroupRank(props) {
|
|
|
3921
3963
|
if (ctx === null) {
|
|
3922
3964
|
throw new Error("<GroupRank> must be a child of <GroupSelect>");
|
|
3923
3965
|
}
|
|
3924
|
-
const jobs =
|
|
3925
|
-
const gangs =
|
|
3966
|
+
const jobs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.jobs);
|
|
3967
|
+
const gangs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.gangs);
|
|
3926
3968
|
react.useEffect(() => {
|
|
3927
|
-
|
|
3969
|
+
chunkJIBWKY7H_cjs.ensureFrameworkGroups();
|
|
3928
3970
|
}, []);
|
|
3929
3971
|
const all = [...jobs, ...gangs];
|
|
3930
3972
|
const selectedGroup = all.find((g) => g.name === ctx.value.name) ?? null;
|
|
@@ -3938,7 +3980,7 @@ function GroupRank(props) {
|
|
|
3938
3980
|
{
|
|
3939
3981
|
label: props.label,
|
|
3940
3982
|
description: props.description,
|
|
3941
|
-
placeholder: props.placeholder ?? (
|
|
3983
|
+
placeholder: props.placeholder ?? (chunkJIBWKY7H_cjs.locale("SelectGrade") || "Select grade\u2026"),
|
|
3942
3984
|
size: props.size ?? "xs",
|
|
3943
3985
|
style: props.style,
|
|
3944
3986
|
data,
|
|
@@ -3976,10 +4018,10 @@ function Category({ label = "Primary" }) {
|
|
|
3976
4018
|
size: "xs",
|
|
3977
4019
|
style: { flex: 1 },
|
|
3978
4020
|
value: value._type,
|
|
3979
|
-
data: [...
|
|
4021
|
+
data: [...chunkJIBWKY7H_cjs.INPUT_MAPPER_PRIMARY_OPTIONS],
|
|
3980
4022
|
onChange: (nextType) => {
|
|
3981
4023
|
if (!nextType) return;
|
|
3982
|
-
const keyOptions =
|
|
4024
|
+
const keyOptions = chunkJIBWKY7H_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[nextType] ?? [];
|
|
3983
4025
|
const hasCurrentKey = keyOptions.includes(value._key);
|
|
3984
4026
|
const nextKey = hasCurrentKey ? value._key : keyOptions[0] ?? value._key;
|
|
3985
4027
|
onChange({
|
|
@@ -3995,7 +4037,7 @@ function Category({ label = "Primary" }) {
|
|
|
3995
4037
|
}
|
|
3996
4038
|
function Key({ label = "Key" }) {
|
|
3997
4039
|
const { value, onChange } = useKeyBindContext();
|
|
3998
|
-
const keyOptions =
|
|
4040
|
+
const keyOptions = chunkJIBWKY7H_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[value._type] ?? [];
|
|
3999
4041
|
if (keyOptions.length === 0) {
|
|
4000
4042
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4001
4043
|
core.TextInput,
|
|
@@ -4033,13 +4075,13 @@ var FiveMKeyBindInput = Object.assign(Root, {
|
|
|
4033
4075
|
function buildGroupedData(extraIds = []) {
|
|
4034
4076
|
const groups = /* @__PURE__ */ new Map();
|
|
4035
4077
|
const seen = /* @__PURE__ */ new Set();
|
|
4036
|
-
for (const c of
|
|
4078
|
+
for (const c of chunkJIBWKY7H_cjs.GTA_CONTROLS) {
|
|
4037
4079
|
if (seen.has(c.id)) continue;
|
|
4038
4080
|
seen.add(c.id);
|
|
4039
4081
|
if (!groups.has(c.group)) groups.set(c.group, []);
|
|
4040
4082
|
groups.get(c.group).push(c);
|
|
4041
4083
|
}
|
|
4042
|
-
const data =
|
|
4084
|
+
const data = chunkJIBWKY7H_cjs.GTA_CONTROL_GROUP_ORDER.flatMap((g) => {
|
|
4043
4085
|
const items = groups.get(g);
|
|
4044
4086
|
if (!items || items.length === 0) return [];
|
|
4045
4087
|
return [
|
|
@@ -4047,12 +4089,12 @@ function buildGroupedData(extraIds = []) {
|
|
|
4047
4089
|
group: g,
|
|
4048
4090
|
items: items.map((c) => ({
|
|
4049
4091
|
value: String(c.id),
|
|
4050
|
-
label:
|
|
4092
|
+
label: chunkJIBWKY7H_cjs.formatGtaControl(c.id)
|
|
4051
4093
|
}))
|
|
4052
4094
|
}
|
|
4053
4095
|
];
|
|
4054
4096
|
});
|
|
4055
|
-
const knownIds = new Set(
|
|
4097
|
+
const knownIds = new Set(chunkJIBWKY7H_cjs.GTA_CONTROLS.map((c) => c.id));
|
|
4056
4098
|
const customs = extraIds.filter((id) => !knownIds.has(id));
|
|
4057
4099
|
if (customs.length > 0) {
|
|
4058
4100
|
data.push({
|
|
@@ -4161,7 +4203,7 @@ function AsyncSaveButton({
|
|
|
4161
4203
|
function AdminPageTitle(props) {
|
|
4162
4204
|
return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: "xs", children: [
|
|
4163
4205
|
/* @__PURE__ */ jsxRuntime.jsx(props.icon, { color: props.color }),
|
|
4164
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", tt: "uppercase", lts: "0.1em", size: "sm", c: "rgba(255,255,255,0.6)", children:
|
|
4206
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", tt: "uppercase", lts: "0.1em", size: "sm", c: "rgba(255,255,255,0.6)", children: chunkJIBWKY7H_cjs.locale(props.title) })
|
|
4165
4207
|
] });
|
|
4166
4208
|
}
|
|
4167
4209
|
function SwitchPanel({
|
|
@@ -4261,7 +4303,7 @@ function TestBed({
|
|
|
4261
4303
|
const itemsRef = react.useRef(items);
|
|
4262
4304
|
itemsRef.current = items;
|
|
4263
4305
|
react.useEffect(() => {
|
|
4264
|
-
if (!
|
|
4306
|
+
if (!chunkJIBWKY7H_cjs.isEnvBrowser() || disablePersistence) return;
|
|
4265
4307
|
const persisted = loadPersistedState(storageKey);
|
|
4266
4308
|
itemsRef.current.forEach((item) => {
|
|
4267
4309
|
const persistedValue = persisted[item.key];
|
|
@@ -4270,7 +4312,7 @@ function TestBed({
|
|
|
4270
4312
|
}
|
|
4271
4313
|
});
|
|
4272
4314
|
}, []);
|
|
4273
|
-
if (!
|
|
4315
|
+
if (!chunkJIBWKY7H_cjs.isEnvBrowser()) return null;
|
|
4274
4316
|
const toggle = (item) => {
|
|
4275
4317
|
const next = !item.active;
|
|
4276
4318
|
item.onToggle(next);
|
|
@@ -4417,14 +4459,14 @@ function ThemeOverrideSection({
|
|
|
4417
4459
|
}) {
|
|
4418
4460
|
const mantineTheme = core.useMantineTheme();
|
|
4419
4461
|
const color = mantineTheme.colors[mantineTheme.primaryColor][5];
|
|
4420
|
-
const raw =
|
|
4462
|
+
const raw = chunk7EICODPM_cjs.useFormField(schemaKey);
|
|
4421
4463
|
const value = {
|
|
4422
|
-
useOverride: raw?.useOverride ??
|
|
4423
|
-
primaryColor: raw?.primaryColor ??
|
|
4424
|
-
primaryShade: raw?.primaryShade ??
|
|
4425
|
-
customTheme: Array.isArray(raw?.customTheme) && raw.customTheme.length === 10 ? raw.customTheme :
|
|
4464
|
+
useOverride: raw?.useOverride ?? chunkJIBWKY7H_cjs.defaultThemeOverride.useOverride,
|
|
4465
|
+
primaryColor: raw?.primaryColor ?? chunkJIBWKY7H_cjs.defaultThemeOverride.primaryColor,
|
|
4466
|
+
primaryShade: raw?.primaryShade ?? chunkJIBWKY7H_cjs.defaultThemeOverride.primaryShade,
|
|
4467
|
+
customTheme: Array.isArray(raw?.customTheme) && raw.customTheme.length === 10 ? raw.customTheme : chunkJIBWKY7H_cjs.defaultThemeOverride.customTheme
|
|
4426
4468
|
};
|
|
4427
|
-
const { setValue } =
|
|
4469
|
+
const { setValue } = chunk7EICODPM_cjs.useFormActions();
|
|
4428
4470
|
const set = (key, val) => setValue(schemaKey, { ...value, [key]: val });
|
|
4429
4471
|
const useCustom = value.primaryColor === "custom";
|
|
4430
4472
|
const editable = value.useOverride;
|
|
@@ -4440,7 +4482,7 @@ function ThemeOverrideSection({
|
|
|
4440
4482
|
} catch {
|
|
4441
4483
|
}
|
|
4442
4484
|
};
|
|
4443
|
-
const resetPalette = () => set("customTheme",
|
|
4485
|
+
const resetPalette = () => set("customTheme", chunkJIBWKY7H_cjs.DEFAULT_PALETTE);
|
|
4444
4486
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4445
4487
|
core.Flex,
|
|
4446
4488
|
{
|
|
@@ -4453,15 +4495,15 @@ function ThemeOverrideSection({
|
|
|
4453
4495
|
AdminPageTitle,
|
|
4454
4496
|
{
|
|
4455
4497
|
icon: lucideReact.Palette,
|
|
4456
|
-
title: title ||
|
|
4498
|
+
title: title || chunkJIBWKY7H_cjs.locale("Theme") || "Theme",
|
|
4457
4499
|
color
|
|
4458
4500
|
}
|
|
4459
4501
|
),
|
|
4460
4502
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4461
4503
|
SwitchPanel,
|
|
4462
4504
|
{
|
|
4463
|
-
label:
|
|
4464
|
-
description:
|
|
4505
|
+
label: chunkJIBWKY7H_cjs.locale("OverrideGlobalTheme") || "Override global theme",
|
|
4506
|
+
description: chunkJIBWKY7H_cjs.locale("OverrideGlobalThemeDesc") || "When on, this resource uses its own primary colour and palette instead of dirk_lib's. Turn off to fall back to the global theme \u2014 your custom palette is kept.",
|
|
4465
4507
|
checked: value.useOverride,
|
|
4466
4508
|
onChange: (v) => set("useOverride", v)
|
|
4467
4509
|
}
|
|
@@ -4475,11 +4517,11 @@ function ThemeOverrideSection({
|
|
|
4475
4517
|
transition: "opacity 0.15s"
|
|
4476
4518
|
},
|
|
4477
4519
|
children: [
|
|
4478
|
-
/* @__PURE__ */ jsxRuntime.jsx(GroupLabel, { label:
|
|
4520
|
+
/* @__PURE__ */ jsxRuntime.jsx(GroupLabel, { label: chunkJIBWKY7H_cjs.locale("PrimaryColor") || "Primary Colour" }),
|
|
4479
4521
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4480
4522
|
core.Switch,
|
|
4481
4523
|
{
|
|
4482
|
-
label:
|
|
4524
|
+
label: chunkJIBWKY7H_cjs.locale("UseCustomPalette") || "Use custom palette",
|
|
4483
4525
|
size: "md",
|
|
4484
4526
|
mt: "xs",
|
|
4485
4527
|
checked: useCustom,
|
|
@@ -4499,7 +4541,7 @@ function ThemeOverrideSection({
|
|
|
4499
4541
|
!useCustom && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4500
4542
|
core.Select,
|
|
4501
4543
|
{
|
|
4502
|
-
label:
|
|
4544
|
+
label: chunkJIBWKY7H_cjs.locale("MantinePalette") || "Mantine palette",
|
|
4503
4545
|
size: "xs",
|
|
4504
4546
|
style: { flex: 1 },
|
|
4505
4547
|
value: value.primaryColor,
|
|
@@ -4511,7 +4553,7 @@ function ThemeOverrideSection({
|
|
|
4511
4553
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4512
4554
|
core.NumberInput,
|
|
4513
4555
|
{
|
|
4514
|
-
label:
|
|
4556
|
+
label: chunkJIBWKY7H_cjs.locale("Shade") || "Shade",
|
|
4515
4557
|
size: "xs",
|
|
4516
4558
|
style: { flex: 1 },
|
|
4517
4559
|
min: 0,
|
|
@@ -4531,7 +4573,7 @@ function ThemeOverrideSection({
|
|
|
4531
4573
|
tt: "uppercase",
|
|
4532
4574
|
lts: "0.07em",
|
|
4533
4575
|
c: "rgba(255,255,255,0.2)",
|
|
4534
|
-
children:
|
|
4576
|
+
children: chunkJIBWKY7H_cjs.locale("CustomPalette") || "Custom palette"
|
|
4535
4577
|
}
|
|
4536
4578
|
),
|
|
4537
4579
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4540,7 +4582,7 @@ function ThemeOverrideSection({
|
|
|
4540
4582
|
size: "sm",
|
|
4541
4583
|
variant: "subtle",
|
|
4542
4584
|
onClick: resetPalette,
|
|
4543
|
-
title:
|
|
4585
|
+
title: chunkJIBWKY7H_cjs.locale("ResetPalette") || "Reset palette",
|
|
4544
4586
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: "1.4vh" })
|
|
4545
4587
|
}
|
|
4546
4588
|
)
|
|
@@ -4548,7 +4590,7 @@ function ThemeOverrideSection({
|
|
|
4548
4590
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4549
4591
|
core.ColorInput,
|
|
4550
4592
|
{
|
|
4551
|
-
label:
|
|
4593
|
+
label: chunkJIBWKY7H_cjs.locale("BaseColor") || "Base colour",
|
|
4552
4594
|
size: "xs",
|
|
4553
4595
|
value: value.customTheme[value.primaryShade] ?? value.customTheme[5] ?? "#000000",
|
|
4554
4596
|
onChange: generateFromBase,
|
|
@@ -4650,7 +4692,7 @@ function PlayerSelect({
|
|
|
4650
4692
|
const color = theme.colors[theme.primaryColor][5];
|
|
4651
4693
|
const [searchInput, setSearchInput] = react.useState("");
|
|
4652
4694
|
const [debouncedSearch, setDebouncedSearch] = react.useState("");
|
|
4653
|
-
const { players, isFetching, refresh } =
|
|
4695
|
+
const { players, isFetching, refresh } = chunk7EICODPM_cjs.usePlayers({
|
|
4654
4696
|
includeOffline,
|
|
4655
4697
|
search: includeOffline ? debouncedSearch : void 0,
|
|
4656
4698
|
limit
|
|
@@ -4759,7 +4801,7 @@ function formatLabel(p) {
|
|
|
4759
4801
|
}
|
|
4760
4802
|
var COMMON_ACE_GROUPS = ["group.admin", "group.mod", "group.superadmin"];
|
|
4761
4803
|
var t = (key, fallback) => {
|
|
4762
|
-
const v =
|
|
4804
|
+
const v = chunkJIBWKY7H_cjs.locale(key);
|
|
4763
4805
|
return v === key ? fallback : v;
|
|
4764
4806
|
};
|
|
4765
4807
|
var DEFAULT_VALUE = {
|
|
@@ -4784,12 +4826,12 @@ function AccessOverrideSection({
|
|
|
4784
4826
|
}) {
|
|
4785
4827
|
const mantineTheme = core.useMantineTheme();
|
|
4786
4828
|
const color = mantineTheme.colors[mantineTheme.primaryColor][5];
|
|
4787
|
-
const raw =
|
|
4829
|
+
const raw = chunk7EICODPM_cjs.useFormField(schemaKey);
|
|
4788
4830
|
const value = {
|
|
4789
4831
|
groups: Array.isArray(raw?.groups) ? raw.groups : DEFAULT_VALUE.groups,
|
|
4790
4832
|
identifiers: Array.isArray(raw?.identifiers) ? raw.identifiers : DEFAULT_VALUE.identifiers
|
|
4791
4833
|
};
|
|
4792
|
-
const { setValue } =
|
|
4834
|
+
const { setValue } = chunk7EICODPM_cjs.useFormActions();
|
|
4793
4835
|
const set = (key, val) => setValue(schemaKey, { ...value, [key]: val });
|
|
4794
4836
|
const [addingGroup, setAddingGroup] = react.useState(false);
|
|
4795
4837
|
const [addingPlayer, setAddingPlayer] = react.useState(false);
|
|
@@ -5661,7 +5703,7 @@ function ScenarioSelect({
|
|
|
5661
5703
|
);
|
|
5662
5704
|
}
|
|
5663
5705
|
var t2 = (key, fallback) => {
|
|
5664
|
-
const v =
|
|
5706
|
+
const v = chunkJIBWKY7H_cjs.locale(key);
|
|
5665
5707
|
return v === key ? fallback : v;
|
|
5666
5708
|
};
|
|
5667
5709
|
function decimalToHex(color) {
|
|
@@ -5697,7 +5739,7 @@ function DiscordRoleSelect(props) {
|
|
|
5697
5739
|
const refresh = async () => {
|
|
5698
5740
|
setLoading(true);
|
|
5699
5741
|
try {
|
|
5700
|
-
const res = await
|
|
5742
|
+
const res = await chunkJIBWKY7H_cjs.fetchNui(endpoint, {}, {
|
|
5701
5743
|
// Browser dev fallback so the component renders something useful
|
|
5702
5744
|
// outside FiveM.
|
|
5703
5745
|
ok: true,
|
|
@@ -5846,7 +5888,7 @@ function DiscordRoleSelect(props) {
|
|
|
5846
5888
|
);
|
|
5847
5889
|
}
|
|
5848
5890
|
var t3 = (key, fallback) => {
|
|
5849
|
-
const v =
|
|
5891
|
+
const v = chunkJIBWKY7H_cjs.locale(key);
|
|
5850
5892
|
return v === key ? fallback : v;
|
|
5851
5893
|
};
|
|
5852
5894
|
var FRAMEWORK_HINTS = {
|
|
@@ -5894,7 +5936,7 @@ function AccountSelect(props) {
|
|
|
5894
5936
|
const refresh = async () => {
|
|
5895
5937
|
setLoading(true);
|
|
5896
5938
|
try {
|
|
5897
|
-
const res = await
|
|
5939
|
+
const res = await chunkJIBWKY7H_cjs.fetchNui(endpoint, {}, {
|
|
5898
5940
|
// Browser dev fallback. Shows a recognisable ESX-style list.
|
|
5899
5941
|
ok: true,
|
|
5900
5942
|
framework: "es_extended",
|
|
@@ -6204,24 +6246,24 @@ function WorldPositionSetButton2({
|
|
|
6204
6246
|
}) {
|
|
6205
6247
|
const theme = core.useMantineTheme();
|
|
6206
6248
|
const color = theme.colors[theme.primaryColor][5];
|
|
6207
|
-
const begin =
|
|
6249
|
+
const begin = chunkNBLBFWZQ_cjs.useAdminToolStore((s) => s.begin);
|
|
6208
6250
|
const onClick = async () => {
|
|
6209
6251
|
const instructions = {
|
|
6210
|
-
title:
|
|
6211
|
-
hint:
|
|
6252
|
+
title: chunkJIBWKY7H_cjs.locale("PickPositionTitle") || "Pick Position",
|
|
6253
|
+
hint: chunkJIBWKY7H_cjs.locale("PickPositionHint") || "Walk to where you want this set",
|
|
6212
6254
|
keys: [
|
|
6213
|
-
{ key: "E", action:
|
|
6214
|
-
{ key: "\u232B", action:
|
|
6255
|
+
{ key: "E", action: chunkJIBWKY7H_cjs.locale("Set") || "Set" },
|
|
6256
|
+
{ key: "\u232B", action: chunkJIBWKY7H_cjs.locale("Cancel") || "Cancel" }
|
|
6215
6257
|
]
|
|
6216
6258
|
};
|
|
6217
6259
|
const pendingResult = begin({ id: "capturePosition", ...instructions });
|
|
6218
|
-
|
|
6219
|
-
|
|
6260
|
+
chunkJIBWKY7H_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "capturePosition", instructions }).catch(() => {
|
|
6261
|
+
chunkNBLBFWZQ_cjs.useAdminToolStore.getState().cancelActive();
|
|
6220
6262
|
});
|
|
6221
6263
|
const result = await pendingResult;
|
|
6222
6264
|
if (result) onChange(result);
|
|
6223
6265
|
};
|
|
6224
|
-
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label:
|
|
6266
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunkJIBWKY7H_cjs.locale("SetWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6225
6267
|
framerMotion.motion.button,
|
|
6226
6268
|
{
|
|
6227
6269
|
onClick,
|
|
@@ -6239,7 +6281,7 @@ function WorldPositionSetButton2({
|
|
|
6239
6281
|
},
|
|
6240
6282
|
children: [
|
|
6241
6283
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
6242
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children:
|
|
6284
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: chunkJIBWKY7H_cjs.locale("Set") })
|
|
6243
6285
|
]
|
|
6244
6286
|
}
|
|
6245
6287
|
) });
|
|
@@ -6251,10 +6293,10 @@ function WorldPositionGotoButton2({
|
|
|
6251
6293
|
const theme = core.useMantineTheme();
|
|
6252
6294
|
const color = theme.colors[theme.primaryColor][5];
|
|
6253
6295
|
const onClick = () => {
|
|
6254
|
-
|
|
6296
|
+
chunkJIBWKY7H_cjs.fetchNui("ADMIN_TOOL_INVOKE", { id: "gotoCoord", value }).catch(() => {
|
|
6255
6297
|
});
|
|
6256
6298
|
};
|
|
6257
|
-
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label:
|
|
6299
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunkJIBWKY7H_cjs.locale("GotoWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6258
6300
|
framerMotion.motion.button,
|
|
6259
6301
|
{
|
|
6260
6302
|
onClick,
|
|
@@ -6272,26 +6314,26 @@ function WorldPositionGotoButton2({
|
|
|
6272
6314
|
},
|
|
6273
6315
|
children: [
|
|
6274
6316
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPin, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
6275
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children:
|
|
6317
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: chunkJIBWKY7H_cjs.locale("Goto") })
|
|
6276
6318
|
]
|
|
6277
6319
|
}
|
|
6278
6320
|
) });
|
|
6279
6321
|
}
|
|
6280
6322
|
function usePickDoor() {
|
|
6281
|
-
const begin =
|
|
6323
|
+
const begin = chunkNBLBFWZQ_cjs.useAdminToolStore((s) => s.begin);
|
|
6282
6324
|
return async () => {
|
|
6283
6325
|
const pending = begin({
|
|
6284
6326
|
id: "pickDoor",
|
|
6285
|
-
title:
|
|
6286
|
-
hint:
|
|
6327
|
+
title: chunkJIBWKY7H_cjs.locale("PickDoorTitle"),
|
|
6328
|
+
hint: chunkJIBWKY7H_cjs.locale("PickDoorHint"),
|
|
6287
6329
|
keys: [
|
|
6288
|
-
{ key: "LMB", action:
|
|
6289
|
-
{ key: "E", action:
|
|
6290
|
-
{ key: "BACKSPACE", action:
|
|
6330
|
+
{ key: "LMB", action: chunkJIBWKY7H_cjs.locale("Toggle") },
|
|
6331
|
+
{ key: "E", action: chunkJIBWKY7H_cjs.locale("Confirm") },
|
|
6332
|
+
{ key: "BACKSPACE", action: chunkJIBWKY7H_cjs.locale("Cancel") }
|
|
6291
6333
|
]
|
|
6292
6334
|
});
|
|
6293
|
-
|
|
6294
|
-
|
|
6335
|
+
chunkJIBWKY7H_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "pickDoor" }).catch(() => {
|
|
6336
|
+
chunkNBLBFWZQ_cjs.useAdminToolStore.getState().cancelActive();
|
|
6295
6337
|
});
|
|
6296
6338
|
return await pending;
|
|
6297
6339
|
};
|
|
@@ -6312,7 +6354,7 @@ function DoorPickerButton({
|
|
|
6312
6354
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6313
6355
|
core.Tooltip,
|
|
6314
6356
|
{
|
|
6315
|
-
label: tooltip ??
|
|
6357
|
+
label: tooltip ?? chunkJIBWKY7H_cjs.locale("PickDoorTooltip"),
|
|
6316
6358
|
position: "top",
|
|
6317
6359
|
withArrow: true,
|
|
6318
6360
|
withinPortal: true,
|
|
@@ -6335,7 +6377,7 @@ function DoorPickerButton({
|
|
|
6335
6377
|
},
|
|
6336
6378
|
children: [
|
|
6337
6379
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.DoorOpen, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
6338
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: label ??
|
|
6380
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: label ?? chunkJIBWKY7H_cjs.locale("PickDoor") })
|
|
6339
6381
|
]
|
|
6340
6382
|
}
|
|
6341
6383
|
)
|
|
@@ -6345,7 +6387,7 @@ function DoorPickerButton({
|
|
|
6345
6387
|
var MapImpl = react.memo(({
|
|
6346
6388
|
children,
|
|
6347
6389
|
initialZoom = 2,
|
|
6348
|
-
initialCenter =
|
|
6390
|
+
initialCenter = chunkJIBWKY7H_cjs.gameToMap(0, 0),
|
|
6349
6391
|
mapStyle = "game"
|
|
6350
6392
|
}) => {
|
|
6351
6393
|
const mapRef = react.useRef(null);
|
|
@@ -6468,7 +6510,7 @@ function BlipMarker({
|
|
|
6468
6510
|
fallbackColor = DEFAULT_COLOR
|
|
6469
6511
|
}) {
|
|
6470
6512
|
const [hovered, setHovered] = react.useState(false);
|
|
6471
|
-
const mapCoords = react.useMemo(() =>
|
|
6513
|
+
const mapCoords = react.useMemo(() => chunkJIBWKY7H_cjs.gameToMap(position.x, position.y), [position.x, position.y]);
|
|
6472
6514
|
const effectiveSprite = sprite ?? fallbackSprite;
|
|
6473
6515
|
const effectiveColor = color ?? fallbackColor;
|
|
6474
6516
|
const url = blipUrlForSprite(effectiveSprite);
|
|
@@ -6562,15 +6604,15 @@ function ModelSelect({
|
|
|
6562
6604
|
style,
|
|
6563
6605
|
limit = 100
|
|
6564
6606
|
}) {
|
|
6565
|
-
const models =
|
|
6607
|
+
const models = chunkJIBWKY7H_cjs.useModels((s) => s.models);
|
|
6566
6608
|
react.useEffect(() => {
|
|
6567
|
-
|
|
6609
|
+
chunkJIBWKY7H_cjs.loadModels();
|
|
6568
6610
|
}, []);
|
|
6569
6611
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6570
6612
|
core.Autocomplete,
|
|
6571
6613
|
{
|
|
6572
6614
|
label,
|
|
6573
|
-
placeholder: placeholder ?? (
|
|
6615
|
+
placeholder: placeholder ?? (chunkJIBWKY7H_cjs.locale("SearchModel") || "Search or type a model\u2026"),
|
|
6574
6616
|
size,
|
|
6575
6617
|
disabled,
|
|
6576
6618
|
style,
|
|
@@ -6590,9 +6632,9 @@ function VehicleSelect({
|
|
|
6590
6632
|
style,
|
|
6591
6633
|
limit = 100
|
|
6592
6634
|
}) {
|
|
6593
|
-
const vehicles =
|
|
6635
|
+
const vehicles = chunkJIBWKY7H_cjs.useVehicles((s) => s.vehicles);
|
|
6594
6636
|
react.useEffect(() => {
|
|
6595
|
-
|
|
6637
|
+
chunkJIBWKY7H_cjs.ensureVehicles();
|
|
6596
6638
|
}, []);
|
|
6597
6639
|
const data = vehicles.map((v) => ({ value: v.model, label: v.name ? `${v.name} (${v.model})` : v.model }));
|
|
6598
6640
|
const extra = value && !vehicles.some((v) => v.model === value) ? [{ value, label: value }] : [];
|
|
@@ -6603,7 +6645,7 @@ function VehicleSelect({
|
|
|
6603
6645
|
size,
|
|
6604
6646
|
disabled,
|
|
6605
6647
|
style,
|
|
6606
|
-
placeholder:
|
|
6648
|
+
placeholder: chunkJIBWKY7H_cjs.locale("SearchVehicle") || "Search a vehicle\u2026",
|
|
6607
6649
|
data: [...extra, ...data],
|
|
6608
6650
|
value: value ?? null,
|
|
6609
6651
|
searchable: true,
|
|
@@ -6621,9 +6663,9 @@ function CategorySelect({
|
|
|
6621
6663
|
disabled,
|
|
6622
6664
|
style
|
|
6623
6665
|
}) {
|
|
6624
|
-
const categories =
|
|
6666
|
+
const categories = chunkJIBWKY7H_cjs.useVehicles((s) => s.categories);
|
|
6625
6667
|
react.useEffect(() => {
|
|
6626
|
-
|
|
6668
|
+
chunkJIBWKY7H_cjs.ensureVehicles();
|
|
6627
6669
|
}, []);
|
|
6628
6670
|
const opts = Array.from(/* @__PURE__ */ new Set([...value ?? [], ...categories])).sort();
|
|
6629
6671
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6633,7 +6675,7 @@ function CategorySelect({
|
|
|
6633
6675
|
size,
|
|
6634
6676
|
disabled,
|
|
6635
6677
|
style,
|
|
6636
|
-
placeholder:
|
|
6678
|
+
placeholder: chunkJIBWKY7H_cjs.locale("SelectCategories") || "Select categories\u2026",
|
|
6637
6679
|
data: opts,
|
|
6638
6680
|
value: value ?? [],
|
|
6639
6681
|
searchable: true,
|
|
@@ -6713,5 +6755,5 @@ exports.useModalActions = useModalActions;
|
|
|
6713
6755
|
exports.useNavigation = useNavigation;
|
|
6714
6756
|
exports.useNavigationStore = useNavigationStore;
|
|
6715
6757
|
exports.usePickDoor = usePickDoor;
|
|
6716
|
-
//# sourceMappingURL=chunk-
|
|
6717
|
-
//# sourceMappingURL=chunk-
|
|
6758
|
+
//# sourceMappingURL=chunk-I4YJBITG.cjs.map
|
|
6759
|
+
//# sourceMappingURL=chunk-I4YJBITG.cjs.map
|