@docmentis/udoc-editor 0.8.15 → 0.8.16
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/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +51 -9
- package/dist/commands.js.map +1 -1
- package/dist/components/PageControls.d.ts +13 -6
- package/dist/components/PageControls.d.ts.map +1 -1
- package/dist/components/PageControls.js +42 -33
- package/dist/components/PageControls.js.map +1 -1
- package/dist/components/PageSettingsModal.d.ts +0 -2
- package/dist/components/PageSettingsModal.d.ts.map +1 -1
- package/dist/components/PageSettingsModal.js +54 -56
- package/dist/components/PageSettingsModal.js.map +1 -1
- package/dist/components/{NewSlideModal.d.ts → SlideLayoutModal.d.ts} +15 -11
- package/dist/components/SlideLayoutModal.d.ts.map +1 -0
- package/dist/components/{NewSlideModal.js → SlideLayoutModal.js} +34 -18
- package/dist/components/SlideLayoutModal.js.map +1 -0
- package/dist/docmentis-theme.d.ts +4 -0
- package/dist/docmentis-theme.d.ts.map +1 -0
- package/dist/docmentis-theme.js +6 -0
- package/dist/docmentis-theme.js.map +1 -0
- package/dist/edit-client.d.ts +9 -1
- package/dist/edit-client.d.ts.map +1 -1
- package/dist/edit-client.js +10 -0
- package/dist/edit-client.js.map +1 -1
- package/dist/edit-command.d.ts +3 -1
- package/dist/edit-command.d.ts.map +1 -1
- package/dist/edit-command.js +7 -0
- package/dist/edit-command.js.map +1 -1
- package/dist/edit-mode.d.ts.map +1 -1
- package/dist/edit-mode.js +22 -10
- package/dist/edit-mode.js.map +1 -1
- package/dist/editor.d.ts +7 -6
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +6 -5
- package/dist/editor.js.map +1 -1
- package/dist/i18n/ar.js +10 -10
- package/dist/i18n/ar.js.map +1 -1
- package/dist/i18n/de.js +10 -10
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.js +10 -10
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.js +10 -10
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.js +10 -10
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/ja.js +10 -10
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ko.js +10 -10
- package/dist/i18n/ko.js.map +1 -1
- package/dist/i18n/messages.d.ts +18 -18
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/i18n/pt-BR.js +10 -10
- package/dist/i18n/pt-BR.js.map +1 -1
- package/dist/i18n/ru.js +10 -10
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/zh-CN.js +10 -10
- package/dist/i18n/zh-CN.js.map +1 -1
- package/dist/i18n/zh-TW.js +10 -10
- package/dist/i18n/zh-TW.js.map +1 -1
- package/dist/icons.d.ts +24 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +24 -0
- package/dist/icons.js.map +1 -1
- package/dist/image.d.ts +11 -7
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +44 -7
- package/dist/image.js.map +1 -1
- package/dist/insert.d.ts +24 -12
- package/dist/insert.d.ts.map +1 -1
- package/dist/insert.js +306 -51
- package/dist/insert.js.map +1 -1
- package/dist/line-edit.d.ts +30 -0
- package/dist/line-edit.d.ts.map +1 -0
- package/dist/line-edit.js +87 -0
- package/dist/line-edit.js.map +1 -0
- package/dist/markup.d.ts +25 -5
- package/dist/markup.d.ts.map +1 -1
- package/dist/markup.js +73 -15
- package/dist/markup.js.map +1 -1
- package/dist/opacity.d.ts +19 -0
- package/dist/opacity.d.ts.map +1 -0
- package/dist/opacity.js +45 -0
- package/dist/opacity.js.map +1 -0
- package/dist/page-commands.d.ts +16 -0
- package/dist/page-commands.d.ts.map +1 -0
- package/dist/page-commands.js +122 -0
- package/dist/page-commands.js.map +1 -0
- package/dist/page-controls.d.ts +27 -1
- package/dist/page-controls.d.ts.map +1 -1
- package/dist/page-controls.js +30 -14
- package/dist/page-controls.js.map +1 -1
- package/dist/paint.d.ts +59 -12
- package/dist/paint.d.ts.map +1 -1
- package/dist/paint.js +225 -104
- package/dist/paint.js.map +1 -1
- package/dist/ruler-controls.d.ts +6 -0
- package/dist/ruler-controls.d.ts.map +1 -1
- package/dist/ruler-controls.js +18 -3
- package/dist/ruler-controls.js.map +1 -1
- package/dist/ruler-edits.d.ts +2 -5
- package/dist/ruler-edits.d.ts.map +1 -1
- package/dist/ruler-edits.js +13 -20
- package/dist/ruler-edits.js.map +1 -1
- package/dist/ruler.d.ts +7 -1
- package/dist/ruler.d.ts.map +1 -1
- package/dist/ruler.js +41 -11
- package/dist/ruler.js.map +1 -1
- package/dist/shape-gallery.d.ts +9 -4
- package/dist/shape-gallery.d.ts.map +1 -1
- package/dist/shape-gallery.js +9 -16
- package/dist/shape-gallery.js.map +1 -1
- package/dist/slide-commands.d.ts +38 -0
- package/dist/slide-commands.d.ts.map +1 -0
- package/dist/slide-commands.js +191 -0
- package/dist/slide-commands.js.map +1 -0
- package/dist/slide-shape.d.ts +24 -3
- package/dist/slide-shape.d.ts.map +1 -1
- package/dist/slide-shape.js +65 -10
- package/dist/slide-shape.js.map +1 -1
- package/dist/state.d.ts +12 -5
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +1 -0
- package/dist/state.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +108 -63
- package/dist/styles.js.map +1 -1
- package/dist/tabs.d.ts +1 -1
- package/dist/tabs.d.ts.map +1 -1
- package/dist/tabs.js +99 -40
- package/dist/tabs.js.map +1 -1
- package/dist/text-format.d.ts.map +1 -1
- package/dist/text-format.js +2 -2
- package/dist/text-format.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/handlers.d.ts.map +1 -1
- package/dist/worker/handlers.js +6 -0
- package/dist/worker/handlers.js.map +1 -1
- package/dist/worker/protocol.d.ts +13 -2
- package/dist/worker/protocol.d.ts.map +1 -1
- package/dist/worker/worker-source.js +1 -1
- package/package.json +3 -3
- package/dist/components/NewSlideModal.d.ts.map +0 -1
- package/dist/components/NewSlideModal.js.map +0 -1
- package/dist/new-slide.d.ts +0 -20
- package/dist/new-slide.d.ts.map +0 -1
- package/dist/new-slide.js +0 -90
- package/dist/new-slide.js.map +0 -1
package/dist/markup.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import type { ShapeNode } from "@docmentis/udoc-wasm";
|
|
1
|
+
import type { PaintColor, PaintFill, ShapeNode } from "@docmentis/udoc-wasm";
|
|
2
2
|
import type { ShapePoint } from "@docmentis/udoc-ui/internal";
|
|
3
3
|
import type { GalleryShape } from "./shape-gallery.js";
|
|
4
|
+
/** What a shape is drawn over an image in. An image has no theme, so these are
|
|
5
|
+
* never scheme colors. */
|
|
6
|
+
export interface MarkupPaint {
|
|
7
|
+
readonly fill: PaintFill;
|
|
8
|
+
readonly line: PaintFill;
|
|
9
|
+
/** A box's label's. */
|
|
10
|
+
readonly text: PaintColor;
|
|
11
|
+
}
|
|
4
12
|
/** The weight in points a shape is outlined at over a page `width` ×
|
|
5
13
|
* `height` points: a point per {@link POINTS_PER_LINE_POINT} of its shorter
|
|
6
14
|
* side, and at least {@link MIN_LINE_WEIGHT}. */
|
|
@@ -9,17 +17,29 @@ export declare function markupLineWeight(width: number, height: number): number;
|
|
|
9
17
|
* × `height` points: a point per {@link POINTS_PER_TEXT_POINT} of its shorter
|
|
10
18
|
* side, and at least {@link MIN_TEXT_SIZE}. */
|
|
11
19
|
export declare function markupTextSize(width: number, height: number): number;
|
|
20
|
+
/**
|
|
21
|
+
* A text box across the box of `p0` and `p1` (the page's points) over a page
|
|
22
|
+
* `page` points in size, its id `id`: a rectangle with no fill or outline, holding
|
|
23
|
+
* `text` in the story `story`, wrapped at its width, in `color` and at the size of
|
|
24
|
+
* a label. It spans at least {@link TEXT_BOX_MIN_WIDTH} ×
|
|
25
|
+
* {@link TEXT_BOX_MIN_HEIGHT} of that size, moved back onto the page where that
|
|
26
|
+
* takes it past the edge.
|
|
27
|
+
*/
|
|
28
|
+
export declare function markupTextBox(id: string, story: string, text: string, p0: ShapePoint, p1: ShapePoint, page: {
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
}, color: PaintColor): ShapeNode;
|
|
12
32
|
/**
|
|
13
33
|
* The drawing shape `shape` spanning `p0 → p1` (the page's points) over a
|
|
14
34
|
* page `page` points in size, its id `id` and a box's text story `story` —
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
35
|
+
* in `paint`, a line and an open outline taking no fill; an arrowed line's head at
|
|
36
|
+
* `p1`, and at `p0` too for a double arrow; any shape but a line a box, with an
|
|
37
|
+
* empty label to type into. A line runs from
|
|
18
38
|
* `p0` to `p1` by flipping the box its preset runs corner to corner across; a
|
|
19
39
|
* box is never flipped, as a flip turns its label upside down.
|
|
20
40
|
*/
|
|
21
41
|
export declare function markupShape(id: string, story: string, shape: GalleryShape, p0: ShapePoint, p1: ShapePoint, page: {
|
|
22
42
|
width: number;
|
|
23
43
|
height: number;
|
|
24
|
-
}): ShapeNode;
|
|
44
|
+
}, paint: MarkupPaint): ShapeNode;
|
|
25
45
|
//# sourceMappingURL=markup.d.ts.map
|
package/dist/markup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../src/markup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../src/markup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAA2B,SAAS,EAAY,MAAM,sBAAsB,CAAC;AAChH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;2BAC2B;AAC3B,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC7B;AAqBD;;kDAEkD;AAClD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;gDAEgD;AAChD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpE;AA0BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CACzB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACvC,KAAK,EAAE,UAAU,GAClB,SAAS,CA+CX;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACvB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACvC,KAAK,EAAE,WAAW,GACnB,SAAS,CAsCX"}
|
package/dist/markup.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/** The color shapes are drawn over an image in — a markup red. An image has
|
|
2
|
-
* no theme, so it is an sRGB color, never a scheme one. */
|
|
3
|
-
const MARKUP_COLOR = { base: { sRgb: { r: 0xe5, g: 0x39, b: 0x35 } }, transforms: [] };
|
|
4
1
|
/** The page size, in points, one point of line weight is drawn per — so a
|
|
5
2
|
* shape's outline reads at the page's size, a photo's as a screenshot's. */
|
|
6
3
|
const POINTS_PER_LINE_POINT = 250;
|
|
@@ -10,6 +7,11 @@ const MIN_LINE_WEIGHT = 2;
|
|
|
10
7
|
const POINTS_PER_TEXT_POINT = 30;
|
|
11
8
|
/** The smallest a label is set, in points. */
|
|
12
9
|
const MIN_TEXT_SIZE = 12;
|
|
10
|
+
/** The least a text box spans across and down, in multiples of its text's size:
|
|
11
|
+
* room for a word or two, on a line. A box dropped with a click is sized in
|
|
12
|
+
* points, which on a large image is too narrow for one letter a line. */
|
|
13
|
+
const TEXT_BOX_MIN_WIDTH = 6;
|
|
14
|
+
const TEXT_BOX_MIN_HEIGHT = 1.5;
|
|
13
15
|
/** The weight in points a shape is outlined at over a page `width` ×
|
|
14
16
|
* `height` points: a point per {@link POINTS_PER_LINE_POINT} of its shorter
|
|
15
17
|
* side, and at least {@link MIN_LINE_WEIGHT}. */
|
|
@@ -25,9 +27,9 @@ export function markupTextSize(width, height) {
|
|
|
25
27
|
/** An arrowhead at a line's end. */
|
|
26
28
|
const ARROWHEAD = { kind: "triangle", width: "medium", length: "medium" };
|
|
27
29
|
/** A box's text body, empty: one paragraph centred in it, which the text typed
|
|
28
|
-
* into it takes
|
|
29
|
-
*
|
|
30
|
-
function labelBody(story, size) {
|
|
30
|
+
* into it takes `color` and `size` points from — what a press in the box lands a
|
|
31
|
+
* caret in, as in a slide's shape. Its story is `story`. */
|
|
32
|
+
function labelBody(story, size, color) {
|
|
31
33
|
return {
|
|
32
34
|
properties: { anchor: "center" },
|
|
33
35
|
story: {
|
|
@@ -35,8 +37,8 @@ function labelBody(story, size) {
|
|
|
35
37
|
blocks: [
|
|
36
38
|
{
|
|
37
39
|
paragraph: {
|
|
38
|
-
properties: [{ align: "center" }],
|
|
39
|
-
end: { mark: [{ size }, { fill: { solid:
|
|
40
|
+
properties: { props: [{ align: "center" }] },
|
|
41
|
+
end: { mark: { properties: { props: [{ size }, { fill: { solid: color } }] } } },
|
|
40
42
|
spans: [],
|
|
41
43
|
},
|
|
42
44
|
},
|
|
@@ -44,23 +46,79 @@ function labelBody(story, size) {
|
|
|
44
46
|
},
|
|
45
47
|
};
|
|
46
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* A text box across the box of `p0` and `p1` (the page's points) over a page
|
|
51
|
+
* `page` points in size, its id `id`: a rectangle with no fill or outline, holding
|
|
52
|
+
* `text` in the story `story`, wrapped at its width, in `color` and at the size of
|
|
53
|
+
* a label. It spans at least {@link TEXT_BOX_MIN_WIDTH} ×
|
|
54
|
+
* {@link TEXT_BOX_MIN_HEIGHT} of that size, moved back onto the page where that
|
|
55
|
+
* takes it past the edge.
|
|
56
|
+
*/
|
|
57
|
+
export function markupTextBox(id, story, text, p0, p1, page, color) {
|
|
58
|
+
const size = markupTextSize(page.width, page.height);
|
|
59
|
+
const properties = { props: [{ size }, { fill: { solid: color } }] };
|
|
60
|
+
const width = Math.max(Math.abs(p1.x - p0.x), size * TEXT_BOX_MIN_WIDTH);
|
|
61
|
+
const height = Math.max(Math.abs(p1.y - p0.y), size * TEXT_BOX_MIN_HEIGHT);
|
|
62
|
+
return {
|
|
63
|
+
shape: {
|
|
64
|
+
id,
|
|
65
|
+
nonVisual: { name: "TextBox", description: null, title: null, hidden: false, placeholder: null },
|
|
66
|
+
properties: {
|
|
67
|
+
transform: {
|
|
68
|
+
offset: {
|
|
69
|
+
x: Math.max(0, Math.min(Math.min(p0.x, p1.x), page.width - width)),
|
|
70
|
+
y: Math.max(0, Math.min(Math.min(p0.y, p1.y), page.height - height)),
|
|
71
|
+
},
|
|
72
|
+
extents: { width, height },
|
|
73
|
+
rotation: 0,
|
|
74
|
+
flipH: false,
|
|
75
|
+
flipV: false,
|
|
76
|
+
},
|
|
77
|
+
geometry: { preset: { preset: "rect", adjustValues: [] } },
|
|
78
|
+
fill: "none",
|
|
79
|
+
line: null,
|
|
80
|
+
effects: null,
|
|
81
|
+
scene3d: null,
|
|
82
|
+
shape3d: null,
|
|
83
|
+
},
|
|
84
|
+
style: null,
|
|
85
|
+
textBody: {
|
|
86
|
+
properties: { wrap: "square" },
|
|
87
|
+
story: {
|
|
88
|
+
id: story,
|
|
89
|
+
blocks: [
|
|
90
|
+
{
|
|
91
|
+
paragraph: {
|
|
92
|
+
properties: { props: [] },
|
|
93
|
+
end: { mark: { properties } },
|
|
94
|
+
spans: [{ regular: { properties, text } }],
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
textTransform: null,
|
|
101
|
+
diagramPoint: null,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
47
105
|
/**
|
|
48
106
|
* The drawing shape `shape` spanning `p0 → p1` (the page's points) over a
|
|
49
107
|
* page `page` points in size, its id `id` and a box's text story `story` —
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
108
|
+
* in `paint`, a line and an open outline taking no fill; an arrowed line's head at
|
|
109
|
+
* `p1`, and at `p0` too for a double arrow; any shape but a line a box, with an
|
|
110
|
+
* empty label to type into. A line runs from
|
|
53
111
|
* `p0` to `p1` by flipping the box its preset runs corner to corner across; a
|
|
54
112
|
* box is never flipped, as a flip turns its label upside down.
|
|
55
113
|
*/
|
|
56
|
-
export function markupShape(id, story, shape, p0, p1, page) {
|
|
114
|
+
export function markupShape(id, story, shape, p0, p1, page, paint) {
|
|
57
115
|
const box = !shape.line;
|
|
58
116
|
const line = {
|
|
59
117
|
width: markupLineWeight(page.width, page.height),
|
|
60
118
|
cap: "round",
|
|
61
119
|
compound: null,
|
|
62
120
|
align: null,
|
|
63
|
-
fill:
|
|
121
|
+
fill: paint.line,
|
|
64
122
|
dash: null,
|
|
65
123
|
join: "round",
|
|
66
124
|
headEnd: shape.arrows === "both" ? ARROWHEAD : null,
|
|
@@ -79,14 +137,14 @@ export function markupShape(id, story, shape, p0, p1, page) {
|
|
|
79
137
|
flipV: !box && p1.y < p0.y,
|
|
80
138
|
},
|
|
81
139
|
geometry: { preset: { preset: shape.preset, adjustValues: [] } },
|
|
82
|
-
fill: "none",
|
|
140
|
+
fill: box && !shape.outline ? paint.fill : "none",
|
|
83
141
|
line,
|
|
84
142
|
effects: null,
|
|
85
143
|
scene3d: null,
|
|
86
144
|
shape3d: null,
|
|
87
145
|
},
|
|
88
146
|
style: null,
|
|
89
|
-
textBody: box ? labelBody(story, markupTextSize(page.width, page.height)) : null,
|
|
147
|
+
textBody: box ? labelBody(story, markupTextSize(page.width, page.height), paint.text) : null,
|
|
90
148
|
textTransform: null,
|
|
91
149
|
diagramPoint: null,
|
|
92
150
|
},
|
package/dist/markup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markup.js","sourceRoot":"","sources":["../src/markup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markup.js","sourceRoot":"","sources":["../src/markup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PaintColor, PaintFill } from "@docmentis/udoc-wasm";
|
|
2
|
+
/** The opacity `color` paints with, `0` to `1`: its alpha transforms in order,
|
|
3
|
+
* over opaque. */
|
|
4
|
+
export declare function colorOpacity(color: PaintColor): number;
|
|
5
|
+
/** `color` at `opacity`, in place of the alpha transforms it had. Opaque states
|
|
6
|
+
* none, as a color with no alpha transform is. */
|
|
7
|
+
export declare function withOpacity(color: PaintColor, opacity: number): PaintColor;
|
|
8
|
+
/** The opacity `fill` paints with, or null for a fill with no one color to carry
|
|
9
|
+
* it: no fill, a gradient, a pattern or a picture. */
|
|
10
|
+
export declare function fillOpacity(fill: PaintFill): number | null;
|
|
11
|
+
/** `fill` at `opacity`, or as it is for a fill with no one color to carry it. */
|
|
12
|
+
export declare function fillWithOpacity(fill: PaintFill, opacity: number): PaintFill;
|
|
13
|
+
/**
|
|
14
|
+
* What a new shape paints a side with, from what was last specified for it: its
|
|
15
|
+
* `color` at its `opacity`, an opacity alone taking `defaultColor`. Null with
|
|
16
|
+
* neither specified, for the document's own default.
|
|
17
|
+
*/
|
|
18
|
+
export declare function specifiedFill(color: PaintColor | null, opacity: number | null, defaultColor: PaintColor): PaintFill | null;
|
|
19
|
+
//# sourceMappingURL=opacity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opacity.d.ts","sourceRoot":"","sources":["../src/opacity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAuB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQvF;mBACmB;AACnB,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAStD;AAED;mDACmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAG1E;AAED;uDACuD;AACvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,UAAU,GACzB,SAAS,GAAG,IAAI,CAGlB"}
|
package/dist/opacity.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
function isAlpha(transform) {
|
|
2
|
+
return (typeof transform === "object" && ("alpha" in transform || "alphaOff" in transform || "alphaMod" in transform));
|
|
3
|
+
}
|
|
4
|
+
/** The opacity `color` paints with, `0` to `1`: its alpha transforms in order,
|
|
5
|
+
* over opaque. */
|
|
6
|
+
export function colorOpacity(color) {
|
|
7
|
+
let opacity = 1;
|
|
8
|
+
for (const transform of color.transforms) {
|
|
9
|
+
if (typeof transform !== "object")
|
|
10
|
+
continue;
|
|
11
|
+
if ("alpha" in transform)
|
|
12
|
+
opacity = transform.alpha;
|
|
13
|
+
else if ("alphaMod" in transform)
|
|
14
|
+
opacity *= transform.alphaMod;
|
|
15
|
+
else if ("alphaOff" in transform)
|
|
16
|
+
opacity += transform.alphaOff;
|
|
17
|
+
}
|
|
18
|
+
return Math.min(1, Math.max(0, opacity));
|
|
19
|
+
}
|
|
20
|
+
/** `color` at `opacity`, in place of the alpha transforms it had. Opaque states
|
|
21
|
+
* none, as a color with no alpha transform is. */
|
|
22
|
+
export function withOpacity(color, opacity) {
|
|
23
|
+
const transforms = color.transforms.filter((transform) => !isAlpha(transform));
|
|
24
|
+
return { ...color, transforms: opacity < 1 ? [...transforms, { alpha: opacity }] : transforms };
|
|
25
|
+
}
|
|
26
|
+
/** The opacity `fill` paints with, or null for a fill with no one color to carry
|
|
27
|
+
* it: no fill, a gradient, a pattern or a picture. */
|
|
28
|
+
export function fillOpacity(fill) {
|
|
29
|
+
return typeof fill === "object" && "solid" in fill ? colorOpacity(fill.solid) : null;
|
|
30
|
+
}
|
|
31
|
+
/** `fill` at `opacity`, or as it is for a fill with no one color to carry it. */
|
|
32
|
+
export function fillWithOpacity(fill, opacity) {
|
|
33
|
+
return typeof fill === "object" && "solid" in fill ? { solid: withOpacity(fill.solid, opacity) } : fill;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* What a new shape paints a side with, from what was last specified for it: its
|
|
37
|
+
* `color` at its `opacity`, an opacity alone taking `defaultColor`. Null with
|
|
38
|
+
* neither specified, for the document's own default.
|
|
39
|
+
*/
|
|
40
|
+
export function specifiedFill(color, opacity, defaultColor) {
|
|
41
|
+
if (!color && opacity === null)
|
|
42
|
+
return null;
|
|
43
|
+
return { solid: withOpacity(color ?? defaultColor, opacity ?? colorOpacity(color ?? defaultColor)) };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=opacity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opacity.js","sourceRoot":"","sources":["../src/opacity.ts"],"names":[],"mappings":"AAKA,SAAS,OAAO,CAAC,SAA8B;IAC3C,OAAO,CACH,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,CAAC,CAChH,CAAC;AACN,CAAC;AAED;mBACmB;AACnB,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAC5C,IAAI,OAAO,IAAI,SAAS;YAAE,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;aAC/C,IAAI,UAAU,IAAI,SAAS;YAAE,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;aAC3D,IAAI,UAAU,IAAI,SAAS;YAAE,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;mDACmD;AACnD,MAAM,UAAU,WAAW,CAAC,KAAiB,EAAE,OAAe;IAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/E,OAAO,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACpG,CAAC;AAED;uDACuD;AACvD,MAAM,UAAU,WAAW,CAAC,IAAe;IACvC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,OAAe;IAC5D,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5G,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CACzB,KAAwB,EACxB,OAAsB,EACtB,YAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,YAAY,EAAE,OAAO,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC;AACzG,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CommandDef } from "@docmentis/udoc-ui/internal";
|
|
2
|
+
import type { EditHost } from "./edit-client.js";
|
|
3
|
+
import type { I18n, MessageKey } from "./i18n/index.js";
|
|
4
|
+
/** The Resize Page dialog, mounted into a shell. */
|
|
5
|
+
export interface PageResize {
|
|
6
|
+
/** Open the dialog on the current page. */
|
|
7
|
+
open(): void;
|
|
8
|
+
destroy(): void;
|
|
9
|
+
}
|
|
10
|
+
/** Mount the Resize Page dialog into `host` — once, re-seeded with the current
|
|
11
|
+
* page's size each open, as the last frame measured it. */
|
|
12
|
+
export declare function mountPageResize(host: EditHost, i18n: I18n): PageResize;
|
|
13
|
+
/** The Page tab's page commands, over `host` once edit mode is mounted, Resize
|
|
14
|
+
* Page opening its dialog with `resize`. */
|
|
15
|
+
export declare function pageCommands(host: () => EditHost | null, resize: () => void): Readonly<Record<string, CommandDef<MessageKey>>>;
|
|
16
|
+
//# sourceMappingURL=page-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-commands.d.ts","sourceRoot":"","sources":["../src/page-commands.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAkB,UAAU,EAAyB,MAAM,6BAA6B,CAAC;AAGrG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiDxD,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACvB,2CAA2C;IAC3C,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;CACnB;AAED;4DAC4D;AAC5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAkBtE;AAED;6CAC6C;AAC7C,wBAAgB,YAAY,CACxB,IAAI,EAAE,MAAM,QAAQ,GAAG,IAAI,EAC3B,MAAM,EAAE,MAAM,IAAI,GACnB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CA+ClD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// A PDF's Page tab's page commands: a blank page after the current one, and the
|
|
2
|
+
// current page deleted, turned a quarter turn or resized — the pages picked in
|
|
3
|
+
// the thumbnails in its place, but for a resize, which names one page.
|
|
4
|
+
import { allowsEdit, ICON_DELETE, ICON_PAGE_ADD, ICON_ROTATE_LEFT, ICON_ROTATE_RIGHT, } from "@docmentis/udoc-ui/internal";
|
|
5
|
+
import { pageSizeInfo } from "./components/PageControls.js";
|
|
6
|
+
import { createPageSettingsModal } from "./components/PageSettingsModal.js";
|
|
7
|
+
import { ICON_PAGE_RESIZE } from "./icons.js";
|
|
8
|
+
import { applyPageEdit } from "./page-controls.js";
|
|
9
|
+
/** Whether `caps` holds pages picked in the thumbnails. */
|
|
10
|
+
function pagesPicked(caps) {
|
|
11
|
+
return allowsEdit(caps, "rotatePages");
|
|
12
|
+
}
|
|
13
|
+
/** Whether a PDF's page edits are live in `c`. */
|
|
14
|
+
function whenPortable(c) {
|
|
15
|
+
return c.ready && c.docType === "portable";
|
|
16
|
+
}
|
|
17
|
+
/** Delete Page, greyed where it would take a PDF's last page: its only one, or
|
|
18
|
+
* every page picked. */
|
|
19
|
+
function whenDeletable(c) {
|
|
20
|
+
if (!whenPortable(c))
|
|
21
|
+
return false;
|
|
22
|
+
return pagesPicked(c.selection) ? allowsEdit(c.selection, "deletePages") : c.pageCount > 1;
|
|
23
|
+
}
|
|
24
|
+
/** Insert a blank page after the last page picked, or else the current one —
|
|
25
|
+
* a page the size of the one it follows — and go to it. */
|
|
26
|
+
async function createPage(host) {
|
|
27
|
+
const { selectionCaps, selectedPages, pageIndex } = host.store.getState();
|
|
28
|
+
const picked = allowsEdit(selectionCaps, "insertPage");
|
|
29
|
+
const index = (picked ? Math.max(...selectedPages) : pageIndex) + 1;
|
|
30
|
+
await (picked
|
|
31
|
+
? host.commit(() => host.client.executeOnSelection({ kind: "page", edit: { kind: "insertPage" } }))
|
|
32
|
+
: applyPageEdit(host, { kind: "insert", index }));
|
|
33
|
+
host.store.dispatch({ type: "NAVIGATE_TO_PAGE", pageIndex: index });
|
|
34
|
+
}
|
|
35
|
+
/** Delete the pages picked, or else the current one. */
|
|
36
|
+
function deletePages(host) {
|
|
37
|
+
const { selectionCaps, pageIndex } = host.store.getState();
|
|
38
|
+
return pagesPicked(selectionCaps)
|
|
39
|
+
? host.commit(() => host.client.executeOnSelection({ kind: "page", edit: { kind: "deletePages" } }))
|
|
40
|
+
: applyPageEdit(host, { kind: "delete", index: pageIndex });
|
|
41
|
+
}
|
|
42
|
+
/** Turn the pages picked a quarter turn, or else the current one. */
|
|
43
|
+
function rotatePages(host, clockwise) {
|
|
44
|
+
const { selectionCaps, pageIndex } = host.store.getState();
|
|
45
|
+
return pagesPicked(selectionCaps)
|
|
46
|
+
? host.commit(() => host.client.executeOnSelection({ kind: "page", edit: { kind: "rotatePages", clockwise } }))
|
|
47
|
+
: applyPageEdit(host, { kind: "rotate", index: pageIndex, clockwise });
|
|
48
|
+
}
|
|
49
|
+
/** Mount the Resize Page dialog into `host` — once, re-seeded with the current
|
|
50
|
+
* page's size each open, as the last frame measured it. */
|
|
51
|
+
export function mountPageResize(host, i18n) {
|
|
52
|
+
const modal = createPageSettingsModal(i18n);
|
|
53
|
+
modal.mount(host.root);
|
|
54
|
+
return {
|
|
55
|
+
open() {
|
|
56
|
+
const index = host.store.getState().pageIndex;
|
|
57
|
+
const shown = host.pageView(index);
|
|
58
|
+
if (!shown)
|
|
59
|
+
return;
|
|
60
|
+
const { width, height } = pageSizeInfo(shown.view, shown.scale);
|
|
61
|
+
modal.open({
|
|
62
|
+
index,
|
|
63
|
+
width,
|
|
64
|
+
height,
|
|
65
|
+
onResize: (w, h) => void applyPageEdit(host, { kind: "resize", index, width: w, height: h }),
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
destroy: () => modal.destroy(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** The Page tab's page commands, over `host` once edit mode is mounted, Resize
|
|
72
|
+
* Page opening its dialog with `resize`. */
|
|
73
|
+
export function pageCommands(host, resize) {
|
|
74
|
+
const withHost = (run) => () => {
|
|
75
|
+
const mounted = host();
|
|
76
|
+
if (mounted)
|
|
77
|
+
void run(mounted);
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
pageCreate: {
|
|
81
|
+
id: "pageCreate",
|
|
82
|
+
label: "thumbnails.insertPage",
|
|
83
|
+
icon: ICON_PAGE_ADD,
|
|
84
|
+
group: "page",
|
|
85
|
+
run: { kind: "action", press: withHost(createPage) },
|
|
86
|
+
enabledWhen: whenPortable,
|
|
87
|
+
},
|
|
88
|
+
pageDelete: {
|
|
89
|
+
id: "pageDelete",
|
|
90
|
+
label: "thumbnails.deletePage",
|
|
91
|
+
icon: ICON_DELETE,
|
|
92
|
+
group: "page",
|
|
93
|
+
run: { kind: "action", press: withHost(deletePages) },
|
|
94
|
+
enabledWhen: whenDeletable,
|
|
95
|
+
},
|
|
96
|
+
pageRotateLeft: {
|
|
97
|
+
id: "pageRotateLeft",
|
|
98
|
+
label: "thumbnails.rotateLeft",
|
|
99
|
+
icon: ICON_ROTATE_LEFT,
|
|
100
|
+
group: "page",
|
|
101
|
+
run: { kind: "action", press: withHost((mounted) => rotatePages(mounted, false)) },
|
|
102
|
+
enabledWhen: whenPortable,
|
|
103
|
+
},
|
|
104
|
+
pageRotateRight: {
|
|
105
|
+
id: "pageRotateRight",
|
|
106
|
+
label: "thumbnails.rotateRight",
|
|
107
|
+
icon: ICON_ROTATE_RIGHT,
|
|
108
|
+
group: "page",
|
|
109
|
+
run: { kind: "action", press: withHost((mounted) => rotatePages(mounted, true)) },
|
|
110
|
+
enabledWhen: whenPortable,
|
|
111
|
+
},
|
|
112
|
+
pageResize: {
|
|
113
|
+
id: "pageResize",
|
|
114
|
+
label: "command.pageResize",
|
|
115
|
+
icon: ICON_PAGE_RESIZE,
|
|
116
|
+
group: "page",
|
|
117
|
+
run: { kind: "action", press: resize },
|
|
118
|
+
enabledWhen: whenPortable,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=page-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-commands.js","sourceRoot":"","sources":["../src/page-commands.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,uEAAuE;AACvE,OAAO,EACH,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,2DAA2D;AAC3D,SAAS,WAAW,CAAC,IAA2B;IAC5C,OAAO,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED,kDAAkD;AAClD,SAAS,YAAY,CAAC,CAAiB;IACnC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC;AAC/C,CAAC;AAED;yBACyB;AACzB,SAAS,aAAa,CAAC,CAAiB;IACpC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED;4DAC4D;AAC5D,KAAK,UAAU,UAAU,CAAC,IAAc;IACpC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,CAAC,MAAM;QACT,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,wDAAwD;AACxD,SAAS,WAAW,CAAC,IAAc;IAC/B,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3D,OAAO,WAAW,CAAC,aAAa,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QACpG,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,qEAAqE;AACrE,SAAS,WAAW,CAAC,IAAc,EAAE,SAAkB;IACnD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3D,OAAO,WAAW,CAAC,aAAa,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/G,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AAC/E,CAAC;AASD;4DAC4D;AAC5D,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,IAAU;IACtD,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO;QACH,IAAI;YACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,KAAK;gBACL,MAAM;gBACN,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;aAC/F,CAAC,CAAC;QACP,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;KACjC,CAAC;AACN,CAAC;AAED;6CAC6C;AAC7C,MAAM,UAAU,YAAY,CACxB,IAA2B,EAC3B,MAAkB;IAElB,MAAM,QAAQ,GAAG,CAAC,GAAyC,EAAE,EAAE,CAAC,GAAG,EAAE;QACjE,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO;YAAE,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IACF,OAAO;QACH,UAAU,EAAE;YACR,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,uBAAuB;YAC9B,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpD,WAAW,EAAE,YAAY;SAC5B;QACD,UAAU,EAAE;YACR,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,uBAAuB;YAC9B,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE;YACrD,WAAW,EAAE,aAAa;SAC7B;QACD,cAAc,EAAE;YACZ,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,uBAAuB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE;YAClF,WAAW,EAAE,YAAY;SAC5B;QACD,eAAe,EAAE;YACb,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE;YACjF,WAAW,EAAE,YAAY;SAC5B;QACD,UAAU,EAAE;YACR,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;YACtC,WAAW,EAAE,YAAY;SAC5B;KACJ,CAAC;AACN,CAAC"}
|
package/dist/page-controls.d.ts
CHANGED
|
@@ -4,10 +4,36 @@ import type { I18n } from "./i18n/index.js";
|
|
|
4
4
|
* The spacing the page controls show with. The insert strip is sized from the
|
|
5
5
|
* gap × the frame scale, so it fills the gap at every zoom. The paddings are
|
|
6
6
|
* screen-fixed (CSS px), so the rail in the right padding stays a constant size
|
|
7
|
-
* on screen — the side paddings are wide enough that the rail (offset + ~
|
|
7
|
+
* on screen — the side paddings are wide enough that the rail (offset + ~30px)
|
|
8
8
|
* clears the virtual scrollbar at fit-width.
|
|
9
9
|
*/
|
|
10
10
|
export declare const PAGE_CONTROLS_SPACING: PageSpacing;
|
|
11
|
+
/** A page-structure edit addressed by index: the page controls' verbs. */
|
|
12
|
+
export type PageStructureEdit = {
|
|
13
|
+
kind: "insert";
|
|
14
|
+
index: number;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "delete";
|
|
17
|
+
index: number;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "reorder";
|
|
20
|
+
from: number;
|
|
21
|
+
to: number;
|
|
22
|
+
} | {
|
|
23
|
+
kind: "rotate";
|
|
24
|
+
index: number;
|
|
25
|
+
clockwise: boolean;
|
|
26
|
+
} | {
|
|
27
|
+
kind: "resize";
|
|
28
|
+
index: number;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Run `edit` on `host`'s document. Commands address a page by id: this reads
|
|
34
|
+
* the addressed page's id first, and skips the edit when that page is gone.
|
|
35
|
+
*/
|
|
36
|
+
export declare function applyPageEdit(host: UIShellHost, edit: PageStructureEdit): Promise<void>;
|
|
11
37
|
/**
|
|
12
38
|
* Whether the page controls show in `s`: in edit mode, for a doc type whose
|
|
13
39
|
* pages reorder ({@link PAGE_CONTROLLED}), in the continuous single-page
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-controls.d.ts","sourceRoot":"","sources":["../src/page-controls.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM5C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAGnC,CAAC;
|
|
1
|
+
{"version":3,"file":"page-controls.d.ts","sourceRoot":"","sources":["../src/page-controls.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGrF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM5C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAGnC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAG7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAIrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAkCvE;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAQrD;AAED,wGAAwG;AACxG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,CAwE3E"}
|
package/dist/page-controls.js
CHANGED
|
@@ -8,7 +8,7 @@ const GAP_PT = 24;
|
|
|
8
8
|
* The spacing the page controls show with. The insert strip is sized from the
|
|
9
9
|
* gap × the frame scale, so it fills the gap at every zoom. The paddings are
|
|
10
10
|
* screen-fixed (CSS px), so the rail in the right padding stays a constant size
|
|
11
|
-
* on screen — the side paddings are wide enough that the rail (offset + ~
|
|
11
|
+
* on screen — the side paddings are wide enough that the rail (offset + ~30px)
|
|
12
12
|
* clears the virtual scrollbar at fit-width.
|
|
13
13
|
*/
|
|
14
14
|
export const PAGE_CONTROLS_SPACING = {
|
|
@@ -45,6 +45,17 @@ function pageCommand(edit, id) {
|
|
|
45
45
|
return editPage({ resizePage: { id, size: { width: edit.width, height: edit.height } } });
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Run `edit` on `host`'s document. Commands address a page by id: this reads
|
|
50
|
+
* the addressed page's id first, and skips the edit when that page is gone.
|
|
51
|
+
*/
|
|
52
|
+
export async function applyPageEdit(host, edit) {
|
|
53
|
+
const page = addressedPage(edit);
|
|
54
|
+
const id = page === null ? "" : await host.client.portable.pageIdByIndex(page);
|
|
55
|
+
if (id === undefined)
|
|
56
|
+
return;
|
|
57
|
+
await host.commit(() => host.client.execute(pageCommand(edit, id)));
|
|
58
|
+
}
|
|
48
59
|
/** The doc types whose pages the page controls move, rotate, delete and
|
|
49
60
|
* insert: the paginated, page-reorderable ones — PDF today. */
|
|
50
61
|
const PAGE_CONTROLLED = new Set(["portable"]);
|
|
@@ -63,19 +74,25 @@ export function pageControlsShown(s) {
|
|
|
63
74
|
}
|
|
64
75
|
/** Mount the page controls into `host`, shown while {@link pageControlsShown}; returns the teardown. */
|
|
65
76
|
export function mountPageControls(host, i18n) {
|
|
66
|
-
// Mounted once and reused for whichever page's
|
|
77
|
+
// Mounted once and reused for whichever page's resize button is clicked.
|
|
67
78
|
const settings = createPageSettingsModal(i18n);
|
|
68
79
|
settings.mount(host.root);
|
|
69
|
-
|
|
70
|
-
// skip the edit when that page is gone.
|
|
71
|
-
const pageEditAt = async (edit) => {
|
|
72
|
-
const page = addressedPage(edit);
|
|
73
|
-
const id = page === null ? "" : await host.client.portable.pageIdByIndex(page);
|
|
74
|
-
if (id === undefined)
|
|
75
|
-
return;
|
|
76
|
-
await host.commit(() => host.client.execute(pageCommand(edit, id)));
|
|
77
|
-
};
|
|
80
|
+
const pageEditAt = (edit) => applyPageEdit(host, edit);
|
|
78
81
|
const pageCount = () => host.store.getState().pageCount;
|
|
82
|
+
// Move the page at `index` one place, `by` -1 up or 1 down, the view going
|
|
83
|
+
// with it: the scroll shifts by what it moved past, its neighbour and a gap,
|
|
84
|
+
// so it stays where it shows and the rail's button under the pointer, to press
|
|
85
|
+
// again. A neighbour not measured yet leaves that unknown: the view goes to the
|
|
86
|
+
// page instead.
|
|
87
|
+
const movePage = async (index, by) => {
|
|
88
|
+
const neighbour = index + by;
|
|
89
|
+
const { height } = await host.client.pageDisplaySize(0, neighbour);
|
|
90
|
+
await pageEditAt({ kind: "reorder", from: index, to: neighbour });
|
|
91
|
+
const { scrollX, scrollY } = host.store.getState();
|
|
92
|
+
host.store.dispatch(height > 0
|
|
93
|
+
? { type: "SCROLL_TO", x: scrollX, y: scrollY + by * (height + GAP_PT) }
|
|
94
|
+
: { type: "NAVIGATE_TO_PAGE", pageIndex: neighbour });
|
|
95
|
+
};
|
|
79
96
|
function show(shown) {
|
|
80
97
|
if (!shown) {
|
|
81
98
|
host.removeOverlay("udoc:page-insert");
|
|
@@ -97,8 +114,8 @@ export function mountPageControls(host, i18n) {
|
|
|
97
114
|
i18n,
|
|
98
115
|
pageCount,
|
|
99
116
|
hoveredPage: () => host.hoveredPage(),
|
|
100
|
-
onMoveUp: (index) => void
|
|
101
|
-
onMoveDown: (index) => void
|
|
117
|
+
onMoveUp: (index) => void movePage(index, -1),
|
|
118
|
+
onMoveDown: (index) => void movePage(index, 1),
|
|
102
119
|
onRotate: (index, clockwise) => void pageEditAt({ kind: "rotate", index, clockwise }),
|
|
103
120
|
onDelete: (index) => void pageEditAt({ kind: "delete", index }),
|
|
104
121
|
onOpenSettings: (index, size) => settings.open({
|
|
@@ -106,7 +123,6 @@ export function mountPageControls(host, i18n) {
|
|
|
106
123
|
width: size.width,
|
|
107
124
|
height: size.height,
|
|
108
125
|
onResize: (width, height) => void pageEditAt({ kind: "resize", index, width, height }),
|
|
109
|
-
onRotate: (clockwise) => void pageEditAt({ kind: "rotate", index, clockwise }),
|
|
110
126
|
}),
|
|
111
127
|
}));
|
|
112
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-controls.js","sourceRoot":"","sources":["../src/page-controls.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"page-controls.js","sourceRoot":"","sources":["../src/page-controls.ts"],"names":[],"mappings":"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"}
|