@web-ppt/editor 0.5.0-beta.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.
Files changed (83) hide show
  1. package/CHANGELOG.md +274 -0
  2. package/LICENSE +21 -0
  3. package/README.md +473 -0
  4. package/dist/adapter-format-painter.d.ts +15 -0
  5. package/dist/adapter-link.d.ts +3 -0
  6. package/dist/adapter-options.d.ts +6 -0
  7. package/dist/adapter-recovery.d.ts +14 -0
  8. package/dist/adapter-selection-pane.d.ts +22 -0
  9. package/dist/adapter-text-search.d.ts +28 -0
  10. package/dist/animation-preview.d.ts +26 -0
  11. package/dist/dom-identity.d.ts +17 -0
  12. package/dist/dom-patch.d.ts +9 -0
  13. package/dist/editor-keyboard.d.ts +13 -0
  14. package/dist/editor.js +6332 -0
  15. package/dist/element-clipboard.d.ts +23 -0
  16. package/dist/format-painter-types.d.ts +32 -0
  17. package/dist/format-painter-view.d.ts +17 -0
  18. package/dist/format-painter.d.ts +21 -0
  19. package/dist/framework-adapter-binding.d.ts +4 -0
  20. package/dist/framework-adapter-state.d.ts +9 -0
  21. package/dist/framework-adapter-types.d.ts +114 -0
  22. package/dist/framework-adapter.d.ts +2 -0
  23. package/dist/image-crop-gesture.d.ts +40 -0
  24. package/dist/image-insertion.d.ts +46 -0
  25. package/dist/index.d.ts +28 -0
  26. package/dist/indexeddb-recovery-store.d.ts +30 -0
  27. package/dist/keyboard-context.d.ts +8 -0
  28. package/dist/keyboard-delete.d.ts +7 -0
  29. package/dist/keyboard-history.d.ts +7 -0
  30. package/dist/keyboard-layer.d.ts +7 -0
  31. package/dist/keyboard-nudge.d.ts +10 -0
  32. package/dist/keyboard-owner.d.ts +5 -0
  33. package/dist/marquee-gesture.d.ts +31 -0
  34. package/dist/move-gesture.d.ts +34 -0
  35. package/dist/placeholder-overlay.d.ts +3 -0
  36. package/dist/pointer-gesture.d.ts +37 -0
  37. package/dist/recovery-session.d.ts +24 -0
  38. package/dist/recovery-store.d.ts +64 -0
  39. package/dist/resize-geometry.d.ts +19 -0
  40. package/dist/resize-gesture.d.ts +30 -0
  41. package/dist/rotation-geometry.d.ts +9 -0
  42. package/dist/rotation-gesture.d.ts +33 -0
  43. package/dist/selection-body-properties.d.ts +3 -0
  44. package/dist/selection-combine.d.ts +10 -0
  45. package/dist/selection-handles.d.ts +3 -0
  46. package/dist/selection-hit.d.ts +8 -0
  47. package/dist/selection-overlay.d.ts +13 -0
  48. package/dist/selection-pane-types.d.ts +18 -0
  49. package/dist/selection-pane.d.ts +3 -0
  50. package/dist/session-state.d.ts +20 -0
  51. package/dist/session.d.ts +24 -0
  52. package/dist/slide-dom-renderer.d.ts +22 -0
  53. package/dist/slide-dom-update.d.ts +13 -0
  54. package/dist/slide-editor-commands.d.ts +76 -0
  55. package/dist/slide-editor-dom.d.ts +2 -0
  56. package/dist/slide-editor-events.d.ts +20 -0
  57. package/dist/slide-editor-keyboard-events.d.ts +39 -0
  58. package/dist/slide-editor-types.d.ts +90 -0
  59. package/dist/slide-editor.d.ts +3 -0
  60. package/dist/slide-link-controller.d.ts +26 -0
  61. package/dist/slide-pointer-controller.d.ts +43 -0
  62. package/dist/snap-guides.d.ts +3 -0
  63. package/dist/snap.d.ts +60 -0
  64. package/dist/source-fingerprint.d.ts +9 -0
  65. package/dist/table-insertion.d.ts +7 -0
  66. package/dist/text-autofit.d.ts +18 -0
  67. package/dist/text-clipboard-controller.d.ts +32 -0
  68. package/dist/text-clipboard.d.ts +7 -0
  69. package/dist/text-dom.d.ts +30 -0
  70. package/dist/text-editor-context.d.ts +13 -0
  71. package/dist/text-editor-target.d.ts +10 -0
  72. package/dist/text-editor-types.d.ts +30 -0
  73. package/dist/text-editor-view.d.ts +4 -0
  74. package/dist/text-editor.d.ts +51 -0
  75. package/dist/text-input-plan.d.ts +20 -0
  76. package/dist/text-search-highlight.d.ts +18 -0
  77. package/dist/text-search-index.d.ts +11 -0
  78. package/dist/text-search-types.d.ts +41 -0
  79. package/dist/text-search-view.d.ts +33 -0
  80. package/dist/text-search.d.ts +46 -0
  81. package/dist/transform-frame.d.ts +14 -0
  82. package/dist/transition-preview.d.ts +24 -0
  83. package/package.json +54 -0
@@ -0,0 +1,32 @@
1
+ import type { TextBody } from '@web-ppt/core';
2
+ import type { RunPropertyOverrides, TextEditOp, TextPosition } from '@web-ppt/edit-core';
3
+ interface ClipboardTextContext {
4
+ text: TextBody;
5
+ positions: {
6
+ from: TextPosition;
7
+ to: TextPosition;
8
+ };
9
+ }
10
+ interface TextClipboardControllerOptions {
11
+ enabled(): boolean;
12
+ context(): ClipboardTextContext | null;
13
+ pendingProps(): RunPropertyOverrides;
14
+ commit(ops: readonly TextEditOp[], nextIndex: number, label: string): void;
15
+ }
16
+ export declare class TextClipboardController {
17
+ private readonly options;
18
+ private root;
19
+ private pasteIntent;
20
+ constructor(options: TextClipboardControllerOptions);
21
+ bind(root: HTMLDivElement): void;
22
+ release(): void;
23
+ beforeInput(event: InputEvent): boolean;
24
+ private copy;
25
+ private cut;
26
+ private paste;
27
+ private armPlainPasteIntent;
28
+ private consumePlainPasteIntent;
29
+ private resetPasteIntent;
30
+ private insert;
31
+ }
32
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { TextFragment } from '@web-ppt/edit-core';
2
+ type ClipboardPort = Pick<DataTransfer, 'getData' | 'setData'>;
3
+ export declare function plainTextFragment(text: string): TextFragment;
4
+ export declare function readTextClipboard(data: Pick<DataTransfer, 'getData'> | null, document: Document, plainOnly?: boolean): TextFragment | null;
5
+ export declare function textFragmentToHtml(fragment: TextFragment): string;
6
+ export declare function writeTextClipboard(data: ClipboardPort | null, plain: string, html: string): boolean;
7
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { TextBody } from '@web-ppt/core';
2
+ import type { TextPosition } from '@web-ppt/edit-core';
3
+ export interface DomRead {
4
+ valid: boolean;
5
+ text: string;
6
+ }
7
+ /** 未知浏览器包装只取纯文本,格式绝不从 DOM 私有样式反写。 */
8
+ export declare function readEditableDom(root: ParentNode): DomRead;
9
+ export declare function rangePositions(root: HTMLElement, body: TextBody): {
10
+ from: TextPosition;
11
+ to: TextPosition;
12
+ } | null;
13
+ export declare function caretPointAt(container: HTMLElement | SVGElement, offset: number): {
14
+ node: Node;
15
+ offset: number;
16
+ };
17
+ /** engine 行盒会把同一 run 拆成多个标记;边界优先落到下一视觉行,run 末尾才落前一段。 */
18
+ export declare function domPointAt(root: Element, position: TextPosition, markerKind?: 'edit' | 'search'): {
19
+ node: Node;
20
+ offset: number;
21
+ } | null;
22
+ export declare function compositionChangedRange(before: string, after: string, from: number, to: number): {
23
+ from: number;
24
+ to: number;
25
+ text: string;
26
+ } | null;
27
+ export declare function rebaseRange(base: string, current: string, from: number, to: number): {
28
+ from: number;
29
+ to: number;
30
+ } | null;
@@ -0,0 +1,13 @@
1
+ import type { TextBody } from '@web-ppt/core';
2
+ import type { Editor, ElementId, TableCellAddress, TextPosition } from '@web-ppt/edit-core';
3
+ import type { ActiveText } from './text-editor-types';
4
+ export interface TextEditorContext {
5
+ id: ElementId;
6
+ cell: TableCellAddress | null;
7
+ text: TextBody;
8
+ positions: {
9
+ from: TextPosition;
10
+ to: TextPosition;
11
+ };
12
+ }
13
+ export declare function resolveTextEditorContext(editor: Editor, active: ActiveText, root: HTMLDivElement): TextEditorContext | null;
@@ -0,0 +1,10 @@
1
+ import type { TableElement } from '@web-ppt/core';
2
+ import type { Editor, TableCellAddress } from '@web-ppt/edit-core';
3
+ import type { ActiveText } from './text-editor-types';
4
+ export declare const sameTextCell: (left: TableCellAddress | null | undefined, right: TableCellAddress | null | undefined) => boolean;
5
+ export declare function textTargetFields(cell: TableCellAddress | null): {
6
+ cell?: TableCellAddress;
7
+ };
8
+ export declare function resolveActiveText(editor: Editor, id: string, address: TableCellAddress | null): ActiveText | null;
9
+ export declare function editableTableCells(table: TableElement): TableCellAddress[];
10
+ export declare function nextEditableTableCell(table: TableElement, current: TableCellAddress, reverse: boolean): TableCellAddress | null;
@@ -0,0 +1,30 @@
1
+ import type { TextBody, TextVert } from '@web-ppt/core';
2
+ import type { AffineMatrix, Editor, ElementId, TableCellAddress } from '@web-ppt/edit-core';
3
+ export interface TextEditorControllerOptions {
4
+ editor: Editor;
5
+ boundary: HTMLElement;
6
+ staticLayer: HTMLElement;
7
+ textLayer: HTMLElement;
8
+ textLayout: 'browser' | 'engine';
9
+ slideId: () => string;
10
+ claim: () => void;
11
+ release: () => void;
12
+ syncStatic: (id: ElementId) => void;
13
+ }
14
+ export interface CompositionSnapshot {
15
+ domText: string;
16
+ modelText: string;
17
+ from: number;
18
+ to: number;
19
+ }
20
+ export interface ActiveText {
21
+ id: ElementId;
22
+ cell?: TableCellAddress;
23
+ text: TextBody;
24
+ width: number;
25
+ height: number;
26
+ matrix: AffineMatrix;
27
+ insets?: readonly [number, number, number, number];
28
+ anchor?: TextBody['anchor'];
29
+ vert?: TextVert;
30
+ }
@@ -0,0 +1,4 @@
1
+ import type { TextPosition } from '@web-ppt/edit-core';
2
+ import type { ActiveText } from './text-editor-types';
3
+ export declare function createTextEditorRoot(document: Document, active: ActiveText, layout: 'browser' | 'engine', scale?: number): HTMLDivElement;
4
+ export declare function setTextDomSelection(root: HTMLDivElement, anchor: TextPosition, focus: TextPosition): void;
@@ -0,0 +1,51 @@
1
+ import type { EditorChange, ElementId, ParagraphPropertiesState, ParagraphPropertyOverrides, RunLinkState, RunPropertiesState, RunPropertyOverrides, TableCellAddress } from '@web-ppt/edit-core';
2
+ import type { TextEditorControllerOptions } from './text-editor-types';
3
+ export declare class TextEditorController {
4
+ private readonly options;
5
+ private readonly clipboard;
6
+ private readonly autofit;
7
+ private activeId;
8
+ private activeCell;
9
+ private root;
10
+ private composing;
11
+ private composition;
12
+ private pendingRunProps;
13
+ private staticStale;
14
+ private readonly hidden;
15
+ private readonly externalUi;
16
+ private readonly onDocumentPointerDown;
17
+ constructor(options: TextEditorControllerOptions);
18
+ get isActive(): boolean;
19
+ get activeElementId(): ElementId | null;
20
+ get isComposing(): boolean;
21
+ registerExternalUi(element: HTMLElement): () => void;
22
+ queryRunProps(): RunPropertiesState | null;
23
+ queryRunLink(): RunLinkState | null;
24
+ queryParaProps(): ParagraphPropertiesState | null;
25
+ setParaProps(props: ParagraphPropertyOverrides): boolean;
26
+ setRunProps(props: RunPropertyOverrides): boolean;
27
+ owns(target: EventTarget | null): boolean;
28
+ enter(id: ElementId): boolean;
29
+ enterCell(id: ElementId, cell: TableCellAddress): boolean;
30
+ private enterTarget;
31
+ releaseTextEditing(): void;
32
+ close(selectElement?: boolean): void;
33
+ update(change: EditorChange): void;
34
+ refreshStatic(): void;
35
+ destroy(): void;
36
+ private textContext;
37
+ private activeText;
38
+ private render;
39
+ private settleAutofit;
40
+ private bind;
41
+ private navigateTableCell;
42
+ private syncSelection;
43
+ private beforeInput;
44
+ private commit;
45
+ private endComposition;
46
+ private formatSelection;
47
+ private setSelection;
48
+ private setCaret;
49
+ private hideStaticText;
50
+ private restoreStaticText;
51
+ }
@@ -0,0 +1,20 @@
1
+ import type { TextBody } from '@web-ppt/core';
2
+ import type { TextEditOp, TextPosition } from '@web-ppt/edit-core';
3
+ export type TextInputPlan = {
4
+ readonly type: 'format';
5
+ readonly field: 'b' | 'i' | 'u';
6
+ } | {
7
+ readonly type: 'history';
8
+ readonly direction: 'undo' | 'redo';
9
+ } | {
10
+ readonly type: 'edit';
11
+ readonly ops: readonly TextEditOp[];
12
+ readonly nextIndex: number;
13
+ readonly insertedFrom: number | null;
14
+ readonly label: string;
15
+ };
16
+ /** beforeinput 只描述意图;这里把浏览器事件归一成无 DOM 的模型操作计划。 */
17
+ export declare function planTextInput(text: TextBody, positions: {
18
+ readonly from: TextPosition;
19
+ readonly to: TextPosition;
20
+ }, inputType: string, data: string | null): TextInputPlan | null;
@@ -0,0 +1,18 @@
1
+ import type { TextSearchMatch } from '@web-ppt/edit-core';
2
+ /** 只修改计数变化的元素和当前范围;导航不会重写整页命中 DOM。 */
3
+ export declare class TextSearchHighlightProjection {
4
+ private readonly root;
5
+ private readonly staticLayer;
6
+ private readonly overlay;
7
+ private readonly counts;
8
+ private readonly rangeMarkers;
9
+ private currentSlide;
10
+ private currentTarget;
11
+ constructor(root: HTMLElement, staticLayer: HTMLElement, overlay: HTMLElement);
12
+ sync(matches: readonly TextSearchMatch[], current: TextSearchMatch | null, slideId: string): void;
13
+ clear(): void;
14
+ private syncCounts;
15
+ private syncCurrent;
16
+ private markRange;
17
+ private clearCurrent;
18
+ }
@@ -0,0 +1,11 @@
1
+ import type { Editor, FindTextRequest, TextSearchMatch } from '@web-ppt/edit-core';
2
+ /** 查询结果按页懒缓存;事务只淘汰脏页,页序变化只重组数组。 */
3
+ export declare class SessionTextSearchIndex {
4
+ private readonly editor;
5
+ private readonly cache;
6
+ private readonly unsubscribe;
7
+ private isDisposed;
8
+ constructor(editor: Editor);
9
+ find(request: FindTextRequest): readonly TextSearchMatch[];
10
+ dispose(): void;
11
+ }
@@ -0,0 +1,41 @@
1
+ import type { FindTextRequest, TextSearchMatch, TextSearchScope } from '@web-ppt/edit-core';
2
+ export type TextSearchMode = 'find' | 'replace';
3
+ export interface TextSearchOpenOptions {
4
+ readonly mode?: TextSearchMode;
5
+ readonly query?: string;
6
+ readonly replacement?: string;
7
+ readonly scope?: TextSearchScope;
8
+ readonly matchCase?: boolean;
9
+ readonly wholeWord?: boolean;
10
+ }
11
+ export type TextSearchOptions = Pick<FindTextRequest, 'scope' | 'matchCase' | 'wholeWord'>;
12
+ export interface TextSearchSnapshot {
13
+ readonly open: boolean;
14
+ readonly mode: TextSearchMode;
15
+ readonly query: string;
16
+ readonly replacement: string;
17
+ readonly scope: TextSearchScope;
18
+ readonly matchCase: boolean;
19
+ readonly wholeWord: boolean;
20
+ readonly matches: readonly TextSearchMatch[];
21
+ readonly currentIndex: number;
22
+ readonly current: TextSearchMatch | null;
23
+ /** 外部事务让原精确范围消失;控制器已尽力重基到同一目标或相邻命中。 */
24
+ readonly currentInvalidated: boolean;
25
+ }
26
+ export type TextSearchSubscriber = (snapshot: TextSearchSnapshot) => void;
27
+ export interface TextSearch {
28
+ readonly snapshot: TextSearchSnapshot;
29
+ readonly disposed: boolean;
30
+ open(options?: TextSearchOpenOptions): void;
31
+ close(): void;
32
+ setQuery(query: string): void;
33
+ setReplacement(replacement: string): void;
34
+ setOptions(options: Partial<TextSearchOptions>): void;
35
+ next(): TextSearchMatch | null;
36
+ previous(): TextSearchMatch | null;
37
+ replaceCurrent(): boolean;
38
+ replaceAll(): number;
39
+ subscribe(subscriber: TextSearchSubscriber): () => void;
40
+ dispose(): void;
41
+ }
@@ -0,0 +1,33 @@
1
+ import type { TextSearchMatch } from '@web-ppt/edit-core';
2
+ import type { EditorMode } from './slide-editor-types';
3
+ import type { TextSearch, TextSearchOpenOptions } from './text-search-types';
4
+ /** 每个视图只投影会话搜索状态;导航只让发起动作的视图跨页。 */
5
+ export declare class TextSearchViewBinding {
6
+ private readonly root;
7
+ private readonly search;
8
+ private readonly mode;
9
+ private readonly readonlyDocument;
10
+ private readonly slideId;
11
+ private readonly reveal;
12
+ private readonly onError?;
13
+ readonly overlay: HTMLDivElement;
14
+ private readonly unsubscribe;
15
+ private readonly highlight;
16
+ private readonly originalAriaLabel;
17
+ constructor(root: HTMLElement, staticLayer: HTMLElement, search: TextSearch, mode: () => EditorMode, readonlyDocument: () => boolean, slideId: () => string, reveal: (match: TextSearchMatch) => void, onError?: ((error: unknown) => void) | undefined);
18
+ open(options: TextSearchOpenOptions): void;
19
+ close(): void;
20
+ next(): TextSearchMatch | null;
21
+ previous(): TextSearchMatch | null;
22
+ replaceCurrent(): boolean;
23
+ replaceAll(): number;
24
+ sync(): void;
25
+ destroy(): void;
26
+ readonly keydown: (event: KeyboardEvent) => boolean;
27
+ private navigate;
28
+ private revealCurrent;
29
+ private ariaLabel;
30
+ private consume;
31
+ private report;
32
+ private restoreAriaLabel;
33
+ }
@@ -0,0 +1,46 @@
1
+ import type { Editor, TextSearchMatch } from '@web-ppt/edit-core';
2
+ import type { TextSearch, TextSearchOpenOptions, TextSearchOptions, TextSearchSnapshot, TextSearchSubscriber } from './text-search-types';
3
+ /** 会话只保留模型身份与纯数据状态;DOM 视图和框架包都是薄消费者。 */
4
+ export declare class SessionTextSearch implements TextSearch {
5
+ private readonly editor;
6
+ private readonly index;
7
+ private readonly unsubscribeEditor;
8
+ private readonly subscribers;
9
+ private currentMatches;
10
+ private currentIndex;
11
+ private isOpen;
12
+ private mode;
13
+ private query;
14
+ private replacement;
15
+ private scope;
16
+ private matchCase;
17
+ private wholeWord;
18
+ private invalidated;
19
+ private currentSnapshot;
20
+ private mutating;
21
+ private isDisposed;
22
+ constructor(editor: Editor);
23
+ get snapshot(): TextSearchSnapshot;
24
+ get disposed(): boolean;
25
+ open(options?: TextSearchOpenOptions): void;
26
+ close(): void;
27
+ setQuery(query: string): void;
28
+ setReplacement(replacement: string): void;
29
+ setOptions(options: Partial<TextSearchOptions>): void;
30
+ next(): TextSearchMatch | null;
31
+ previous(): TextSearchMatch | null;
32
+ replaceCurrent(): boolean;
33
+ replaceAll(): number;
34
+ subscribe(subscriber: TextSearchSubscriber): () => void;
35
+ dispose(): void;
36
+ private refresh;
37
+ private step;
38
+ private request;
39
+ private snapshotOf;
40
+ private publish;
41
+ private assertQuery;
42
+ private assertReplacement;
43
+ private assertScope;
44
+ private assertBoolean;
45
+ private assertActive;
46
+ }
@@ -0,0 +1,14 @@
1
+ import type { AffineMatrix, EditDoc, ElementFrameTransform, ElementId, SpacePoint } from '@web-ppt/edit-core';
2
+ export declare const MIN_FRAME_SIZE: number;
3
+ export interface TransformFrame extends ElementFrameTransform {
4
+ flipH: boolean;
5
+ flipV: boolean;
6
+ }
7
+ /** 预览 wrapper 位于元素父空间;矩阵把旧渲染框直接映射到新框,不触碰静态 markup。 */
8
+ export declare function transformPreviewMatrix(source: TransformFrame, next: TransformFrame): AffineMatrix;
9
+ export declare function transformFrameCorners(doc: EditDoc, id: ElementId, frame: TransformFrame): [
10
+ SpacePoint,
11
+ SpacePoint,
12
+ SpacePoint,
13
+ SpacePoint
14
+ ];
@@ -0,0 +1,24 @@
1
+ import type { Transition } from '@web-ppt/core';
2
+ import { type SlideTransitionInput } from '@web-ppt/edit-core';
3
+ interface TransitionPreviewOptions {
4
+ readonly layer: HTMLElement;
5
+ readonly chrome?: readonly (HTMLElement | SVGElement)[];
6
+ current(): Transition | undefined;
7
+ destroyed(): boolean;
8
+ }
9
+ /** 预览只拥有 Web Animations;模型、历史和产品面板状态都留在既有边界。 */
10
+ export declare class TransitionPreviewController {
11
+ private readonly options;
12
+ private generation;
13
+ private playback;
14
+ private outgoing;
15
+ private chromeVisibility;
16
+ constructor(options: TransitionPreviewOptions);
17
+ preview(input?: SlideTransitionInput): Promise<boolean>;
18
+ cancel(): void;
19
+ private releaseAnimations;
20
+ private hideChrome;
21
+ private restoreChrome;
22
+ private previewOutgoing;
23
+ }
24
+ export {};
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@web-ppt/editor",
3
+ "version": "0.5.0-beta.1",
4
+ "description": "Framework-agnostic browser editing session and DOM view for Web-PPT.",
5
+ "keywords": [
6
+ "pptx",
7
+ "powerpoint",
8
+ "editor",
9
+ "browser",
10
+ "svg",
11
+ "react",
12
+ "vue",
13
+ "typescript"
14
+ ],
15
+ "license": "MIT",
16
+ "author": "unStone",
17
+ "homepage": "https://github.com/unStone/web-ppt#readme",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/unStone/web-ppt.git",
21
+ "directory": "packages/editor"
22
+ },
23
+ "type": "module",
24
+ "sideEffects": false,
25
+ "main": "./dist/editor.js",
26
+ "module": "./dist/editor.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/editor.js"
32
+ },
33
+ "./package.json": "./package.json"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "README.md",
38
+ "CHANGELOG.md",
39
+ "LICENSE"
40
+ ],
41
+ "scripts": {
42
+ "build": "vite build && tsc -p tsconfig.build.json",
43
+ "prepublishOnly": "npm run build",
44
+ "prepack": "node ../../tooling/sync-package-docs.mjs"
45
+ },
46
+ "peerDependencies": {
47
+ "@web-ppt/core": "^0.5.0-beta.1",
48
+ "@web-ppt/edit-core": "^0.5.0-beta.1",
49
+ "@web-ppt/viewer-core": "^0.5.0-beta.1"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public"
53
+ }
54
+ }