diff --git a/src/components/md-deck/editor-panel/LayerRow.tsx b/src/components/md-deck/editor-panel/LayerRow.tsx
index 2033da3..336d3bb 100644
--- a/src/components/md-deck/editor-panel/LayerRow.tsx
+++ b/src/components/md-deck/editor-panel/LayerRow.tsx
@@ -5,8 +5,6 @@ import { createSortable, useDragDropContext } from "@thisbeyond/solid-dnd";
import type { IconTypes } from "solid-icons";
import {
TbOutlineAlignCenter,
- TbOutlineAlignLeft,
- TbOutlineAlignRight,
TbOutlineArrowDown,
TbOutlineArrowDownLeft,
TbOutlineArrowDownRight,
@@ -50,17 +48,43 @@ const ORIENTATIONS: {
{ value: "w", label: "西", icon: TbOutlineArrowLeft },
];
-const ALIGNS: { value: Align | ""; icon: IconTypes }[] = [
- { value: "", icon: TbOutlineAlignCenter },
- { value: "l", icon: TbOutlineAlignLeft },
- { value: "c", icon: TbOutlineAlignCenter },
- { value: "r", icon: TbOutlineAlignRight },
- { value: "tl", icon: TbOutlineArrowUpLeft },
- { value: "tc", icon: TbOutlineArrowUp },
- { value: "tr", icon: TbOutlineArrowUpRight },
- { value: "bl", icon: TbOutlineArrowDownLeft },
- { value: "bc", icon: TbOutlineArrowDown },
- { value: "br", icon: TbOutlineArrowDownRight },
+/**
+ * The 4 orientations placed on a 3x3 cross (row-major); the remaining
+ * cells are empty so the layout matches the alignment grid:
+ * . n .
+ * w . e
+ * . s .
+ */
+const ORIENT_GRID: ((typeof ORIENTATIONS)[number] | null)[] = [
+ null,
+ ORIENTATIONS[0],
+ null,
+ ORIENTATIONS[3],
+ null,
+ ORIENTATIONS[1],
+ null,
+ ORIENTATIONS[2],
+ null,
+];
+
+/**
+ * The 9 alignments laid out as a 3x3 grid (row-major):
+ * tl tc tr
+ * l c r
+ * bl bc br
+ * Every icon is an arrow pointing toward the aligned corner/edge; the
+ * center cell uses the standard center-align icon.
+ */
+const ALIGNS: { value: Align; label: string; icon: IconTypes }[] = [
+ { value: "tl", label: "左上", icon: TbOutlineArrowUpLeft },
+ { value: "tc", label: "上", icon: TbOutlineArrowUp },
+ { value: "tr", label: "右上", icon: TbOutlineArrowUpRight },
+ { value: "l", label: "左", icon: TbOutlineArrowLeft },
+ { value: "c", label: "居中", icon: TbOutlineAlignCenter },
+ { value: "r", label: "右", icon: TbOutlineArrowRight },
+ { value: "bl", label: "左下", icon: TbOutlineArrowDownLeft },
+ { value: "bc", label: "下", icon: TbOutlineArrowDown },
+ { value: "br", label: "右下", icon: TbOutlineArrowDownRight },
];
const FONT_PRESETS = [3, 5, 8, 12] as const;
@@ -81,26 +105,7 @@ function orientIcon(v: string): IconTypes {
}
function alignIcon(v: string): IconTypes {
- switch (v) {
- case "tl":
- return TbOutlineArrowUpLeft;
- case "tc":
- return TbOutlineArrowUp;
- case "tr":
- return TbOutlineArrowUpRight;
- case "bl":
- return TbOutlineArrowDownLeft;
- case "bc":
- return TbOutlineArrowDown;
- case "br":
- return TbOutlineArrowDownRight;
- case "l":
- return TbOutlineAlignLeft;
- case "r":
- return TbOutlineAlignRight;
- default:
- return TbOutlineAlignCenter;
- }
+ return ALIGNS.find((a) => a.value === v)?.icon ?? TbOutlineAlignCenter;
}
export function LayerRow(props: LayerRowProps) {
@@ -179,20 +184,27 @@ export function LayerRow(props: LayerRowProps) {
}
title="方向"
>
-