fika-editor 3.2.10 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/embed/{824.js → 6104.js} +18 -18
- package/dist/embed/agentic-manifest.json +44 -8
- package/dist/embed/chunks/1131.js +1 -1
- package/dist/embed/chunks/2407.js +1 -1
- package/dist/embed/chunks/2807.js +1 -1
- package/dist/embed/chunks/3888.js +1 -1
- package/dist/embed/chunks/5216.js +1 -1
- package/dist/embed/chunks/574.js +1 -1
- package/dist/embed/chunks/655.js +1 -0
- package/dist/embed/chunks/862.js +1 -1
- package/dist/embed/chunks/9657.js +1 -1
- package/dist/embed/chunks/9800.js +1 -1
- package/dist/embed/fika-embed.css +1 -1
- package/dist/embed/fika-embed.js +18 -4
- package/dist/layout/utils/resizeDeck.js +5 -0
- package/dist/types/components/Button.d.ts +2 -2
- package/dist/types/embed/agentic/canvasContext.d.ts +4 -0
- package/dist/types/embed/agentic/canvasOperations.d.ts +3 -0
- package/dist/types/embed/agentic/types.d.ts +118 -0
- package/dist/types/embed/index.d.ts +2 -0
- package/dist/types/embed/render.d.ts +4 -0
- package/dist/types/embed/types.d.ts +3 -2
- package/dist/types/hooks/textCreationDefaults.d.ts +2 -0
- package/dist/types/hooks/useAnimationFrameCallback.d.ts +6 -0
- package/dist/types/i18n/cs/myna/index.d.ts +3 -0
- package/dist/types/i18n/en/myna/index.d.ts +3 -0
- package/dist/types/i18n/i18n-react.d.ts +2 -0
- package/dist/types/i18n/i18n-types.d.ts +2888 -1341
- package/dist/types/i18n/i18n-util.async.d.ts +1 -0
- package/dist/types/i18n/i18n-util.d.ts +1 -0
- package/dist/types/i18n/pl/myna/index.d.ts +3 -0
- package/dist/types/i18n/sk/myna/index.d.ts +3 -0
- package/dist/types/paint/slidePainter.d.ts +11 -0
- package/dist/types/store/slides.d.ts +241 -1
- package/dist/types/types/slides.d.ts +53 -0
- package/dist/types/utils/canvasFit.d.ts +17 -0
- package/dist/types/utils/canvasHitTest.d.ts +4 -0
- package/dist/types/utils/element.d.ts +27 -0
- package/dist/types/utils/elementPaint.d.ts +129 -0
- package/dist/types/utils/frameDomClip.d.ts +3 -0
- package/dist/types/utils/nestedFrames.d.ts +19 -0
- package/dist/types/utils/pageGuides.d.ts +6 -0
- package/dist/types/utils/renderMetrics.d.ts +2 -0
- package/dist/types/utils/selectInsertedElements.d.ts +2 -0
- package/dist/types/utils/transferPageElements.d.ts +3 -0
- package/dist/types/views/Editor/Canvas/MynaRulers.d.ts +17 -0
- package/dist/types/views/Editor/Canvas/ViewportBackground.d.ts +3 -1
- package/dist/types/views/Editor/Canvas/hooks/useDragElement.d.ts +2 -1
- package/dist/types/views/Editor/Canvas/hooks/useDrop.d.ts +1 -1
- package/dist/types/views/Editor/Canvas/hooks/useViewportSize.d.ts +1 -0
- package/dist/types/views/Editor/Canvas/index.d.ts +4 -1
- package/dist/types/views/Editor/EditorHeader/index.d.ts +4 -2
- package/dist/types/views/Editor/index.d.ts +3 -2
- package/dist/types/views/Myna/MynaAssetsPanel.d.ts +28 -0
- package/dist/types/views/Myna/MynaDownload.d.ts +4 -0
- package/dist/types/views/Myna/MynaDrawer.d.ts +9 -0
- package/dist/types/views/Myna/MynaElementsPanel.d.ts +12 -0
- package/dist/types/views/Myna/MynaFrameTitles.d.ts +6 -0
- package/dist/types/views/Myna/MynaFramesHierarchy.d.ts +1 -0
- package/dist/types/views/Myna/MynaFramesPanel.d.ts +6 -0
- package/dist/types/views/Myna/MynaHeader.d.ts +5 -0
- package/dist/types/views/Myna/MynaInspector.d.ts +2 -0
- package/dist/types/views/Myna/MynaLayersPanel.d.ts +1 -0
- package/dist/types/views/Myna/MynaPageCanvas.d.ts +14 -0
- package/dist/types/views/Myna/MynaPageLayoutControls.d.ts +1 -0
- package/dist/types/views/Myna/MynaPageOutline.d.ts +1 -0
- package/dist/types/views/Myna/MynaPageOverflow.d.ts +9 -0
- package/dist/types/views/Myna/MynaPagesPanel.d.ts +14 -0
- package/dist/types/views/Myna/MynaQrPanel.d.ts +1 -0
- package/dist/types/views/Myna/MynaTemplateLibrary.d.ts +3 -0
- package/dist/types/views/Myna/MynaViewSettings.d.ts +2 -0
- package/dist/types/views/Myna/MynaWorkspace.d.ts +1 -0
- package/dist/types/views/Myna/MynaZoomControl.d.ts +3 -0
- package/dist/types/views/Myna/WorkspaceLabels.d.ts +8 -0
- package/dist/types/views/Myna/WorkspaceObjects.d.ts +9 -0
- package/dist/types/views/Myna/catalog.d.ts +233 -0
- package/dist/types/views/Myna/exportPages.d.ts +2 -0
- package/dist/types/views/Myna/inspectorLabels.d.ts +30 -0
- package/dist/types/views/Myna/libraryMessages.d.ts +28 -0
- package/dist/types/views/Myna/pageLayout.d.ts +22 -0
- package/dist/types/views/Myna/pageSnapping.d.ts +41 -0
- package/dist/types/views/Myna/pdf.d.ts +10 -0
- package/dist/types/views/Myna/photoFrameLabels.d.ts +28 -0
- package/dist/types/views/Myna/photoFrameUpload.d.ts +5 -0
- package/dist/types/views/Myna/photoFrames.d.ts +11 -0
- package/dist/types/views/Myna/qrCode.d.ts +7 -0
- package/dist/types/views/Myna/qrMessages.d.ts +18 -0
- package/dist/types/views/Myna/svg.d.ts +21 -0
- package/dist/types/views/Myna/svgWatermark.d.ts +2 -0
- package/dist/types/views/Myna/templateLibrary.d.ts +26 -0
- package/dist/types/views/Myna/viewStore.d.ts +14 -0
- package/dist/types/views/Myna/workspaceLabels.d.ts +10 -0
- package/dist/types/views/Myna/workspaceSelectors.d.ts +17 -0
- package/docs/AGENTIC_BRIDGE.md +23 -0
- package/docs/EMBED.md +10 -0
- package/docs/MYNA.md +247 -0
- package/package.json +5 -1
|
@@ -156,6 +156,8 @@ export interface ElementSource {
|
|
|
156
156
|
* source?: OOXML provenance when imported from a retained PPTX package
|
|
157
157
|
*/
|
|
158
158
|
interface PPTBaseElement {
|
|
159
|
+
/** Nested frame ownership; geometry remains in page coordinates. */
|
|
160
|
+
parentFrameId?: string;
|
|
159
161
|
id: string;
|
|
160
162
|
left: number;
|
|
161
163
|
top: number;
|
|
@@ -264,6 +266,22 @@ export interface PPTImageElement extends PPTBaseElement {
|
|
|
264
266
|
radius?: number;
|
|
265
267
|
colorMask?: string;
|
|
266
268
|
imageType?: ImageType;
|
|
269
|
+
/** Offline editable QR payload; SVG src remains portable through ordinary image render/export. */
|
|
270
|
+
qrCode?: {
|
|
271
|
+
text: string;
|
|
272
|
+
errorCorrection: 'L' | 'M' | 'Q' | 'H';
|
|
273
|
+
foreground: string;
|
|
274
|
+
background: string;
|
|
275
|
+
};
|
|
276
|
+
/** Editable photo-frame metadata; native image geometry/clip remain authoritative. */
|
|
277
|
+
photoFrame?: {
|
|
278
|
+
layout: string;
|
|
279
|
+
cell: number;
|
|
280
|
+
gutter: number;
|
|
281
|
+
empty: boolean;
|
|
282
|
+
sourceWidth?: number;
|
|
283
|
+
sourceHeight?: number;
|
|
284
|
+
};
|
|
267
285
|
}
|
|
268
286
|
/**
|
|
269
287
|
* Text inside a shape.
|
|
@@ -297,6 +315,10 @@ export interface ShapeText {
|
|
|
297
315
|
* keypoints?: keypoint positions as percentages
|
|
298
316
|
*/
|
|
299
317
|
export interface PPTShapeElement extends PPTBaseElement {
|
|
318
|
+
/** Native rectangular frame container. */
|
|
319
|
+
frame?: {
|
|
320
|
+
clipContent: boolean;
|
|
321
|
+
};
|
|
300
322
|
type: 'shape';
|
|
301
323
|
viewBox: [number, number];
|
|
302
324
|
path: string;
|
|
@@ -558,9 +580,40 @@ export type SlideType = 'cover' | 'contents' | 'transition' | 'content' | 'end';
|
|
|
558
580
|
* on the canvas, not editable; cleared by the first `slides.update` that
|
|
559
581
|
* omits or falsifies it.
|
|
560
582
|
*/
|
|
583
|
+
/** Persistent page guides, expressed in unscaled document pixels. Never exported as artwork. */
|
|
584
|
+
export interface SlideGuide {
|
|
585
|
+
id: string;
|
|
586
|
+
/** x is a vertical guide; y is a horizontal guide. */
|
|
587
|
+
axis: 'x' | 'y';
|
|
588
|
+
position: number;
|
|
589
|
+
}
|
|
590
|
+
/** Freeform workspace annotation, deliberately excluded from page artwork and exports. */
|
|
591
|
+
export interface WorkspaceLabel {
|
|
592
|
+
/** Workspace-only section or local comment thread; omitted for plain labels. */
|
|
593
|
+
kind?: 'section' | 'comment';
|
|
594
|
+
width?: number;
|
|
595
|
+
height?: number;
|
|
596
|
+
pageIds?: string[];
|
|
597
|
+
resolved?: boolean;
|
|
598
|
+
replies?: string[];
|
|
599
|
+
id: string;
|
|
600
|
+
text: string;
|
|
601
|
+
x: number;
|
|
602
|
+
y: number;
|
|
603
|
+
fontSize: number;
|
|
604
|
+
}
|
|
561
605
|
export interface Slide {
|
|
606
|
+
workspaceLabels?: WorkspaceLabel[];
|
|
607
|
+
/** Freeform Myna workspace origin in document pixels; independent of export order. */
|
|
608
|
+
canvasPosition?: {
|
|
609
|
+
x: number;
|
|
610
|
+
y: number;
|
|
611
|
+
};
|
|
612
|
+
/** Optional author-assigned page title shown in the Myna workspace. */
|
|
613
|
+
canvasName?: string;
|
|
562
614
|
id: string;
|
|
563
615
|
elements: PPTElement[];
|
|
616
|
+
guides?: SlideGuide[];
|
|
564
617
|
notes?: Note[];
|
|
565
618
|
remark?: string;
|
|
566
619
|
background?: SlideBackground;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const FIT_CANVAS_BOUNDS_EVENT = "fika:fit-canvas-bounds";
|
|
2
|
+
export type CanvasFitRequest = {
|
|
3
|
+
minX: number;
|
|
4
|
+
maxX: number;
|
|
5
|
+
minY: number;
|
|
6
|
+
maxY: number;
|
|
7
|
+
leftInset?: number;
|
|
8
|
+
rightInset?: number;
|
|
9
|
+
topInset?: number;
|
|
10
|
+
bottomInset?: number;
|
|
11
|
+
};
|
|
12
|
+
/** Fit document-space bounds into the visible editor area, including rotated bounds. */
|
|
13
|
+
export declare function calculateCanvasFit(bounds: CanvasFitRequest, width: number, height: number): {
|
|
14
|
+
scale: number;
|
|
15
|
+
left: number;
|
|
16
|
+
top: number;
|
|
17
|
+
};
|
|
@@ -66,6 +66,10 @@ export interface HitRingLayoutOptions {
|
|
|
66
66
|
*/
|
|
67
67
|
export declare function hitRingLayout(width: number, height: number, options?: HitRingLayoutOptions): HitRingLayout;
|
|
68
68
|
export interface VisualHitRect {
|
|
69
|
+
frameClip?: {
|
|
70
|
+
x: number;
|
|
71
|
+
y: number;
|
|
72
|
+
}[];
|
|
69
73
|
id: string;
|
|
70
74
|
left: number;
|
|
71
75
|
top: number;
|
|
@@ -102,6 +102,7 @@ export declare const rotatePoint: (point: Point, center: Point, angle: number) =
|
|
|
102
102
|
* @param angle Rotation in degrees
|
|
103
103
|
*/
|
|
104
104
|
export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLineElement>, center: Point, angle: number) => {
|
|
105
|
+
parentFrameId?: string;
|
|
105
106
|
id: string;
|
|
106
107
|
lock?: boolean;
|
|
107
108
|
groupId?: string;
|
|
@@ -123,6 +124,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
123
124
|
top: number;
|
|
124
125
|
rotate: number;
|
|
125
126
|
} | {
|
|
127
|
+
parentFrameId?: string;
|
|
126
128
|
id: string;
|
|
127
129
|
lock?: boolean;
|
|
128
130
|
groupId?: string;
|
|
@@ -145,6 +147,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
145
147
|
top: number;
|
|
146
148
|
rotate: number;
|
|
147
149
|
} | {
|
|
150
|
+
parentFrameId?: string;
|
|
148
151
|
id: string;
|
|
149
152
|
lock?: boolean;
|
|
150
153
|
groupId?: string;
|
|
@@ -164,6 +167,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
164
167
|
top: number;
|
|
165
168
|
rotate: number;
|
|
166
169
|
} | {
|
|
170
|
+
parentFrameId?: string;
|
|
167
171
|
id: string;
|
|
168
172
|
lock?: boolean;
|
|
169
173
|
groupId?: string;
|
|
@@ -185,10 +189,25 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
185
189
|
radius?: number;
|
|
186
190
|
colorMask?: string;
|
|
187
191
|
imageType?: import("../types/slides").ImageType;
|
|
192
|
+
qrCode?: {
|
|
193
|
+
text: string;
|
|
194
|
+
errorCorrection: 'L' | 'M' | 'Q' | 'H';
|
|
195
|
+
foreground: string;
|
|
196
|
+
background: string;
|
|
197
|
+
};
|
|
198
|
+
photoFrame?: {
|
|
199
|
+
layout: string;
|
|
200
|
+
cell: number;
|
|
201
|
+
gutter: number;
|
|
202
|
+
empty: boolean;
|
|
203
|
+
sourceWidth?: number;
|
|
204
|
+
sourceHeight?: number;
|
|
205
|
+
};
|
|
188
206
|
left: number;
|
|
189
207
|
top: number;
|
|
190
208
|
rotate: number;
|
|
191
209
|
} | {
|
|
210
|
+
parentFrameId?: string;
|
|
192
211
|
id: string;
|
|
193
212
|
lock?: boolean;
|
|
194
213
|
groupId?: string;
|
|
@@ -209,6 +228,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
209
228
|
top: number;
|
|
210
229
|
rotate: number;
|
|
211
230
|
} | {
|
|
231
|
+
parentFrameId?: string;
|
|
212
232
|
id: string;
|
|
213
233
|
lock?: boolean;
|
|
214
234
|
groupId?: string;
|
|
@@ -224,6 +244,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
224
244
|
top: number;
|
|
225
245
|
rotate: number;
|
|
226
246
|
} | {
|
|
247
|
+
parentFrameId?: string;
|
|
227
248
|
id: string;
|
|
228
249
|
lock?: boolean;
|
|
229
250
|
groupId?: string;
|
|
@@ -233,6 +254,9 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
233
254
|
name?: string;
|
|
234
255
|
source?: import("../types/slides").ElementSource;
|
|
235
256
|
effects?: import("../types/slides").PPTElementEffects;
|
|
257
|
+
frame?: {
|
|
258
|
+
clipContent: boolean;
|
|
259
|
+
};
|
|
236
260
|
type: 'shape';
|
|
237
261
|
viewBox: [number, number];
|
|
238
262
|
path: string;
|
|
@@ -253,6 +277,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
253
277
|
top: number;
|
|
254
278
|
rotate: number;
|
|
255
279
|
} | {
|
|
280
|
+
parentFrameId?: string;
|
|
256
281
|
id: string;
|
|
257
282
|
lock?: boolean;
|
|
258
283
|
groupId?: string;
|
|
@@ -272,6 +297,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
272
297
|
top: number;
|
|
273
298
|
rotate: number;
|
|
274
299
|
} | {
|
|
300
|
+
parentFrameId?: string;
|
|
275
301
|
id: string;
|
|
276
302
|
lock?: boolean;
|
|
277
303
|
groupId?: string;
|
|
@@ -309,6 +335,7 @@ export declare const rotateRectLikeElement: (element: Exclude<PPTElement, PPTLin
|
|
|
309
335
|
top: number;
|
|
310
336
|
rotate: number;
|
|
311
337
|
} | {
|
|
338
|
+
parentFrameId?: string;
|
|
312
339
|
id: string;
|
|
313
340
|
lock?: boolean;
|
|
314
341
|
groupId?: string;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { Gradient, ImageElementClip, ImageElementFilters, LineStyleType, PPTElementOutline, PPTElementShadow, PPTImageElement, PPTLineElement, SlideBackgroundImageSize } from '../types/slides';
|
|
2
|
+
/** Line elements store stroke thickness in `width` (not a bounding-box width). */
|
|
3
|
+
export declare const lineStrokeWidth: (element: Pick<PPTLineElement, 'width'>) => number;
|
|
4
|
+
export declare const shadowPaint: (shadow?: PPTElementShadow | null) => {
|
|
5
|
+
shadowColor?: undefined;
|
|
6
|
+
shadowBlur?: undefined;
|
|
7
|
+
shadowOffsetX?: undefined;
|
|
8
|
+
shadowOffsetY?: undefined;
|
|
9
|
+
shadowOpacity?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
shadowColor: string;
|
|
12
|
+
shadowBlur: number;
|
|
13
|
+
shadowOffsetX: number;
|
|
14
|
+
shadowOffsetY: number;
|
|
15
|
+
shadowOpacity: number;
|
|
16
|
+
};
|
|
17
|
+
export declare const outlineDashArray: (style: LineStyleType | undefined, width: number) => number[] | undefined;
|
|
18
|
+
export declare const lineDashArray: (style: LineStyleType, strokeWidth: number) => number[] | undefined;
|
|
19
|
+
export declare const outlineStrokePaint: (outline?: PPTElementOutline) => {
|
|
20
|
+
strokeEnabled: false;
|
|
21
|
+
stroke?: undefined;
|
|
22
|
+
strokeWidth?: undefined;
|
|
23
|
+
strokeScaleEnabled?: undefined;
|
|
24
|
+
lineCap?: undefined;
|
|
25
|
+
miterLimit?: undefined;
|
|
26
|
+
dash?: undefined;
|
|
27
|
+
dashEnabled?: undefined;
|
|
28
|
+
} | {
|
|
29
|
+
stroke: string;
|
|
30
|
+
strokeWidth: number;
|
|
31
|
+
strokeScaleEnabled: boolean;
|
|
32
|
+
lineCap: 'butt';
|
|
33
|
+
miterLimit: number;
|
|
34
|
+
dash: number[];
|
|
35
|
+
dashEnabled: boolean;
|
|
36
|
+
strokeEnabled: true;
|
|
37
|
+
};
|
|
38
|
+
export declare const imageOpacity: (filters?: ImageElementFilters) => number;
|
|
39
|
+
export declare const imageCropRect: (clip: ImageElementClip | undefined, imgW: number, imgH: number) => {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
} | undefined;
|
|
45
|
+
export declare const imageCornerRadius: (element: PPTImageElement) => number;
|
|
46
|
+
export declare const imageClipKind: (element: PPTImageElement) => 'rect' | 'ellipse' | 'polygon';
|
|
47
|
+
type PathCtx = {
|
|
48
|
+
beginPath: () => void;
|
|
49
|
+
moveTo: (x: number, y: number) => void;
|
|
50
|
+
lineTo: (x: number, y: number) => void;
|
|
51
|
+
closePath: () => void;
|
|
52
|
+
rect: (x: number, y: number, width: number, height: number) => void;
|
|
53
|
+
roundRect: (x: number, y: number, width: number, height: number, radii: number) => void;
|
|
54
|
+
ellipse: (x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number) => void;
|
|
55
|
+
};
|
|
56
|
+
export declare const drawSvgPolyline: (ctx: Pick<PathCtx, 'moveTo' | 'lineTo' | 'closePath'>, d: string) => void;
|
|
57
|
+
export declare const drawImageClip: (ctx: PathCtx, element: PPTImageElement) => void;
|
|
58
|
+
export declare const imageClipPathData: (element: PPTImageElement) => string | undefined;
|
|
59
|
+
export declare const linearGradientPaint: (width: number, height: number, gradient: Gradient) => {
|
|
60
|
+
fillLinearGradientStartPoint: {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
};
|
|
64
|
+
fillLinearGradientEndPoint: {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
};
|
|
68
|
+
fillLinearGradientColorStops: (string | number)[];
|
|
69
|
+
};
|
|
70
|
+
export declare const radialGradientPaint: (width: number, height: number, gradient: Gradient, origin?: 'center' | 'css') => {
|
|
71
|
+
fillRadialGradientStartPoint: {
|
|
72
|
+
x: number;
|
|
73
|
+
y: number;
|
|
74
|
+
};
|
|
75
|
+
fillRadialGradientStartRadius: number;
|
|
76
|
+
fillRadialGradientEndPoint: {
|
|
77
|
+
x: number;
|
|
78
|
+
y: number;
|
|
79
|
+
};
|
|
80
|
+
fillRadialGradientEndRadius: number;
|
|
81
|
+
fillRadialGradientColorStops: (string | number)[];
|
|
82
|
+
};
|
|
83
|
+
export declare const shapeFillPaint: (width: number, height: number, fill: string, gradient?: Gradient) => {
|
|
84
|
+
fillLinearGradientStartPoint: {
|
|
85
|
+
x: number;
|
|
86
|
+
y: number;
|
|
87
|
+
};
|
|
88
|
+
fillLinearGradientEndPoint: {
|
|
89
|
+
x: number;
|
|
90
|
+
y: number;
|
|
91
|
+
};
|
|
92
|
+
fillLinearGradientColorStops: (string | number)[];
|
|
93
|
+
} | {
|
|
94
|
+
fillRadialGradientStartPoint: {
|
|
95
|
+
x: number;
|
|
96
|
+
y: number;
|
|
97
|
+
};
|
|
98
|
+
fillRadialGradientStartRadius: number;
|
|
99
|
+
fillRadialGradientEndPoint: {
|
|
100
|
+
x: number;
|
|
101
|
+
y: number;
|
|
102
|
+
};
|
|
103
|
+
fillRadialGradientEndRadius: number;
|
|
104
|
+
fillRadialGradientColorStops: (string | number)[];
|
|
105
|
+
} | {
|
|
106
|
+
fillEnabled: false;
|
|
107
|
+
fill?: undefined;
|
|
108
|
+
} | {
|
|
109
|
+
fillEnabled?: undefined;
|
|
110
|
+
fill: string;
|
|
111
|
+
};
|
|
112
|
+
export declare const patternCoverPaint: (imgW: number, imgH: number, boxW: number, boxH: number) => {
|
|
113
|
+
fillPatternScaleX: number;
|
|
114
|
+
fillPatternScaleY: number;
|
|
115
|
+
fillPatternX: number;
|
|
116
|
+
fillPatternY: number;
|
|
117
|
+
fillPatternRepeat: string;
|
|
118
|
+
};
|
|
119
|
+
export declare const fitRect: (imgW: number, imgH: number, boxW: number, boxH: number, mode: Exclude<SlideBackgroundImageSize, 'repeat'>) => {
|
|
120
|
+
x: number;
|
|
121
|
+
y: number;
|
|
122
|
+
width: number;
|
|
123
|
+
height: number;
|
|
124
|
+
};
|
|
125
|
+
export declare const linePolylinePoints: (element: PPTLineElement) => number[] | null;
|
|
126
|
+
export declare const canvasFromBitmap: (bitmap: ImageBitmap) => HTMLCanvasElement;
|
|
127
|
+
/** Konva's config types list HTMLImageElement; runtime also accepts canvas. */
|
|
128
|
+
export declare const patternImageSource: (bitmap: ImageBitmap) => HTMLImageElement;
|
|
129
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PPTElement, PPTShapeElement } from '../types/slides';
|
|
2
|
+
export type FramePoint = {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const isFrame: (element: PPTElement) => element is PPTShapeElement;
|
|
7
|
+
export declare function frameAncestors(element: PPTElement, elements: readonly PPTElement[]): PPTShapeElement[];
|
|
8
|
+
export declare function frameDescendantIds(elements: readonly PPTElement[], ids: readonly string[]): string[];
|
|
9
|
+
export declare function frameCorners(element: PPTElement): FramePoint[];
|
|
10
|
+
export declare function frameClipPolygon(element: PPTElement, elements: readonly PPTElement[]): FramePoint[] | null;
|
|
11
|
+
export declare function createFrameFromSelection(elements: readonly PPTElement[], ids: readonly string[], frameId: string, name: string): {
|
|
12
|
+
elements: PPTElement[];
|
|
13
|
+
selection: string[];
|
|
14
|
+
};
|
|
15
|
+
export declare function reparentFrameElements(elements: readonly PPTElement[], ids: readonly string[], parentFrameId?: string): PPTElement[];
|
|
16
|
+
/** Carry descendants with translated/rotated frames; resizing leaves child sizes unchanged. */
|
|
17
|
+
export declare function reconcileFrameTransforms(previous: readonly PPTElement[], next: readonly PPTElement[]): PPTElement[];
|
|
18
|
+
/** Keep native painter order coherent: a frame's artwork always precedes its children. */
|
|
19
|
+
export declare function normalizeFrameOrder(elements: readonly PPTElement[]): PPTElement[];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SlideGuide } from '../types/slides';
|
|
2
|
+
import type { SnapBox, SnapResult } from './snap';
|
|
3
|
+
/** Import may contain unknown metadata. Ignore invalid guides before geometry calculations. */
|
|
4
|
+
export declare function validPageGuides(value: unknown): SlideGuide[];
|
|
5
|
+
/** Explicit guides take priority within six screen pixels, independent of zoom. */
|
|
6
|
+
export declare function snapToPageGuides(box: SnapBox, guides: readonly SlideGuide[], scale: number, base: SnapResult): SnapResult;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Slide } from '../types/slides';
|
|
2
|
+
/** Move a complete selection between page coordinate spaces in one transaction. */
|
|
3
|
+
export declare function transferPageElements(slides: Slide[], sourceId: string, targetId: string, ids: readonly string[], width: number, height: number): Slide[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
import type { PPTElement } from '../../../types/slides';
|
|
3
|
+
import type { MynaViewState } from '../../Myna/viewStore';
|
|
4
|
+
type Props = {
|
|
5
|
+
canvasRef: RefObject<HTMLDivElement | null>;
|
|
6
|
+
viewportStyles: {
|
|
7
|
+
left: number;
|
|
8
|
+
top: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
elementList: PPTElement[];
|
|
13
|
+
view: MynaViewState;
|
|
14
|
+
};
|
|
15
|
+
/** Editor-only measurement chrome. Guides live in slide coordinates, never export pixels. */
|
|
16
|
+
declare const MynaRulers: import("react").MemoExoticComponent<({ canvasRef, viewportStyles, elementList, view }: Props) => import("react").JSX.Element>;
|
|
17
|
+
export default MynaRulers;
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
declare const ViewportBackground: import("react").MemoExoticComponent<(
|
|
1
|
+
declare const ViewportBackground: import("react").MemoExoticComponent<({ showGrid }: {
|
|
2
|
+
showGrid?: boolean;
|
|
3
|
+
}) => import("react").JSX.Element>;
|
|
2
4
|
export default ViewportBackground;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { MynaViewPreferences } from '../../../Myna/viewStore';
|
|
1
2
|
import type { PPTElement } from '../../../../types/slides';
|
|
2
3
|
import type { AlignmentLineProps } from '../../../../types/edit';
|
|
3
4
|
export default _default;
|
|
4
|
-
declare function _default(elementList: PPTElement[], setElementList: (value: PPTElement[]) => void, _alignmentLines: AlignmentLineProps[], setAlignmentLines: (value: AlignmentLineProps[]) => void, canvasScale: number): {
|
|
5
|
+
declare function _default(elementList: PPTElement[], setElementList: (value: PPTElement[]) => void, _alignmentLines: AlignmentLineProps[], setAlignmentLines: (value: AlignmentLineProps[]) => void, canvasScale: number, mynaView?: MynaViewPreferences): {
|
|
5
6
|
dragElement: (e: MouseEvent | TouchEvent, element: PPTElement) => void;
|
|
6
7
|
};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { type CSSProperties } from 'react';
|
|
2
|
-
|
|
2
|
+
import type { MynaViewState } from '../../Myna/viewStore';
|
|
3
|
+
declare const Canvas: import("react").MemoExoticComponent<({ className, style, allowOverflow, mynaView }: {
|
|
3
4
|
className?: string;
|
|
4
5
|
style?: CSSProperties;
|
|
6
|
+
allowOverflow?: boolean;
|
|
7
|
+
mynaView?: MynaViewState;
|
|
5
8
|
}) => import("react").JSX.Element>;
|
|
6
9
|
export default Canvas;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { type CSSProperties } from 'react';
|
|
2
|
-
declare const EditorHeader: import("react").MemoExoticComponent<({ className, style }: {
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
declare const EditorHeader: import("react").MemoExoticComponent<({ className, style, myna, children }: {
|
|
3
3
|
className?: string;
|
|
4
4
|
style?: CSSProperties;
|
|
5
|
+
myna?: boolean;
|
|
6
|
+
children?: ReactNode;
|
|
5
7
|
}) => import("react").JSX.Element>;
|
|
6
8
|
export default EditorHeader;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export default function EditorWithCreationDefaults({ myna }: {
|
|
2
|
+
myna?: boolean;
|
|
3
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Slide } from '../../types/slides';
|
|
2
|
+
import type { FikaMediaKind } from '../../configs/mediaUpload';
|
|
3
|
+
export interface MynaAssetLabels {
|
|
4
|
+
hint: string;
|
|
5
|
+
search: string;
|
|
6
|
+
all: string;
|
|
7
|
+
image: string;
|
|
8
|
+
video: string;
|
|
9
|
+
audio: string;
|
|
10
|
+
empty: string;
|
|
11
|
+
noResults: string;
|
|
12
|
+
insertFailed: string;
|
|
13
|
+
insert: (name: string) => string;
|
|
14
|
+
uses: (count: number) => string;
|
|
15
|
+
}
|
|
16
|
+
export interface MynaAsset {
|
|
17
|
+
src: string;
|
|
18
|
+
kind: FikaMediaKind;
|
|
19
|
+
name: string;
|
|
20
|
+
poster?: string;
|
|
21
|
+
ext?: string;
|
|
22
|
+
uses: number;
|
|
23
|
+
}
|
|
24
|
+
/** Reuse document media without uploading a second copy; source URLs remain durable. */
|
|
25
|
+
export declare function collectMynaAssets(slides: Slide[]): MynaAsset[];
|
|
26
|
+
export default function MynaAssetsPanel({ labels }: {
|
|
27
|
+
labels: MynaAssetLabels;
|
|
28
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** Resizable dock; unpinned drawers overlay the stage without resizing the design. */
|
|
3
|
+
export default function MynaDrawer({ id, side, title, onClose, children }: {
|
|
4
|
+
id: string;
|
|
5
|
+
side?: 'left' | 'right';
|
|
6
|
+
title: string;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ShapePoolItem } from '../../configs/shapes';
|
|
2
|
+
import { type LinePoolItem } from '../../configs/lines';
|
|
3
|
+
import type { ChartType } from '../../types/slides';
|
|
4
|
+
export default function MynaElementsPanel({ onShape, onLine, onChart, onTable, onScribble, onPolygon, onPath }: {
|
|
5
|
+
onShape: (shape: ShapePoolItem) => void;
|
|
6
|
+
onLine: (line: LinePoolItem) => void;
|
|
7
|
+
onChart: (chart: ChartType) => void;
|
|
8
|
+
onTable: (row: number, col: number) => void;
|
|
9
|
+
onScribble: () => void;
|
|
10
|
+
onPolygon: () => void;
|
|
11
|
+
onPath: () => void;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PPTElement } from '../../types/slides';
|
|
2
|
+
export default function MynaFrameTitles({ elements, scale, drag }: {
|
|
3
|
+
elements: PPTElement[];
|
|
4
|
+
scale: number;
|
|
5
|
+
drag: (event: MouseEvent | TouchEvent, element: PPTElement) => void;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function MynaFramesHierarchy(): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Native clipped images keep all existing render/export/crop/group operations available. */
|
|
2
|
+
export default function MynaFramesPanel({ query, kind, compact }: {
|
|
3
|
+
query?: string;
|
|
4
|
+
kind?: 'all' | 'frames' | 'grids';
|
|
5
|
+
compact?: boolean;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function MynaLayersPanel(): import("react").JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function useMynaPageOrigin(enabled: boolean, pan: (x: number, y: number) => void, viewport: {
|
|
2
|
+
left: number;
|
|
3
|
+
top: number;
|
|
4
|
+
}, canvas: {
|
|
5
|
+
current: HTMLElement | null;
|
|
6
|
+
}): void;
|
|
7
|
+
/** Other pages share the native editor's camera. Only the active page mounts editing chrome. */
|
|
8
|
+
declare const MynaPageCanvas: import("react").MemoExoticComponent<({ left, top, canvasWidth, canvasHeight }: {
|
|
9
|
+
left: number;
|
|
10
|
+
top: number;
|
|
11
|
+
canvasWidth: number;
|
|
12
|
+
canvasHeight: number;
|
|
13
|
+
}) => import("react").JSX.Element>;
|
|
14
|
+
export default MynaPageCanvas;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function MynaPageLayoutControls(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function MynaPageOutline(): import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Off-page artwork for inactive pages; the regular thumbnail still paints the page. */
|
|
2
|
+
declare const _default: import("react").MemoExoticComponent<({ id, x, y, scale, activate }: {
|
|
3
|
+
id: string;
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
scale: number;
|
|
7
|
+
activate: (id: string) => void;
|
|
8
|
+
}) => import("react").JSX.Element>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface MynaPageLabels {
|
|
2
|
+
hint: string;
|
|
3
|
+
search: string;
|
|
4
|
+
empty: string;
|
|
5
|
+
add: string;
|
|
6
|
+
duplicate: string;
|
|
7
|
+
delete: string;
|
|
8
|
+
moveUp: string;
|
|
9
|
+
moveDown: string;
|
|
10
|
+
page: (number: number) => string;
|
|
11
|
+
}
|
|
12
|
+
export default function MynaPagesPanel({ labels }: {
|
|
13
|
+
labels: MynaPageLabels;
|
|
14
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function MynaQrPanel(): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function MynaWorkspace(): import("react").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function WorkspaceLabelsPanel(): import("react").JSX.Element;
|
|
2
|
+
export declare const WorkspaceLabelsCanvas: import("react").MemoExoticComponent<({ left, top, originX, originY, scale }: {
|
|
3
|
+
left: number;
|
|
4
|
+
top: number;
|
|
5
|
+
originX: number;
|
|
6
|
+
originY: number;
|
|
7
|
+
scale: number;
|
|
8
|
+
}) => import("react").JSX.Element>;
|