33270dd026
CI/CD Pipeline / Check if frontend-only change (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / PR Build API Image (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
58 lines
1.8 KiB
TypeScript
Executable File
58 lines
1.8 KiB
TypeScript
Executable File
import React from "react"
|
|
import type { StickerItem, TextStickerPreset } from "@/pages/editing-planner/types"
|
|
import { TEXT_STICKER_PRESET_LABELS } from "@/pages/editing-planner/constants/sticker"
|
|
|
|
interface TextStickerPropsEditorProps {
|
|
sticker: StickerItem
|
|
onUpdate: (id: string, partial: Partial<StickerItem>) => void
|
|
}
|
|
|
|
export const TextStickerPropsEditor: React.FC<TextStickerPropsEditorProps> = ({
|
|
sticker,
|
|
onUpdate,
|
|
}) => {
|
|
if (sticker.type !== "text") return null
|
|
|
|
return (
|
|
<>
|
|
<div className="sticker-prop-row">
|
|
<span className="sticker-prop-label">花字</span>
|
|
<select
|
|
className="sticker-prop-select"
|
|
value={sticker.text_preset}
|
|
onChange={(e) =>
|
|
onUpdate(sticker.id, { text_preset: e.target.value as TextStickerPreset })
|
|
}
|
|
>
|
|
{(Object.keys(TEXT_STICKER_PRESET_LABELS) as TextStickerPreset[]).map((p) => (
|
|
<option key={p} value={p}>
|
|
{TEXT_STICKER_PRESET_LABELS[p]}
|
|
</option>
|
|
))}
|
|
</select>
|
|
</div>
|
|
<div className="sticker-prop-row">
|
|
<span className="sticker-prop-label">字号</span>
|
|
<input
|
|
type="range"
|
|
className="sticker-prop-slider"
|
|
min={12}
|
|
max={72}
|
|
value={sticker.font_size}
|
|
onChange={(e) => onUpdate(sticker.id, { font_size: Number(e.target.value) })}
|
|
/>
|
|
<span className="sticker-prop-value">{sticker.font_size}px</span>
|
|
</div>
|
|
<div className="sticker-prop-row">
|
|
<span className="sticker-prop-label">颜色</span>
|
|
<input
|
|
type="color"
|
|
className="sticker-prop-color"
|
|
value={sticker.text_color}
|
|
onChange={(e) => onUpdate(sticker.id, { text_color: e.target.value })}
|
|
/>
|
|
</div>
|
|
</>
|
|
)
|
|
}
|