refactor: uhu
This commit is contained in:
parent
fa1c6d19e9
commit
306a46b62b
|
|
@ -1,4 +1,6 @@
|
||||||
command,parameter,label,description,insertedText
|
command,parameter,label,description,insertedText
|
||||||
|
roll,emmet,2d6,2D6,2d6
|
||||||
|
roll,emmet,d20,D20,d20
|
||||||
track,emmet,monk,破戒佛爷,"破戒佛爷.bandit.monk[gd=4/4,str=14/14,cla=10,spi=8]"
|
track,emmet,monk,破戒佛爷,"破戒佛爷.bandit.monk[gd=4/4,str=14/14,cla=10,spi=8]"
|
||||||
track,emmet,bandit,龙虎寨山贼,"龙虎寨山贼.bandit[gd=2/2,str=10/10,cla=10,spi=10]"
|
track,emmet,bandit,龙虎寨山贼,"龙虎寨山贼.bandit[gd=2/2,str=10/10,cla=10,spi=10]"
|
||||||
track,emmet,khitan,契丹护卫,"契丹护卫.khitan.guard[gd=4/4,ap=2,str=14/14,cla=14,spi=14]"
|
track,emmet,khitan,契丹护卫,"契丹护卫.khitan.guard[gd=4/4,ap=2,str=14/14,cla=14,spi=14]"
|
||||||
|
|
|
@ -32,6 +32,24 @@ export const AttributeTooltip: Component<AttributeTooltipProps> = (props) => {
|
||||||
props.onUpdate(attrName, { ...attr, value });
|
props.onUpdate(attrName, { ...attr, value });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 处理滚轮增减(progress 和 count 类型)
|
||||||
|
const handleWheel = (e: WheelEvent, attrName: string, attr: TrackerAttribute) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
if (attr.type === "count") {
|
||||||
|
const delta = e.deltaY > 0 ? -1 : 1;
|
||||||
|
const newValue = Math.max(0, (attr.value as number) + delta);
|
||||||
|
handleUpdate(attrName, newValue);
|
||||||
|
} else if (attr.type === "progress") {
|
||||||
|
const val = attr.value as { x: number; y: number };
|
||||||
|
const delta = e.deltaY > 0 ? -1 : 1;
|
||||||
|
// 滚轮向上/下调整当前值 x
|
||||||
|
const newX = Math.max(0, Math.min(val.y, val.x + delta));
|
||||||
|
handleUpdate(attrName, { x: newX, y: val.y });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 添加 class
|
// 添加 class
|
||||||
const handleAddClass = () => {
|
const handleAddClass = () => {
|
||||||
const className = newClass().trim();
|
const className = newClass().trim();
|
||||||
|
|
@ -56,7 +74,11 @@ export const AttributeTooltip: Component<AttributeTooltipProps> = (props) => {
|
||||||
return (
|
return (
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
{/* 进度条 */}
|
{/* 进度条 */}
|
||||||
<div class="w-full h-4 bg-gray-200 rounded-full overflow-hidden">
|
<div
|
||||||
|
class="w-full h-4 bg-gray-200 rounded-full overflow-hidden cursor-pointer"
|
||||||
|
title="滚动鼠标滚轮增减"
|
||||||
|
onWheel={(e) => handleWheel(e, attrName, attr)}
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="h-full bg-gradient-to-r from-blue-500 to-blue-600 transition-all duration-200"
|
class="h-full bg-gradient-to-r from-blue-500 to-blue-600 transition-all duration-200"
|
||||||
style={{ width: `${Math.min(100, percentage)}%` }}
|
style={{ width: `${Math.min(100, percentage)}%` }}
|
||||||
|
|
@ -68,6 +90,7 @@ export const AttributeTooltip: Component<AttributeTooltipProps> = (props) => {
|
||||||
type="number"
|
type="number"
|
||||||
value={val.x}
|
value={val.x}
|
||||||
onChange={(e) => handleUpdate(attrName, { x: parseInt(e.target.value) || 0, y: val.y })}
|
onChange={(e) => handleUpdate(attrName, { x: parseInt(e.target.value) || 0, y: val.y })}
|
||||||
|
onWheel={(e) => handleWheel(e, attrName, attr)}
|
||||||
class="w-14 px-1 py-0.5 border border-gray-300 rounded text-center text-sm"
|
class="w-14 px-1 py-0.5 border border-gray-300 rounded text-center text-sm"
|
||||||
min="0"
|
min="0"
|
||||||
/>
|
/>
|
||||||
|
|
@ -87,7 +110,11 @@ export const AttributeTooltip: Component<AttributeTooltipProps> = (props) => {
|
||||||
if (attr.type === "count") {
|
if (attr.type === "count") {
|
||||||
const value = attr.value as number;
|
const value = attr.value as number;
|
||||||
return (
|
return (
|
||||||
<div class="flex items-center gap-1">
|
<div
|
||||||
|
class="flex items-center gap-1"
|
||||||
|
onWheel={(e) => handleWheel(e, attrName, attr)}
|
||||||
|
title="滚动鼠标滚轮增减"
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
class="w-7 h-7 flex items-center justify-center bg-gray-200 hover:bg-gray-300 rounded text-lg font-bold transition-colors"
|
class="w-7 h-7 flex items-center justify-center bg-gray-200 hover:bg-gray-300 rounded text-lg font-bold transition-colors"
|
||||||
onClick={() => handleUpdate(attrName, value - 1)}
|
onClick={() => handleUpdate(attrName, value - 1)}
|
||||||
|
|
@ -98,6 +125,7 @@ export const AttributeTooltip: Component<AttributeTooltipProps> = (props) => {
|
||||||
type="number"
|
type="number"
|
||||||
value={value}
|
value={value}
|
||||||
onChange={(e) => handleUpdate(attrName, parseInt(e.target.value) || 0)}
|
onChange={(e) => handleUpdate(attrName, parseInt(e.target.value) || 0)}
|
||||||
|
onWheel={(e) => handleWheel(e, attrName, attr)}
|
||||||
class="w-12 px-1 py-0.5 border border-gray-300 rounded text-center text-sm"
|
class="w-12 px-1 py-0.5 border border-gray-300 rounded text-center text-sm"
|
||||||
min="0"
|
min="0"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ export const CommanderEntries: Component<CommanderEntriesProps> = (props) => {
|
||||||
<div class="border-l-2 border-gray-300 pl-3 py-1">
|
<div class="border-l-2 border-gray-300 pl-3 py-1">
|
||||||
<div class="flex items-center justify-between text-xs text-gray-500 mb-1">
|
<div class="flex items-center justify-between text-xs text-gray-500 mb-1">
|
||||||
<span
|
<span
|
||||||
class="font-mono cursor-pointer hover:text-blue-600 hover:underline"
|
class="font-mono cursor-pointer hover:text-blue-600 hover:underline truncate max-w-64"
|
||||||
onClick={() => handleCommandClick(entry.command)}
|
onClick={() => handleCommandClick(entry.command)}
|
||||||
title="点击复制到输入框"
|
title="点击复制到输入框"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,23 @@ export const TrackerView: Component<TrackerViewProps> = (props) => {
|
||||||
return `${name}=${val}`;
|
return `${name}=${val}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 处理滚轮增减(progress 和 count 类型)
|
||||||
|
const handleWheel = (e: WheelEvent, index: number, attrName: string, attr: TrackerAttribute) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
if (attr.type === "count") {
|
||||||
|
const delta = e.deltaY > 0 ? -1 : 1;
|
||||||
|
const newValue = Math.max(0, (attr.value as number) + delta);
|
||||||
|
props.onEditAttribute?.(index, attrName, { ...attr, value: newValue });
|
||||||
|
} else if (attr.type === "progress") {
|
||||||
|
const val = attr.value as { x: number; y: number };
|
||||||
|
const delta = e.deltaY > 0 ? -1 : 1;
|
||||||
|
const newX = Math.max(0, Math.min(val.y, val.x + delta));
|
||||||
|
props.onEditAttribute?.(index, attrName, { ...attr, value: { x: newX, y: val.y } });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleTagClick = (e: MouseEvent, index: number) => {
|
const handleTagClick = (e: MouseEvent, index: number) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
@ -91,8 +108,18 @@ export const TrackerView: Component<TrackerViewProps> = (props) => {
|
||||||
</Show>
|
</Show>
|
||||||
{/* 属性简写显示 */}
|
{/* 属性简写显示 */}
|
||||||
<Show when={Object.keys(item.attributes).length > 0}>
|
<Show when={Object.keys(item.attributes).length > 0}>
|
||||||
<span class="text-xs text-gray-500 font-mono whitespace-nowrap truncate">
|
<span class="text-xs text-gray-500 font-mono whitespace-nowrap truncate flex gap-2">
|
||||||
[{Object.entries(item.attributes).map(([k, v]) => formatAttributeShort(k, v)).join(" ")}]
|
<For each={Object.entries(item.attributes)}>
|
||||||
|
{([name, attr]) => (
|
||||||
|
<span
|
||||||
|
class="inline-block cursor-pointer hover:text-blue-600 hover:underline"
|
||||||
|
title={`${name}: ${formatAttributeValue(attr)} - 滚动鼠标滚轮增减`}
|
||||||
|
onWheel={(e) => handleWheel(e, index(), name, attr)}
|
||||||
|
>
|
||||||
|
{formatAttributeShort(name, attr)}{" "}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</For>
|
||||||
</span>
|
</span>
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue