@sqsoffice/slide 0.0.0-stage → 0.1.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.
- package/LICENSE +202 -0
- package/README.md +81 -2
- package/dist/THIRD-PARTY-NOTICES.txt +19871 -0
- package/dist/api-CLyi4j4N.js +4030 -0
- package/dist/api.js +1 -0
- package/dist/assets/engine/files-worker.js +1 -0
- package/dist/assets/engine/host-artifact-jgAXg8CH.js +1 -0
- package/dist/assets/engine/host-load-wasm-DyYR5qIL.js +1 -0
- package/dist/assets/engine/host-manifest.json +42 -0
- package/dist/assets/engine/host-pdf-import-BOPMPpUS.js +1 -0
- package/dist/assets/engine/host.js +1 -0
- package/dist/assets/engine/manifest.json +66 -0
- package/dist/assets/engine/office_web.js +1491 -0
- package/dist/assets/engine/office_web_bg.wasm +4 -0
- package/dist/assets/engine/worker.js +1 -0
- package/dist/assets/fonts/source-han-sans/2.005/LICENSE.txt +96 -0
- package/dist/assets/fonts/source-han-sans/2.005/SourceHanSansCN-Bold.otf +0 -0
- package/dist/assets/fonts/source-han-sans/2.005/SourceHanSansCN-Regular.otf +0 -0
- package/dist/assets/fonts/source-han-sans/2.005/manifest.json +20 -0
- package/dist/index.js +835 -0
- package/dist/package-manifest.json +181 -0
- package/dist/style.css +2 -0
- package/dist/types/app/lib/automation/protocol.d.ts +25 -0
- package/dist/types/app/lib/engine/client.d.ts +129 -0
- package/dist/types/app/lib/engine/docx.d.ts +67 -0
- package/dist/types/app/lib/engine/grid.d.ts +330 -0
- package/dist/types/app/lib/engine/image.d.ts +15 -0
- package/dist/types/app/lib/engine/markdown.d.ts +220 -0
- package/dist/types/app/lib/engine/pdf-import.d.ts +18 -0
- package/dist/types/app/lib/engine/pdf-ocr.d.ts +70 -0
- package/dist/types/app/lib/engine/pdf-output.d.ts +22 -0
- package/dist/types/app/lib/engine/pdf.d.ts +191 -0
- package/dist/types/app/lib/engine/presentation-clipboard.d.ts +26 -0
- package/dist/types/app/lib/engine/presentation-media.d.ts +156 -0
- package/dist/types/app/lib/engine/presentation.d.ts +145 -0
- package/dist/types/app/lib/engine/printing.d.ts +91 -0
- package/dist/types/app/lib/engine/protocol.d.ts +233 -0
- package/dist/types/app/lib/engine/script.d.ts +46 -0
- package/dist/types/app/lib/engine/sheet-clipboard.d.ts +42 -0
- package/dist/types/app/lib/engine/sheet-validation.d.ts +19 -0
- package/dist/types/app/lib/engine/view.d.ts +186 -0
- package/dist/types/app/lib/files/session.d.ts +114 -0
- package/dist/types/app/lib/files/storage.d.ts +20 -0
- package/dist/types/packages/slide/api.d.ts +4 -0
- package/dist/types/packages/slide/index.d.ts +5 -0
- package/dist/types/sdk/types.d.ts +59 -0
- package/package.json +40 -3
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { Json } from './protocol';
|
|
2
|
+
export type PdfData = Record<string, Json>;
|
|
3
|
+
export type PdfOperation = PdfData & {
|
|
4
|
+
op: string;
|
|
5
|
+
};
|
|
6
|
+
export type PdfPanel = 'object' | 'pages' | 'forms' | 'search' | 'navigation' | 'marks' | 'attachments' | 'layers' | 'protection' | 'document' | 'measure' | 'redaction';
|
|
7
|
+
export type PdfMode = 'read' | 'select' | 'text';
|
|
8
|
+
export type PdfReadingMode = 'continuous' | 'single_page' | 'two_pages';
|
|
9
|
+
export interface PdfPagePlacement {
|
|
10
|
+
index: number;
|
|
11
|
+
left: number;
|
|
12
|
+
top: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
source_width: number;
|
|
16
|
+
source_height: number;
|
|
17
|
+
page_to_view: PdfMatrix;
|
|
18
|
+
view_to_page: PdfMatrix;
|
|
19
|
+
}
|
|
20
|
+
export interface PdfReadingLayout {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
pages: PdfPagePlacement[];
|
|
24
|
+
active: PdfPagePlacement;
|
|
25
|
+
active_spread: {
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
};
|
|
29
|
+
dominant_page: number | null;
|
|
30
|
+
next_offset: number | null;
|
|
31
|
+
}
|
|
32
|
+
export type PdfMatrix = [number, number, number, number, number, number];
|
|
33
|
+
export type PdfRect = [number, number, number, number];
|
|
34
|
+
export type PdfTarget = {
|
|
35
|
+
revision: number;
|
|
36
|
+
page: number;
|
|
37
|
+
page_id: [number, number];
|
|
38
|
+
stream_id: [number, number];
|
|
39
|
+
stream_index: number;
|
|
40
|
+
operation_index: number;
|
|
41
|
+
source_hash: string;
|
|
42
|
+
};
|
|
43
|
+
export interface PdfPermissions {
|
|
44
|
+
copy: boolean;
|
|
45
|
+
print: boolean;
|
|
46
|
+
print_high_quality: boolean;
|
|
47
|
+
export: boolean;
|
|
48
|
+
assemble: boolean;
|
|
49
|
+
fill_forms: boolean;
|
|
50
|
+
modify_contents: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface PdfSecurity {
|
|
53
|
+
signature_read_only: boolean;
|
|
54
|
+
encrypted: boolean;
|
|
55
|
+
identity: 'none' | 'user' | 'owner';
|
|
56
|
+
revision: number;
|
|
57
|
+
permissions: PdfPermissions;
|
|
58
|
+
user_permissions: PdfPermissions;
|
|
59
|
+
}
|
|
60
|
+
export interface PdfPage {
|
|
61
|
+
index: number;
|
|
62
|
+
width: number;
|
|
63
|
+
height: number;
|
|
64
|
+
label: string;
|
|
65
|
+
}
|
|
66
|
+
export interface PdfPageGeometry extends PdfPage {
|
|
67
|
+
pdf_to_page: PdfMatrix;
|
|
68
|
+
page_to_pdf: PdfMatrix;
|
|
69
|
+
}
|
|
70
|
+
export interface PdfState {
|
|
71
|
+
revision: number;
|
|
72
|
+
font_epoch: number;
|
|
73
|
+
page_count: number;
|
|
74
|
+
offset: number;
|
|
75
|
+
next_offset: number | null;
|
|
76
|
+
pages: PdfPage[];
|
|
77
|
+
page: PdfPageGeometry | null;
|
|
78
|
+
selection: {
|
|
79
|
+
page: number;
|
|
80
|
+
target: PdfTarget | null;
|
|
81
|
+
};
|
|
82
|
+
security: PdfSecurity;
|
|
83
|
+
read_only: boolean;
|
|
84
|
+
recovery_allowed: boolean;
|
|
85
|
+
}
|
|
86
|
+
export type PdfTextStyle = {
|
|
87
|
+
font_family: string | null;
|
|
88
|
+
font_size: number;
|
|
89
|
+
color: [number, number, number];
|
|
90
|
+
bold: boolean;
|
|
91
|
+
italic: boolean;
|
|
92
|
+
alignment: number;
|
|
93
|
+
line_height: number;
|
|
94
|
+
};
|
|
95
|
+
export interface PdfObject {
|
|
96
|
+
target: PdfTarget;
|
|
97
|
+
kind: 'text' | 'image';
|
|
98
|
+
rect: PdfRect | null;
|
|
99
|
+
matrix: number[];
|
|
100
|
+
text: string | null;
|
|
101
|
+
font_name: string | null;
|
|
102
|
+
font_size: number | null;
|
|
103
|
+
image_size: [number, number] | null;
|
|
104
|
+
image_crop: PdfRect | null;
|
|
105
|
+
properties: {
|
|
106
|
+
text: string | null;
|
|
107
|
+
rect: PdfRect | null;
|
|
108
|
+
rotation: number | null;
|
|
109
|
+
opacity: number | null;
|
|
110
|
+
style: PdfTextStyle | null;
|
|
111
|
+
} | null;
|
|
112
|
+
capabilities: {
|
|
113
|
+
update: boolean;
|
|
114
|
+
replace_text: boolean;
|
|
115
|
+
replace_image: boolean;
|
|
116
|
+
move: boolean;
|
|
117
|
+
crop: boolean;
|
|
118
|
+
delete: boolean;
|
|
119
|
+
};
|
|
120
|
+
read_only_reason: string | null;
|
|
121
|
+
}
|
|
122
|
+
export interface PdfInventory {
|
|
123
|
+
revision: number;
|
|
124
|
+
page: number;
|
|
125
|
+
page_id: [number, number];
|
|
126
|
+
elements: PdfObject[];
|
|
127
|
+
text_blocks: PdfObject[];
|
|
128
|
+
warnings: string[];
|
|
129
|
+
}
|
|
130
|
+
export type PdfViewRequest = {
|
|
131
|
+
kind: 'pdf_reading';
|
|
132
|
+
request: PdfData;
|
|
133
|
+
} | {
|
|
134
|
+
kind: 'pdf_tools';
|
|
135
|
+
request: PdfData;
|
|
136
|
+
} | {
|
|
137
|
+
kind: 'pdf_state';
|
|
138
|
+
from?: number;
|
|
139
|
+
limit?: number;
|
|
140
|
+
page?: number;
|
|
141
|
+
} | {
|
|
142
|
+
kind: 'pdf_selection';
|
|
143
|
+
page: number;
|
|
144
|
+
target?: PdfTarget | null;
|
|
145
|
+
} | {
|
|
146
|
+
kind: 'pdf_hit';
|
|
147
|
+
page: number;
|
|
148
|
+
x: number;
|
|
149
|
+
y: number;
|
|
150
|
+
prefer_text?: boolean;
|
|
151
|
+
} | {
|
|
152
|
+
kind: 'pdf_text_selection';
|
|
153
|
+
page: number;
|
|
154
|
+
rect: PdfRect;
|
|
155
|
+
};
|
|
156
|
+
export type PdfViewResult = PdfReadingLayout | PdfState | {
|
|
157
|
+
revision: number;
|
|
158
|
+
selection: {
|
|
159
|
+
page: number;
|
|
160
|
+
target: PdfTarget | null;
|
|
161
|
+
};
|
|
162
|
+
} | {
|
|
163
|
+
revision: number;
|
|
164
|
+
page: number;
|
|
165
|
+
target: PdfTarget | null;
|
|
166
|
+
kind: 'text' | 'image' | null;
|
|
167
|
+
rect: PdfRect | null;
|
|
168
|
+
} | {
|
|
169
|
+
revision: number;
|
|
170
|
+
page: number;
|
|
171
|
+
text: string;
|
|
172
|
+
rects: PdfRect[];
|
|
173
|
+
};
|
|
174
|
+
export declare const pdfObjectKey: (target: PdfTarget) => string;
|
|
175
|
+
export declare const pdfObjectLabel: (object: PdfObject, index?: number) => string;
|
|
176
|
+
export declare function pdfPoint(matrix: PdfMatrix, x: number, y: number): [number, number];
|
|
177
|
+
export declare function pdfInverse(matrix: number[]): PdfMatrix;
|
|
178
|
+
/** Transform all four corners; both input and result use x0/y0/x1/y1. */
|
|
179
|
+
export declare function pdfTransformRect(matrix: PdfMatrix, rect: PdfRect): PdfRect;
|
|
180
|
+
export declare function pdfPageRect(page: PdfPageGeometry, left: number, top: number, width: number, height: number): PdfRect;
|
|
181
|
+
/** Content dimensions are defined before page rotation, unlike crop/link bounds. */
|
|
182
|
+
export declare function pdfPlacement(page: PdfPageGeometry, left: number, top: number, width: number, height: number, rotation?: number): {
|
|
183
|
+
rect: PdfRect;
|
|
184
|
+
rotation: number;
|
|
185
|
+
scale: number;
|
|
186
|
+
};
|
|
187
|
+
export declare const pdfDefaultStyle: () => PdfTextStyle;
|
|
188
|
+
export declare function pdfColorHex(rgb: number[] | null | undefined): string;
|
|
189
|
+
export declare function pdfColorRgb(hex: string): [number, number, number];
|
|
190
|
+
export declare function pdfPageRange(text: string, count: number): number[];
|
|
191
|
+
export declare function pdfInlineFile(file: File, maximum?: number): Promise<string>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Immutable native object captures are restored in order with the editing log. */
|
|
2
|
+
export type PresentationClipboardRequest = {
|
|
3
|
+
action: 'inspect';
|
|
4
|
+
} | {
|
|
5
|
+
action: 'capture';
|
|
6
|
+
id: string;
|
|
7
|
+
source: {
|
|
8
|
+
slide_id: number;
|
|
9
|
+
shape_ids: number[];
|
|
10
|
+
};
|
|
11
|
+
} | {
|
|
12
|
+
action: 'paste';
|
|
13
|
+
id: string;
|
|
14
|
+
destination: {
|
|
15
|
+
slide_id: number;
|
|
16
|
+
};
|
|
17
|
+
dx?: number;
|
|
18
|
+
dy?: number;
|
|
19
|
+
};
|
|
20
|
+
export interface PresentationClipboardResult {
|
|
21
|
+
id: string;
|
|
22
|
+
slide_id: number;
|
|
23
|
+
shape_ids: number[];
|
|
24
|
+
count: number;
|
|
25
|
+
text?: string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { BrowserFileSession } from '../files/session';
|
|
2
|
+
import type { RenderedTile } from './view';
|
|
3
|
+
export interface PresentationShowRequest {
|
|
4
|
+
slide: number;
|
|
5
|
+
fromStart?: boolean;
|
|
6
|
+
showId?: number;
|
|
7
|
+
rehearsal?: boolean;
|
|
8
|
+
revision: number;
|
|
9
|
+
}
|
|
10
|
+
export interface PresentationMediaInfo {
|
|
11
|
+
slide_id: number;
|
|
12
|
+
shape_id: number;
|
|
13
|
+
kind: 'audio' | 'video';
|
|
14
|
+
source: 'embedded' | 'external' | 'unavailable';
|
|
15
|
+
content_type: string | null;
|
|
16
|
+
playback: {
|
|
17
|
+
trim_start_ms: number;
|
|
18
|
+
trim_end_ms: number;
|
|
19
|
+
volume: number;
|
|
20
|
+
muted: boolean;
|
|
21
|
+
looping: boolean;
|
|
22
|
+
start: 'on_click' | 'automatic' | 'unsupported';
|
|
23
|
+
hide_when_stopped: boolean;
|
|
24
|
+
};
|
|
25
|
+
diagnostics: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface PresentationPlaybackState {
|
|
28
|
+
revision: number;
|
|
29
|
+
slide: number;
|
|
30
|
+
slide_id: number;
|
|
31
|
+
total: number;
|
|
32
|
+
show_id: number | null;
|
|
33
|
+
show_position: number | null;
|
|
34
|
+
show_count: number | null;
|
|
35
|
+
first_slide: number | null;
|
|
36
|
+
last_slide: number | null;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
state: 'ready' | 'transitioning' | 'running' | 'awaiting_click' | 'paused' | 'finished' | 'stopped';
|
|
40
|
+
position_ms: number;
|
|
41
|
+
frame_revision: number;
|
|
42
|
+
next_wakeup_ms: number | null;
|
|
43
|
+
advance: boolean;
|
|
44
|
+
next_slide: number | null;
|
|
45
|
+
previous_slide: number | null;
|
|
46
|
+
following_slide: number | null;
|
|
47
|
+
transitioning: boolean;
|
|
48
|
+
notes?: string;
|
|
49
|
+
media?: PresentationMediaInfo[];
|
|
50
|
+
diagnostics?: string[];
|
|
51
|
+
action?: {
|
|
52
|
+
kind: 'media' | 'slide' | 'jump' | 'custom_show' | 'external_url' | 'unsupported';
|
|
53
|
+
shape_id?: number;
|
|
54
|
+
slide_id?: number;
|
|
55
|
+
destination?: string;
|
|
56
|
+
url?: string;
|
|
57
|
+
id?: number;
|
|
58
|
+
return_after?: boolean;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface PresentationVideoFrame {
|
|
62
|
+
shape_id: number;
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
pixels: ArrayBuffer;
|
|
66
|
+
}
|
|
67
|
+
export type PresentationMediaViewRequest = {
|
|
68
|
+
kind: 'presentation_playback';
|
|
69
|
+
op: 'start' | 'tick' | 'click' | 'hover' | 'pause' | 'resume' | 'seek' | 'stop';
|
|
70
|
+
now_ms: number;
|
|
71
|
+
slide?: number;
|
|
72
|
+
position_ms?: number;
|
|
73
|
+
x?: number;
|
|
74
|
+
y?: number;
|
|
75
|
+
reduced_motion?: boolean;
|
|
76
|
+
show_id?: number;
|
|
77
|
+
show_position?: number;
|
|
78
|
+
from_start?: boolean;
|
|
79
|
+
rehearsal?: boolean;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'presentation_frame';
|
|
82
|
+
width: number;
|
|
83
|
+
height: number;
|
|
84
|
+
hidden_media?: number[];
|
|
85
|
+
video?: PresentationVideoFrame;
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'presentation_media';
|
|
88
|
+
slide_id: number;
|
|
89
|
+
shape_id: number;
|
|
90
|
+
};
|
|
91
|
+
export type PresentationMediaViewResult = PresentationPlaybackState | RenderedTile | {
|
|
92
|
+
bytes: ArrayBuffer;
|
|
93
|
+
};
|
|
94
|
+
export interface MediaPlaybackState {
|
|
95
|
+
loading: boolean;
|
|
96
|
+
playing: boolean;
|
|
97
|
+
ended: boolean;
|
|
98
|
+
position: number;
|
|
99
|
+
duration: number;
|
|
100
|
+
shapeId?: number;
|
|
101
|
+
error?: string;
|
|
102
|
+
}
|
|
103
|
+
/** One media timeline is shared by the audience, presenter and recording output. */
|
|
104
|
+
export declare class PresentationMediaController {
|
|
105
|
+
private readonly session;
|
|
106
|
+
private readonly notify;
|
|
107
|
+
private element?;
|
|
108
|
+
private info?;
|
|
109
|
+
private url?;
|
|
110
|
+
private request?;
|
|
111
|
+
private events?;
|
|
112
|
+
private sample;
|
|
113
|
+
private state;
|
|
114
|
+
private audio?;
|
|
115
|
+
private audioSource?;
|
|
116
|
+
private audioDestination?;
|
|
117
|
+
private stopped;
|
|
118
|
+
private disposed;
|
|
119
|
+
constructor(session: BrowserFileSession, notify: (state: MediaPlaybackState) => void);
|
|
120
|
+
private emit;
|
|
121
|
+
get active(): PresentationMediaInfo | undefined;
|
|
122
|
+
get video(): HTMLVideoElement | undefined;
|
|
123
|
+
private range;
|
|
124
|
+
private update;
|
|
125
|
+
open(info: PresentationMediaInfo, autoplay?: boolean): Promise<void>;
|
|
126
|
+
play(): Promise<void>;
|
|
127
|
+
pause(): void;
|
|
128
|
+
seek(seconds: number): void;
|
|
129
|
+
setVolume(value: number): void;
|
|
130
|
+
/** Uses the same browser video element clock as its audio output. */
|
|
131
|
+
sampleFrame(): PresentationVideoFrame | undefined;
|
|
132
|
+
private connectAudio;
|
|
133
|
+
recordingAudio(): Promise<MediaStream>;
|
|
134
|
+
stop(): void;
|
|
135
|
+
dispose(): Promise<void>;
|
|
136
|
+
}
|
|
137
|
+
export declare class PresentationRecorder {
|
|
138
|
+
private recorder?;
|
|
139
|
+
private stream?;
|
|
140
|
+
private microphone?;
|
|
141
|
+
private mixer?;
|
|
142
|
+
private timer?;
|
|
143
|
+
private done?;
|
|
144
|
+
private disposed;
|
|
145
|
+
get active(): boolean;
|
|
146
|
+
start(canvas: HTMLCanvasElement, media: PresentationMediaController, microphone: boolean): Promise<void>;
|
|
147
|
+
stop(): Promise<Blob | undefined>;
|
|
148
|
+
private release;
|
|
149
|
+
dispose(): Promise<void>;
|
|
150
|
+
}
|
|
151
|
+
/** Extract a local video poster without uploading the selected file. */
|
|
152
|
+
export declare function createMediaPoster(file: File): Promise<{
|
|
153
|
+
data: string;
|
|
154
|
+
width: number;
|
|
155
|
+
height: number;
|
|
156
|
+
}>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { Json } from './protocol';
|
|
2
|
+
export type PresentationOperation = Record<string, Json> & {
|
|
3
|
+
op: string;
|
|
4
|
+
};
|
|
5
|
+
export type PresentationPanel = 'object' | 'search' | 'design' | 'motion' | 'organize' | 'notes';
|
|
6
|
+
export interface PresentationSelection {
|
|
7
|
+
slide: number;
|
|
8
|
+
slide_id: number;
|
|
9
|
+
shape_ids: number[];
|
|
10
|
+
}
|
|
11
|
+
export interface PresentationSlideSummary {
|
|
12
|
+
index: number;
|
|
13
|
+
id: number;
|
|
14
|
+
title: string;
|
|
15
|
+
hidden: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface PresentationObject {
|
|
18
|
+
id: number | null;
|
|
19
|
+
name: string;
|
|
20
|
+
title?: string | null;
|
|
21
|
+
description?: string | null;
|
|
22
|
+
kind: string;
|
|
23
|
+
hidden: boolean;
|
|
24
|
+
parent_group: number | null;
|
|
25
|
+
text_box: boolean;
|
|
26
|
+
left: number;
|
|
27
|
+
top: number;
|
|
28
|
+
width: number;
|
|
29
|
+
height: number;
|
|
30
|
+
transform?: {
|
|
31
|
+
left: number;
|
|
32
|
+
top: number;
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
rotation: number;
|
|
36
|
+
flip_horizontal: boolean;
|
|
37
|
+
flip_vertical: boolean;
|
|
38
|
+
} | null;
|
|
39
|
+
text: string | null;
|
|
40
|
+
table: string[][] | null;
|
|
41
|
+
capabilities: {
|
|
42
|
+
transform: boolean;
|
|
43
|
+
appearance: boolean;
|
|
44
|
+
copy: boolean;
|
|
45
|
+
delete: boolean;
|
|
46
|
+
group: boolean;
|
|
47
|
+
ungroup: boolean;
|
|
48
|
+
};
|
|
49
|
+
disabled_reason?: string | null;
|
|
50
|
+
connection_sites?: {
|
|
51
|
+
shape_id: number;
|
|
52
|
+
index: number;
|
|
53
|
+
x: number;
|
|
54
|
+
y: number;
|
|
55
|
+
}[];
|
|
56
|
+
}
|
|
57
|
+
export interface PresentationSlide extends PresentationSlideSummary {
|
|
58
|
+
layout?: string | null;
|
|
59
|
+
notes?: string | null;
|
|
60
|
+
shapes: PresentationObject[];
|
|
61
|
+
background: Json;
|
|
62
|
+
}
|
|
63
|
+
export interface PresentationState {
|
|
64
|
+
revision: number;
|
|
65
|
+
font_epoch: number;
|
|
66
|
+
format: 'pptx' | 'ppt';
|
|
67
|
+
read_only: boolean;
|
|
68
|
+
slide_count: number;
|
|
69
|
+
width: number;
|
|
70
|
+
height: number;
|
|
71
|
+
offset: number;
|
|
72
|
+
next_offset: number | null;
|
|
73
|
+
slides: PresentationSlideSummary[];
|
|
74
|
+
selection: PresentationSelection;
|
|
75
|
+
slide: PresentationSlide | null;
|
|
76
|
+
}
|
|
77
|
+
export type PresentationViewRequest = {
|
|
78
|
+
kind: 'presentation_state';
|
|
79
|
+
from?: number;
|
|
80
|
+
limit?: number;
|
|
81
|
+
slide?: number;
|
|
82
|
+
} | {
|
|
83
|
+
kind: 'presentation_selection';
|
|
84
|
+
slide: number;
|
|
85
|
+
shape_ids: number[];
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'presentation_hit';
|
|
88
|
+
slide: number;
|
|
89
|
+
x: number;
|
|
90
|
+
y: number;
|
|
91
|
+
} | {
|
|
92
|
+
kind: 'presentation_tools';
|
|
93
|
+
request: Record<string, Json>;
|
|
94
|
+
};
|
|
95
|
+
export type PresentationViewResult = PresentationState | {
|
|
96
|
+
revision: number;
|
|
97
|
+
selection: PresentationSelection;
|
|
98
|
+
} | {
|
|
99
|
+
revision: number;
|
|
100
|
+
slide: number;
|
|
101
|
+
shape_id: number | null;
|
|
102
|
+
};
|
|
103
|
+
export interface PresentationTextTarget {
|
|
104
|
+
slide_id: number;
|
|
105
|
+
shape_id: number;
|
|
106
|
+
cell?: {
|
|
107
|
+
row: number;
|
|
108
|
+
column: number;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface PresentationTextContent {
|
|
112
|
+
text: string;
|
|
113
|
+
editable: boolean;
|
|
114
|
+
disabled_reason?: string | null;
|
|
115
|
+
paragraphs?: Json[];
|
|
116
|
+
}
|
|
117
|
+
export interface PresentationTextSelection {
|
|
118
|
+
target: PresentationTextTarget;
|
|
119
|
+
byte_range?: {
|
|
120
|
+
start: number;
|
|
121
|
+
end: number;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export interface PresentationTextFormat {
|
|
125
|
+
characters: Record<string, Json>;
|
|
126
|
+
paragraphs: Record<string, Json>;
|
|
127
|
+
frame: Record<string, Json>;
|
|
128
|
+
font_family_is_mixed?: boolean;
|
|
129
|
+
}
|
|
130
|
+
export interface PresentationTextPatch {
|
|
131
|
+
characters?: Record<string, Json>;
|
|
132
|
+
paragraphs?: Record<string, Json>;
|
|
133
|
+
frame?: Record<string, Json>;
|
|
134
|
+
}
|
|
135
|
+
export interface PresentationViewTools {
|
|
136
|
+
rulers: boolean;
|
|
137
|
+
grid: boolean;
|
|
138
|
+
guides: boolean;
|
|
139
|
+
snap: boolean;
|
|
140
|
+
keepRatio: boolean;
|
|
141
|
+
spacing: number;
|
|
142
|
+
}
|
|
143
|
+
/** Pending input formatting follows the native editor's override rules. */
|
|
144
|
+
export declare function mergePresentationCharacters(current: Record<string, Json>, patch: Record<string, Json>): Record<string, Json>;
|
|
145
|
+
export declare const presentationObjectLabel: (object: PresentationObject) => string;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { CopyExport, Json } from './protocol';
|
|
2
|
+
export type PrintLayout = {
|
|
3
|
+
kind: 'single';
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'multiple';
|
|
6
|
+
columns: number;
|
|
7
|
+
rows: number;
|
|
8
|
+
pages_per_sheet: number;
|
|
9
|
+
order: 'horizontal' | 'horizontal_reversed' | 'vertical' | 'vertical_reversed' | 'cut_stack';
|
|
10
|
+
border: boolean;
|
|
11
|
+
auto_rotate: boolean;
|
|
12
|
+
gap_pt: number;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'booklet';
|
|
15
|
+
subset: 'both_sides' | 'front_only' | 'back_only';
|
|
16
|
+
binding: 'left' | 'right';
|
|
17
|
+
} | {
|
|
18
|
+
kind: 'poster';
|
|
19
|
+
scale_percent: number;
|
|
20
|
+
overlap_pt: number;
|
|
21
|
+
cut_marks: boolean;
|
|
22
|
+
};
|
|
23
|
+
export interface DocumentPrintOptions {
|
|
24
|
+
settings: {
|
|
25
|
+
page_range: string;
|
|
26
|
+
paper: 'document' | 'a4' | 'a3' | 'letter' | 'legal';
|
|
27
|
+
orientation: 'document' | 'portrait' | 'landscape';
|
|
28
|
+
scaling: 'actual_size' | 'fit' | 'shrink' | 'custom';
|
|
29
|
+
scale_percent?: number | null;
|
|
30
|
+
content: 'document' | 'document_and_markups' | 'form_fields_only';
|
|
31
|
+
layout: PrintLayout;
|
|
32
|
+
margin_pt: number;
|
|
33
|
+
};
|
|
34
|
+
dpi: number;
|
|
35
|
+
spreadsheet: {
|
|
36
|
+
kind: 'workbook';
|
|
37
|
+
} | {
|
|
38
|
+
kind: 'sheet';
|
|
39
|
+
sheet_id: number;
|
|
40
|
+
} | {
|
|
41
|
+
kind: 'selection';
|
|
42
|
+
sheet_id: number;
|
|
43
|
+
ranges: string[];
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export interface PrintPreview {
|
|
47
|
+
revision: number;
|
|
48
|
+
sourcePages: number[];
|
|
49
|
+
sheetCount: number;
|
|
50
|
+
requestedDpi: number;
|
|
51
|
+
warnings: string[];
|
|
52
|
+
sheets: {
|
|
53
|
+
index: number;
|
|
54
|
+
paperSize: [number, number];
|
|
55
|
+
sourcePages: number[];
|
|
56
|
+
}[];
|
|
57
|
+
}
|
|
58
|
+
export interface PrintSheetReport {
|
|
59
|
+
index: number;
|
|
60
|
+
width: number;
|
|
61
|
+
height: number;
|
|
62
|
+
paperSize: [number, number];
|
|
63
|
+
paperDpi: number;
|
|
64
|
+
sourceDpi: number | null;
|
|
65
|
+
warnings: string[];
|
|
66
|
+
}
|
|
67
|
+
export type PrintViewRequest = {
|
|
68
|
+
kind: 'print_preview';
|
|
69
|
+
options: DocumentPrintOptions;
|
|
70
|
+
} | {
|
|
71
|
+
kind: 'print_sheet';
|
|
72
|
+
options: DocumentPrintOptions;
|
|
73
|
+
index: number;
|
|
74
|
+
dpi: number;
|
|
75
|
+
} | {
|
|
76
|
+
kind: 'print_pdf';
|
|
77
|
+
options: DocumentPrintOptions;
|
|
78
|
+
} | {
|
|
79
|
+
kind: 'print_release';
|
|
80
|
+
};
|
|
81
|
+
export type PrintViewResult = PrintPreview | CopyExport;
|
|
82
|
+
export declare const defaultPrintOptions: () => DocumentPrintOptions;
|
|
83
|
+
export declare function printOptionsSnapshot(value: DocumentPrintOptions): DocumentPrintOptions;
|
|
84
|
+
export declare function printWarnings(report: Json): string[];
|
|
85
|
+
export declare const printFileName: (name: string, suffix: string, extension: string) => string;
|
|
86
|
+
/** A real physical-sheet image document; the browser owns device settings and completion. */
|
|
87
|
+
export declare function createBrowserPrintWindow(name: string): {
|
|
88
|
+
append(output: CopyExport, index: number, total: number): Promise<void>;
|
|
89
|
+
ready(): void;
|
|
90
|
+
close(): void;
|
|
91
|
+
};
|