dirk-cfx-react 1.1.69 → 1.1.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.cjs +166 -7
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +21 -1
- package/dist/components/index.d.ts +21 -1
- package/dist/components/index.js +163 -8
- package/dist/components/index.js.map +1 -1
- package/dist/index.cjs +166 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +163 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ var framerMotion = require('framer-motion');
|
|
|
9
9
|
var lucideReact = require('lucide-react');
|
|
10
10
|
var clickSoundUrl = require('../click_sound-PNCRRTM4.mp3');
|
|
11
11
|
var hoverSoundUrl = require('../hover_sound-NBUA222C.mp3');
|
|
12
|
+
var notifications = require('@mantine/notifications');
|
|
12
13
|
var reactQuery = require('@tanstack/react-query');
|
|
13
14
|
|
|
14
15
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -4082,12 +4083,25 @@ function ConfigPanel(props) {
|
|
|
4082
4083
|
if (result?.success) {
|
|
4083
4084
|
form.reinitialize(cloneConfig(form.values));
|
|
4084
4085
|
configPanelQueryClient.invalidateQueries({ queryKey: ["scriptConfigHistory"] });
|
|
4086
|
+
notifications.notifications.show({
|
|
4087
|
+
color: "green",
|
|
4088
|
+
title: locale("ConfigSaveSuccessTitle"),
|
|
4089
|
+
message: locale("ConfigSaveSuccessBody"),
|
|
4090
|
+
autoClose: 3e3
|
|
4091
|
+
});
|
|
4085
4092
|
return;
|
|
4086
4093
|
}
|
|
4087
4094
|
form.reinitialize(cloneConfig(store.getState()));
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
|
|
4095
|
+
const err = result?._error || "Unknown";
|
|
4096
|
+
console.warn(`[ConfigPanel] config save failed: ${err}`);
|
|
4097
|
+
const titleKey = err === "NoPermission" ? "ConfigSaveNoPermissionTitle" : err === "VersionConflict" ? "ConfigSaveVersionConflictTitle" : err === "NotReady" ? "ConfigSaveNotReadyTitle" : "ConfigSaveFailedTitle";
|
|
4098
|
+
const bodyKey = err === "NoPermission" ? "ConfigSaveNoPermissionBody" : err === "VersionConflict" ? "ConfigSaveVersionConflictBody" : err === "NotReady" ? "ConfigSaveNotReadyBody" : "ConfigSaveFailedBody";
|
|
4099
|
+
notifications.notifications.show({
|
|
4100
|
+
color: "red",
|
|
4101
|
+
title: locale(titleKey),
|
|
4102
|
+
message: locale(bodyKey, err),
|
|
4103
|
+
autoClose: 6e3
|
|
4104
|
+
});
|
|
4091
4105
|
} finally {
|
|
4092
4106
|
setIsSaving(false);
|
|
4093
4107
|
}
|
|
@@ -4106,7 +4120,7 @@ function ConfigPanel(props) {
|
|
|
4106
4120
|
}
|
|
4107
4121
|
) });
|
|
4108
4122
|
}
|
|
4109
|
-
function LazyImage({ src,
|
|
4123
|
+
function LazyImage({ src, style }) {
|
|
4110
4124
|
const [visible, setVisible] = react.useState(false);
|
|
4111
4125
|
const ref = react.useRef(null);
|
|
4112
4126
|
react.useEffect(() => {
|
|
@@ -4119,7 +4133,7 @@ function LazyImage({ src, alt, style }) {
|
|
|
4119
4133
|
if (ref.current) observer.observe(ref.current);
|
|
4120
4134
|
return () => observer.disconnect();
|
|
4121
4135
|
}, []);
|
|
4122
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, style: { width: "4vh", height: "4vh" }, children: visible && /* @__PURE__ */ jsxRuntime.jsx(core.Image, { src,
|
|
4136
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, style: { width: "4vh", height: "4vh" }, children: visible && /* @__PURE__ */ jsxRuntime.jsx(core.Image, { src, fit: "contain", style }) });
|
|
4123
4137
|
}
|
|
4124
4138
|
function SelectItem(props) {
|
|
4125
4139
|
const invItems = useItems();
|
|
@@ -4147,12 +4161,12 @@ function SelectItem(props) {
|
|
|
4147
4161
|
searchable: true,
|
|
4148
4162
|
comboboxProps: { withinPortal: true, zIndex: 2e3 },
|
|
4149
4163
|
leftSectionWidth: "4vh",
|
|
4164
|
+
leftSectionPointerEvents: "none",
|
|
4150
4165
|
leftSection: props.value ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4151
4166
|
core.Image,
|
|
4152
4167
|
{
|
|
4153
4168
|
fallbackSrc: "/placeholder.png",
|
|
4154
4169
|
src: invItems[props.value]?.image || "",
|
|
4155
|
-
alt: props.value,
|
|
4156
4170
|
fit: "contain",
|
|
4157
4171
|
maw: "4vh",
|
|
4158
4172
|
style: { aspectRatio: "1 / 1" }
|
|
@@ -4164,7 +4178,6 @@ function SelectItem(props) {
|
|
|
4164
4178
|
LazyImage,
|
|
4165
4179
|
{
|
|
4166
4180
|
src: invItems[item.option.value]?.image || "",
|
|
4167
|
-
alt: item.option.label,
|
|
4168
4181
|
style: { aspectRatio: "1 / 1" }
|
|
4169
4182
|
}
|
|
4170
4183
|
),
|
|
@@ -4389,6 +4402,148 @@ function PickerButton({
|
|
|
4389
4402
|
}
|
|
4390
4403
|
) });
|
|
4391
4404
|
}
|
|
4405
|
+
function fmtV4(n) {
|
|
4406
|
+
return Number.isFinite(n) ? n.toFixed(2) : "0.00";
|
|
4407
|
+
}
|
|
4408
|
+
function Vector4Display({ value }) {
|
|
4409
|
+
const theme = core.useMantineTheme();
|
|
4410
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4411
|
+
core.Flex,
|
|
4412
|
+
{
|
|
4413
|
+
align: "center",
|
|
4414
|
+
gap: "xs",
|
|
4415
|
+
p: "xs",
|
|
4416
|
+
style: {
|
|
4417
|
+
background: core.alpha(theme.colors.dark[5], 0.35),
|
|
4418
|
+
border: "0.1vh solid rgba(255,255,255,0.05)",
|
|
4419
|
+
borderRadius: theme.radius.xs
|
|
4420
|
+
},
|
|
4421
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4422
|
+
core.Text,
|
|
4423
|
+
{
|
|
4424
|
+
ff: "monospace",
|
|
4425
|
+
size: "xxs",
|
|
4426
|
+
c: "rgba(255,255,255,0.85)",
|
|
4427
|
+
style: { flex: 1, letterSpacing: "0.02em", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" },
|
|
4428
|
+
children: [
|
|
4429
|
+
"vector4(",
|
|
4430
|
+
fmtV4(value.x),
|
|
4431
|
+
", ",
|
|
4432
|
+
fmtV4(value.y),
|
|
4433
|
+
", ",
|
|
4434
|
+
fmtV4(value.z),
|
|
4435
|
+
", ",
|
|
4436
|
+
fmtV4(value.w),
|
|
4437
|
+
")"
|
|
4438
|
+
]
|
|
4439
|
+
}
|
|
4440
|
+
)
|
|
4441
|
+
}
|
|
4442
|
+
);
|
|
4443
|
+
}
|
|
4444
|
+
function Vector4ActionButton({
|
|
4445
|
+
icon,
|
|
4446
|
+
label,
|
|
4447
|
+
tooltip,
|
|
4448
|
+
onClick,
|
|
4449
|
+
color,
|
|
4450
|
+
compact
|
|
4451
|
+
}) {
|
|
4452
|
+
const theme = core.useMantineTheme();
|
|
4453
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { label: tooltip, position: "top", withArrow: true, withinPortal: true, zIndex: 2e3, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4454
|
+
framerMotion.motion.button,
|
|
4455
|
+
{
|
|
4456
|
+
onClick,
|
|
4457
|
+
whileHover: { background: core.alpha(color, 0.18) },
|
|
4458
|
+
whileTap: { scale: 0.95 },
|
|
4459
|
+
style: {
|
|
4460
|
+
background: core.alpha(color, 0.1),
|
|
4461
|
+
border: `0.1vh solid ${core.alpha(color, 0.35)}`,
|
|
4462
|
+
borderRadius: theme.radius.xs,
|
|
4463
|
+
padding: compact ? "0.25vh 0.6vh" : "0.5vh 0.8vh",
|
|
4464
|
+
cursor: "pointer",
|
|
4465
|
+
display: "flex",
|
|
4466
|
+
alignItems: "center",
|
|
4467
|
+
gap: compact ? "0.3vh" : "0.4vh"
|
|
4468
|
+
},
|
|
4469
|
+
children: [
|
|
4470
|
+
icon,
|
|
4471
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.06em", c: color, children: label })
|
|
4472
|
+
]
|
|
4473
|
+
}
|
|
4474
|
+
) });
|
|
4475
|
+
}
|
|
4476
|
+
function WorldPositionSetButton({
|
|
4477
|
+
value,
|
|
4478
|
+
onChange,
|
|
4479
|
+
compact
|
|
4480
|
+
}) {
|
|
4481
|
+
const theme = core.useMantineTheme();
|
|
4482
|
+
const color = theme.colors[theme.primaryColor][5];
|
|
4483
|
+
const grab = async () => {
|
|
4484
|
+
try {
|
|
4485
|
+
const resp = await fetchNui("GET_POSITION", {}, value);
|
|
4486
|
+
if (!resp || typeof resp !== "object") return;
|
|
4487
|
+
onChange({
|
|
4488
|
+
x: Number(resp.x ?? 0),
|
|
4489
|
+
y: Number(resp.y ?? 0),
|
|
4490
|
+
z: Number(resp.z ?? 0),
|
|
4491
|
+
w: Number(resp.w ?? 0)
|
|
4492
|
+
});
|
|
4493
|
+
} catch {
|
|
4494
|
+
}
|
|
4495
|
+
};
|
|
4496
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4497
|
+
Vector4ActionButton,
|
|
4498
|
+
{
|
|
4499
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Crosshair, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
4500
|
+
label: locale("Set"),
|
|
4501
|
+
tooltip: locale("SetWorldTooltip"),
|
|
4502
|
+
onClick: grab,
|
|
4503
|
+
color,
|
|
4504
|
+
compact
|
|
4505
|
+
}
|
|
4506
|
+
);
|
|
4507
|
+
}
|
|
4508
|
+
function WorldPositionGotoButton({
|
|
4509
|
+
value,
|
|
4510
|
+
compact
|
|
4511
|
+
}) {
|
|
4512
|
+
const theme = core.useMantineTheme();
|
|
4513
|
+
const color = theme.colors[theme.primaryColor][5];
|
|
4514
|
+
const goto = () => {
|
|
4515
|
+
fetchNui("GOTO_POSITION", value).catch(() => {
|
|
4516
|
+
});
|
|
4517
|
+
};
|
|
4518
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4519
|
+
Vector4ActionButton,
|
|
4520
|
+
{
|
|
4521
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPin, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
4522
|
+
label: locale("Goto"),
|
|
4523
|
+
tooltip: locale("GotoWorldTooltip"),
|
|
4524
|
+
onClick: goto,
|
|
4525
|
+
color,
|
|
4526
|
+
compact
|
|
4527
|
+
}
|
|
4528
|
+
);
|
|
4529
|
+
}
|
|
4530
|
+
function Vector4DeleteButton({
|
|
4531
|
+
onClick,
|
|
4532
|
+
compact
|
|
4533
|
+
}) {
|
|
4534
|
+
const color = "#ef4444";
|
|
4535
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4536
|
+
Vector4ActionButton,
|
|
4537
|
+
{
|
|
4538
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { size: compact ? "1.1vh" : "1.3vh", color }),
|
|
4539
|
+
label: locale("Delete"),
|
|
4540
|
+
tooltip: locale("Delete"),
|
|
4541
|
+
onClick,
|
|
4542
|
+
color,
|
|
4543
|
+
compact
|
|
4544
|
+
}
|
|
4545
|
+
);
|
|
4546
|
+
}
|
|
4392
4547
|
var GroupSelectContext = react.createContext(null);
|
|
4393
4548
|
function GroupSelect({
|
|
4394
4549
|
value,
|
|
@@ -4877,6 +5032,10 @@ exports.SegmentedProgress = SegmentedProgress;
|
|
|
4877
5032
|
exports.SelectItem = SelectItem;
|
|
4878
5033
|
exports.TestBed = TestBed;
|
|
4879
5034
|
exports.Title = Title;
|
|
5035
|
+
exports.Vector4DeleteButton = Vector4DeleteButton;
|
|
5036
|
+
exports.Vector4Display = Vector4Display;
|
|
5037
|
+
exports.WorldPositionGotoButton = WorldPositionGotoButton;
|
|
5038
|
+
exports.WorldPositionSetButton = WorldPositionSetButton;
|
|
4880
5039
|
exports.useModal = useModal;
|
|
4881
5040
|
exports.useModalActions = useModalActions;
|
|
4882
5041
|
exports.useNavigation = useNavigation;
|