dirk-cfx-react 1.1.94 → 1.1.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/{chunk-ZPFW7C2A.js → chunk-3QPPR6OY.js} +3 -3
  2. package/dist/{chunk-ZPFW7C2A.js.map → chunk-3QPPR6OY.js.map} +1 -1
  3. package/dist/{chunk-MYNNCLMA.js → chunk-4QSXUENK.js} +325 -43
  4. package/dist/chunk-4QSXUENK.js.map +1 -0
  5. package/dist/{chunk-YA2PXBP6.cjs → chunk-5XODUPUE.cjs} +325 -43
  6. package/dist/chunk-5XODUPUE.cjs.map +1 -0
  7. package/dist/{chunk-3T2CCW5E.cjs → chunk-6CNT35D6.cjs} +9 -9
  8. package/dist/{chunk-3T2CCW5E.cjs.map → chunk-6CNT35D6.cjs.map} +1 -1
  9. package/dist/{chunk-KGLO3ZAS.js → chunk-ABBZHNLP.js} +3 -3
  10. package/dist/{chunk-KGLO3ZAS.js.map → chunk-ABBZHNLP.js.map} +1 -1
  11. package/dist/{chunk-QOQQ3ERZ.cjs → chunk-EOSHBZQK.cjs} +17 -17
  12. package/dist/{chunk-QOQQ3ERZ.cjs.map → chunk-EOSHBZQK.cjs.map} +1 -1
  13. package/dist/{chunk-Z7N5AQJW.js → chunk-GFODSZSP.js} +3 -3
  14. package/dist/{chunk-Z7N5AQJW.js.map → chunk-GFODSZSP.js.map} +1 -1
  15. package/dist/{chunk-K3GDU6EY.cjs → chunk-HG2J72NC.cjs} +167 -167
  16. package/dist/{chunk-K3GDU6EY.cjs.map → chunk-HG2J72NC.cjs.map} +1 -1
  17. package/dist/{chunk-E2SFEBBB.cjs → chunk-HOVRS2Z6.cjs} +4 -4
  18. package/dist/{chunk-E2SFEBBB.cjs.map → chunk-HOVRS2Z6.cjs.map} +1 -1
  19. package/dist/{chunk-VKYONY7E.cjs → chunk-MY3Z7LPB.cjs} +5 -5
  20. package/dist/{chunk-VKYONY7E.cjs.map → chunk-MY3Z7LPB.cjs.map} +1 -1
  21. package/dist/{chunk-HAB6H274.js → chunk-UGDMOWVM.js} +6 -6
  22. package/dist/{chunk-HAB6H274.js.map → chunk-UGDMOWVM.js.map} +1 -1
  23. package/dist/{chunk-NVMOGS7Y.js → chunk-WUALULEH.js} +4 -4
  24. package/dist/{chunk-NVMOGS7Y.js.map → chunk-WUALULEH.js.map} +1 -1
  25. package/dist/components/index.cjs +76 -76
  26. package/dist/components/index.js +5 -5
  27. package/dist/hooks/index.cjs +22 -22
  28. package/dist/hooks/index.js +4 -4
  29. package/dist/index.cjs +147 -147
  30. package/dist/index.js +6 -6
  31. package/dist/providers/index.cjs +5 -5
  32. package/dist/providers/index.js +3 -3
  33. package/dist/utils/index.cjs +48 -48
  34. package/dist/utils/index.js +1 -1
  35. package/package.json +1 -1
  36. package/dist/chunk-MYNNCLMA.js.map +0 -1
  37. package/dist/chunk-YA2PXBP6.cjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkE2SFEBBB_cjs = require('./chunk-E2SFEBBB.cjs');
4
- var chunkQOQQ3ERZ_cjs = require('./chunk-QOQQ3ERZ.cjs');
5
- var chunk3T2CCW5E_cjs = require('./chunk-3T2CCW5E.cjs');
6
- var chunkYA2PXBP6_cjs = require('./chunk-YA2PXBP6.cjs');
3
+ var chunkHOVRS2Z6_cjs = require('./chunk-HOVRS2Z6.cjs');
4
+ var chunkEOSHBZQK_cjs = require('./chunk-EOSHBZQK.cjs');
5
+ var chunk6CNT35D6_cjs = require('./chunk-6CNT35D6.cjs');
6
+ var chunk5XODUPUE_cjs = require('./chunk-5XODUPUE.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 ${chunkYA2PXBP6_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][9], 0.8)}`,
1121
- boxShadow: `inset 0 0 2vh ${chunkYA2PXBP6_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][7], 0.5)}`
1120
+ outline: `0.2vh solid ${chunk5XODUPUE_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][9], 0.8)}`,
1121
+ boxShadow: `inset 0 0 2vh ${chunk5XODUPUE_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: chunkYA2PXBP6_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][theme.primaryShade], props.hovered ? 0.9 : 0.9),
1127
+ color: chunk5XODUPUE_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 = chunkE2SFEBBB_cjs.useAudio((state) => state.play);
1517
+ const play = chunkHOVRS2Z6_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 ? chunkYA2PXBP6_cjs.colorWithAlpha(props.color, 0.2) : chunkYA2PXBP6_cjs.colorWithAlpha(theme.colors[theme.primaryColor][theme.primaryShade], 0.2) : "transparent",
1583
+ bg: props.selected ? props.color ? chunk5XODUPUE_cjs.colorWithAlpha(props.color, 0.2) : chunk5XODUPUE_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 = chunkYA2PXBP6_cjs.useSettings((state) => state.game);
1802
+ const game = chunk5XODUPUE_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 || chunkYA2PXBP6_cjs.colorWithAlpha(theme.colors[theme.primaryColor][9], 0.5)}`
1816
+ borderBottom: props.removeBorder ? "none" : `0.3vh solid ${props.borderColor || chunk5XODUPUE_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: chunkYA2PXBP6_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.9) }],
1972
+ sections: [{ value: props.progressToLevel, color: chunk5XODUPUE_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: chunkYA2PXBP6_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.9),
1983
+ c: chunk5XODUPUE_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 ${chunkYA2PXBP6_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.7)}`
1986
+ textShadow: `0 0 10px ${chunk5XODUPUE_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 || chunkYA2PXBP6_cjs.locale("Level")
2004
+ children: props.text || chunk5XODUPUE_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
- chunkYA2PXBP6_cjs.locale("EXP")
2017
+ chunk5XODUPUE_cjs.locale("EXP")
2018
2018
  ]
2019
2019
  }
2020
2020
  )
@@ -2524,7 +2524,7 @@ var useMissingItemsAudit = zustand.create((set, get) => ({
2524
2524
  if (get().inFlight) return;
2525
2525
  set({ inFlight: true });
2526
2526
  try {
2527
- const res = await chunkYA2PXBP6_cjs.fetchNui("GET_MISSING_ITEMS", void 0, {
2527
+ const res = await chunk5XODUPUE_cjs.fetchNui("GET_MISSING_ITEMS", void 0, {
2528
2528
  success: true,
2529
2529
  data: { missing: [], snippets: { ox: "", qb: "", esx: "" } }
2530
2530
  });
@@ -2798,7 +2798,7 @@ function ConfigJsonModal({
2798
2798
  }) {
2799
2799
  const theme = core.useMantineTheme();
2800
2800
  const color = theme.colors[theme.primaryColor][5];
2801
- const form = chunkE2SFEBBB_cjs.useForm();
2801
+ const form = chunkHOVRS2Z6_cjs.useForm();
2802
2802
  const [json, setJson] = react.useState(() => JSON.stringify(form.values, null, 2));
2803
2803
  const [error, setError] = react.useState(null);
2804
2804
  const handleSave = () => {
@@ -2829,7 +2829,7 @@ function ConfigJsonModal({
2829
2829
  setError(e.message);
2830
2830
  }
2831
2831
  };
2832
- return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title: chunkYA2PXBP6_cjs.locale("cfgpanel_json_title"), icon: lucideReact.Code2, iconColor: color, onClose, width: "60vh", maxHeight: "80vh", zIndex: 200, children: [
2832
+ return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title: chunk5XODUPUE_cjs.locale("cfgpanel_json_title"), icon: lucideReact.Code2, iconColor: color, onClose, width: "60vh", maxHeight: "80vh", zIndex: 200, children: [
2833
2833
  /* @__PURE__ */ jsxRuntime.jsxs(core.Box, { flex: 1, p: "0.8vh", style: { overflowY: "auto" }, children: [
2834
2834
  /* @__PURE__ */ jsxRuntime.jsx(
2835
2835
  core.JsonInput,
@@ -2857,7 +2857,7 @@ function ConfigJsonModal({
2857
2857
  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
2858
  children: [
2859
2859
  /* @__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: chunkYA2PXBP6_cjs.locale("cfgpanel_cancel") })
2860
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.4)", children: chunk5XODUPUE_cjs.locale("cfgpanel_cancel") })
2861
2861
  ]
2862
2862
  }
2863
2863
  ),
@@ -2870,7 +2870,7 @@ function ConfigJsonModal({
2870
2870
  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
2871
  children: [
2872
2872
  /* @__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: chunkYA2PXBP6_cjs.locale("cfgpanel_apply") })
2873
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: color, children: chunk5XODUPUE_cjs.locale("cfgpanel_apply") })
2874
2874
  ]
2875
2875
  }
2876
2876
  )
@@ -2974,7 +2974,7 @@ function HistoryTableHeader() {
2974
2974
  function ConfigHistoryModal({
2975
2975
  onClose
2976
2976
  }) {
2977
- const { getHistory } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
2977
+ const { getHistory } = chunk6CNT35D6_cjs.getScriptConfigInstance();
2978
2978
  const theme = core.useMantineTheme();
2979
2979
  const color = theme.colors[theme.primaryColor][5];
2980
2980
  const [queryInput, setQueryInput] = react.useState("");
@@ -3011,7 +3011,7 @@ function ConfigHistoryModal({
3011
3011
  historyQuery.fetchNextPage();
3012
3012
  }
3013
3013
  };
3014
- return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title: chunkYA2PXBP6_cjs.locale("cfgpanel_history_title"), icon: lucideReact.History, iconColor: color, onClose, width: "88vh", maxHeight: "82vh", zIndex: 260, children: [
3014
+ return /* @__PURE__ */ jsxRuntime.jsxs(Modal, { title: chunk5XODUPUE_cjs.locale("cfgpanel_history_title"), icon: lucideReact.History, iconColor: color, onClose, width: "88vh", maxHeight: "82vh", zIndex: 260, children: [
3015
3015
  /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", style: { flex: 1, minHeight: 0 }, children: [
3016
3016
  /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { gap: "xs", p: "sm", style: { borderBottom: `0.1vh solid ${core.alpha(theme.colors.dark[7], 0.8)}` }, children: [
3017
3017
  /* @__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 +3054,7 @@ function ConfigHistoryModal({
3054
3054
  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
3055
  children: [
3056
3056
  /* @__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: chunkYA2PXBP6_cjs.locale("cfgpanel_close") })
3057
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.4)", children: chunk5XODUPUE_cjs.locale("cfgpanel_close") })
3058
3058
  ]
3059
3059
  }
3060
3060
  ) })
@@ -3074,12 +3074,12 @@ function ConfigPanelInner({
3074
3074
  height,
3075
3075
  suppressMissingItemsBanner
3076
3076
  }) {
3077
- const { updateConfig, resetConfig, getHistory } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3078
- const form = chunkE2SFEBBB_cjs.useForm();
3077
+ const { updateConfig, resetConfig, getHistory } = chunk6CNT35D6_cjs.getScriptConfigInstance();
3078
+ const form = chunkHOVRS2Z6_cjs.useForm();
3079
3079
  const theme = core.useMantineTheme();
3080
3080
  const color = theme.colors[theme.primaryColor][5];
3081
- const version = chunkYA2PXBP6_cjs.useSettings((s) => s.resourceVersion);
3082
- const [activeTab, setActiveTab] = chunkE2SFEBBB_cjs.useAdminState("__dirkConfigPanel:activeTab", navItems[0]?.id ?? "");
3081
+ const version = chunk5XODUPUE_cjs.useSettings((s) => s.resourceVersion);
3082
+ const [activeTab, setActiveTab] = chunkHOVRS2Z6_cjs.useAdminState("__dirkConfigPanel:activeTab", navItems[0]?.id ?? "");
3083
3083
  const firstMountRef = react.useRef(true);
3084
3084
  const [jsonOpen, setJsonOpen] = react.useState(false);
3085
3085
  const [historyOpen, setHistoryOpen] = react.useState(false);
@@ -3087,7 +3087,7 @@ function ConfigPanelInner({
3087
3087
  const [pendingAction, setPendingAction] = react.useState(null);
3088
3088
  const changedCount = form.changedCount ?? 0;
3089
3089
  const isDirty = changedCount > 0;
3090
- const goBack = () => chunkYA2PXBP6_cjs.fetchNui("CONFIG_PANEL_BACK");
3090
+ const goBack = () => chunk5XODUPUE_cjs.fetchNui("CONFIG_PANEL_BACK");
3091
3091
  const handleBack = () => {
3092
3092
  if (isDirty) {
3093
3093
  setPendingAction("back");
@@ -3114,20 +3114,20 @@ function ConfigPanelInner({
3114
3114
  /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: resetOpen && /* @__PURE__ */ jsxRuntime.jsx(
3115
3115
  ConfirmModal,
3116
3116
  {
3117
- title: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_title"),
3118
- description: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_desc"),
3119
- confirmLabel: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_confirm"),
3117
+ title: chunk5XODUPUE_cjs.locale("cfgpanel_reset_title"),
3118
+ description: chunk5XODUPUE_cjs.locale("cfgpanel_reset_desc"),
3119
+ confirmLabel: chunk5XODUPUE_cjs.locale("cfgpanel_reset_confirm"),
3120
3120
  confirmText: resetConfirmText,
3121
3121
  onConfirm: async () => {
3122
3122
  setResetOpen(false);
3123
3123
  const result = await resetConfig();
3124
3124
  if (result?.success) {
3125
- const { store } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3125
+ const { store } = chunk6CNT35D6_cjs.getScriptConfigInstance();
3126
3126
  form.reinitialize(cloneConfig(store.getState()));
3127
3127
  notifications.notifications.show({
3128
3128
  color: "green",
3129
- title: chunkYA2PXBP6_cjs.locale("ConfigResetSuccessTitle"),
3130
- message: chunkYA2PXBP6_cjs.locale("ConfigResetSuccessBody"),
3129
+ title: chunk5XODUPUE_cjs.locale("ConfigResetSuccessTitle"),
3130
+ message: chunk5XODUPUE_cjs.locale("ConfigResetSuccessBody"),
3131
3131
  autoClose: 3e3
3132
3132
  });
3133
3133
  return;
@@ -3136,8 +3136,8 @@ function ConfigPanelInner({
3136
3136
  console.warn(`[ConfigPanel] config reset failed: ${err}`);
3137
3137
  notifications.notifications.show({
3138
3138
  color: "red",
3139
- title: chunkYA2PXBP6_cjs.locale("ConfigResetFailedTitle"),
3140
- message: chunkYA2PXBP6_cjs.locale("ConfigResetFailedBody", err),
3139
+ title: chunk5XODUPUE_cjs.locale("ConfigResetFailedTitle"),
3140
+ message: chunk5XODUPUE_cjs.locale("ConfigResetFailedBody", err),
3141
3141
  autoClose: 6e3
3142
3142
  });
3143
3143
  },
@@ -3148,9 +3148,9 @@ function ConfigPanelInner({
3148
3148
  /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: pendingAction !== null && /* @__PURE__ */ jsxRuntime.jsx(
3149
3149
  ConfirmModal,
3150
3150
  {
3151
- title: chunkYA2PXBP6_cjs.locale("cfgpanel_discard_title"),
3152
- description: pendingAction === "back" ? chunkYA2PXBP6_cjs.locale("cfgpanel_discard_desc_back") : chunkYA2PXBP6_cjs.locale("cfgpanel_discard_desc_close"),
3153
- confirmLabel: pendingAction === "back" ? chunkYA2PXBP6_cjs.locale("cfgpanel_discard_confirm_back") : chunkYA2PXBP6_cjs.locale("cfgpanel_discard_confirm_close"),
3151
+ title: chunk5XODUPUE_cjs.locale("cfgpanel_discard_title"),
3152
+ description: pendingAction === "back" ? chunk5XODUPUE_cjs.locale("cfgpanel_discard_desc_back") : chunk5XODUPUE_cjs.locale("cfgpanel_discard_desc_close"),
3153
+ confirmLabel: pendingAction === "back" ? chunk5XODUPUE_cjs.locale("cfgpanel_discard_confirm_back") : chunk5XODUPUE_cjs.locale("cfgpanel_discard_confirm_close"),
3154
3154
  onConfirm: () => {
3155
3155
  const action = pendingAction;
3156
3156
  setPendingAction(null);
@@ -3188,7 +3188,7 @@ function ConfigPanelInner({
3188
3188
  /* @__PURE__ */ jsxRuntime.jsx(
3189
3189
  framerMotion.motion.button,
3190
3190
  {
3191
- title: chunkYA2PXBP6_cjs.locale("cfgpanel_back_title"),
3191
+ title: chunk5XODUPUE_cjs.locale("cfgpanel_back_title"),
3192
3192
  onClick: handleBack,
3193
3193
  whileHover: { background: core.alpha(color, 0.16), borderColor: core.alpha(color, 0.45) },
3194
3194
  whileTap: { scale: 0.95 },
@@ -3216,7 +3216,7 @@ function ConfigPanelInner({
3216
3216
  /* @__PURE__ */ jsxRuntime.jsx(
3217
3217
  framerMotion.motion.button,
3218
3218
  {
3219
- title: chunkYA2PXBP6_cjs.locale("cfgpanel_undo"),
3219
+ title: chunk5XODUPUE_cjs.locale("cfgpanel_undo"),
3220
3220
  onClick: () => form.canBack && form.back(),
3221
3221
  disabled: !form.canBack,
3222
3222
  whileHover: form.canBack ? { background: "rgba(255,255,255,0.07)" } : void 0,
@@ -3228,7 +3228,7 @@ function ConfigPanelInner({
3228
3228
  /* @__PURE__ */ jsxRuntime.jsx(
3229
3229
  framerMotion.motion.button,
3230
3230
  {
3231
- title: chunkYA2PXBP6_cjs.locale("cfgpanel_redo"),
3231
+ title: chunk5XODUPUE_cjs.locale("cfgpanel_redo"),
3232
3232
  onClick: () => form.canForward && form.forward(),
3233
3233
  disabled: !form.canForward,
3234
3234
  whileHover: form.canForward ? { background: "rgba(255,255,255,0.07)" } : void 0,
@@ -3240,7 +3240,7 @@ function ConfigPanelInner({
3240
3240
  /* @__PURE__ */ jsxRuntime.jsx(
3241
3241
  framerMotion.motion.button,
3242
3242
  {
3243
- title: isSaving ? chunkYA2PXBP6_cjs.locale("cfgpanel_saving") : isDirty ? `${chunkYA2PXBP6_cjs.locale("cfgpanel_save")} (${changedCount})` : chunkYA2PXBP6_cjs.locale("cfgpanel_save"),
3243
+ title: isSaving ? chunk5XODUPUE_cjs.locale("cfgpanel_saving") : isDirty ? `${chunk5XODUPUE_cjs.locale("cfgpanel_save")} (${changedCount})` : chunk5XODUPUE_cjs.locale("cfgpanel_save"),
3244
3244
  onClick: () => isDirty && !isSaving && form.submit(),
3245
3245
  disabled: !isDirty || isSaving,
3246
3246
  whileHover: isDirty && !isSaving ? { background: core.alpha(color, 0.25), borderColor: core.alpha(color, 0.5) } : void 0,
@@ -3252,7 +3252,7 @@ function ConfigPanelInner({
3252
3252
  /* @__PURE__ */ jsxRuntime.jsx(
3253
3253
  framerMotion.motion.button,
3254
3254
  {
3255
- title: chunkYA2PXBP6_cjs.locale("cfgpanel_history"),
3255
+ title: chunk5XODUPUE_cjs.locale("cfgpanel_history"),
3256
3256
  onClick: () => setHistoryOpen(true),
3257
3257
  whileHover: { background: core.alpha("#22d3ee", 0.16), borderColor: core.alpha("#22d3ee", 0.5) },
3258
3258
  whileTap: { scale: 0.97 },
@@ -3273,7 +3273,7 @@ function ConfigPanelInner({
3273
3273
  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
3274
  children: [
3275
3275
  /* @__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: chunkYA2PXBP6_cjs.locale("cfgpanel_discard") })
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: chunk5XODUPUE_cjs.locale("cfgpanel_discard") })
3277
3277
  ]
3278
3278
  }
3279
3279
  ),
@@ -3287,7 +3287,7 @@ function ConfigPanelInner({
3287
3287
  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
3288
  children: [
3289
3289
  /* @__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: chunkYA2PXBP6_cjs.locale("cfgpanel_manual_edit") })
3290
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: chunk5XODUPUE_cjs.locale("cfgpanel_manual_edit") })
3291
3291
  ]
3292
3292
  }
3293
3293
  ),
@@ -3300,12 +3300,12 @@ function ConfigPanelInner({
3300
3300
  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
3301
  children: [
3302
3302
  /* @__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: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_defaults") })
3303
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: "#ef4444", children: chunk5XODUPUE_cjs.locale("cfgpanel_reset_defaults") })
3304
3304
  ]
3305
3305
  }
3306
3306
  ),
3307
3307
  version && /* @__PURE__ */ jsxRuntime.jsxs(core.Text, { size: "0.95vh", c: "dimmed", ta: "center", style: { letterSpacing: "0.04em", opacity: 0.8 }, children: [
3308
- chunkYA2PXBP6_cjs.locale("cfgpanel_version"),
3308
+ chunk5XODUPUE_cjs.locale("cfgpanel_version"),
3309
3309
  " ",
3310
3310
  version
3311
3311
  ] })
@@ -3335,8 +3335,8 @@ function cloneConfig(value) {
3335
3335
  return JSON.parse(JSON.stringify(value));
3336
3336
  }
3337
3337
  function ServerOnlyFetcher() {
3338
- const { fetchServerOnly } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3339
- const { reinitialize } = chunkE2SFEBBB_cjs.useFormActions();
3338
+ const { fetchServerOnly } = chunk6CNT35D6_cjs.getScriptConfigInstance();
3339
+ const { reinitialize } = chunkHOVRS2Z6_cjs.useFormActions();
3340
3340
  react.useEffect(() => {
3341
3341
  let cancelled = false;
3342
3342
  fetchServerOnly().then((full) => {
@@ -3349,14 +3349,14 @@ function ServerOnlyFetcher() {
3349
3349
  }, []);
3350
3350
  return null;
3351
3351
  }
3352
- var defaultOnClose = () => chunkYA2PXBP6_cjs.fetchNui("CLOSE_ADMIN_SECTION");
3352
+ var defaultOnClose = () => chunk5XODUPUE_cjs.fetchNui("CLOSE_ADMIN_SECTION");
3353
3353
  function ConfigPanel(props) {
3354
3354
  const { open, onClose = defaultOnClose } = props;
3355
- const { store, updateConfig } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3355
+ const { store, updateConfig } = chunk6CNT35D6_cjs.getScriptConfigInstance();
3356
3356
  const [isSaving, setIsSaving] = react.useState(false);
3357
3357
  if (!open) return null;
3358
3358
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(
3359
- chunkE2SFEBBB_cjs.FormProvider,
3359
+ chunkHOVRS2Z6_cjs.FormProvider,
3360
3360
  {
3361
3361
  initialValues: cloneConfig(store.getState()),
3362
3362
  onSubmit: async (form) => {
@@ -3366,12 +3366,12 @@ function ConfigPanel(props) {
3366
3366
  const result = await updateConfig(form.values, form.changedFields);
3367
3367
  if (result?.success) {
3368
3368
  form.reinitialize(cloneConfig(form.values));
3369
- chunkQOQQ3ERZ_cjs.dirkQueryClient.invalidateQueries({ queryKey: ["scriptConfigHistory"] });
3369
+ chunkEOSHBZQK_cjs.dirkQueryClient.invalidateQueries({ queryKey: ["scriptConfigHistory"] });
3370
3370
  useMissingItemsAudit.getState().refresh();
3371
3371
  notifications.notifications.show({
3372
3372
  color: "green",
3373
- title: chunkYA2PXBP6_cjs.locale("ConfigSaveSuccessTitle"),
3374
- message: chunkYA2PXBP6_cjs.locale("ConfigSaveSuccessBody"),
3373
+ title: chunk5XODUPUE_cjs.locale("ConfigSaveSuccessTitle"),
3374
+ message: chunk5XODUPUE_cjs.locale("ConfigSaveSuccessBody"),
3375
3375
  autoClose: 3e3
3376
3376
  });
3377
3377
  return;
@@ -3383,8 +3383,8 @@ function ConfigPanel(props) {
3383
3383
  const bodyKey = err === "NoPermission" ? "ConfigSaveNoPermissionBody" : err === "VersionConflict" ? "ConfigSaveVersionConflictBody" : err === "NotReady" ? "ConfigSaveNotReadyBody" : "ConfigSaveFailedBody";
3384
3384
  notifications.notifications.show({
3385
3385
  color: "red",
3386
- title: chunkYA2PXBP6_cjs.locale(titleKey),
3387
- message: chunkYA2PXBP6_cjs.locale(bodyKey, err),
3386
+ title: chunk5XODUPUE_cjs.locale(titleKey),
3387
+ message: chunk5XODUPUE_cjs.locale(bodyKey, err),
3388
3388
  autoClose: 6e3
3389
3389
  });
3390
3390
  } finally {
@@ -3422,12 +3422,12 @@ function LazyImage({ src, style }) {
3422
3422
  return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, style: { width: "4vh", height: "4vh" }, children: visible && /* @__PURE__ */ jsxRuntime.jsx(core.Image, { src, fit: "contain", style }) });
3423
3423
  }
3424
3424
  function SelectItem(props) {
3425
- const invItems = chunkYA2PXBP6_cjs.useItems();
3425
+ const invItems = chunk5XODUPUE_cjs.useItems();
3426
3426
  const [search, setSearch] = react.useState("");
3427
3427
  const isMissing = !!props.value && !invItems[props.value];
3428
3428
  const formattedItems = react.useMemo(() => {
3429
3429
  const seen = /* @__PURE__ */ new Set();
3430
- const list = chunkYA2PXBP6_cjs.useItemsList(props.excludeItemNames ?? []).filter((item) => {
3430
+ const list = chunk5XODUPUE_cjs.useItemsList(props.excludeItemNames ?? []).filter((item) => {
3431
3431
  if (seen.has(item.name)) return false;
3432
3432
  seen.add(item.name);
3433
3433
  return true;
@@ -3438,7 +3438,7 @@ function SelectItem(props) {
3438
3438
  if (props.allowCustom) {
3439
3439
  const q = search.trim();
3440
3440
  if (q && q !== props.value && !list.some((i) => i.value.toLowerCase() === q.toLowerCase())) {
3441
- list.unshift({ value: q, label: `${chunkYA2PXBP6_cjs.locale("UseCustomItem")}: ${q}`, image: "" });
3441
+ list.unshift({ value: q, label: `${chunk5XODUPUE_cjs.locale("UseCustomItem")}: ${q}`, image: "" });
3442
3442
  }
3443
3443
  }
3444
3444
  return list;
@@ -3447,7 +3447,7 @@ function SelectItem(props) {
3447
3447
  core.Select,
3448
3448
  {
3449
3449
  maxDropdownHeight: "30vh",
3450
- label: chunkYA2PXBP6_cjs.locale(props.label),
3450
+ label: chunk5XODUPUE_cjs.locale(props.label),
3451
3451
  size: "xs",
3452
3452
  flex: 1,
3453
3453
  style: props.style,
@@ -3472,7 +3472,7 @@ function SelectItem(props) {
3472
3472
  style: { aspectRatio: "1 / 1" }
3473
3473
  }
3474
3474
  ) : null,
3475
- nothingFoundMessage: chunkYA2PXBP6_cjs.locale("NoItemsFound"),
3475
+ nothingFoundMessage: chunk5XODUPUE_cjs.locale("NoItemsFound"),
3476
3476
  renderOption: (item) => {
3477
3477
  const optionMissing = !invItems[item.option.value] && item.option.value === props.value;
3478
3478
  if (optionMissing) {
@@ -3480,14 +3480,14 @@ function SelectItem(props) {
3480
3480
  /* @__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
3481
  /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", style: { flex: 1, minWidth: 0 }, children: [
3482
3482
  /* @__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: chunkYA2PXBP6_cjs.locale("ItemNotInInventory") })
3483
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: "dimmed", children: chunk5XODUPUE_cjs.locale("ItemNotInInventory") })
3484
3484
  ] }),
3485
3485
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3486
3486
  background: "rgba(245,158,11,0.12)",
3487
3487
  border: `0.1vh solid ${MISSING_COLOR}59`,
3488
3488
  borderRadius: "0.3vh",
3489
3489
  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: chunkYA2PXBP6_cjs.locale("Missing") }) })
3490
+ }, children: /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: MISSING_COLOR, ff: "Akrobat Bold", tt: "uppercase", lts: "0.06em", children: chunk5XODUPUE_cjs.locale("Missing") }) })
3491
3491
  ] });
3492
3492
  }
3493
3493
  return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: "xs", w: "100%", children: [
@@ -3527,7 +3527,7 @@ function PositionPicker(props) {
3527
3527
  react.useEffect(() => {
3528
3528
  return () => {
3529
3529
  if (previewingRef.current) {
3530
- chunkYA2PXBP6_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
3530
+ chunk5XODUPUE_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
3531
3531
  });
3532
3532
  }
3533
3533
  };
@@ -3536,13 +3536,13 @@ function PositionPicker(props) {
3536
3536
  const next = { ...value, [key]: val };
3537
3537
  onChange(next);
3538
3538
  if (previewingRef.current) {
3539
- chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
3539
+ chunk5XODUPUE_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
3540
3540
  });
3541
3541
  }
3542
3542
  };
3543
3543
  const grab = async () => {
3544
3544
  try {
3545
- const resp = await chunkYA2PXBP6_cjs.fetchNui(fetchEvent, { relativeTo }, value);
3545
+ const resp = await chunk5XODUPUE_cjs.fetchNui(fetchEvent, { relativeTo }, value);
3546
3546
  if (resp && typeof resp === "object") {
3547
3547
  const next = {
3548
3548
  x: Number(resp.x ?? 0),
@@ -3552,7 +3552,7 @@ function PositionPicker(props) {
3552
3552
  };
3553
3553
  onChange(next);
3554
3554
  if (previewingRef.current) {
3555
- chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
3555
+ chunk5XODUPUE_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
3556
3556
  });
3557
3557
  }
3558
3558
  }
@@ -3564,17 +3564,17 @@ function PositionPicker(props) {
3564
3564
  setPreviewing(nextState);
3565
3565
  previewingRef.current = nextState;
3566
3566
  if (nextState) {
3567
- await chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value, relativeTo }).catch(() => {
3567
+ await chunk5XODUPUE_cjs.fetchNui(previewEvent, { value, relativeTo }).catch(() => {
3568
3568
  });
3569
3569
  } else {
3570
- await chunkYA2PXBP6_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
3570
+ await chunk5XODUPUE_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
3571
3571
  });
3572
3572
  }
3573
3573
  };
3574
3574
  const reset = () => {
3575
3575
  onChange({ ...ZERO });
3576
3576
  if (previewingRef.current) {
3577
- chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value: ZERO, relativeTo }).catch(() => {
3577
+ chunk5XODUPUE_cjs.fetchNui(previewEvent, { value: ZERO, relativeTo }).catch(() => {
3578
3578
  });
3579
3579
  }
3580
3580
  };
@@ -3605,31 +3605,31 @@ function PositionPicker(props) {
3605
3605
  tt: "uppercase",
3606
3606
  lts: "0.05em",
3607
3607
  c: "rgba(255,255,255,0.75)",
3608
- children: chunkYA2PXBP6_cjs.locale(label)
3608
+ children: chunk5XODUPUE_cjs.locale(label)
3609
3609
  }
3610
3610
  ),
3611
3611
  relativeTo && /* @__PURE__ */ jsxRuntime.jsxs(core.Text, { ff: "Akrobat Bold", size: "xxs", c: core.alpha(color, 0.5), lts: "0.05em", children: [
3612
3612
  "\xB7 ",
3613
- chunkYA2PXBP6_cjs.locale("RelativeTo"),
3613
+ chunk5XODUPUE_cjs.locale("RelativeTo"),
3614
3614
  " ",
3615
3615
  relativeTo
3616
3616
  ] })
3617
3617
  ] }),
3618
- description && /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", c: "dimmed", lh: 1.3, children: chunkYA2PXBP6_cjs.locale(description) })
3618
+ description && /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", c: "dimmed", lh: 1.3, children: chunk5XODUPUE_cjs.locale(description) })
3619
3619
  ] }),
3620
3620
  /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { gap: "xxs", style: { flexShrink: 0 }, children: [
3621
- /* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip: chunkYA2PXBP6_cjs.locale("GrabMyPosition"), onClick: grab, color, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: "1.4vh", color }) }),
3621
+ /* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip: chunk5XODUPUE_cjs.locale("GrabMyPosition"), onClick: grab, color, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: "1.4vh", color }) }),
3622
3622
  /* @__PURE__ */ jsxRuntime.jsx(
3623
3623
  PickerButton,
3624
3624
  {
3625
- tooltip: previewing ? chunkYA2PXBP6_cjs.locale("StopPreview") : chunkYA2PXBP6_cjs.locale("PreviewInWorld"),
3625
+ tooltip: previewing ? chunk5XODUPUE_cjs.locale("StopPreview") : chunk5XODUPUE_cjs.locale("PreviewInWorld"),
3626
3626
  onClick: togglePreview,
3627
3627
  color,
3628
3628
  active: previewing,
3629
3629
  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
3630
  }
3631
3631
  ),
3632
- /* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip: chunkYA2PXBP6_cjs.locale("Reset"), onClick: reset, color: "#ef4444", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: "1.4vh", color: "#ef4444" }) })
3632
+ /* @__PURE__ */ jsxRuntime.jsx(PickerButton, { tooltip: chunk5XODUPUE_cjs.locale("Reset"), onClick: reset, color: "#ef4444", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: "1.4vh", color: "#ef4444" }) })
3633
3633
  ] })
3634
3634
  ] }),
3635
3635
  /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { gap: "xxs", children: [
@@ -3800,7 +3800,7 @@ function WorldPositionSetButton({
3800
3800
  const color = theme.colors[theme.primaryColor][5];
3801
3801
  const grab = async () => {
3802
3802
  try {
3803
- const resp = await chunkYA2PXBP6_cjs.fetchNui("GET_POSITION", {}, value);
3803
+ const resp = await chunk5XODUPUE_cjs.fetchNui("GET_POSITION", {}, value);
3804
3804
  if (!resp || typeof resp !== "object") return;
3805
3805
  onChange({
3806
3806
  x: Number(resp.x ?? 0),
@@ -3815,8 +3815,8 @@ function WorldPositionSetButton({
3815
3815
  Vector4ActionButton,
3816
3816
  {
3817
3817
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: compact ? "1.1vh" : "1.3vh", color }),
3818
- label: chunkYA2PXBP6_cjs.locale("Set"),
3819
- tooltip: chunkYA2PXBP6_cjs.locale("SetWorldTooltip"),
3818
+ label: chunk5XODUPUE_cjs.locale("Set"),
3819
+ tooltip: chunk5XODUPUE_cjs.locale("SetWorldTooltip"),
3820
3820
  onClick: grab,
3821
3821
  color,
3822
3822
  compact
@@ -3830,15 +3830,15 @@ function WorldPositionGotoButton({
3830
3830
  const theme = core.useMantineTheme();
3831
3831
  const color = theme.colors[theme.primaryColor][5];
3832
3832
  const goto = () => {
3833
- chunkYA2PXBP6_cjs.fetchNui("GOTO_POSITION", value).catch(() => {
3833
+ chunk5XODUPUE_cjs.fetchNui("GOTO_POSITION", value).catch(() => {
3834
3834
  });
3835
3835
  };
3836
3836
  return /* @__PURE__ */ jsxRuntime.jsx(
3837
3837
  Vector4ActionButton,
3838
3838
  {
3839
3839
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPin, { size: compact ? "1.1vh" : "1.3vh", color }),
3840
- label: chunkYA2PXBP6_cjs.locale("Goto"),
3841
- tooltip: chunkYA2PXBP6_cjs.locale("GotoWorldTooltip"),
3840
+ label: chunk5XODUPUE_cjs.locale("Goto"),
3841
+ tooltip: chunk5XODUPUE_cjs.locale("GotoWorldTooltip"),
3842
3842
  onClick: goto,
3843
3843
  color,
3844
3844
  compact
@@ -3854,8 +3854,8 @@ function Vector4DeleteButton({
3854
3854
  Vector4ActionButton,
3855
3855
  {
3856
3856
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { size: compact ? "1.1vh" : "1.3vh", color }),
3857
- label: chunkYA2PXBP6_cjs.locale("Delete"),
3858
- tooltip: chunkYA2PXBP6_cjs.locale("Delete"),
3857
+ label: chunk5XODUPUE_cjs.locale("Delete"),
3858
+ tooltip: chunk5XODUPUE_cjs.locale("Delete"),
3859
3859
  onClick,
3860
3860
  color,
3861
3861
  compact
@@ -3879,25 +3879,25 @@ function filterByType(jobs, gangs, type) {
3879
3879
  }
3880
3880
  function GroupName(props) {
3881
3881
  const ctx = react.useContext(GroupSelectContext);
3882
- const jobs = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.jobs);
3883
- const gangs = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.gangs);
3882
+ const jobs = chunk5XODUPUE_cjs.useFrameworkGroups((s) => s.jobs);
3883
+ const gangs = chunk5XODUPUE_cjs.useFrameworkGroups((s) => s.gangs);
3884
3884
  react.useEffect(() => {
3885
- chunkYA2PXBP6_cjs.ensureFrameworkGroups();
3885
+ chunk5XODUPUE_cjs.ensureFrameworkGroups();
3886
3886
  }, []);
3887
3887
  const inCompound = ctx !== null;
3888
3888
  const currentValue = inCompound ? ctx.value.name : props.value;
3889
3889
  const filterType = inCompound ? ctx.type : props.type;
3890
3890
  const list = filterByType(jobs, gangs, filterType);
3891
3891
  const data = filterType === void 0 ? [
3892
- { group: chunkYA2PXBP6_cjs.locale("Jobs") || "Jobs", items: jobs.map((g) => ({ value: g.name, label: g.label })) },
3893
- { group: chunkYA2PXBP6_cjs.locale("Gangs") || "Gangs", items: gangs.map((g) => ({ value: g.name, label: g.label })) }
3892
+ { group: chunk5XODUPUE_cjs.locale("Jobs") || "Jobs", items: jobs.map((g) => ({ value: g.name, label: g.label })) },
3893
+ { group: chunk5XODUPUE_cjs.locale("Gangs") || "Gangs", items: gangs.map((g) => ({ value: g.name, label: g.label })) }
3894
3894
  ] : list.map((g) => ({ value: g.name, label: g.label }));
3895
3895
  return /* @__PURE__ */ jsxRuntime.jsx(
3896
3896
  core.Select,
3897
3897
  {
3898
3898
  label: props.label,
3899
3899
  description: props.description,
3900
- placeholder: props.placeholder ?? (chunkYA2PXBP6_cjs.locale("SelectGroup") || "Select\u2026"),
3900
+ placeholder: props.placeholder ?? (chunk5XODUPUE_cjs.locale("SelectGroup") || "Select\u2026"),
3901
3901
  size: props.size ?? "xs",
3902
3902
  disabled: props.disabled,
3903
3903
  style: props.style,
@@ -3921,10 +3921,10 @@ function GroupRank(props) {
3921
3921
  if (ctx === null) {
3922
3922
  throw new Error("<GroupRank> must be a child of <GroupSelect>");
3923
3923
  }
3924
- const jobs = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.jobs);
3925
- const gangs = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.gangs);
3924
+ const jobs = chunk5XODUPUE_cjs.useFrameworkGroups((s) => s.jobs);
3925
+ const gangs = chunk5XODUPUE_cjs.useFrameworkGroups((s) => s.gangs);
3926
3926
  react.useEffect(() => {
3927
- chunkYA2PXBP6_cjs.ensureFrameworkGroups();
3927
+ chunk5XODUPUE_cjs.ensureFrameworkGroups();
3928
3928
  }, []);
3929
3929
  const all = [...jobs, ...gangs];
3930
3930
  const selectedGroup = all.find((g) => g.name === ctx.value.name) ?? null;
@@ -3938,7 +3938,7 @@ function GroupRank(props) {
3938
3938
  {
3939
3939
  label: props.label,
3940
3940
  description: props.description,
3941
- placeholder: props.placeholder ?? (chunkYA2PXBP6_cjs.locale("SelectGrade") || "Select grade\u2026"),
3941
+ placeholder: props.placeholder ?? (chunk5XODUPUE_cjs.locale("SelectGrade") || "Select grade\u2026"),
3942
3942
  size: props.size ?? "xs",
3943
3943
  style: props.style,
3944
3944
  data,
@@ -3976,10 +3976,10 @@ function Category({ label = "Primary" }) {
3976
3976
  size: "xs",
3977
3977
  style: { flex: 1 },
3978
3978
  value: value._type,
3979
- data: [...chunkYA2PXBP6_cjs.INPUT_MAPPER_PRIMARY_OPTIONS],
3979
+ data: [...chunk5XODUPUE_cjs.INPUT_MAPPER_PRIMARY_OPTIONS],
3980
3980
  onChange: (nextType) => {
3981
3981
  if (!nextType) return;
3982
- const keyOptions = chunkYA2PXBP6_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[nextType] ?? [];
3982
+ const keyOptions = chunk5XODUPUE_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[nextType] ?? [];
3983
3983
  const hasCurrentKey = keyOptions.includes(value._key);
3984
3984
  const nextKey = hasCurrentKey ? value._key : keyOptions[0] ?? value._key;
3985
3985
  onChange({
@@ -3995,7 +3995,7 @@ function Category({ label = "Primary" }) {
3995
3995
  }
3996
3996
  function Key({ label = "Key" }) {
3997
3997
  const { value, onChange } = useKeyBindContext();
3998
- const keyOptions = chunkYA2PXBP6_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[value._type] ?? [];
3998
+ const keyOptions = chunk5XODUPUE_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[value._type] ?? [];
3999
3999
  if (keyOptions.length === 0) {
4000
4000
  return /* @__PURE__ */ jsxRuntime.jsx(
4001
4001
  core.TextInput,
@@ -4033,13 +4033,13 @@ var FiveMKeyBindInput = Object.assign(Root, {
4033
4033
  function buildGroupedData(extraIds = []) {
4034
4034
  const groups = /* @__PURE__ */ new Map();
4035
4035
  const seen = /* @__PURE__ */ new Set();
4036
- for (const c of chunkYA2PXBP6_cjs.GTA_CONTROLS) {
4036
+ for (const c of chunk5XODUPUE_cjs.GTA_CONTROLS) {
4037
4037
  if (seen.has(c.id)) continue;
4038
4038
  seen.add(c.id);
4039
4039
  if (!groups.has(c.group)) groups.set(c.group, []);
4040
4040
  groups.get(c.group).push(c);
4041
4041
  }
4042
- const data = chunkYA2PXBP6_cjs.GTA_CONTROL_GROUP_ORDER.flatMap((g) => {
4042
+ const data = chunk5XODUPUE_cjs.GTA_CONTROL_GROUP_ORDER.flatMap((g) => {
4043
4043
  const items = groups.get(g);
4044
4044
  if (!items || items.length === 0) return [];
4045
4045
  return [
@@ -4047,12 +4047,12 @@ function buildGroupedData(extraIds = []) {
4047
4047
  group: g,
4048
4048
  items: items.map((c) => ({
4049
4049
  value: String(c.id),
4050
- label: chunkYA2PXBP6_cjs.formatGtaControl(c.id)
4050
+ label: chunk5XODUPUE_cjs.formatGtaControl(c.id)
4051
4051
  }))
4052
4052
  }
4053
4053
  ];
4054
4054
  });
4055
- const knownIds = new Set(chunkYA2PXBP6_cjs.GTA_CONTROLS.map((c) => c.id));
4055
+ const knownIds = new Set(chunk5XODUPUE_cjs.GTA_CONTROLS.map((c) => c.id));
4056
4056
  const customs = extraIds.filter((id) => !knownIds.has(id));
4057
4057
  if (customs.length > 0) {
4058
4058
  data.push({
@@ -4161,7 +4161,7 @@ function AsyncSaveButton({
4161
4161
  function AdminPageTitle(props) {
4162
4162
  return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: "xs", children: [
4163
4163
  /* @__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: chunkYA2PXBP6_cjs.locale(props.title) })
4164
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", tt: "uppercase", lts: "0.1em", size: "sm", c: "rgba(255,255,255,0.6)", children: chunk5XODUPUE_cjs.locale(props.title) })
4165
4165
  ] });
4166
4166
  }
4167
4167
  function SwitchPanel({
@@ -4261,7 +4261,7 @@ function TestBed({
4261
4261
  const itemsRef = react.useRef(items);
4262
4262
  itemsRef.current = items;
4263
4263
  react.useEffect(() => {
4264
- if (!chunkYA2PXBP6_cjs.isEnvBrowser() || disablePersistence) return;
4264
+ if (!chunk5XODUPUE_cjs.isEnvBrowser() || disablePersistence) return;
4265
4265
  const persisted = loadPersistedState(storageKey);
4266
4266
  itemsRef.current.forEach((item) => {
4267
4267
  const persistedValue = persisted[item.key];
@@ -4270,7 +4270,7 @@ function TestBed({
4270
4270
  }
4271
4271
  });
4272
4272
  }, []);
4273
- if (!chunkYA2PXBP6_cjs.isEnvBrowser()) return null;
4273
+ if (!chunk5XODUPUE_cjs.isEnvBrowser()) return null;
4274
4274
  const toggle = (item) => {
4275
4275
  const next = !item.active;
4276
4276
  item.onToggle(next);
@@ -4417,14 +4417,14 @@ function ThemeOverrideSection({
4417
4417
  }) {
4418
4418
  const mantineTheme = core.useMantineTheme();
4419
4419
  const color = mantineTheme.colors[mantineTheme.primaryColor][5];
4420
- const raw = chunkE2SFEBBB_cjs.useFormField(schemaKey);
4420
+ const raw = chunkHOVRS2Z6_cjs.useFormField(schemaKey);
4421
4421
  const value = {
4422
- useOverride: raw?.useOverride ?? chunkYA2PXBP6_cjs.defaultThemeOverride.useOverride,
4423
- primaryColor: raw?.primaryColor ?? chunkYA2PXBP6_cjs.defaultThemeOverride.primaryColor,
4424
- primaryShade: raw?.primaryShade ?? chunkYA2PXBP6_cjs.defaultThemeOverride.primaryShade,
4425
- customTheme: Array.isArray(raw?.customTheme) && raw.customTheme.length === 10 ? raw.customTheme : chunkYA2PXBP6_cjs.defaultThemeOverride.customTheme
4422
+ useOverride: raw?.useOverride ?? chunk5XODUPUE_cjs.defaultThemeOverride.useOverride,
4423
+ primaryColor: raw?.primaryColor ?? chunk5XODUPUE_cjs.defaultThemeOverride.primaryColor,
4424
+ primaryShade: raw?.primaryShade ?? chunk5XODUPUE_cjs.defaultThemeOverride.primaryShade,
4425
+ customTheme: Array.isArray(raw?.customTheme) && raw.customTheme.length === 10 ? raw.customTheme : chunk5XODUPUE_cjs.defaultThemeOverride.customTheme
4426
4426
  };
4427
- const { setValue } = chunkE2SFEBBB_cjs.useFormActions();
4427
+ const { setValue } = chunkHOVRS2Z6_cjs.useFormActions();
4428
4428
  const set = (key, val) => setValue(schemaKey, { ...value, [key]: val });
4429
4429
  const useCustom = value.primaryColor === "custom";
4430
4430
  const editable = value.useOverride;
@@ -4440,7 +4440,7 @@ function ThemeOverrideSection({
4440
4440
  } catch {
4441
4441
  }
4442
4442
  };
4443
- const resetPalette = () => set("customTheme", chunkYA2PXBP6_cjs.DEFAULT_PALETTE);
4443
+ const resetPalette = () => set("customTheme", chunk5XODUPUE_cjs.DEFAULT_PALETTE);
4444
4444
  return /* @__PURE__ */ jsxRuntime.jsxs(
4445
4445
  core.Flex,
4446
4446
  {
@@ -4453,15 +4453,15 @@ function ThemeOverrideSection({
4453
4453
  AdminPageTitle,
4454
4454
  {
4455
4455
  icon: lucideReact.Palette,
4456
- title: title || chunkYA2PXBP6_cjs.locale("Theme") || "Theme",
4456
+ title: title || chunk5XODUPUE_cjs.locale("Theme") || "Theme",
4457
4457
  color
4458
4458
  }
4459
4459
  ),
4460
4460
  /* @__PURE__ */ jsxRuntime.jsx(
4461
4461
  SwitchPanel,
4462
4462
  {
4463
- label: chunkYA2PXBP6_cjs.locale("OverrideGlobalTheme") || "Override global theme",
4464
- description: chunkYA2PXBP6_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.",
4463
+ label: chunk5XODUPUE_cjs.locale("OverrideGlobalTheme") || "Override global theme",
4464
+ description: chunk5XODUPUE_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
4465
  checked: value.useOverride,
4466
4466
  onChange: (v) => set("useOverride", v)
4467
4467
  }
@@ -4475,11 +4475,11 @@ function ThemeOverrideSection({
4475
4475
  transition: "opacity 0.15s"
4476
4476
  },
4477
4477
  children: [
4478
- /* @__PURE__ */ jsxRuntime.jsx(GroupLabel, { label: chunkYA2PXBP6_cjs.locale("PrimaryColor") || "Primary Colour" }),
4478
+ /* @__PURE__ */ jsxRuntime.jsx(GroupLabel, { label: chunk5XODUPUE_cjs.locale("PrimaryColor") || "Primary Colour" }),
4479
4479
  /* @__PURE__ */ jsxRuntime.jsx(
4480
4480
  core.Switch,
4481
4481
  {
4482
- label: chunkYA2PXBP6_cjs.locale("UseCustomPalette") || "Use custom palette",
4482
+ label: chunk5XODUPUE_cjs.locale("UseCustomPalette") || "Use custom palette",
4483
4483
  size: "md",
4484
4484
  mt: "xs",
4485
4485
  checked: useCustom,
@@ -4499,7 +4499,7 @@ function ThemeOverrideSection({
4499
4499
  !useCustom && /* @__PURE__ */ jsxRuntime.jsx(
4500
4500
  core.Select,
4501
4501
  {
4502
- label: chunkYA2PXBP6_cjs.locale("MantinePalette") || "Mantine palette",
4502
+ label: chunk5XODUPUE_cjs.locale("MantinePalette") || "Mantine palette",
4503
4503
  size: "xs",
4504
4504
  style: { flex: 1 },
4505
4505
  value: value.primaryColor,
@@ -4511,7 +4511,7 @@ function ThemeOverrideSection({
4511
4511
  /* @__PURE__ */ jsxRuntime.jsx(
4512
4512
  core.NumberInput,
4513
4513
  {
4514
- label: chunkYA2PXBP6_cjs.locale("Shade") || "Shade",
4514
+ label: chunk5XODUPUE_cjs.locale("Shade") || "Shade",
4515
4515
  size: "xs",
4516
4516
  style: { flex: 1 },
4517
4517
  min: 0,
@@ -4531,7 +4531,7 @@ function ThemeOverrideSection({
4531
4531
  tt: "uppercase",
4532
4532
  lts: "0.07em",
4533
4533
  c: "rgba(255,255,255,0.2)",
4534
- children: chunkYA2PXBP6_cjs.locale("CustomPalette") || "Custom palette"
4534
+ children: chunk5XODUPUE_cjs.locale("CustomPalette") || "Custom palette"
4535
4535
  }
4536
4536
  ),
4537
4537
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4540,7 +4540,7 @@ function ThemeOverrideSection({
4540
4540
  size: "sm",
4541
4541
  variant: "subtle",
4542
4542
  onClick: resetPalette,
4543
- title: chunkYA2PXBP6_cjs.locale("ResetPalette") || "Reset palette",
4543
+ title: chunk5XODUPUE_cjs.locale("ResetPalette") || "Reset palette",
4544
4544
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: "1.4vh" })
4545
4545
  }
4546
4546
  )
@@ -4548,7 +4548,7 @@ function ThemeOverrideSection({
4548
4548
  /* @__PURE__ */ jsxRuntime.jsx(
4549
4549
  core.ColorInput,
4550
4550
  {
4551
- label: chunkYA2PXBP6_cjs.locale("BaseColor") || "Base colour",
4551
+ label: chunk5XODUPUE_cjs.locale("BaseColor") || "Base colour",
4552
4552
  size: "xs",
4553
4553
  value: value.customTheme[value.primaryShade] ?? value.customTheme[5] ?? "#000000",
4554
4554
  onChange: generateFromBase,
@@ -4650,7 +4650,7 @@ function PlayerSelect({
4650
4650
  const color = theme.colors[theme.primaryColor][5];
4651
4651
  const [searchInput, setSearchInput] = react.useState("");
4652
4652
  const [debouncedSearch, setDebouncedSearch] = react.useState("");
4653
- const { players, isFetching, refresh } = chunkE2SFEBBB_cjs.usePlayers({
4653
+ const { players, isFetching, refresh } = chunkHOVRS2Z6_cjs.usePlayers({
4654
4654
  includeOffline,
4655
4655
  search: includeOffline ? debouncedSearch : void 0,
4656
4656
  limit
@@ -4759,7 +4759,7 @@ function formatLabel(p) {
4759
4759
  }
4760
4760
  var COMMON_ACE_GROUPS = ["group.admin", "group.mod", "group.superadmin"];
4761
4761
  var t = (key, fallback) => {
4762
- const v = chunkYA2PXBP6_cjs.locale(key);
4762
+ const v = chunk5XODUPUE_cjs.locale(key);
4763
4763
  return v === key ? fallback : v;
4764
4764
  };
4765
4765
  var DEFAULT_VALUE = {
@@ -4784,12 +4784,12 @@ function AccessOverrideSection({
4784
4784
  }) {
4785
4785
  const mantineTheme = core.useMantineTheme();
4786
4786
  const color = mantineTheme.colors[mantineTheme.primaryColor][5];
4787
- const raw = chunkE2SFEBBB_cjs.useFormField(schemaKey);
4787
+ const raw = chunkHOVRS2Z6_cjs.useFormField(schemaKey);
4788
4788
  const value = {
4789
4789
  groups: Array.isArray(raw?.groups) ? raw.groups : DEFAULT_VALUE.groups,
4790
4790
  identifiers: Array.isArray(raw?.identifiers) ? raw.identifiers : DEFAULT_VALUE.identifiers
4791
4791
  };
4792
- const { setValue } = chunkE2SFEBBB_cjs.useFormActions();
4792
+ const { setValue } = chunkHOVRS2Z6_cjs.useFormActions();
4793
4793
  const set = (key, val) => setValue(schemaKey, { ...value, [key]: val });
4794
4794
  const [addingGroup, setAddingGroup] = react.useState(false);
4795
4795
  const [addingPlayer, setAddingPlayer] = react.useState(false);
@@ -5661,7 +5661,7 @@ function ScenarioSelect({
5661
5661
  );
5662
5662
  }
5663
5663
  var t2 = (key, fallback) => {
5664
- const v = chunkYA2PXBP6_cjs.locale(key);
5664
+ const v = chunk5XODUPUE_cjs.locale(key);
5665
5665
  return v === key ? fallback : v;
5666
5666
  };
5667
5667
  function decimalToHex(color) {
@@ -5697,7 +5697,7 @@ function DiscordRoleSelect(props) {
5697
5697
  const refresh = async () => {
5698
5698
  setLoading(true);
5699
5699
  try {
5700
- const res = await chunkYA2PXBP6_cjs.fetchNui(endpoint, {}, {
5700
+ const res = await chunk5XODUPUE_cjs.fetchNui(endpoint, {}, {
5701
5701
  // Browser dev fallback so the component renders something useful
5702
5702
  // outside FiveM.
5703
5703
  ok: true,
@@ -5846,7 +5846,7 @@ function DiscordRoleSelect(props) {
5846
5846
  );
5847
5847
  }
5848
5848
  var t3 = (key, fallback) => {
5849
- const v = chunkYA2PXBP6_cjs.locale(key);
5849
+ const v = chunk5XODUPUE_cjs.locale(key);
5850
5850
  return v === key ? fallback : v;
5851
5851
  };
5852
5852
  var FRAMEWORK_HINTS = {
@@ -5894,7 +5894,7 @@ function AccountSelect(props) {
5894
5894
  const refresh = async () => {
5895
5895
  setLoading(true);
5896
5896
  try {
5897
- const res = await chunkYA2PXBP6_cjs.fetchNui(endpoint, {}, {
5897
+ const res = await chunk5XODUPUE_cjs.fetchNui(endpoint, {}, {
5898
5898
  // Browser dev fallback. Shows a recognisable ESX-style list.
5899
5899
  ok: true,
5900
5900
  framework: "es_extended",
@@ -6204,24 +6204,24 @@ function WorldPositionSetButton2({
6204
6204
  }) {
6205
6205
  const theme = core.useMantineTheme();
6206
6206
  const color = theme.colors[theme.primaryColor][5];
6207
- const begin = chunkQOQQ3ERZ_cjs.useAdminToolStore((s) => s.begin);
6207
+ const begin = chunkEOSHBZQK_cjs.useAdminToolStore((s) => s.begin);
6208
6208
  const onClick = async () => {
6209
6209
  const instructions = {
6210
- title: chunkYA2PXBP6_cjs.locale("PickPositionTitle") || "Pick Position",
6211
- hint: chunkYA2PXBP6_cjs.locale("PickPositionHint") || "Walk to where you want this set",
6210
+ title: chunk5XODUPUE_cjs.locale("PickPositionTitle") || "Pick Position",
6211
+ hint: chunk5XODUPUE_cjs.locale("PickPositionHint") || "Walk to where you want this set",
6212
6212
  keys: [
6213
- { key: "E", action: chunkYA2PXBP6_cjs.locale("Set") || "Set" },
6214
- { key: "\u232B", action: chunkYA2PXBP6_cjs.locale("Cancel") || "Cancel" }
6213
+ { key: "E", action: chunk5XODUPUE_cjs.locale("Set") || "Set" },
6214
+ { key: "\u232B", action: chunk5XODUPUE_cjs.locale("Cancel") || "Cancel" }
6215
6215
  ]
6216
6216
  };
6217
6217
  const pendingResult = begin({ id: "capturePosition", ...instructions });
6218
- chunkYA2PXBP6_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "capturePosition", instructions }).catch(() => {
6219
- chunkQOQQ3ERZ_cjs.useAdminToolStore.getState().cancelActive();
6218
+ chunk5XODUPUE_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "capturePosition", instructions }).catch(() => {
6219
+ chunkEOSHBZQK_cjs.useAdminToolStore.getState().cancelActive();
6220
6220
  });
6221
6221
  const result = await pendingResult;
6222
6222
  if (result) onChange(result);
6223
6223
  };
6224
- return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunkYA2PXBP6_cjs.locale("SetWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
6224
+ return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunk5XODUPUE_cjs.locale("SetWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
6225
6225
  framerMotion.motion.button,
6226
6226
  {
6227
6227
  onClick,
@@ -6239,7 +6239,7 @@ function WorldPositionSetButton2({
6239
6239
  },
6240
6240
  children: [
6241
6241
  /* @__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: chunkYA2PXBP6_cjs.locale("Set") })
6242
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: chunk5XODUPUE_cjs.locale("Set") })
6243
6243
  ]
6244
6244
  }
6245
6245
  ) });
@@ -6251,10 +6251,10 @@ function WorldPositionGotoButton2({
6251
6251
  const theme = core.useMantineTheme();
6252
6252
  const color = theme.colors[theme.primaryColor][5];
6253
6253
  const onClick = () => {
6254
- chunkYA2PXBP6_cjs.fetchNui("ADMIN_TOOL_INVOKE", { id: "gotoCoord", value }).catch(() => {
6254
+ chunk5XODUPUE_cjs.fetchNui("ADMIN_TOOL_INVOKE", { id: "gotoCoord", value }).catch(() => {
6255
6255
  });
6256
6256
  };
6257
- return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunkYA2PXBP6_cjs.locale("GotoWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
6257
+ return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunk5XODUPUE_cjs.locale("GotoWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
6258
6258
  framerMotion.motion.button,
6259
6259
  {
6260
6260
  onClick,
@@ -6272,26 +6272,26 @@ function WorldPositionGotoButton2({
6272
6272
  },
6273
6273
  children: [
6274
6274
  /* @__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: chunkYA2PXBP6_cjs.locale("Goto") })
6275
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: chunk5XODUPUE_cjs.locale("Goto") })
6276
6276
  ]
6277
6277
  }
6278
6278
  ) });
6279
6279
  }
6280
6280
  function usePickDoor() {
6281
- const begin = chunkQOQQ3ERZ_cjs.useAdminToolStore((s) => s.begin);
6281
+ const begin = chunkEOSHBZQK_cjs.useAdminToolStore((s) => s.begin);
6282
6282
  return async () => {
6283
6283
  const pending = begin({
6284
6284
  id: "pickDoor",
6285
- title: chunkYA2PXBP6_cjs.locale("PickDoorTitle"),
6286
- hint: chunkYA2PXBP6_cjs.locale("PickDoorHint"),
6285
+ title: chunk5XODUPUE_cjs.locale("PickDoorTitle"),
6286
+ hint: chunk5XODUPUE_cjs.locale("PickDoorHint"),
6287
6287
  keys: [
6288
- { key: "LMB", action: chunkYA2PXBP6_cjs.locale("Toggle") },
6289
- { key: "E", action: chunkYA2PXBP6_cjs.locale("Confirm") },
6290
- { key: "BACKSPACE", action: chunkYA2PXBP6_cjs.locale("Cancel") }
6288
+ { key: "LMB", action: chunk5XODUPUE_cjs.locale("Toggle") },
6289
+ { key: "E", action: chunk5XODUPUE_cjs.locale("Confirm") },
6290
+ { key: "BACKSPACE", action: chunk5XODUPUE_cjs.locale("Cancel") }
6291
6291
  ]
6292
6292
  });
6293
- chunkYA2PXBP6_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "pickDoor" }).catch(() => {
6294
- chunkQOQQ3ERZ_cjs.useAdminToolStore.getState().cancelActive();
6293
+ chunk5XODUPUE_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "pickDoor" }).catch(() => {
6294
+ chunkEOSHBZQK_cjs.useAdminToolStore.getState().cancelActive();
6295
6295
  });
6296
6296
  return await pending;
6297
6297
  };
@@ -6312,7 +6312,7 @@ function DoorPickerButton({
6312
6312
  return /* @__PURE__ */ jsxRuntime.jsx(
6313
6313
  core.Tooltip,
6314
6314
  {
6315
- label: tooltip ?? chunkYA2PXBP6_cjs.locale("PickDoorTooltip"),
6315
+ label: tooltip ?? chunk5XODUPUE_cjs.locale("PickDoorTooltip"),
6316
6316
  position: "top",
6317
6317
  withArrow: true,
6318
6318
  withinPortal: true,
@@ -6335,7 +6335,7 @@ function DoorPickerButton({
6335
6335
  },
6336
6336
  children: [
6337
6337
  /* @__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 ?? chunkYA2PXBP6_cjs.locale("PickDoor") })
6338
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: label ?? chunk5XODUPUE_cjs.locale("PickDoor") })
6339
6339
  ]
6340
6340
  }
6341
6341
  )
@@ -6345,7 +6345,7 @@ function DoorPickerButton({
6345
6345
  var MapImpl = react.memo(({
6346
6346
  children,
6347
6347
  initialZoom = 2,
6348
- initialCenter = chunkYA2PXBP6_cjs.gameToMap(0, 0),
6348
+ initialCenter = chunk5XODUPUE_cjs.gameToMap(0, 0),
6349
6349
  mapStyle = "game"
6350
6350
  }) => {
6351
6351
  const mapRef = react.useRef(null);
@@ -6468,7 +6468,7 @@ function BlipMarker({
6468
6468
  fallbackColor = DEFAULT_COLOR
6469
6469
  }) {
6470
6470
  const [hovered, setHovered] = react.useState(false);
6471
- const mapCoords = react.useMemo(() => chunkYA2PXBP6_cjs.gameToMap(position.x, position.y), [position.x, position.y]);
6471
+ const mapCoords = react.useMemo(() => chunk5XODUPUE_cjs.gameToMap(position.x, position.y), [position.x, position.y]);
6472
6472
  const effectiveSprite = sprite ?? fallbackSprite;
6473
6473
  const effectiveColor = color ?? fallbackColor;
6474
6474
  const url = blipUrlForSprite(effectiveSprite);
@@ -6562,15 +6562,15 @@ function ModelSelect({
6562
6562
  style,
6563
6563
  limit = 100
6564
6564
  }) {
6565
- const models = chunkYA2PXBP6_cjs.useModels((s) => s.models);
6565
+ const models = chunk5XODUPUE_cjs.useModels((s) => s.models);
6566
6566
  react.useEffect(() => {
6567
- chunkYA2PXBP6_cjs.loadModels();
6567
+ chunk5XODUPUE_cjs.loadModels();
6568
6568
  }, []);
6569
6569
  return /* @__PURE__ */ jsxRuntime.jsx(
6570
6570
  core.Autocomplete,
6571
6571
  {
6572
6572
  label,
6573
- placeholder: placeholder ?? (chunkYA2PXBP6_cjs.locale("SearchModel") || "Search or type a model\u2026"),
6573
+ placeholder: placeholder ?? (chunk5XODUPUE_cjs.locale("SearchModel") || "Search or type a model\u2026"),
6574
6574
  size,
6575
6575
  disabled,
6576
6576
  style,
@@ -6590,9 +6590,9 @@ function VehicleSelect({
6590
6590
  style,
6591
6591
  limit = 100
6592
6592
  }) {
6593
- const vehicles = chunkYA2PXBP6_cjs.useVehicles((s) => s.vehicles);
6593
+ const vehicles = chunk5XODUPUE_cjs.useVehicles((s) => s.vehicles);
6594
6594
  react.useEffect(() => {
6595
- chunkYA2PXBP6_cjs.ensureVehicles();
6595
+ chunk5XODUPUE_cjs.ensureVehicles();
6596
6596
  }, []);
6597
6597
  const data = vehicles.map((v) => ({ value: v.model, label: v.name ? `${v.name} (${v.model})` : v.model }));
6598
6598
  const extra = value && !vehicles.some((v) => v.model === value) ? [{ value, label: value }] : [];
@@ -6603,7 +6603,7 @@ function VehicleSelect({
6603
6603
  size,
6604
6604
  disabled,
6605
6605
  style,
6606
- placeholder: chunkYA2PXBP6_cjs.locale("SearchVehicle") || "Search a vehicle\u2026",
6606
+ placeholder: chunk5XODUPUE_cjs.locale("SearchVehicle") || "Search a vehicle\u2026",
6607
6607
  data: [...extra, ...data],
6608
6608
  value: value ?? null,
6609
6609
  searchable: true,
@@ -6621,9 +6621,9 @@ function CategorySelect({
6621
6621
  disabled,
6622
6622
  style
6623
6623
  }) {
6624
- const categories = chunkYA2PXBP6_cjs.useVehicles((s) => s.categories);
6624
+ const categories = chunk5XODUPUE_cjs.useVehicles((s) => s.categories);
6625
6625
  react.useEffect(() => {
6626
- chunkYA2PXBP6_cjs.ensureVehicles();
6626
+ chunk5XODUPUE_cjs.ensureVehicles();
6627
6627
  }, []);
6628
6628
  const opts = Array.from(/* @__PURE__ */ new Set([...value ?? [], ...categories])).sort();
6629
6629
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -6633,7 +6633,7 @@ function CategorySelect({
6633
6633
  size,
6634
6634
  disabled,
6635
6635
  style,
6636
- placeholder: chunkYA2PXBP6_cjs.locale("SelectCategories") || "Select categories\u2026",
6636
+ placeholder: chunk5XODUPUE_cjs.locale("SelectCategories") || "Select categories\u2026",
6637
6637
  data: opts,
6638
6638
  value: value ?? [],
6639
6639
  searchable: true,
@@ -6713,5 +6713,5 @@ exports.useModalActions = useModalActions;
6713
6713
  exports.useNavigation = useNavigation;
6714
6714
  exports.useNavigationStore = useNavigationStore;
6715
6715
  exports.usePickDoor = usePickDoor;
6716
- //# sourceMappingURL=chunk-K3GDU6EY.cjs.map
6717
- //# sourceMappingURL=chunk-K3GDU6EY.cjs.map
6716
+ //# sourceMappingURL=chunk-HG2J72NC.cjs.map
6717
+ //# sourceMappingURL=chunk-HG2J72NC.cjs.map