fika-editor 3.0.1 → 3.0.3

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 (126) hide show
  1. package/README.md +8 -0
  2. package/dist/embed/183.js +144 -0
  3. package/dist/embed/_e2e-statika.json +10909 -0
  4. package/dist/embed/agentic-manifest.json +188 -13
  5. package/dist/embed/chunks/1131.css +1 -1
  6. package/dist/embed/chunks/1131.js +1 -1
  7. package/dist/embed/chunks/1668.js +1 -1
  8. package/dist/embed/chunks/1904.js +1 -1
  9. package/dist/embed/chunks/2020.js +43 -37
  10. package/dist/embed/chunks/2289.js +1 -1
  11. package/dist/embed/chunks/2595.js +1 -0
  12. package/dist/embed/chunks/2796.js +1 -1
  13. package/dist/embed/chunks/2807.js +1 -1
  14. package/dist/embed/chunks/3030.js +1 -1
  15. package/dist/embed/chunks/3729.js +3 -3
  16. package/dist/embed/chunks/4467.js +1 -1
  17. package/dist/embed/chunks/4552.js +1 -1
  18. package/dist/embed/chunks/4625.js +1 -1
  19. package/dist/embed/chunks/4891.js +2 -2
  20. package/dist/embed/chunks/4950.js +1 -1
  21. package/dist/embed/chunks/4975.js +5 -5
  22. package/dist/embed/chunks/5792.js +1 -1
  23. package/dist/embed/chunks/627.js +1 -1
  24. package/dist/embed/chunks/6567.js +1 -1
  25. package/dist/embed/chunks/717.js +2 -2
  26. package/dist/embed/chunks/7175.js +1 -1
  27. package/dist/embed/chunks/7311.js +1 -1
  28. package/dist/embed/chunks/7594.js +1 -1
  29. package/dist/embed/chunks/7854.js +1 -1
  30. package/dist/embed/chunks/788.js +1 -1
  31. package/dist/embed/chunks/7916.js +1 -1
  32. package/dist/embed/chunks/8212.js +1 -1
  33. package/dist/embed/chunks/8239.js +1 -1
  34. package/dist/embed/chunks/8645.js +1 -1
  35. package/dist/embed/chunks/8716.js +3 -3
  36. package/dist/embed/chunks/9121.js +1 -1
  37. package/dist/embed/chunks/9465.js +2 -2
  38. package/dist/embed/fika-embed.css +1 -1
  39. package/dist/embed/fika-embed.js +9 -2
  40. package/dist/types/components/Button.d.ts +2 -1
  41. package/dist/types/components/ColorSwatches.d.ts +2 -1
  42. package/dist/types/components/Draggable.d.ts +9 -4
  43. package/dist/types/components/Slider.d.ts +1 -0
  44. package/dist/types/configs/animation.d.ts +2 -0
  45. package/dist/types/configs/font.d.ts +0 -2
  46. package/dist/types/configs/templates.d.ts +1 -5
  47. package/dist/types/configs/transitions.d.ts +28 -0
  48. package/dist/types/embed/agentic/templates.d.ts +2 -1
  49. package/dist/types/embed/agentic/types.d.ts +64 -1
  50. package/dist/types/embed/types.d.ts +8 -0
  51. package/dist/types/hooks/useScreening.d.ts +5 -3
  52. package/dist/types/i18n/i18n-types.d.ts +206 -38
  53. package/dist/types/paint/rasterResources.d.ts +7 -0
  54. package/dist/types/paint/scheduler.d.ts +17 -0
  55. package/dist/types/paint/slidePainter.d.ts +17 -0
  56. package/dist/types/paint/textPainter.d.ts +31 -0
  57. package/dist/types/store/importConfirm.d.ts +6 -1
  58. package/dist/types/store/index.d.ts +2 -2
  59. package/dist/types/store/slides.d.ts +30 -8
  60. package/dist/types/types/injectKey.d.ts +6 -0
  61. package/dist/types/types/slides.d.ts +3 -2
  62. package/dist/types/utils/canvasHitTest.d.ts +14 -2
  63. package/dist/types/utils/commitQueue.d.ts +13 -0
  64. package/dist/types/utils/cssLength.d.ts +8 -0
  65. package/dist/types/utils/database.d.ts +6 -1
  66. package/dist/types/utils/element.d.ts +18 -0
  67. package/dist/types/utils/elementOutline.d.ts +33 -3
  68. package/dist/types/utils/exportFonts.d.ts +7 -3
  69. package/dist/types/utils/imageBitmapCache.d.ts +14 -2
  70. package/dist/types/utils/imageSize.d.ts +9 -0
  71. package/dist/types/utils/importApply.d.ts +10 -0
  72. package/dist/types/utils/importTransition.d.ts +19 -0
  73. package/dist/types/utils/layerStack.d.ts +24 -0
  74. package/dist/types/utils/liveElementOffset.d.ts +6 -5
  75. package/dist/types/utils/liveElementSize.d.ts +20 -1
  76. package/dist/types/utils/mediaIntern.d.ts +21 -0
  77. package/dist/types/utils/placeholderLayout.d.ts +25 -6
  78. package/dist/types/utils/prosemirror/commitEditor.d.ts +3 -0
  79. package/dist/types/utils/prosemirror/index.d.ts +1 -0
  80. package/dist/types/utils/screening.d.ts +10 -0
  81. package/dist/types/utils/shapePaint.d.ts +23 -0
  82. package/dist/types/utils/simpleShape.d.ts +5 -0
  83. package/dist/types/utils/slideOrder.d.ts +10 -0
  84. package/dist/types/utils/snap.d.ts +9 -0
  85. package/dist/types/utils/tableCellStyle.d.ts +12 -0
  86. package/dist/types/utils/tableStyleTarget.d.ts +3 -0
  87. package/dist/types/utils/textContrast.d.ts +25 -1
  88. package/dist/types/utils/textFit.d.ts +39 -13
  89. package/dist/types/views/Editor/Canvas/LayerStackPanel.d.ts +14 -0
  90. package/dist/types/views/Editor/Canvas/Operate/ResizeHandler.d.ts +2 -1
  91. package/dist/types/views/Editor/Thumbnails/paneSize.d.ts +7 -3
  92. package/dist/types/views/Editor/Thumbnails/useThumbnailVirtualizer.d.ts +1 -0
  93. package/dist/types/views/Editor/Toolbar/common/ElementOutline.d.ts +2 -0
  94. package/dist/types/views/components/ThumbnailSlide/CanvasSlideThumb.d.ts +11 -0
  95. package/dist/types/views/components/ThumbnailSlide/index.d.ts +3 -0
  96. package/dist/types/views/components/ThumbnailSlide/paintedSlide.d.ts +1 -1
  97. package/dist/types/views/components/element/TableElement/CustomTextarea.d.ts +2 -1
  98. package/dist/types/views/components/element/hooks/useAutoShapeTextHeight.d.ts +3 -1
  99. package/docs/RELEASE.md +2 -0
  100. package/package.json +22 -21
  101. package/dist/embed/350.js +0 -164
  102. package/dist/embed/chunks/1932.js +0 -1
  103. package/dist/embed/chunks/5901.js +0 -1
  104. package/dist/types/previewRaster/index.d.ts +0 -9
  105. package/dist/types/previewRaster/painters/background.d.ts +0 -2
  106. package/dist/types/previewRaster/painters/booth.d.ts +0 -13
  107. package/dist/types/previewRaster/painters/chart.d.ts +0 -2
  108. package/dist/types/previewRaster/painters/code.d.ts +0 -2
  109. package/dist/types/previewRaster/painters/image.d.ts +0 -2
  110. package/dist/types/previewRaster/painters/index.d.ts +0 -3
  111. package/dist/types/previewRaster/painters/line.d.ts +0 -2
  112. package/dist/types/previewRaster/painters/media.d.ts +0 -2
  113. package/dist/types/previewRaster/painters/shape.d.ts +0 -2
  114. package/dist/types/previewRaster/painters/table.d.ts +0 -2
  115. package/dist/types/previewRaster/painters/text.d.ts +0 -2
  116. package/dist/types/previewRaster/planSlideRaster.d.ts +0 -19
  117. package/dist/types/previewRaster/rasterCache.d.ts +0 -19
  118. package/dist/types/previewRaster/scheduler.d.ts +0 -4
  119. package/dist/types/previewRaster/stagePool.d.ts +0 -36
  120. package/dist/types/previewRaster/stats.d.ts +0 -10
  121. package/dist/types/previewRaster/subscribeSlides.d.ts +0 -10
  122. package/dist/types/previewRaster/types.d.ts +0 -12
  123. package/dist/types/utils/elementPaint.d.ts +0 -129
  124. package/dist/types/views/components/element/ChartElement/chartBooth.d.ts +0 -2
  125. /package/dist/embed/{350.css → 183.css} +0 -0
  126. /package/dist/types/{previewRaster → utils}/diffPaintedSlide.d.ts +0 -0
@@ -22,6 +22,16 @@ export declare const LIST_MARKER_GAP_EM = 0.4;
22
22
  * Kept as a fallback indent (px) when a list item has no padding of its own.
23
23
  */
24
24
  export declare const BULLET_INDENT = 40;
25
+ export interface TextFitRun {
26
+ text: string;
27
+ size: number;
28
+ bold?: boolean;
29
+ italic?: boolean;
30
+ underline?: boolean;
31
+ strikethrough?: boolean;
32
+ color?: string;
33
+ fontFamily?: string;
34
+ }
25
35
  /** A single measurable text block (one paragraph or one list item). */
26
36
  export interface TextFitBlock {
27
37
  /** Plain text of the block (markers stripped). */
@@ -37,6 +47,16 @@ export interface TextFitBlock {
37
47
  listIndentPx?: number;
38
48
  /** `ul`/`ol` padding-inline-start in em, when authored as em. */
39
49
  listIndentEm?: number;
50
+ /**
51
+ * Mixed-size runs inside one paragraph, measured exactly: each run gets its
52
+ * own font and pretext's rich-inline line breaker, so wrapping and per-line
53
+ * heights match what the browser paints (a 57px body with one 120px word
54
+ * wraps like 57px and only that one line is 120px tall).
55
+ */
56
+ runs?: TextFitRun[];
57
+ /** Canvas/static-paint metadata. It does not affect fitting math. */
58
+ align?: 'left' | 'center' | 'right' | 'justify';
59
+ listMarker?: string;
40
60
  }
41
61
  export interface MeasureBlocksOptions {
42
62
  /** Box content width in px (insets already removed). */
@@ -100,12 +120,6 @@ export declare function innerBoxFromLiveStyles(box: HTMLElement | null | undefin
100
120
  };
101
121
  export declare function contentBoxOfHost(host: HTMLElement | null | undefined): HTMLElement | null;
102
122
  export declare function measureUnzoomedScrollHeight(host: HTMLElement, innerWidth: number): number;
103
- /**
104
- * Total wrapped height (px) of `blocks` laid out in a column of `innerWidth`,
105
- * with each block's font size multiplied by `sizeScale`. Each block is measured
106
- * independently with pretext, then summed with the (unscaled, px-fixed)
107
- * inter-block gap. Returns 0 for an empty input.
108
- */
109
123
  export declare function measureTextBlocksHeight(blocks: TextFitBlock[], options: MeasureBlocksOptions): number;
110
124
  export interface FitFontScaleOptions {
111
125
  innerWidth: number;
@@ -157,11 +171,10 @@ export declare function createFitMeasureSession(html: string, options: {
157
171
  /** Resize hot path: pure `layout()` over cached prepare handles. */
158
172
  export declare function measureSessionHeight(session: FitMeasureSession, innerWidth: number, blockSpace?: number, bulletIndent?: number): number;
159
173
  export declare function fitZoomScaleFromSession(session: FitMeasureSession, innerWidth: number, innerHeight: number, blockSpace?: number): number;
160
- /**
161
- * One-shot locked-box scale for a rich-text HTML string. Editor resize keeps a
162
- * cached session; preview/export call this so they shrink with the same math.
163
- */
164
- export declare function textFitScaleForHtml(html: string, options: {
174
+ /** Rendered spans may carry calc(var(--text-fit-scale,...)); measurement wants authored px. */
175
+ declare const stripFitScale: (html: string) => string;
176
+ export declare const stripFitScaleForProbe: typeof stripFitScale;
177
+ type FitScaleOptions = {
165
178
  innerWidth: number;
166
179
  innerHeight: number;
167
180
  defaultFontFamily?: string;
@@ -170,7 +183,18 @@ export declare function textFitScaleForHtml(html: string, options: {
170
183
  letterSpacing?: number;
171
184
  blockSpace?: number;
172
185
  locale?: string;
173
- }): number;
186
+ };
187
+ /**
188
+ * Persist a DOM-verified correction: the editor measured the REAL rendered
189
+ * height and found the searched scale overflowing. Remembered so the rail,
190
+ * later applies, and export reuse the corrected value instead of re-overflow.
191
+ */
192
+ export declare function rememberFitScale(html: string, options: FitScaleOptions, scale: number): void;
193
+ /**
194
+ * One-shot locked-box scale for a rich-text HTML string. Editor resize keeps a
195
+ * cached session; preview/export call this so they shrink with the same math.
196
+ */
197
+ export declare function textFitScaleForHtml(html: string, options: FitScaleOptions): number;
174
198
  export interface ExtractedContent {
175
199
  blocks: TextFitBlock[];
176
200
  }
@@ -181,7 +205,8 @@ export interface ExtractOptions {
181
205
  /**
182
206
  * Parse a Fika rich-text HTML string into measurable blocks. Each list item
183
207
  * and top-level paragraph/quote becomes one block; a block's representative font
184
- * size is the largest inline size in it (so measurement never under-estimates).
208
+ * size is the largest inline size in it (so the clip pad never under-
209
+ * estimates), while wrapping measures the mixed-size run profile.
185
210
  * Returns no blocks when there's no DOM parser or no text. List items are tagged
186
211
  * so the marker indent is accounted for.
187
212
  */
@@ -193,3 +218,4 @@ export declare function extractFitBlocksFromHtml(html: string, options: ExtractO
193
218
  * scale >= 1 (or a non-DOM context) returns the HTML unchanged.
194
219
  */
195
220
  export declare function scaleHtmlFontSizes(html: string, scale: number): string;
221
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { LayerStackEntry } from '../../../utils/layerStack';
2
+ export type ILayerStackPanelProps = {
3
+ /** Canvas-root-relative anchor of the probed point, in px. */
4
+ anchor: {
5
+ x: number;
6
+ y: number;
7
+ };
8
+ entries: LayerStackEntry[];
9
+ activeIndex: number;
10
+ onPick: (index: number) => void;
11
+ onClose: () => void;
12
+ };
13
+ declare const LayerStackPanel: import("react").MemoExoticComponent<(props: ILayerStackPanelProps) => import("react").JSX.Element>;
14
+ export default LayerStackPanel;
@@ -5,7 +5,8 @@ export type IResizeHandlerProps = {
5
5
  rotate?: number;
6
6
  className?: string;
7
7
  style?: CSSProperties;
8
+ 'data-line-handle'?: string;
8
9
  onMouseDown?: (e: ReactMouseEvent<HTMLDivElement>) => void;
9
10
  };
10
- declare const ResizeHandler: import("react").MemoExoticComponent<({ type, rotate, className, style, onMouseDown }: IResizeHandlerProps) => import("react").JSX.Element>;
11
+ declare const ResizeHandler: import("react").MemoExoticComponent<({ type, rotate, className, style, onMouseDown, 'data-line-handle': lineHandle }: IResizeHandlerProps) => import("react").JSX.Element>;
11
12
  export default ResizeHandler;
@@ -2,8 +2,8 @@ export declare const PREVIEW_MIN_PANE = 120;
2
2
  export declare const PREVIEW_DEFAULT_PANE = 168;
3
3
  export declare const PREVIEW_MAX_PANE = 420;
4
4
  export declare const PREVIEW_THUMB_INSET = 48;
5
- export declare const PREVIEW_SUPER_SAMPLE = 2;
6
- export declare const PREVIEW_MAX_WORKING = 1024;
5
+ export declare const PREVIEW_PANE_RESIZE_COMMIT_MS = 120;
6
+ export type PreviewWorkingQuality = 'full' | 'rail' | 'lq';
7
7
  type DestPublishHandler = () => void;
8
8
  export type PreviewDestSize = {
9
9
  cssWidth: number;
@@ -11,8 +11,12 @@ export type PreviewDestSize = {
11
11
  dpr: number;
12
12
  workingSlideWidth: number;
13
13
  };
14
- export declare const previewWorkingWidth: (destWidth: number, pixelRatio: number) => number;
14
+ export declare const isPaneDragging: () => boolean;
15
+ export declare const beginPaneDrag: () => void;
16
+ export declare const endPaneDrag: () => void;
17
+ export declare const subscribePaneLive: (listener: (contentWidth: number) => void) => () => void;
15
18
  export declare const setPreviewDestPublishHandler: (fn: DestPublishHandler | null) => void;
19
+ export declare const setPreviewDestLiveHandler: (fn: DestPublishHandler | null) => void;
16
20
  export declare const setPreviewPaneWidth: (width: number) => void;
17
21
  export declare const setPreviewViewportRatio: (ratio: number) => void;
18
22
  export declare const getPreviewDestSize: () => PreviewDestSize;
@@ -7,6 +7,7 @@ export type ThumbnailVirtualizerApi = {
7
7
  virtualizer: Virtualizer<HTMLDivElement, Element>;
8
8
  virtualItems: VirtualItem[];
9
9
  visibleSlideIds: string[];
10
+ pinnedSlideIds: string[];
10
11
  thumbHeight: number;
11
12
  dest: PreviewDestSize;
12
13
  };
@@ -1,3 +1,5 @@
1
+ export declare const OUTLINE_WIDTH_MAX = 20;
2
+ export declare const OUTLINE_RADIUS_MAX = 100;
1
3
  export type IElementOutlineProps = {
2
4
  fixed?: boolean;
3
5
  };
@@ -0,0 +1,11 @@
1
+ import type { Slide } from '../../../types/slides';
2
+ export type ICanvasSlideThumbProps = {
3
+ slide: Slide;
4
+ width: number;
5
+ };
6
+ /**
7
+ * A final-DPR Canvas2D projection of Slide JSON. Existing pixels remain in the
8
+ * backing store while an edit is debounced or an async asset resolves.
9
+ */
10
+ declare const CanvasSlideThumb: import("react").MemoExoticComponent<({ slide, width }: ICanvasSlideThumbProps) => import("react").JSX.Element>;
11
+ export default CanvasSlideThumb;
@@ -7,7 +7,10 @@ export type IThumbnailSlideProps = {
7
7
  visible?: boolean;
8
8
  showPlaceholders?: boolean;
9
9
  className?: string;
10
+ /** @deprecated Canvas thumbnails no longer use snapshot capture. */
11
+ snapshot?: boolean;
10
12
  };
11
13
  export declare function areThumbnailSlidePropsEqual(prev: IThumbnailSlideProps, next: IThumbnailSlideProps): boolean;
14
+ /** Model-driven slide thumbnail painted directly at the final device DPR. */
12
15
  declare const ThumbnailSlide: import("react").MemoExoticComponent<(props: IThumbnailSlideProps) => import("react").JSX.Element>;
13
16
  export default ThumbnailSlide;
@@ -1,5 +1,5 @@
1
1
  import type { Slide } from '../../../types/slides';
2
- import { diffPaintedSlide, type PaintedSlide, type PaintedSlideDiff } from '../../../previewRaster/diffPaintedSlide';
2
+ import { diffPaintedSlide, type PaintedSlide, type PaintedSlideDiff } from '../../../utils/diffPaintedSlide';
3
3
  export type { PaintedSlide, PaintedSlideDiff };
4
4
  export { diffPaintedSlide };
5
5
  export type RailSlideMeta = {
@@ -1,11 +1,12 @@
1
1
  import { type CSSProperties } from 'react';
2
+ export type TableCellCommitSource = 'blur' | 'unmount';
2
3
  export type ICustomTextareaProps = {
3
4
  value?: string;
4
5
  className?: string;
5
6
  style?: CSSProperties;
6
7
  } & {
7
8
  onUpdateValue?: (payload: string) => void;
8
- onCommitValue?: (payload: string) => void;
9
+ onCommitValue?: (payload: string, source?: TableCellCommitSource) => void;
9
10
  onInsertExcelData?: (payload: string[][]) => void;
10
11
  };
11
12
  declare const CustomTextarea: import("react").MemoExoticComponent<(props: ICustomTextareaProps) => import("react").JSX.Element>;
@@ -1,2 +1,4 @@
1
1
  import type { TextInset } from '../../../../types/slides';
2
- export declare function useAutoShapeTextHeight(enabled: boolean, elementId: string, inset: TextInset): import("react").RefObject<HTMLDivElement>;
2
+ export declare function useAutoShapeTextHeight(enabled: boolean, elementId: string, inset: TextInset, contentHost?: {
3
+ readonly current: HTMLElement | null;
4
+ }): import("react").RefObject<HTMLDivElement>;
package/docs/RELEASE.md CHANGED
@@ -11,4 +11,6 @@ On npmjs.com → `fika-editor` → Settings → Trusted publishing, the GitHub A
11
11
 
12
12
  Do not store an `NPM_TOKEN` for publish. The workflow requests `id-token: write` and publishes with no auth token so npm exchanges the OIDC token.
13
13
 
14
+ Release commits, tags, and GitHub releases are authored by the `fika-bot` GitHub App (mug logo). Store `FIKA_BOT_CLIENT_ID` as a repository variable and `FIKA_BOT_PRIVATE_KEY` as a repository secret. Do not commit the `.pem`.
15
+
14
16
  The published tarball is the prebuilt embed (`dist/embed` + `dist/types`). `dist/` stays gitignored; the workflow runs `build:embed`, packs with the npm next to Node (not Bun's PATH shim), verifies that `.tgz` with `tar`, then publishes the same file. `prepack` / `prepublishOnly` refuse a docs-only tarball if those artifacts are missing.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fika-editor",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
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",
@@ -44,9 +44,12 @@
44
44
  ],
45
45
  "scripts": {
46
46
  "dev": "rsbuild dev",
47
+ "dx": "1dxway start",
48
+ "dx:install": "bunx 1dxway",
49
+ "dx:start": "1dxway start",
47
50
  "doctor": "react-doctor --no-telemetry",
48
51
  "build": "run-p type-check \"build-only {@}\" --",
49
- "build:embed": "node scripts/run-i18n.mjs --no-watch && npm run build:types && rsbuild build --config rsbuild.config.embed.ts && node scripts/scope-embed-css.mjs && node scripts/extract-embed-fonts.mjs && node scripts/copy-embed-public.mjs && node scripts/generate-agentic-manifest.mjs",
52
+ "build:embed": "node scripts/run-i18n.mjs --no-watch && npm run build:types && rsbuild build --config rsbuild.config.embed.ts && node scripts/rewrite-embed-base-uri.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",
50
53
  "agentic:manifest": "node scripts/generate-agentic-manifest.mjs",
51
54
  "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",
52
55
  "prepack": "node scripts/verify-embed-pack.mjs",
@@ -55,14 +58,9 @@
55
58
  "preview": "rsbuild preview",
56
59
  "build-only": "rsbuild build",
57
60
  "type-check": "tsc -p tsconfig.app.json --noEmit --pretty false",
58
- "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
59
- "test": "rstest",
60
- "test:live-size": "node scripts/check-live-element-size.mjs",
61
- "test:resize-elements:e2e": "node scripts/e2e-resize-elements.mjs",
62
- "test:resize-commit-match:e2e": "node scripts/e2e-resize-commit-match.mjs",
63
- "test:resize-shapes:e2e": "node scripts/e2e-resize-shapes.mjs",
64
- "test:live-paint": "node scripts/check-live-element-paint.mjs",
65
- "test:live-paint:e2e": "node scripts/e2e-live-paint.mjs",
61
+ "lint": "oxlint",
62
+ "lint:fix": "oxlint --fix",
63
+ "test": "node scripts/test.mjs",
66
64
  "i18n": "node scripts/run-i18n.mjs",
67
65
  "i18n:build": "node scripts/run-i18n.mjs --no-watch"
68
66
  },
@@ -78,19 +76,18 @@
78
76
  "homepage": "https://github.com/lofcz/fika#readme",
79
77
  "dependencies": {
80
78
  "@chenglou/pretext": "^0.0.8",
81
- "@codemirror/commands": "^6.10.4",
79
+ "@codemirror/commands": "^6.11.0",
82
80
  "@codemirror/lang-json": "^6.0.2",
83
81
  "@codemirror/language": "^6.12.4",
84
82
  "@codemirror/state": "^6.7.1",
85
- "@codemirror/view": "^6.43.8",
83
+ "@codemirror/view": "^6.43.9",
86
84
  "@dnd-kit/core": "^6.3.1",
87
85
  "@dnd-kit/sortable": "^10.0.0",
88
86
  "@dnd-kit/utilities": "^3.2.2",
89
- "pptxgenjs-plus": "^4.1.17",
87
+ "@karibash/pixel-units": "^2.3.0",
90
88
  "@tanstack/react-virtual": "^3.14.9",
91
89
  "@use-gesture/react": "^10.3.1",
92
90
  "@use-gesture/vanilla": "^10.3.1",
93
- "@zumer/snapdom": "^2.24.1",
94
91
  "animate.css": "^4.1.1",
95
92
  "buffer": "^6.0.3",
96
93
  "clipboard": "^2.0.11",
@@ -108,7 +105,6 @@
108
105
  "html-to-image": "^1.11.13",
109
106
  "immer": "^11.1.16",
110
107
  "jszip": "^3.10.1",
111
- "konva": "^10.3.0",
112
108
  "lucide-react": "^1.31.0",
113
109
  "markdown-it": "^15.0.0",
114
110
  "markdown-it-texmath": "^1.0.0",
@@ -119,7 +115,9 @@
119
115
  "nanoid": "^6.0.1",
120
116
  "number-precision": "^1.6.0",
121
117
  "overlayscrollbars": "^2.16.0",
118
+ "parse5": "^8.0.1",
122
119
  "perfect-freehand": "^1.2.3",
120
+ "pptxgenjs-plus": "^4.1.17",
123
121
  "pptxtojson": "npm:@lofcz/pptxtojson@^2.2.5",
124
122
  "prosemirror-commands": "^1.7.2",
125
123
  "prosemirror-dropcursor": "^1.8.3",
@@ -133,14 +131,16 @@
133
131
  "prosemirror-state": "^1.4.4",
134
132
  "prosemirror-view": "^1.42.2",
135
133
  "rbush": "^4.0.1",
136
- "react-resizable-panels": "^4.12.2",
134
+ "react-resizable-panels": "^4.12.3",
135
+ "render-tag": "^0.1.29",
137
136
  "shiki": "^4.4.3",
137
+ "style-to-object": "^2.0.2",
138
138
  "svg-pathdata": "^9.0.0",
139
139
  "tinycolor2": "^1.6.0",
140
140
  "tippy.js": "^6.3.7",
141
141
  "txml": "^6.0.0",
142
142
  "use-sync-external-store": "^1.6.0",
143
- "wawoff2": "^2.0.1",
143
+ "woff-lib": "^0.0.3",
144
144
  "zustand": "^5.0.15"
145
145
  },
146
146
  "peerDependencies": {
@@ -153,19 +153,20 @@
153
153
  "@rsbuild/plugin-react": "^2.1.0",
154
154
  "@rsbuild/plugin-sass": "^2.0.1",
155
155
  "@rstest/core": "^0.11.8",
156
- "@rushstack/eslint-patch": "^1.16.1",
157
156
  "@types/crypto-js": "^4.2.1",
158
157
  "@types/dompurify": "^3.2.0",
159
158
  "@types/file-saver": "^2.0.7",
160
- "@types/markdown-it": "^14.1.2",
159
+ "@types/markdown-it": "^14.2.0",
161
160
  "@types/node": "^26.2.0",
162
161
  "@types/rbush": "^4.0.0",
163
162
  "@types/react": "^19.2.18",
164
163
  "@types/react-dom": "^19.2.4",
165
164
  "@types/tinycolor2": "^1.4.6",
166
- "eslint": "^10.8.1",
167
- "eslint-plugin-react-hooks": "^7.1.1",
165
+ "1dxway": "^0.1.24",
166
+ "ink": "^7.1.1",
168
167
  "npm-run-all2": "^9.0.3",
168
+ "oxlint": "^1.78.0",
169
+ "oxlint-tsgolint": "^7.0.2001",
169
170
  "playwright": "^1.62.1",
170
171
  "postcss": "^8.5.26",
171
172
  "postcss-selector-parser": "^7.1.5",