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.
Files changed (43) hide show
  1. package/dist/{chunk-E2SFEBBB.cjs → chunk-7EICODPM.cjs} +4 -4
  2. package/dist/{chunk-E2SFEBBB.cjs.map → chunk-7EICODPM.cjs.map} +1 -1
  3. package/dist/{chunk-MYNNCLMA.js → chunk-BXP4HEYF.js} +334 -43
  4. package/dist/chunk-BXP4HEYF.js.map +1 -0
  5. package/dist/{chunk-KGLO3ZAS.js → chunk-F6EV4VBH.js} +3 -3
  6. package/dist/{chunk-KGLO3ZAS.js.map → chunk-F6EV4VBH.js.map} +1 -1
  7. package/dist/{chunk-K3GDU6EY.cjs → chunk-I4YJBITG.cjs} +298 -256
  8. package/dist/chunk-I4YJBITG.cjs.map +1 -0
  9. package/dist/{chunk-VKYONY7E.cjs → chunk-J5VNINGK.cjs} +5 -5
  10. package/dist/{chunk-VKYONY7E.cjs.map → chunk-J5VNINGK.cjs.map} +1 -1
  11. package/dist/{chunk-YA2PXBP6.cjs → chunk-JIBWKY7H.cjs} +334 -43
  12. package/dist/chunk-JIBWKY7H.cjs.map +1 -0
  13. package/dist/{chunk-ZPFW7C2A.js → chunk-JQHQYPEL.js} +3 -3
  14. package/dist/{chunk-ZPFW7C2A.js.map → chunk-JQHQYPEL.js.map} +1 -1
  15. package/dist/{chunk-3T2CCW5E.cjs → chunk-K64EX3U2.cjs} +9 -9
  16. package/dist/{chunk-3T2CCW5E.cjs.map → chunk-K64EX3U2.cjs.map} +1 -1
  17. package/dist/{chunk-HAB6H274.js → chunk-M5NZAOYQ.js} +145 -103
  18. package/dist/chunk-M5NZAOYQ.js.map +1 -0
  19. package/dist/{chunk-Z7N5AQJW.js → chunk-M7H4JKEL.js} +3 -3
  20. package/dist/{chunk-Z7N5AQJW.js.map → chunk-M7H4JKEL.js.map} +1 -1
  21. package/dist/{chunk-QOQQ3ERZ.cjs → chunk-NBLBFWZQ.cjs} +18 -17
  22. package/dist/chunk-NBLBFWZQ.cjs.map +1 -0
  23. package/dist/{chunk-NVMOGS7Y.js → chunk-Y25C6YMN.js} +5 -5
  24. package/dist/chunk-Y25C6YMN.js.map +1 -0
  25. package/dist/components/index.cjs +76 -76
  26. package/dist/components/index.d.cts +1 -5
  27. package/dist/components/index.d.ts +1 -5
  28. package/dist/components/index.js +5 -5
  29. package/dist/hooks/index.cjs +22 -22
  30. package/dist/hooks/index.js +4 -4
  31. package/dist/index.cjs +147 -147
  32. package/dist/index.js +6 -6
  33. package/dist/providers/index.cjs +5 -5
  34. package/dist/providers/index.js +3 -3
  35. package/dist/utils/index.cjs +48 -48
  36. package/dist/utils/index.js +1 -1
  37. package/package.json +123 -123
  38. package/dist/chunk-HAB6H274.js.map +0 -1
  39. package/dist/chunk-K3GDU6EY.cjs.map +0 -1
  40. package/dist/chunk-MYNNCLMA.js.map +0 -1
  41. package/dist/chunk-NVMOGS7Y.js.map +0 -1
  42. package/dist/chunk-QOQQ3ERZ.cjs.map +0 -1
  43. 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 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 ${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 ${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: chunkYA2PXBP6_cjs.colorWithAlpha(props.color ? props.color : theme.colors[theme.primaryColor][theme.primaryShade], props.hovered ? 0.9 : 0.9),
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 = chunkE2SFEBBB_cjs.useAudio((state) => state.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 ? 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 ? 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 = chunkYA2PXBP6_cjs.useSettings((state) => state.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 || chunkYA2PXBP6_cjs.colorWithAlpha(theme.colors[theme.primaryColor][9], 0.5)}`
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: chunkYA2PXBP6_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.9) }],
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: chunkYA2PXBP6_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.9),
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 ${chunkYA2PXBP6_cjs.colorWithAlpha(props.color || theme.colors[theme.primaryColor][theme.primaryShade], 0.7)}`
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 || chunkYA2PXBP6_cjs.locale("Level")
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
- chunkYA2PXBP6_cjs.locale("EXP")
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 TABS = [
2515
- { id: "ox", label: "ox_inventory" },
2516
- { id: "qb", label: "qb-inventory" },
2517
- { id: "esx", label: "ESX legacy SQL" }
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 chunkYA2PXBP6_cjs.fetchNui("GET_MISSING_ITEMS", void 0, {
2534
+ const res = await chunkJIBWKY7H_cjs.fetchNui("GET_MISSING_ITEMS", void 0, {
2528
2535
  success: true,
2529
- data: { missing: [], snippets: { ox: "", qb: "", esx: "" } }
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 [activeTab, setActiveTab] = react.useState("ox");
2551
- const [hoveredTab, setHoveredTab] = react.useState(null);
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 handleCopy = react.useCallback((tab) => {
2557
- if (!audit) return;
2558
- const text = audit.snippets[tab] ?? "";
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(tab);
2561
- setTimeout(() => setCopied((c) => c === tab ? null : c), 1500);
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.jsx(core.Flex, { gap: "0", style: { borderBottom: `0.1vh solid ${core.alpha(warnColor, 0.18)}` }, children: TABS.map((tab) => {
2637
- const active = tab.id === activeTab;
2638
- const hovered = hoveredTab === tab.id;
2639
- let bg = "transparent";
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
- onClick: (e) => {
2646
- e.stopPropagation();
2647
- setActiveTab(tab.id);
2648
- },
2649
- onMouseEnter: () => setHoveredTab(tab.id),
2650
- onMouseLeave: () => setHoveredTab((h) => h === tab.id ? null : h),
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
- children: tab.label
2666
- },
2667
- tab.id
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[activeTab] ?? "",
2674
- copied: copied === activeTab,
2681
+ code: active && audit.snippets[active] || "",
2682
+ copied,
2675
2683
  onCopy: (e) => {
2676
2684
  e.stopPropagation();
2677
- handleCopy(activeTab);
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 = chunkE2SFEBBB_cjs.useForm();
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: chunkYA2PXBP6_cjs.locale("cfgpanel_json_title"), icon: lucideReact.Code2, iconColor: color, onClose, width: "60vh", maxHeight: "80vh", zIndex: 200, children: [
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: chunkYA2PXBP6_cjs.locale("cfgpanel_cancel") })
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: chunkYA2PXBP6_cjs.locale("cfgpanel_apply") })
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 } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
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: chunkYA2PXBP6_cjs.locale("cfgpanel_history_title"), icon: lucideReact.History, iconColor: color, onClose, width: "88vh", maxHeight: "82vh", zIndex: 260, children: [
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: chunkYA2PXBP6_cjs.locale("cfgpanel_close") })
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 } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3078
- const form = chunkE2SFEBBB_cjs.useForm();
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 = chunkYA2PXBP6_cjs.useSettings((s) => s.resourceVersion);
3082
- const [activeTab, setActiveTab] = chunkE2SFEBBB_cjs.useAdminState("__dirkConfigPanel:activeTab", navItems[0]?.id ?? "");
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 = () => chunkYA2PXBP6_cjs.fetchNui("CONFIG_PANEL_BACK");
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: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_title"),
3118
- description: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_desc"),
3119
- confirmLabel: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_confirm"),
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 } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3158
+ const { store } = chunkK64EX3U2_cjs.getScriptConfigInstance();
3126
3159
  form.reinitialize(cloneConfig(store.getState()));
3127
3160
  notifications.notifications.show({
3128
3161
  color: "green",
3129
- title: chunkYA2PXBP6_cjs.locale("ConfigResetSuccessTitle"),
3130
- message: chunkYA2PXBP6_cjs.locale("ConfigResetSuccessBody"),
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: chunkYA2PXBP6_cjs.locale("ConfigResetFailedTitle"),
3140
- message: chunkYA2PXBP6_cjs.locale("ConfigResetFailedBody", err),
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: 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"),
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: chunkYA2PXBP6_cjs.locale("cfgpanel_back_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: chunkYA2PXBP6_cjs.locale("cfgpanel_undo"),
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: chunkYA2PXBP6_cjs.locale("cfgpanel_redo"),
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 ? chunkYA2PXBP6_cjs.locale("cfgpanel_saving") : isDirty ? `${chunkYA2PXBP6_cjs.locale("cfgpanel_save")} (${changedCount})` : chunkYA2PXBP6_cjs.locale("cfgpanel_save"),
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: chunkYA2PXBP6_cjs.locale("cfgpanel_history"),
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: chunkYA2PXBP6_cjs.locale("cfgpanel_discard") })
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: chunkYA2PXBP6_cjs.locale("cfgpanel_manual_edit") })
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: chunkYA2PXBP6_cjs.locale("cfgpanel_reset_defaults") })
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
- chunkYA2PXBP6_cjs.locale("cfgpanel_version"),
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 } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3339
- const { reinitialize } = chunkE2SFEBBB_cjs.useFormActions();
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 = () => chunkYA2PXBP6_cjs.fetchNui("CLOSE_ADMIN_SECTION");
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 } = chunk3T2CCW5E_cjs.getScriptConfigInstance();
3392
+ const { store, updateConfig } = chunkK64EX3U2_cjs.getScriptConfigInstance();
3356
3393
  const [isSaving, setIsSaving] = react.useState(false);
3357
3394
  if (!open) return null;
3358
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(
3359
- chunkE2SFEBBB_cjs.FormProvider,
3360
- {
3361
- initialValues: cloneConfig(store.getState()),
3362
- onSubmit: async (form) => {
3363
- if (isSaving) return;
3364
- setIsSaving(true);
3365
- try {
3366
- const result = await updateConfig(form.values, form.changedFields);
3367
- if (result?.success) {
3368
- form.reinitialize(cloneConfig(form.values));
3369
- chunkQOQQ3ERZ_cjs.dirkQueryClient.invalidateQueries({ queryKey: ["scriptConfigHistory"] });
3370
- useMissingItemsAudit.getState().refresh();
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: "green",
3373
- title: chunkYA2PXBP6_cjs.locale("ConfigSaveSuccessTitle"),
3374
- message: chunkYA2PXBP6_cjs.locale("ConfigSaveSuccessBody"),
3375
- autoClose: 3e3
3426
+ color: "red",
3427
+ title: chunkJIBWKY7H_cjs.locale(titleKey),
3428
+ message: chunkJIBWKY7H_cjs.locale(bodyKey, err),
3429
+ autoClose: 6e3
3376
3430
  });
3377
- return;
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 = chunkYA2PXBP6_cjs.useItems();
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 = chunkYA2PXBP6_cjs.useItemsList(props.excludeItemNames ?? []).filter((item) => {
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: `${chunkYA2PXBP6_cjs.locale("UseCustomItem")}: ${q}`, image: "" });
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: chunkYA2PXBP6_cjs.locale(props.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: chunkYA2PXBP6_cjs.locale("NoItemsFound"),
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: chunkYA2PXBP6_cjs.locale("ItemNotInInventory") })
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: chunkYA2PXBP6_cjs.locale("Missing") }) })
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
- chunkYA2PXBP6_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
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
- chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
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 chunkYA2PXBP6_cjs.fetchNui(fetchEvent, { relativeTo }, value);
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
- chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value: next, relativeTo }).catch(() => {
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 chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value, relativeTo }).catch(() => {
3609
+ await chunkJIBWKY7H_cjs.fetchNui(previewEvent, { value, relativeTo }).catch(() => {
3568
3610
  });
3569
3611
  } else {
3570
- await chunkYA2PXBP6_cjs.fetchNui(stopPreviewEvent, { relativeTo }).catch(() => {
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
- chunkYA2PXBP6_cjs.fetchNui(previewEvent, { value: ZERO, relativeTo }).catch(() => {
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: chunkYA2PXBP6_cjs.locale(label)
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
- chunkYA2PXBP6_cjs.locale("RelativeTo"),
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: chunkYA2PXBP6_cjs.locale(description) })
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: chunkYA2PXBP6_cjs.locale("GrabMyPosition"), onClick: grab, color, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: "1.4vh", color }) }),
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 ? chunkYA2PXBP6_cjs.locale("StopPreview") : chunkYA2PXBP6_cjs.locale("PreviewInWorld"),
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: chunkYA2PXBP6_cjs.locale("Reset"), onClick: reset, color: "#ef4444", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { size: "1.4vh", color: "#ef4444" }) })
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 chunkYA2PXBP6_cjs.fetchNui("GET_POSITION", {}, value);
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: chunkYA2PXBP6_cjs.locale("Set"),
3819
- tooltip: chunkYA2PXBP6_cjs.locale("SetWorldTooltip"),
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
- chunkYA2PXBP6_cjs.fetchNui("GOTO_POSITION", value).catch(() => {
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: chunkYA2PXBP6_cjs.locale("Goto"),
3841
- tooltip: chunkYA2PXBP6_cjs.locale("GotoWorldTooltip"),
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: chunkYA2PXBP6_cjs.locale("Delete"),
3858
- tooltip: chunkYA2PXBP6_cjs.locale("Delete"),
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 = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.jobs);
3883
- const gangs = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.gangs);
3924
+ const jobs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.jobs);
3925
+ const gangs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.gangs);
3884
3926
  react.useEffect(() => {
3885
- chunkYA2PXBP6_cjs.ensureFrameworkGroups();
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: 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 })) }
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 ?? (chunkYA2PXBP6_cjs.locale("SelectGroup") || "Select\u2026"),
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 = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.jobs);
3925
- const gangs = chunkYA2PXBP6_cjs.useFrameworkGroups((s) => s.gangs);
3966
+ const jobs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.jobs);
3967
+ const gangs = chunkJIBWKY7H_cjs.useFrameworkGroups((s) => s.gangs);
3926
3968
  react.useEffect(() => {
3927
- chunkYA2PXBP6_cjs.ensureFrameworkGroups();
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 ?? (chunkYA2PXBP6_cjs.locale("SelectGrade") || "Select grade\u2026"),
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: [...chunkYA2PXBP6_cjs.INPUT_MAPPER_PRIMARY_OPTIONS],
4021
+ data: [...chunkJIBWKY7H_cjs.INPUT_MAPPER_PRIMARY_OPTIONS],
3980
4022
  onChange: (nextType) => {
3981
4023
  if (!nextType) return;
3982
- const keyOptions = chunkYA2PXBP6_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[nextType] ?? [];
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 = chunkYA2PXBP6_cjs.INPUT_MAPPER_KEYS_BY_PRIMARY[value._type] ?? [];
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 chunkYA2PXBP6_cjs.GTA_CONTROLS) {
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 = chunkYA2PXBP6_cjs.GTA_CONTROL_GROUP_ORDER.flatMap((g) => {
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: chunkYA2PXBP6_cjs.formatGtaControl(c.id)
4092
+ label: chunkJIBWKY7H_cjs.formatGtaControl(c.id)
4051
4093
  }))
4052
4094
  }
4053
4095
  ];
4054
4096
  });
4055
- const knownIds = new Set(chunkYA2PXBP6_cjs.GTA_CONTROLS.map((c) => c.id));
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: chunkYA2PXBP6_cjs.locale(props.title) })
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 (!chunkYA2PXBP6_cjs.isEnvBrowser() || disablePersistence) return;
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 (!chunkYA2PXBP6_cjs.isEnvBrowser()) return null;
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 = chunkE2SFEBBB_cjs.useFormField(schemaKey);
4462
+ const raw = chunk7EICODPM_cjs.useFormField(schemaKey);
4421
4463
  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
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 } = chunkE2SFEBBB_cjs.useFormActions();
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", chunkYA2PXBP6_cjs.DEFAULT_PALETTE);
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 || chunkYA2PXBP6_cjs.locale("Theme") || "Theme",
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: 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.",
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: chunkYA2PXBP6_cjs.locale("PrimaryColor") || "Primary Colour" }),
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: chunkYA2PXBP6_cjs.locale("UseCustomPalette") || "Use custom palette",
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: chunkYA2PXBP6_cjs.locale("MantinePalette") || "Mantine palette",
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: chunkYA2PXBP6_cjs.locale("Shade") || "Shade",
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: chunkYA2PXBP6_cjs.locale("CustomPalette") || "Custom palette"
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: chunkYA2PXBP6_cjs.locale("ResetPalette") || "Reset palette",
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: chunkYA2PXBP6_cjs.locale("BaseColor") || "Base colour",
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 } = chunkE2SFEBBB_cjs.usePlayers({
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 = chunkYA2PXBP6_cjs.locale(key);
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 = chunkE2SFEBBB_cjs.useFormField(schemaKey);
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 } = chunkE2SFEBBB_cjs.useFormActions();
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 = chunkYA2PXBP6_cjs.locale(key);
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 chunkYA2PXBP6_cjs.fetchNui(endpoint, {}, {
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 = chunkYA2PXBP6_cjs.locale(key);
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 chunkYA2PXBP6_cjs.fetchNui(endpoint, {}, {
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 = chunkQOQQ3ERZ_cjs.useAdminToolStore((s) => s.begin);
6249
+ const begin = chunkNBLBFWZQ_cjs.useAdminToolStore((s) => s.begin);
6208
6250
  const onClick = async () => {
6209
6251
  const instructions = {
6210
- title: chunkYA2PXBP6_cjs.locale("PickPositionTitle") || "Pick Position",
6211
- hint: chunkYA2PXBP6_cjs.locale("PickPositionHint") || "Walk to where you want this set",
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: chunkYA2PXBP6_cjs.locale("Set") || "Set" },
6214
- { key: "\u232B", action: chunkYA2PXBP6_cjs.locale("Cancel") || "Cancel" }
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
- chunkYA2PXBP6_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "capturePosition", instructions }).catch(() => {
6219
- chunkQOQQ3ERZ_cjs.useAdminToolStore.getState().cancelActive();
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: chunkYA2PXBP6_cjs.locale("SetWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
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: chunkYA2PXBP6_cjs.locale("Set") })
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
- chunkYA2PXBP6_cjs.fetchNui("ADMIN_TOOL_INVOKE", { id: "gotoCoord", value }).catch(() => {
6296
+ chunkJIBWKY7H_cjs.fetchNui("ADMIN_TOOL_INVOKE", { id: "gotoCoord", value }).catch(() => {
6255
6297
  });
6256
6298
  };
6257
- return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: chunkYA2PXBP6_cjs.locale("GotoWorldTooltip"), position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
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: chunkYA2PXBP6_cjs.locale("Goto") })
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 = chunkQOQQ3ERZ_cjs.useAdminToolStore((s) => s.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: chunkYA2PXBP6_cjs.locale("PickDoorTitle"),
6286
- hint: chunkYA2PXBP6_cjs.locale("PickDoorHint"),
6327
+ title: chunkJIBWKY7H_cjs.locale("PickDoorTitle"),
6328
+ hint: chunkJIBWKY7H_cjs.locale("PickDoorHint"),
6287
6329
  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") }
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
- chunkYA2PXBP6_cjs.fetchNui("ADMIN_TOOL_BEGIN", { id: "pickDoor" }).catch(() => {
6294
- chunkQOQQ3ERZ_cjs.useAdminToolStore.getState().cancelActive();
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 ?? chunkYA2PXBP6_cjs.locale("PickDoorTooltip"),
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 ?? chunkYA2PXBP6_cjs.locale("PickDoor") })
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 = chunkYA2PXBP6_cjs.gameToMap(0, 0),
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(() => chunkYA2PXBP6_cjs.gameToMap(position.x, position.y), [position.x, position.y]);
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 = chunkYA2PXBP6_cjs.useModels((s) => s.models);
6607
+ const models = chunkJIBWKY7H_cjs.useModels((s) => s.models);
6566
6608
  react.useEffect(() => {
6567
- chunkYA2PXBP6_cjs.loadModels();
6609
+ chunkJIBWKY7H_cjs.loadModels();
6568
6610
  }, []);
6569
6611
  return /* @__PURE__ */ jsxRuntime.jsx(
6570
6612
  core.Autocomplete,
6571
6613
  {
6572
6614
  label,
6573
- placeholder: placeholder ?? (chunkYA2PXBP6_cjs.locale("SearchModel") || "Search or type a model\u2026"),
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 = chunkYA2PXBP6_cjs.useVehicles((s) => s.vehicles);
6635
+ const vehicles = chunkJIBWKY7H_cjs.useVehicles((s) => s.vehicles);
6594
6636
  react.useEffect(() => {
6595
- chunkYA2PXBP6_cjs.ensureVehicles();
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: chunkYA2PXBP6_cjs.locale("SearchVehicle") || "Search a vehicle\u2026",
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 = chunkYA2PXBP6_cjs.useVehicles((s) => s.categories);
6666
+ const categories = chunkJIBWKY7H_cjs.useVehicles((s) => s.categories);
6625
6667
  react.useEffect(() => {
6626
- chunkYA2PXBP6_cjs.ensureVehicles();
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: chunkYA2PXBP6_cjs.locale("SelectCategories") || "Select categories\u2026",
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-K3GDU6EY.cjs.map
6717
- //# sourceMappingURL=chunk-K3GDU6EY.cjs.map
6758
+ //# sourceMappingURL=chunk-I4YJBITG.cjs.map
6759
+ //# sourceMappingURL=chunk-I4YJBITG.cjs.map