dirk-cfx-react 1.1.84 → 1.1.86
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 +168 -8
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +35 -5
- package/dist/components/index.d.ts +35 -5
- package/dist/components/index.js +168 -9
- package/dist/components/index.js.map +1 -1
- package/dist/index.cjs +168 -8
- 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 +168 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1253,11 +1253,11 @@ var colorNames = {
|
|
|
1253
1253
|
Yellow: { r: 255, g: 255, b: 0 },
|
|
1254
1254
|
YellowGreen: { r: 154, g: 205, b: 50 }
|
|
1255
1255
|
};
|
|
1256
|
-
function colorWithAlpha(color,
|
|
1256
|
+
function colorWithAlpha(color, alpha12) {
|
|
1257
1257
|
const lowerCasedColor = color.toLowerCase();
|
|
1258
1258
|
if (colorNames[lowerCasedColor]) {
|
|
1259
1259
|
const rgb = colorNames[lowerCasedColor];
|
|
1260
|
-
return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${
|
|
1260
|
+
return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha12})`;
|
|
1261
1261
|
}
|
|
1262
1262
|
if (/^#([A-Fa-f0-9]{6})$/.test(color)) {
|
|
1263
1263
|
const hex = color.slice(1);
|
|
@@ -1265,12 +1265,12 @@ function colorWithAlpha(color, alpha11) {
|
|
|
1265
1265
|
const r = bigint >> 16 & 255;
|
|
1266
1266
|
const g = bigint >> 8 & 255;
|
|
1267
1267
|
const b = bigint & 255;
|
|
1268
|
-
return `rgba(${r}, ${g}, ${b}, ${
|
|
1268
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha12})`;
|
|
1269
1269
|
}
|
|
1270
1270
|
if (/^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/.test(color)) {
|
|
1271
1271
|
const result = color.match(/^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/);
|
|
1272
1272
|
if (result) {
|
|
1273
|
-
return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${
|
|
1273
|
+
return `rgba(${result[1]}, ${result[2]}, ${result[3]}, ${alpha12})`;
|
|
1274
1274
|
}
|
|
1275
1275
|
}
|
|
1276
1276
|
return color;
|
|
@@ -3703,11 +3703,11 @@ function ConfirmModal({
|
|
|
3703
3703
|
placeholder: confirmText,
|
|
3704
3704
|
value: typed,
|
|
3705
3705
|
onChange: (e) => setTyped(e.currentTarget.value),
|
|
3706
|
-
styles: (
|
|
3706
|
+
styles: (t3) => ({
|
|
3707
3707
|
input: {
|
|
3708
|
-
backgroundColor: core.alpha(
|
|
3708
|
+
backgroundColor: core.alpha(t3.colors.dark[7], 0.5),
|
|
3709
3709
|
border: `0.1vh solid ${core.alpha(
|
|
3710
|
-
typed === confirmText ? "#ef4444" :
|
|
3710
|
+
typed === confirmText ? "#ef4444" : t3.colors.dark[5],
|
|
3711
3711
|
0.5
|
|
3712
3712
|
)}`,
|
|
3713
3713
|
color: "rgba(255,255,255,0.85)",
|
|
@@ -7062,9 +7062,16 @@ function DiscordRoleSelect(props) {
|
|
|
7062
7062
|
{
|
|
7063
7063
|
size: "xs",
|
|
7064
7064
|
variant: "subtle",
|
|
7065
|
-
|
|
7065
|
+
onMouseDown: (e) => {
|
|
7066
|
+
e.stopPropagation();
|
|
7067
|
+
},
|
|
7068
|
+
onClick: (e) => {
|
|
7069
|
+
e.stopPropagation();
|
|
7070
|
+
refresh();
|
|
7071
|
+
},
|
|
7066
7072
|
title: t("Refresh", "Refresh"),
|
|
7067
7073
|
loading,
|
|
7074
|
+
"aria-label": t("Refresh", "Refresh"),
|
|
7068
7075
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { size: "1.2vh" })
|
|
7069
7076
|
}
|
|
7070
7077
|
);
|
|
@@ -7083,6 +7090,7 @@ function DiscordRoleSelect(props) {
|
|
|
7083
7090
|
clearable: true,
|
|
7084
7091
|
disabled: disabled || loading && !roles,
|
|
7085
7092
|
rightSection: refreshButton,
|
|
7093
|
+
rightSectionPointerEvents: "all",
|
|
7086
7094
|
style,
|
|
7087
7095
|
styles,
|
|
7088
7096
|
nothingFoundMessage: errorCode ? `${t("Error", "Error")} (${errorCode})` : t("NoRoles", "No roles found")
|
|
@@ -7103,12 +7111,163 @@ function DiscordRoleSelect(props) {
|
|
|
7103
7111
|
clearable: true,
|
|
7104
7112
|
disabled: disabled || loading && !roles,
|
|
7105
7113
|
rightSection: refreshButton,
|
|
7114
|
+
rightSectionPointerEvents: "all",
|
|
7106
7115
|
style,
|
|
7107
7116
|
styles,
|
|
7108
7117
|
nothingFoundMessage: errorCode ? `${t("Error", "Error")} (${errorCode})` : t("NoRoles", "No roles found")
|
|
7109
7118
|
}
|
|
7110
7119
|
);
|
|
7111
7120
|
}
|
|
7121
|
+
var t2 = (key, fallback) => {
|
|
7122
|
+
const v = locale(key);
|
|
7123
|
+
return v === key ? fallback : v;
|
|
7124
|
+
};
|
|
7125
|
+
var FRAMEWORK_HINTS = {
|
|
7126
|
+
"es_extended": "from ESX Config.Accounts",
|
|
7127
|
+
"qb-core": "from QBCore Money.MoneyTypes",
|
|
7128
|
+
"qbx_core": "default QBox trio (cash/bank/crypto) \u2014 server may have custom names, add them manually",
|
|
7129
|
+
"nd-framework": "ND_Core only supports cash + bank",
|
|
7130
|
+
"unknown": "no framework detected \u2014 type account names manually"
|
|
7131
|
+
};
|
|
7132
|
+
function AccountOption({ account }) {
|
|
7133
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", gap: "0", children: [
|
|
7134
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xs", c: "rgba(255,255,255,0.9)", ff: "Akrobat Bold", tt: "uppercase", lts: "0.04em", children: account.name }),
|
|
7135
|
+
account.label && /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", c: "rgba(255,255,255,0.4)", children: account.label })
|
|
7136
|
+
] });
|
|
7137
|
+
}
|
|
7138
|
+
function FrameworkHint({ framework }) {
|
|
7139
|
+
const theme2 = core.useMantineTheme();
|
|
7140
|
+
if (!framework) return null;
|
|
7141
|
+
const hintKey = `AccountFrameworkHint_${framework}`;
|
|
7142
|
+
const text = t2(hintKey, FRAMEWORK_HINTS[framework] || FRAMEWORK_HINTS.unknown);
|
|
7143
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7144
|
+
core.Flex,
|
|
7145
|
+
{
|
|
7146
|
+
align: "center",
|
|
7147
|
+
gap: "xs",
|
|
7148
|
+
px: "xs",
|
|
7149
|
+
py: "0.3vh",
|
|
7150
|
+
style: {
|
|
7151
|
+
background: core.alpha(theme2.colors.dark[5], 0.4),
|
|
7152
|
+
border: "0.1vh solid rgba(255,255,255,0.04)",
|
|
7153
|
+
borderRadius: theme2.radius.xs
|
|
7154
|
+
},
|
|
7155
|
+
children: [
|
|
7156
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", ff: "Akrobat Bold", c: "rgba(255,255,255,0.45)", tt: "uppercase", lts: "0.04em", children: framework }),
|
|
7157
|
+
/* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xxs", ff: "Akrobat", c: "rgba(255,255,255,0.35)", style: { flex: 1 }, lineClamp: 2, children: text })
|
|
7158
|
+
]
|
|
7159
|
+
}
|
|
7160
|
+
);
|
|
7161
|
+
}
|
|
7162
|
+
function AccountSelect(props) {
|
|
7163
|
+
const { endpoint, label: label2, size = "xs", placeholder, disabled, style, styles, hideFrameworkHint } = props;
|
|
7164
|
+
const [accounts, setAccounts] = React6.useState(null);
|
|
7165
|
+
const [framework, setFramework] = React6.useState(void 0);
|
|
7166
|
+
const [loading, setLoading] = React6.useState(false);
|
|
7167
|
+
const refresh = async () => {
|
|
7168
|
+
setLoading(true);
|
|
7169
|
+
try {
|
|
7170
|
+
const res = await fetchNui(endpoint, {}, {
|
|
7171
|
+
// Browser dev fallback. Shows a recognisable ESX-style list.
|
|
7172
|
+
ok: true,
|
|
7173
|
+
framework: "es_extended",
|
|
7174
|
+
accounts: [
|
|
7175
|
+
{ name: "money", label: "Cash" },
|
|
7176
|
+
{ name: "bank", label: "Bank" },
|
|
7177
|
+
{ name: "black_money", label: "Dirty Money" }
|
|
7178
|
+
]
|
|
7179
|
+
});
|
|
7180
|
+
if (res?.ok) {
|
|
7181
|
+
setAccounts(res.accounts ?? []);
|
|
7182
|
+
setFramework(res.framework);
|
|
7183
|
+
} else {
|
|
7184
|
+
setAccounts([]);
|
|
7185
|
+
setFramework(res?.framework);
|
|
7186
|
+
}
|
|
7187
|
+
} finally {
|
|
7188
|
+
setLoading(false);
|
|
7189
|
+
}
|
|
7190
|
+
};
|
|
7191
|
+
React6.useEffect(() => {
|
|
7192
|
+
refresh();
|
|
7193
|
+
}, [endpoint]);
|
|
7194
|
+
const accountsByName = React6.useMemo(() => {
|
|
7195
|
+
const map = {};
|
|
7196
|
+
for (const a of accounts ?? []) map[a.name] = a;
|
|
7197
|
+
if (props.multi) {
|
|
7198
|
+
for (const n of props.value ?? []) {
|
|
7199
|
+
if (n && !map[n]) map[n] = { name: n };
|
|
7200
|
+
}
|
|
7201
|
+
} else if (props.value && !map[props.value]) {
|
|
7202
|
+
map[props.value] = { name: props.value };
|
|
7203
|
+
}
|
|
7204
|
+
return map;
|
|
7205
|
+
}, [accounts, props.multi, props.multi ? props.value?.join(",") : props.value]);
|
|
7206
|
+
const data = Object.values(accountsByName).map((a) => ({
|
|
7207
|
+
value: a.name,
|
|
7208
|
+
label: a.label ? `${a.name} \u2014 ${a.label}` : a.name
|
|
7209
|
+
}));
|
|
7210
|
+
const renderOption = ({ option }) => {
|
|
7211
|
+
const acc = accountsByName[option.value];
|
|
7212
|
+
return acc ? /* @__PURE__ */ jsxRuntime.jsx(AccountOption, { account: acc }) : /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xs", children: option.label });
|
|
7213
|
+
};
|
|
7214
|
+
const refreshButton = /* @__PURE__ */ jsxRuntime.jsx(
|
|
7215
|
+
core.ActionIcon,
|
|
7216
|
+
{
|
|
7217
|
+
size: "xs",
|
|
7218
|
+
variant: "subtle",
|
|
7219
|
+
onMouseDown: (e) => {
|
|
7220
|
+
e.stopPropagation();
|
|
7221
|
+
},
|
|
7222
|
+
onClick: (e) => {
|
|
7223
|
+
e.stopPropagation();
|
|
7224
|
+
refresh();
|
|
7225
|
+
},
|
|
7226
|
+
title: t2("Refresh", "Refresh"),
|
|
7227
|
+
loading,
|
|
7228
|
+
"aria-label": t2("Refresh", "Refresh"),
|
|
7229
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { size: "1.2vh" })
|
|
7230
|
+
}
|
|
7231
|
+
);
|
|
7232
|
+
const sharedSelectProps = {
|
|
7233
|
+
label: label2,
|
|
7234
|
+
size,
|
|
7235
|
+
data,
|
|
7236
|
+
searchable: true,
|
|
7237
|
+
clearable: true,
|
|
7238
|
+
disabled: disabled || loading && !accounts,
|
|
7239
|
+
rightSection: refreshButton,
|
|
7240
|
+
rightSectionPointerEvents: "all",
|
|
7241
|
+
style,
|
|
7242
|
+
nothingFoundMessage: t2("NoAccounts", "No accounts available")
|
|
7243
|
+
};
|
|
7244
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", gap: "0.3vh", style, children: [
|
|
7245
|
+
props.multi ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
7246
|
+
core.MultiSelect,
|
|
7247
|
+
{
|
|
7248
|
+
...sharedSelectProps,
|
|
7249
|
+
placeholder: placeholder || t2("PickAccounts", "Pick accounts (or type custom)..."),
|
|
7250
|
+
value: props.value || [],
|
|
7251
|
+
onChange: (names) => props.onChange(names),
|
|
7252
|
+
renderOption,
|
|
7253
|
+
searchable: true,
|
|
7254
|
+
hidePickedOptions: true,
|
|
7255
|
+
styles
|
|
7256
|
+
}
|
|
7257
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
7258
|
+
core.Select,
|
|
7259
|
+
{
|
|
7260
|
+
...sharedSelectProps,
|
|
7261
|
+
placeholder: placeholder || t2("PickAccount", "Pick an account..."),
|
|
7262
|
+
value: props.value || null,
|
|
7263
|
+
onChange: (name) => props.onChange(name),
|
|
7264
|
+
renderOption,
|
|
7265
|
+
styles
|
|
7266
|
+
}
|
|
7267
|
+
),
|
|
7268
|
+
!hideFrameworkHint && /* @__PURE__ */ jsxRuntime.jsx(FrameworkHint, { framework })
|
|
7269
|
+
] });
|
|
7270
|
+
}
|
|
7112
7271
|
function useTornEdges() {
|
|
7113
7272
|
const game = useSettings((state) => state.game);
|
|
7114
7273
|
return game === "rdr3" ? "torn-edge-wrapper" : "";
|
|
@@ -7469,6 +7628,7 @@ var Vector4Schema = zod.z.object({
|
|
|
7469
7628
|
w: zod.z.number()
|
|
7470
7629
|
});
|
|
7471
7630
|
|
|
7631
|
+
exports.AccountSelect = AccountSelect;
|
|
7472
7632
|
exports.AdminPageTitle = AdminPageTitle;
|
|
7473
7633
|
exports.AnimPostFxSelect = AnimPostFxSelect;
|
|
7474
7634
|
exports.AsyncSaveButton = AsyncSaveButton;
|