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
package/docs/MYNA.md ADDED
@@ -0,0 +1,247 @@
1
+ # Myna design mode
2
+
3
+ Myna is Fika's graphic design workspace, enabled with `viewMode: 'canva'`
4
+ (`'myna'` is an alias). It uses the same document model, canvas, history,
5
+ controller, media uploader, and agentic APIs as the presentation editor.
6
+
7
+ ```ts
8
+ import { mountFika, createMynaDocument } from 'fika-editor/embed'
9
+ import 'fika-editor/embed.css'
10
+
11
+ const { controller } = await mountFika(document.getElementById('editor')!, {
12
+ viewMode: 'canva',
13
+ document: createMynaDocument(), // optional: Myna supplies this starter by default
14
+ assetBaseUrl: '/fika-assets',
15
+ onChange(document) { /* persist the full document, including viewport */ },
16
+ })
17
+ ```
18
+
19
+ The host needs a definite height. Render only one live Fika instance at a time
20
+ (the engine stores are shared). Changing modes requires unmounting/remounting.
21
+ An explicit document takes precedence over the square starter design.
22
+ `loadDocument`, `readOnly`, locale, media configuration, and export watermarks
23
+ continue to work. `controller.setReadOnly(true)` disables Myna mutations while
24
+ retaining page navigation and downloads. Host/agent edits remain possible.
25
+
26
+ Standalone development: run `npm run dev` from the `fika` directory, then open
27
+ `http://127.0.0.1:5173/?mode=myna`. Add `&locale=cs`, `&locale=sk`, or
28
+ `&locale=pl` to start in another language; `en` is the default. The header
29
+ language control can switch languages while editing.
30
+
31
+ ## Implemented workflows
32
+
33
+ - One full-page document header with editable title, file menu, language, resize,
34
+ properties, and download controls; unbranded, neutral ink/Nordic styling.
35
+ - Design, elements, text, uploads, assets, pages, styles, and layers drawers;
36
+ contextual properties; responsive canvas; horizontal page strip. Drawers can
37
+ be pinned or floated and resized by dragging or using arrow keys on their
38
+ separator. Width and pin preferences persist per device. Escape closes a drawer.
39
+ - Searchable page overview with duplication, deletion, arrow and drag reordering.
40
+ - Reusable document media library with search, media-type filters and usage counts.
41
+ - Six editable, locally generated templates, searchable by name/category.
42
+ Inserting one adds a page and leaves existing content intact.
43
+ - Text presets and grouped font pairings; native rich-text editing and font,
44
+ spacing, alignment, color, and effect controls.
45
+ - Responsive searchable Elements drawer for native shapes, lines,
46
+ freehand/polygon drawing, charts, and tables, with collapsible sections.
47
+ - Zoom-aware rulers and page guides: drag from the top or left ruler to add a
48
+ guide, drag to reposition, or return it to the ruler to delete. Focus a ruler
49
+ and press Enter or Space to add a guide at the page midpoint. Focused guides
50
+ support arrow-key movement (1 px, or 10 px with Shift) and Delete.
51
+ View settings control rulers, guide visibility, guide snapping, guide locking,
52
+ clearing the current page's guides, and layout-grid spacing. Hold Alt while
53
+ dragging an element to snap to the grid. Guides belong to the document's pages;
54
+ ruler/grid preferences belong to the local editor. Guides and grids never
55
+ appear in thumbnails or exported artwork.
56
+ - Off-page elements remain visible and editable on the surrounding canvas.
57
+ Page thumbnails and exports remain clipped to the document dimensions.
58
+ - Native media insertion.
59
+ Existing canvas toolbar retains math, code, and other Fika insert tools.
60
+ - Group-aware layer selection, inline renaming, duplication, deletion, keyboard
61
+ and drag ordering, locking, and temporary editor visibility.
62
+ - Add, duplicate, delete, drag-reorder, and keyboard-accessible page movement.
63
+ - Ten design formats and custom dimensions (100–8192 whole pixels per side).
64
+ Resize uses Fika's content-aware deck fitting and participates in history.
65
+ - Existing grouping, snapping, clipboard, undo/redo, image adjustments, and
66
+ presentation/animation tools remain available through the shared engine.
67
+ - PNG, JPG, WebP, and flattened multipage PDF downloads, output scale, lossy
68
+ quality, current/all/custom ordered page ranges, cancellable rendering, and ZIPs for multipage image exports. ZIP entries retain the original page numbers.
69
+ PNG/WebP can omit the page background. Raster output is limited to 32 megapixels and 16384 pixels per side.
70
+ Host watermark policies apply to these new downloads as well as PPTX.
71
+ - Editable JSON and PPTX through Fika's existing export menu.
72
+
73
+ ## Parity iteration: editing and reusable content
74
+
75
+ - Contextual Properties now stacks native typography/image/shape/table/chart
76
+ styling, geometry/arrangement and motion sections in collapsible panels.
77
+ Multi-selection uses native shared-style and alignment controls. Existing crop,
78
+ ratio and shape-mask actions work without the opening click closing the editor.
79
+ - Elements includes an accessible native 1–20 row/column table chooser, rectangular,
80
+ rounded and circular photo frames, 2/3/4/6/9-cell grids and a hero grid.
81
+ Cells are native grouped images with persisted frame metadata. Upload or reuse
82
+ an image, reposition with crop, replace, clear, swap cells, adjust gutters, or
83
+ drop an image file onto a frame on the canvas. Rotated grids retain native
84
+ editing; the gutter reflow control is disabled for those grids.
85
+ - Editable QR codes generate offline with content, correction level and color
86
+ controls. A quiet zone and contrast validation help maintain scannability.
87
+ QR settings persist in Fika documents; PNG/PPTX retain the image appearance.
88
+ - Personal templates are saved on this device, separate from starter templates.
89
+ Save all pages, search, favorite, browse recent use, rename/delete and insert
90
+ an adapted copy with remapped IDs, groups, guides and internal links. This
91
+ library has a 4 MiB storage budget and reports unavailable/quota errors.
92
+ Blob-backed media is materialized; external asset links still depend on their
93
+ original availability. Comments and speaker notes are excluded from templates.
94
+ - Pages exposes an outline, native section boundaries and explicitly saved notes.
95
+ Editing notes in this surface saves plain text; existing rich notes are left
96
+ unchanged until saved here. Notes and sections use the native document fields.
97
+ - Footer zoom adds exact percentage presets and fit-to-selection, accounting for
98
+ rotated bounds, ruler space and overlay drawers. View changes do not change
99
+ artwork geometry.
100
+ - SVG images now decode through the browser image/canvas path before bitmap
101
+ caching, fixing SVG-backed placeholders, uploaded SVGs and QR raster exports.
102
+
103
+ These controls have English, Czech, Slovak and Polish labels. Feature-specific
104
+ browser regressions are registered as `myna-inspector:e2e`, `myna-frames:e2e`,
105
+ `myna-library:e2e`, `myna-qr:e2e`, `myna-zoom:e2e`, `myna-outline:e2e` and
106
+ `myna-export:e2e`. Unit fixtures cover frame geometry, template identity/storage,
107
+ QR decode round trips and export range validation. See the
108
+ [parity checklist](MYNA_PARITY_TODO.md) for evidence and remaining work.
109
+
110
+ ## Scope and fidelity
111
+
112
+ HyCanvas's editor documentation and interaction layout inspired the workspace;
113
+ no HyCanvas source or assets were copied. Myna uses original templates and
114
+ Fika's native editing/rendering implementation.
115
+
116
+ This is a working design editor, not complete Canva service parity. It does not
117
+ supply a stock-media service, cloud brand kits, collaborative cursors/comments,
118
+ account sharing, AI image generation/background removal, social publishing,
119
+ or a video timeline. Myna and its template library support English, Czech, Slovak, and Polish.
120
+ New template pages use the current locale; changing languages preserves existing
121
+ design content. Pages share a document-wide
122
+ size. Layer visibility is temporary editor state, not persistent export state.
123
+
124
+ PDFs are flattened raster pages (CSS pixels map to 0.75 PDF points); text is
125
+ not selectable, and PDFs do not provide vector, CMYK, bleed, or crop-mark
126
+ output. Animated/video content exports as stills through the existing painter.
127
+ Exports load original-resolution images and use the host media resolver when
128
+ needed; unreadable images fail explicitly. Fonts must be available to the
129
+ browser. Fika's painter waits up to 15 seconds for complex chart/math resources;
130
+ unresolved complex resources retain its existing limitations.
131
+ No external stock catalog or external font service is required by Myna.
132
+
133
+ ## Validation
134
+
135
+ - `npm run type-check`
136
+ - `npm test -- myna` (unit and browser tests; requires the development server)
137
+ - `FIKA_TEST_URL=http://127.0.0.1:5178 node scripts/e2e-myna.mjs`
138
+ against a running standalone development server. Covers page lifecycle,
139
+ resize, text, layers, image/PDF downloads, read-only, and narrow layouts.
140
+ - `npm test -- myna-rulers myna-view myna-guide-snap pageGuides`
141
+ covers guide interactions, preferences, actual canvas snapping, and resize math.
142
+ - `npm run build:embed`
143
+
144
+ ### Elements library and SVG download
145
+
146
+ Elements has one search field and category filter for tools, photo frames, photo grids,
147
+ shapes, lines, drawing, charts and tables. Frame previews keep their square aspect ratio;
148
+ the circle preview is circular. Choose the QR code tile to open the generator, then use
149
+ Back to return to the library. The same insertion and frame editing tools remain available.
150
+
151
+ Download → SVG exports the current page, all pages, a page range, or selected objects.
152
+ Multiple pages download as a ZIP containing one SVG per page. Selected objects use their
153
+ painted bounds and include selected group members. Page exports clip artwork to the page;
154
+ selection exports omit the page background. Photos are embedded, while supported shapes,
155
+ lines, text, tables and charts retain vector content. Available webfont declarations are
156
+ embedded where possible; recipients may still need matching fonts. Complex unsupported
157
+ objects/effects use individual embedded raster images, with a notice after export.
158
+ Host-configured export watermarks also apply to SVG downloads.
159
+
160
+ ### Freeform page canvas
161
+
162
+ Myna shows pages together on one workspace. Drag a page title to position it anywhere,
163
+ including negative coordinates. Shift-click page titles to select several pages and drag
164
+ them together; holding Shift while dragging constrains movement to one axis. Focus a title
165
+ and use arrow keys for 1px movement (Shift: 10px). Undo/redo restores page positions.
166
+
167
+ The Pages drawer provides exact X/Y coordinates, page names, and Grid/Row/Column arrangement.
168
+ Selected objects can be moved to another page with their groups and linked notes/animations.
169
+ Fit all pages shows the complete layout; Fit focuses the active page. Wheel scrolling pans;
170
+ Ctrl/Command + wheel zooms, and Space + drag pans. Clicking an inactive page activates its
171
+ native editor. Offscreen pages are culled, with bounded-resolution previews at extreme zoom.
172
+
173
+ Page positions are stored in the document as `Slide.canvasPosition`; names use `canvasName`.
174
+ Existing documents receive a collision-free grid. Workspace layout is independent of page
175
+ order and page exports. Pages currently share the document's dimensions; this does not add
176
+ per-page dimensions or cross-page object multi-selection.
177
+
178
+ ### Page alignment and workspace labels
179
+
180
+ Dragging page titles now snaps matching edges and centers and shows temporary alignment
181
+ lines. Matching gaps between neighboring pages show distance measurements. The tolerance
182
+ is six screen pixels at every zoom, and a multi-page selection keeps its internal offsets.
183
+ View → Snap pages to each other controls smart snapping. View → Snap pages and labels to
184
+ grid quantizes workspace movement using Grid spacing; Show layout grid also displays the
185
+ workspace grid. Nearby page alignment takes priority over the grid. Hold Alt to bypass
186
+ page/label snapping; Shift constrains a drag to one axis. These workspace shortcuts do not
187
+ change the existing element-drag grid shortcut.
188
+
189
+ Pages → Workspace labels adds independent text annotations above the active page. Drag to
190
+ position, double-click or press Enter to edit, and use the drawer to edit text/size or delete.
191
+ Escape cancels edits/drags; arrow keys nudge and Delete removes a focused label. Fit all
192
+ includes labels. Labels persist with the document and survive deletion of their storage
193
+ page, but are neither duplicated with a page nor included in page SVG/image/PDF exports.
194
+
195
+ Page drags also snap to ruler guides on stationary pages when Snap to guides is enabled.
196
+ Guide coordinates are converted from their page into workspace coordinates; guides on
197
+ moving pages are excluded. Gap indicators include end ticks. Escape cancels a page drag,
198
+ restores its starting positions, and clears temporary guides.
199
+
200
+ ### Nested frames
201
+
202
+ Open Layers → Frames to add an empty frame or wrap selected artwork with Frame selection.
203
+ Frames can contain other frames. Select an object or frame and choose Parent frame to
204
+ reparent it without changing its canvas position. The tree supports collapse/expand and
205
+ individual child selection. Frame name, Clip content and Release children are available
206
+ when a frame is selected.
207
+
208
+ Drag a frame's canvas title to move its complete subtree. Translation and rotation carry
209
+ children; resizing changes the container without scaling child sizes. Copy, duplicate,
210
+ delete and undo preserve the hierarchy. Clipping respects rotated ancestor frames in
211
+ the editor, hit testing, previews, PNG and SVG, including selection exports. Nested
212
+ frame metadata is part of the saved document. This does not implement auto layout or
213
+ responsive child constraints.
214
+
215
+ ### Standalone school identity showcase
216
+
217
+ The standalone `/?mode=myna&locale=cs` playground starts with the editable OBZOR school
218
+ identity: six staggered boards for the logo, campaign, typography, stationery, and
219
+ whitepaper. It opens fitted to the whole composition, with the library closed. Portrait
220
+ whitepaper and stationery pieces are native frames within the boards; logo geometry,
221
+ text and illustrative data graphics remain editable. Workspace annotations organize
222
+ the composition independently of exported artwork. The embed's document factory is
223
+ unchanged, so host applications retain their own starter and saved content.
224
+
225
+ ### Workspace sections and comments
226
+
227
+ Pages → Workspace adds named sections and local comment cards outside page artwork.
228
+ Select member pages in a section's settings; each page belongs to at most one section.
229
+ Drag a section header to move its pages together, resize using its lower-right handle,
230
+ and double-click the header to rename. Sections grow to contain their member pages.
231
+ Removing a section retains the pages. Grid snapping, Shift axis locking, Alt bypass,
232
+ Escape cancellation, keyboard nudging and undo apply to workspace object movement.
233
+
234
+ Comment cards support editing, replies, and resolve/reopen, both on the canvas and in
235
+ the Pages panel. These are persisted local document threads, without user mentions or
236
+ network collaboration. Sections and comments participate in Fit all, survive deletion
237
+ of their storage page, and are excluded from page artwork exports.
238
+
239
+ At overview zoom, page titles become compact and unselected nested-frame titles are
240
+ hidden to keep the workspace readable. The school showcase uses three sections with
241
+ review comments and clear spacing between page and section headers.
242
+
243
+ Section titles occupy a separate header lane above their containers. Page titles scale
244
+ down with the overview, and comment cards scale as complete objects so their internal
245
+ text wrapping stays stable. Zoom-spacing regression checks cover 10–200%.
246
+
247
+ Performance architecture, measurements and regression commands are documented in [MYNA_PERFORMANCE.md](./MYNA_PERFORMANCE.md). Development render scanning is opt-in with `scan=1`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fika-editor",
3
- "version": "3.2.9",
3
+ "version": "3.3.0",
4
4
  "description": "Fika presentation editor embed bundle with a typed agentic bridge.",
5
5
  "type": "module",
6
6
  "main": "dist/embed/fika-embed.js",
@@ -10,9 +10,11 @@
10
10
  "dist/embed",
11
11
  "dist/types",
12
12
  "docs/EMBED.md",
13
+ "docs/MYNA.md",
13
14
  "docs/AGENTIC_BRIDGE.md",
14
15
  "docs/RELEASE.md",
15
- "dist/text"
16
+ "dist/text",
17
+ "dist/layout"
16
18
  ],
17
19
  "exports": {
18
20
  ".": {
@@ -35,6 +37,11 @@
35
37
  "types": "./dist/text/index.d.ts",
36
38
  "import": "./dist/text/index.js",
37
39
  "default": "./dist/text/index.js"
40
+ },
41
+ "./layout": {
42
+ "types": "./dist/types/utils/resizeDeck.d.ts",
43
+ "import": "./dist/layout/utils/resizeDeck.js",
44
+ "default": "./dist/layout/utils/resizeDeck.js"
38
45
  }
39
46
  },
40
47
  "engines": {
@@ -55,7 +62,7 @@
55
62
  "dx:start": "1dxway start",
56
63
  "doctor": "react-doctor --no-telemetry",
57
64
  "build": "run-p type-check \"build-only {@}\" --",
58
- "build:embed": "node scripts/run-i18n.mjs --no-watch && npm run build:text && npm run build:types && rsbuild build --config rsbuild.config.embed.ts && node scripts/rewrite-embed-base-uri.mjs && node scripts/merge-embed-css.mjs && node scripts/scope-embed-css.mjs && node scripts/extract-embed-fonts.mjs && node scripts/copy-embed-public.mjs && node scripts/generate-agentic-manifest.mjs",
65
+ "build:embed": "node scripts/run-i18n.mjs --no-watch && npm run build:text && npm run build:layout && npm run build:types && rsbuild build --config rsbuild.config.embed.ts && node scripts/rewrite-embed-base-uri.mjs && node scripts/merge-embed-css.mjs && node scripts/scope-embed-css.mjs && node scripts/extract-embed-fonts.mjs && node scripts/copy-embed-public.mjs && node scripts/generate-agentic-manifest.mjs",
59
66
  "agentic:manifest": "node scripts/generate-agentic-manifest.mjs",
60
67
  "build:types": "node -e \"require('node:fs').rmSync('dist/types',{recursive:true,force:true})\" && tsc -p tsconfig.types.json && node scripts/rewrite-embed-types.mjs",
61
68
  "prepack": "node scripts/verify-embed-pack.mjs",
@@ -69,7 +76,8 @@
69
76
  "test": "node scripts/test.mjs",
70
77
  "i18n": "node scripts/run-i18n.mjs",
71
78
  "i18n:build": "node scripts/run-i18n.mjs --no-watch",
72
- "build:text": "tsc -p tsconfig.text.json"
79
+ "build:text": "tsc -p tsconfig.text.json",
80
+ "build:layout": "tsc -p tsconfig.layout.json"
73
81
  },
74
82
  "author": "Matěj \"lofcz\" Štágl",
75
83
  "license": "MIT",
@@ -141,6 +149,7 @@
141
149
  "prosemirror-schema-list": "^1.5.1",
142
150
  "prosemirror-state": "^1.4.4",
143
151
  "prosemirror-view": "^1.42.2",
152
+ "qrcode": "^1.5.4",
144
153
  "rbush": "^4.0.1",
145
154
  "react-resizable-panels": "^4.12.3",
146
155
  "render-tag": "^0.1.29",
@@ -169,12 +178,14 @@
169
178
  "@types/file-saver": "^2.0.7",
170
179
  "@types/markdown-it": "^14.2.0",
171
180
  "@types/node": "^26.2.0",
181
+ "@types/qrcode": "^1.5.6",
172
182
  "@types/rbush": "^4.0.0",
173
183
  "@types/react": "^19.2.18",
174
184
  "@types/react-dom": "^19.2.4",
175
185
  "@types/tinycolor2": "^1.4.6",
176
186
  "1dxway": "^0.1.24",
177
187
  "ink": "^7.1.1",
188
+ "jsqr": "^1.4.0",
178
189
  "npm-run-all2": "^9.0.3",
179
190
  "oxlint": "^1.79.0",
180
191
  "oxlint-tsgolint": "^7.0.2001",