返回 oh-my-ppt
1 import type { EditableCapability, EditSelectionPayload } from '@arcsin1/presentation-editor-runtime'
2
3 export interface ElementEditDraft {
4 html: string
5 text: string
6 color: string
7 fontSize: string
8 fontWeight: string
9 textAlign: string
10 layoutX: string
11 layoutY: string
12 layoutWidth: string
13 layoutHeight: string
14 layoutZIndex: string
15 opacity: string
16 backgroundColor: string
17 objectFit: string
18 alt: string
19 poster: string
20 controls: boolean
21 muted: boolean
22 loop: boolean
23 autoplay: boolean
24 playsInline: boolean
25 preload: string
26 artTextTemplateId: string
27 formulaLatex: string
28 formulaHtml: string
29 formulaDisplayMode: boolean
30 chartType: string
31 chartTitle: string
32 chartLabels: string
33 chartValues: string
34 chartDataJson: string
35 chartPrimaryColor: string
36 chartAccentColor: string
37 chartTextColor: string
38 chartSmooth: boolean
39 chartHorizontal: boolean
40 chartStacked: boolean
41 chartAreaFill: boolean
42 chartShowPoints: boolean
43 chartShowLegend: boolean
44 chartDoughnutCutout: string
45 chartRadarFill: boolean
46 chartConfigJson: string
47 }
48
49 export interface ElementEditorProps {
50 selection: EditSelectionPayload
51 draft: ElementEditDraft
52 onDraftChange: (
53 draft: ElementEditDraft,
54 options?: { commit?: boolean; fields?: Array<keyof ElementEditDraft> }
55 ) => void
56 }
57
58 export function hasCapability(
59 selection: EditSelectionPayload | null,
60 capability: EditableCapability
61 ): boolean {
62 return Boolean(selection?.capabilities?.includes(capability))
63 }
64
65 export function isArtTextSelection(selection: EditSelectionPayload | null): boolean {
66 return Boolean(selection?.snapshot?.attrs.artTextTemplate)
67 }
68
69 export function getElementKindLabel(selection: EditSelectionPayload): string {
70 switch (selection.kind) {
71 case 'text':
72 return 'Text'
73 case 'media':
74 return 'Media'
75 case 'chart':
76 return 'Chart'
77 case 'table':
78 return 'Table'
79 case 'formula':
80 return 'Formula'
81 case 'shape':
82 return 'Shape'
83 case 'container':
84 return 'Group'
85 default:
86 return 'Element'
87 }
88 }
89
89 lines TYPESCRIPT