feat: add plain text dice roll detail

Introduces `plainDetail` to the dice engine to provide a non-HTML
version of the roll results. This allows components to display
the roll breakdown without needing to parse or render HTML.
This commit is contained in:
2026-07-06 18:18:16 +08:00
parent 0fc61e2f94
commit 1d0f2f7c3e
5 changed files with 62 additions and 41 deletions
+5 -5
View File
@@ -1,6 +1,6 @@
import { customElement, noShadowDOM } from "solid-element";
import { createSignal, onMount } from "solid-js";
import {rollFormula} from "./md-commander/hooks";
import { rollFormula } from "./md-commander/hooks";
export interface DiceProps {
key?: string;
@@ -34,7 +34,7 @@ customElement("md-dice", { key: "" }, (props, { element }) => {
// 从 element 的 textContent 获取骰子公式
const formula = element?.textContent?.trim() || "";
// 隐藏原始文本内容
if (element) {
element.textContent = "";
@@ -57,9 +57,9 @@ customElement("md-dice", { key: "" }, (props, { element }) => {
const handleRoll = (e: MouseEvent) => {
e.preventDefault();
// 点击骰子图标:总是重 roll
const rollResult = rollFormula(formula).result;
setResult(rollResult.total);
setRollDetail(rollResult.detail);
const rollResult = rollFormula(formula);
setResult(rollResult.result.total);
setRollDetail(rollResult.result.plainDetail);
setIsRolled(true);
if (effectiveKey()) {
setDiceResultToUrl(effectiveKey(), rollResult.total);