fika-editor 3.2.9 → 3.3.0

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.
Files changed (103) hide show
  1. package/dist/embed/{824.js → 6104.js} +18 -18
  2. package/dist/embed/agentic-manifest.json +46 -10
  3. package/dist/embed/chunks/1131.js +1 -1
  4. package/dist/embed/chunks/2407.js +1 -1
  5. package/dist/embed/chunks/2807.js +1 -1
  6. package/dist/embed/chunks/3888.js +1 -1
  7. package/dist/embed/chunks/5216.js +1 -1
  8. package/dist/embed/chunks/574.js +1 -1
  9. package/dist/embed/chunks/655.js +1 -0
  10. package/dist/embed/chunks/862.js +1 -1
  11. package/dist/embed/chunks/9657.js +1 -1
  12. package/dist/embed/chunks/9800.js +1 -1
  13. package/dist/embed/fika-embed.css +1 -1
  14. package/dist/embed/fika-embed.js +18 -4
  15. package/dist/layout/types/slides.js +1 -0
  16. package/dist/layout/utils/resizeDeck.js +257 -0
  17. package/dist/types/components/Button.d.ts +2 -2
  18. package/dist/types/configs/theme.d.ts +2 -0
  19. package/dist/types/embed/agentic/canvasContext.d.ts +4 -0
  20. package/dist/types/embed/agentic/canvasOperations.d.ts +3 -0
  21. package/dist/types/embed/agentic/types.d.ts +118 -0
  22. package/dist/types/embed/index.d.ts +3 -0
  23. package/dist/types/embed/render.d.ts +4 -0
  24. package/dist/types/embed/types.d.ts +3 -2
  25. package/dist/types/hooks/textCreationDefaults.d.ts +2 -0
  26. package/dist/types/hooks/useAnimationFrameCallback.d.ts +6 -0
  27. package/dist/types/hooks/useResizeDeck.d.ts +1 -0
  28. package/dist/types/i18n/cs/myna/index.d.ts +3 -0
  29. package/dist/types/i18n/en/myna/index.d.ts +3 -0
  30. package/dist/types/i18n/i18n-react.d.ts +2 -0
  31. package/dist/types/i18n/i18n-types.d.ts +2888 -1341
  32. package/dist/types/i18n/i18n-util.async.d.ts +1 -0
  33. package/dist/types/i18n/i18n-util.d.ts +1 -0
  34. package/dist/types/i18n/pl/myna/index.d.ts +3 -0
  35. package/dist/types/i18n/sk/myna/index.d.ts +3 -0
  36. package/dist/types/paint/slidePainter.d.ts +11 -0
  37. package/dist/types/store/slides.d.ts +241 -1
  38. package/dist/types/types/slides.d.ts +53 -0
  39. package/dist/types/utils/applyDesignTheme.d.ts +1 -1
  40. package/dist/types/utils/canvasFit.d.ts +17 -0
  41. package/dist/types/utils/canvasHitTest.d.ts +4 -0
  42. package/dist/types/utils/designColorRoles.d.ts +10 -0
  43. package/dist/types/utils/element.d.ts +27 -0
  44. package/dist/types/utils/elementPaint.d.ts +129 -0
  45. package/dist/types/utils/frameDomClip.d.ts +3 -0
  46. package/dist/types/utils/nestedFrames.d.ts +19 -0
  47. package/dist/types/utils/pageGuides.d.ts +6 -0
  48. package/dist/types/utils/renderMetrics.d.ts +2 -0
  49. package/dist/types/utils/resizeDeck.d.ts +11 -0
  50. package/dist/types/utils/selectInsertedElements.d.ts +2 -0
  51. package/dist/types/utils/transferPageElements.d.ts +3 -0
  52. package/dist/types/views/Editor/Canvas/MynaRulers.d.ts +17 -0
  53. package/dist/types/views/Editor/Canvas/ViewportBackground.d.ts +3 -1
  54. package/dist/types/views/Editor/Canvas/hooks/useDragElement.d.ts +2 -1
  55. package/dist/types/views/Editor/Canvas/hooks/useDrop.d.ts +1 -1
  56. package/dist/types/views/Editor/Canvas/hooks/useViewportSize.d.ts +1 -0
  57. package/dist/types/views/Editor/Canvas/index.d.ts +4 -1
  58. package/dist/types/views/Editor/EditorHeader/index.d.ts +4 -2
  59. package/dist/types/views/Editor/index.d.ts +3 -2
  60. package/dist/types/views/Myna/MynaAssetsPanel.d.ts +28 -0
  61. package/dist/types/views/Myna/MynaDownload.d.ts +4 -0
  62. package/dist/types/views/Myna/MynaDrawer.d.ts +9 -0
  63. package/dist/types/views/Myna/MynaElementsPanel.d.ts +12 -0
  64. package/dist/types/views/Myna/MynaFrameTitles.d.ts +6 -0
  65. package/dist/types/views/Myna/MynaFramesHierarchy.d.ts +1 -0
  66. package/dist/types/views/Myna/MynaFramesPanel.d.ts +6 -0
  67. package/dist/types/views/Myna/MynaHeader.d.ts +5 -0
  68. package/dist/types/views/Myna/MynaInspector.d.ts +2 -0
  69. package/dist/types/views/Myna/MynaLayersPanel.d.ts +1 -0
  70. package/dist/types/views/Myna/MynaPageCanvas.d.ts +14 -0
  71. package/dist/types/views/Myna/MynaPageLayoutControls.d.ts +1 -0
  72. package/dist/types/views/Myna/MynaPageOutline.d.ts +1 -0
  73. package/dist/types/views/Myna/MynaPageOverflow.d.ts +9 -0
  74. package/dist/types/views/Myna/MynaPagesPanel.d.ts +14 -0
  75. package/dist/types/views/Myna/MynaQrPanel.d.ts +1 -0
  76. package/dist/types/views/Myna/MynaTemplateLibrary.d.ts +3 -0
  77. package/dist/types/views/Myna/MynaViewSettings.d.ts +2 -0
  78. package/dist/types/views/Myna/MynaWorkspace.d.ts +1 -0
  79. package/dist/types/views/Myna/MynaZoomControl.d.ts +3 -0
  80. package/dist/types/views/Myna/WorkspaceLabels.d.ts +8 -0
  81. package/dist/types/views/Myna/WorkspaceObjects.d.ts +9 -0
  82. package/dist/types/views/Myna/catalog.d.ts +233 -0
  83. package/dist/types/views/Myna/exportPages.d.ts +2 -0
  84. package/dist/types/views/Myna/inspectorLabels.d.ts +30 -0
  85. package/dist/types/views/Myna/libraryMessages.d.ts +28 -0
  86. package/dist/types/views/Myna/pageLayout.d.ts +22 -0
  87. package/dist/types/views/Myna/pageSnapping.d.ts +41 -0
  88. package/dist/types/views/Myna/pdf.d.ts +10 -0
  89. package/dist/types/views/Myna/photoFrameLabels.d.ts +28 -0
  90. package/dist/types/views/Myna/photoFrameUpload.d.ts +5 -0
  91. package/dist/types/views/Myna/photoFrames.d.ts +11 -0
  92. package/dist/types/views/Myna/qrCode.d.ts +7 -0
  93. package/dist/types/views/Myna/qrMessages.d.ts +18 -0
  94. package/dist/types/views/Myna/svg.d.ts +21 -0
  95. package/dist/types/views/Myna/svgWatermark.d.ts +2 -0
  96. package/dist/types/views/Myna/templateLibrary.d.ts +26 -0
  97. package/dist/types/views/Myna/viewStore.d.ts +14 -0
  98. package/dist/types/views/Myna/workspaceLabels.d.ts +10 -0
  99. package/dist/types/views/Myna/workspaceSelectors.d.ts +17 -0
  100. package/docs/AGENTIC_BRIDGE.md +23 -0
  101. package/docs/EMBED.md +33 -0
  102. package/docs/MYNA.md +247 -0
  103. package/package.json +15 -4
@@ -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;
@@ -1,6 +1,6 @@
1
1
  import type { Slide, SlideTheme } from '../types/slides';
2
2
  import { type PresetTheme } from '../configs/theme';
3
- export declare const setSlideTheme: (slide: Slide, theme: PresetTheme, index?: number) => void;
3
+ export declare const setSlideTheme: (slide: Slide, theme: PresetTheme, index?: number, sourceAccents?: readonly string[]) => void;
4
4
  /** Shared by the design picker and agent command, with no store/history effects. */
5
5
  export declare function applyDesignTheme(slides: readonly Slide[], currentTheme: SlideTheme, preset: PresetTheme): {
6
6
  slides: Slide[];
@@ -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;
@@ -0,0 +1,10 @@
1
+ import type { PresetTheme } from '../configs/theme';
2
+ import type { PPTElement, Slide } from '../types/slides';
3
+ /** Keep neutral surfaces, pale panels and saturated accents in distinct roles. */
4
+ export declare function designColorRoles(theme: PresetTheme, sourceAccents: readonly string[]): {
5
+ fill: (color: string) => string;
6
+ ink: (surface: string, original?: string) => string;
7
+ };
8
+ /** Find the painted panel below a text object; preserve white lettering on badges. */
9
+ export declare function textSurface(slide: Slide, el: PPTElement, fallback: string): string;
10
+ export declare function retintInlineText(html: string, surface: string, ink: (surface: string, original?: string) => string): string;
@@ -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,3 @@
1
+ import type { CSSProperties } from 'react';
2
+ import type { PPTElement } from '../types/slides';
3
+ export declare function frameDomClip(element: PPTElement, elements: PPTElement[]): CSSProperties | undefined;
@@ -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,2 @@
1
+ /** Opt-in development counters used by the interaction benchmark; no production instrumentation. */
2
+ export declare function recordRender(name: string): void;
@@ -0,0 +1,11 @@
1
+ import type { Slide } from '../types/slides';
2
+ export interface SlideCanvas {
3
+ width: number;
4
+ height: number;
5
+ }
6
+ /** Resize a deck without distorting media or changing reading order.
7
+ * Uniformly scale content and typography, redistribute available space through
8
+ * empty tracks, and keep decorative edge shapes attached to their canvas edge.
9
+ * Overlaps, rotations, z-order and grouped compositions remain intact.
10
+ */
11
+ export declare function resizeDeckSlides(slides: readonly Slide[], from: SlideCanvas, to: SlideCanvas): Slide[];
@@ -0,0 +1,2 @@
1
+ /** Select inserted elements and hand keyboard interaction back to the canvas. */
2
+ export declare function selectInsertedElements(ids: string[]): void;
@@ -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<() => import("react").JSX.Element>;
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,4 +1,4 @@
1
1
  export default _default;
2
2
  declare function _default(elementRef: {
3
3
  current: HTMLElement | null;
4
- }): void;
4
+ }, onFrameDrop?: (event: DragEvent) => boolean): void;
@@ -10,4 +10,5 @@ declare function _default(canvasRef: {
10
10
  };
11
11
  dragViewport: (e: MouseEvent) => void;
12
12
  panViewport: (dx: number, dy: number) => void;
13
+ rebaseViewport: (dx: number, dy: number) => void;
13
14
  };
@@ -1,6 +1,9 @@
1
1
  import { type CSSProperties } from 'react';
2
- declare const Canvas: import("react").MemoExoticComponent<({ className, style }: {
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
- declare const Editor: import("react").MemoExoticComponent<() => import("react").JSX.Element>;
2
- export default Editor;
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,4 @@
1
+ /** Snapshot before rendering so page edits cannot leak into an in-flight export. */
2
+ export default function MynaDownload({ onClose }: {
3
+ onClose: () => void;
4
+ }): 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,5 @@
1
+ import type { ReactNode } from 'react';
2
+ /** A single document bar with the editor's existing file and language controls. */
3
+ export default function MynaHeader({ children }: {
4
+ children?: ReactNode;
5
+ }): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ /** Context-sensitive surface over the native editing engine and its history. */
2
+ export default function MynaInspector(): 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;