@docmentis/udoc-editor 0.8.15 → 0.8.17
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/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQ9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,KAAK,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAgQpF"}
|
package/dist/commands.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
// The Text, Shape and Object tabs' commands: character and paragraph formatting
|
|
2
|
-
// over the text selection,
|
|
3
|
-
// or a PDF's page objects (their arrangement commands
|
|
4
|
-
|
|
2
|
+
// over the text selection, Change Shape over a drawing's shapes, and the Fill /
|
|
3
|
+
// Line controls over those or a PDF's page objects (their arrangement commands
|
|
4
|
+
// are `arrange.ts`'s).
|
|
5
|
+
import { allowsEdit, ICON_FILL, ICON_OPACITY, ICON_STROKE, ICON_TEXT_HIGHLIGHT } from "@docmentis/udoc-ui/internal";
|
|
5
6
|
import { fontFamilyControl, fontSizeControl, listControl, paragraphStyleControl, textFormatControl, } from "./components/TextControls.js";
|
|
6
|
-
import { ICON_BOLD, ICON_FONT_SIZE, ICON_FONTS, ICON_ITALIC, ICON_LINE_SPACING, ICON_LIST_BULLET, ICON_LIST_NUMBER, ICON_PARAGRAPH_LEFT, ICON_PARAGRAPH_STYLE, ICON_STRIKETHROUGH, ICON_SUBSCRIPT, ICON_SUPERSCRIPT, ICON_TEXT_FILL, ICON_UNDERLINE, ICON_WIDTH_SCALE, } from "./icons.js";
|
|
7
|
-
import { paintControl } from "./paint.js";
|
|
7
|
+
import { ICON_BOLD, ICON_CHANGE_SHAPE, ICON_FONT_SIZE, ICON_FONTS, ICON_ITALIC, ICON_LINE_SPACING, ICON_LIST_BULLET, ICON_LIST_NUMBER, ICON_PARAGRAPH_LEFT, ICON_PARAGRAPH_STYLE, ICON_STRIKETHROUGH, ICON_SUBSCRIPT, ICON_SUPERSCRIPT, ICON_TEXT_FILL, ICON_UNDERLINE, ICON_WIDTH_SCALE, } from "./icons.js";
|
|
8
|
+
import { objectOpacityControl, paintControl, selectionOpacity } from "./paint.js";
|
|
9
|
+
import { editStateOf } from "./state.js";
|
|
10
|
+
import { CHANGE_SHAPE_GALLERY, galleryShape } from "./shape-gallery.js";
|
|
8
11
|
import { LINE_SPACING_MENU, PARAGRAPH_ALIGN_MENU, whenParagraphFormat, whenParagraphStyle, whenTextFormat, whenWidthScale, WIDTH_SCALE_MENU, } from "./text-format.js";
|
|
9
12
|
/**
|
|
10
13
|
* The format commands, their controls built over `tools` — read when the ribbon
|
|
@@ -157,10 +160,34 @@ export function formatCommands(tools) {
|
|
|
157
160
|
},
|
|
158
161
|
enabledWhen: whenParagraphFormat,
|
|
159
162
|
},
|
|
160
|
-
// Shape tab —
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
//
|
|
163
|
+
// Shape tab — first Change Shape, the outline the rest paint and arrange:
|
|
164
|
+
// a cell gives the selection that preset, with its adjust values at their
|
|
165
|
+
// defaults, as PowerPoint and Word do. Enabled where the selection holds a
|
|
166
|
+
// shape or a picture to change, which a connector alone doesn't.
|
|
167
|
+
changeShape: {
|
|
168
|
+
id: "changeShape",
|
|
169
|
+
label: "command.changeShape",
|
|
170
|
+
icon: ICON_CHANGE_SHAPE,
|
|
171
|
+
group: "shapeGeometry",
|
|
172
|
+
run: {
|
|
173
|
+
kind: "gallery",
|
|
174
|
+
sections: CHANGE_SHAPE_GALLERY,
|
|
175
|
+
press: ({ tool }) => {
|
|
176
|
+
const shape = galleryShape(tool);
|
|
177
|
+
if (!shape)
|
|
178
|
+
return;
|
|
179
|
+
const { host } = tools();
|
|
180
|
+
void host.commit(() => host.client.executeOnSelection({
|
|
181
|
+
kind: "setShapeGeometry",
|
|
182
|
+
geometry: { preset: { preset: shape.preset, adjustValues: [] } },
|
|
183
|
+
}));
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
enabledWhen: (c) => allowsEdit(c.selection, "setShapeGeometry"),
|
|
187
|
+
},
|
|
188
|
+
// Then the Fill / Line dropdowns. The color bar reflects the selection's
|
|
189
|
+
// color; the caret opens the picker. Enabled when the selection accepts
|
|
190
|
+
// the paint edit — a drawing shape's `setShapeFill` / `setShapeLine`.
|
|
164
191
|
shapeFillColor: {
|
|
165
192
|
id: "shapeFillColor",
|
|
166
193
|
label: "command.shapeFillColor",
|
|
@@ -211,6 +238,21 @@ export function formatCommands(tools) {
|
|
|
211
238
|
},
|
|
212
239
|
enabledWhen: (c) => allowsEdit(c.selection, "setStrokingStyle"),
|
|
213
240
|
},
|
|
241
|
+
objectOpacity: {
|
|
242
|
+
id: "objectOpacity",
|
|
243
|
+
label: "command.annotationOpacity",
|
|
244
|
+
icon: ICON_OPACITY,
|
|
245
|
+
group: "paint",
|
|
246
|
+
run: {
|
|
247
|
+
kind: "control",
|
|
248
|
+
cluster: "paint",
|
|
249
|
+
create: (env) => objectOpacityControl(env, { id: "objectOpacity", icon: ICON_OPACITY }, tools()),
|
|
250
|
+
},
|
|
251
|
+
// Live where the selection agrees on a style to carry the opacity: not
|
|
252
|
+
// on a fill turned off, a group, a form, or differing paint.
|
|
253
|
+
enabledWhen: (c) => allowsEdit(c.selection, "setNonstrokingStyle") &&
|
|
254
|
+
selectionOpacity(editStateOf(c).selectionProperties, "fill") !== null,
|
|
255
|
+
},
|
|
214
256
|
};
|
|
215
257
|
}
|
|
216
258
|
//# sourceMappingURL=commands.js.map
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { OverlaySource } from "@docmentis/udoc-ui";
|
|
1
|
+
import type { OverlaySource, PageView } from "@docmentis/udoc-ui";
|
|
2
2
|
import type { I18n } from "../i18n/index.js";
|
|
3
3
|
/**
|
|
4
|
-
* A page's current size and orientation, as the
|
|
4
|
+
* A page's current size and orientation, as the resize button hands it to the
|
|
5
5
|
* settings dialog. `width`/`height` are the page's media-box size in document
|
|
6
6
|
* points (rotation-independent — the intrinsic page rectangle); `rotation` is
|
|
7
7
|
* the display rotation in quarter turns clockwise (0–3).
|
|
@@ -11,6 +11,13 @@ export interface PageSizeInfo {
|
|
|
11
11
|
height: number;
|
|
12
12
|
rotation: number;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* The size of the page `view` shows at `scale` CSS px per point. The view's
|
|
16
|
+
* geometry is the *displayed* size; a quarter-turn rotation swaps width and
|
|
17
|
+
* height on screen, so that is undone to recover the rotation-independent page
|
|
18
|
+
* rectangle.
|
|
19
|
+
*/
|
|
20
|
+
export declare function pageSizeInfo(view: PageView, scale: number): PageSizeInfo;
|
|
14
21
|
/** The page-structure verbs the per-page pill dispatches. */
|
|
15
22
|
export interface PageActionsCallbacks {
|
|
16
23
|
/** The language the controls' names are in. Default English. */
|
|
@@ -29,14 +36,14 @@ export interface PageActionsCallbacks {
|
|
|
29
36
|
onRotate: (index: number, clockwise: boolean) => void;
|
|
30
37
|
onDelete: (index: number) => void;
|
|
31
38
|
/** Open the page-settings dialog for `index`, seeded with its current
|
|
32
|
-
* size + rotation — the
|
|
39
|
+
* size + rotation — the resize button's action. */
|
|
33
40
|
onOpenSettings: (index: number, size: PageSizeInfo) => void;
|
|
34
41
|
}
|
|
35
42
|
/**
|
|
36
43
|
* The per-page control rail (`udoc:page-actions`): a vertical column — move
|
|
37
|
-
* up, move down, rotate,
|
|
38
|
-
* edge, top-aligned with the page.
|
|
39
|
-
* dialog (size
|
|
44
|
+
* up, move down, rotate left, rotate right, resize, delete — beside each
|
|
45
|
+
* visible page's right edge, top-aligned with the page. Resize opens the shared
|
|
46
|
+
* page-settings dialog (its size). Constant CSS size — pair with px page spacing,
|
|
40
47
|
* whose screen-fixed side padding gives the rail room at every zoom.
|
|
41
48
|
*/
|
|
42
49
|
export declare function pageActions(callbacks: PageActionsCallbacks): OverlaySource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageControls.d.ts","sourceRoot":"","sources":["../../src/components/PageControls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PageControls.d.ts","sourceRoot":"","sources":["../../src/components/PageControls.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAe,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CASxE;AAcD,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACjC,gEAAgE;IAChE,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,4DAA4D;IAC5D,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;qCACiC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;wDACoD;IACpD,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/D;AAkBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,oBAAoB,GAAG,aAAa,CAqF1E;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IAC/B,oEAAoE;IACpE,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,aAAa,CAwEtE"}
|
|
@@ -10,23 +10,40 @@
|
|
|
10
10
|
// *beside* a page's right edge, top-aligned with the page — so the shell
|
|
11
11
|
// pairs it with screen-fixed (px) content padding, which holds its on-screen
|
|
12
12
|
// width at every zoom. It is a vertical column of actions — move up / move
|
|
13
|
-
// down / rotate /
|
|
14
|
-
// modal dialog (size
|
|
13
|
+
// down / rotate left / rotate right / resize / delete — and resize opens the
|
|
14
|
+
// shared page-settings modal dialog (its size) for the page.
|
|
15
15
|
// - Insert lives *between* pages, in the inter-page gap. The gap is page-fixed
|
|
16
16
|
// (document points), so its on-screen size tracks the zoom; the strip is
|
|
17
17
|
// sized from the gap in points × the frame's scale, so it fills the gap at
|
|
18
18
|
// every zoom by construction. Hovering it reveals a divider with a centered
|
|
19
19
|
// "+" button. Inserting in the gap above page N is "before N" and "after
|
|
20
20
|
// N−1" at once, so there is no before/after question to ask.
|
|
21
|
-
import {
|
|
21
|
+
import { ICON_DELETE, ICON_PAGE_ADD, ICON_ROTATE_LEFT, ICON_ROTATE_RIGHT } from "@docmentis/udoc-ui/internal";
|
|
22
22
|
import { createI18n } from "../i18n/index.js";
|
|
23
|
+
import { ICON_MOVE_DOWN, ICON_MOVE_UP, ICON_PAGE_RESIZE } from "../icons.js";
|
|
24
|
+
/**
|
|
25
|
+
* The size of the page `view` shows at `scale` CSS px per point. The view's
|
|
26
|
+
* geometry is the *displayed* size; a quarter-turn rotation swaps width and
|
|
27
|
+
* height on screen, so that is undone to recover the rotation-independent page
|
|
28
|
+
* rectangle.
|
|
29
|
+
*/
|
|
30
|
+
export function pageSizeInfo(view, scale) {
|
|
31
|
+
const widthPt = view.width / scale;
|
|
32
|
+
const heightPt = view.height / scale;
|
|
33
|
+
const turned = view.rotation % 2 === 1;
|
|
34
|
+
return {
|
|
35
|
+
width: turned ? heightPt : widthPt,
|
|
36
|
+
height: turned ? widthPt : heightPt,
|
|
37
|
+
rotation: view.rotation,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
23
40
|
/** Gap between the rail's left edge and its page's right edge, CSS px. */
|
|
24
41
|
const PILL_OFFSET = 7;
|
|
25
42
|
/** Hide the per-page chrome (control rail *and* insert affordance) when the
|
|
26
43
|
* page is shorter than this on screen — a control rail taller than its page
|
|
27
44
|
* reads as attached to nothing, and a lone insert by a too-small page is just
|
|
28
45
|
* as adrift. */
|
|
29
|
-
const MIN_PAGE_HEIGHT =
|
|
46
|
+
const MIN_PAGE_HEIGHT = 185;
|
|
30
47
|
/** Minimum hover/tap width of an insert strip, CSS px. */
|
|
31
48
|
const MIN_INSERT_WIDTH = 48;
|
|
32
49
|
function button(className, icon) {
|
|
@@ -38,16 +55,16 @@ function button(className, icon) {
|
|
|
38
55
|
}
|
|
39
56
|
/**
|
|
40
57
|
* The latest media-box size + rotation of each pill's page, refreshed every
|
|
41
|
-
* frame in `update` and read by the
|
|
58
|
+
* frame in `update` and read by the resize click handler (set once in `create`)
|
|
42
59
|
* — the click fires the page-settings dialog with the page's current size.
|
|
43
60
|
* Keyed by the pooled pill element so it survives across frames.
|
|
44
61
|
*/
|
|
45
62
|
const pillSize = new WeakMap();
|
|
46
63
|
/**
|
|
47
64
|
* The per-page control rail (`udoc:page-actions`): a vertical column — move
|
|
48
|
-
* up, move down, rotate,
|
|
49
|
-
* edge, top-aligned with the page.
|
|
50
|
-
* dialog (size
|
|
65
|
+
* up, move down, rotate left, rotate right, resize, delete — beside each
|
|
66
|
+
* visible page's right edge, top-aligned with the page. Resize opens the shared
|
|
67
|
+
* page-settings dialog (its size). Constant CSS size — pair with px page spacing,
|
|
51
68
|
* whose screen-fixed side padding gives the rail room at every zoom.
|
|
52
69
|
*/
|
|
53
70
|
export function pageActions(callbacks) {
|
|
@@ -65,13 +82,13 @@ export function pageActions(callbacks) {
|
|
|
65
82
|
const el = document.createElement("div");
|
|
66
83
|
el.className = "udoc-ui__page-actions";
|
|
67
84
|
el.setAttribute("role", "group");
|
|
68
|
-
el.append(button("udoc-ui__page-actions-btn udoc-ui__page-actions-up",
|
|
69
|
-
//
|
|
85
|
+
el.append(button("udoc-ui__page-actions-btn udoc-ui__page-actions-up", ICON_MOVE_UP), button("udoc-ui__page-actions-btn udoc-ui__page-actions-down", ICON_MOVE_DOWN), button("udoc-ui__page-actions-btn udoc-ui__page-actions-rotate-left", ICON_ROTATE_LEFT), button("udoc-ui__page-actions-btn udoc-ui__page-actions-rotate-right", ICON_ROTATE_RIGHT), button("udoc-ui__page-actions-btn udoc-ui__page-actions-resize", ICON_PAGE_RESIZE), button("udoc-ui__page-actions-btn udoc-ui__page-actions-delete", ICON_DELETE));
|
|
86
|
+
// Resize opens the shared settings dialog for this page,
|
|
70
87
|
// seeded with the size last stashed by `update`. The
|
|
71
88
|
// pill's index is encoded in its key, so the pooled
|
|
72
89
|
// element always speaks for the same page.
|
|
73
|
-
const
|
|
74
|
-
|
|
90
|
+
const resize = el.querySelector(".udoc-ui__page-actions-resize");
|
|
91
|
+
resize.addEventListener("click", () => {
|
|
75
92
|
const size = pillSize.get(el);
|
|
76
93
|
if (size)
|
|
77
94
|
callbacks.onOpenSettings(view.index, size);
|
|
@@ -95,33 +112,25 @@ export function pageActions(callbacks) {
|
|
|
95
112
|
down.title = i18n.t("pageControls.moveDown");
|
|
96
113
|
down.setAttribute("aria-label", i18n.t("pageControls.moveDownLabel", { page }));
|
|
97
114
|
down.onclick = () => callbacks.onMoveDown(index);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
115
|
+
const rotateLeft = el.querySelector(".udoc-ui__page-actions-rotate-left");
|
|
116
|
+
rotateLeft.title = i18n.t("pageControls.rotateLeft");
|
|
117
|
+
rotateLeft.setAttribute("aria-label", i18n.t("pageControls.rotateLeftLabel", { page }));
|
|
118
|
+
rotateLeft.onclick = () => callbacks.onRotate(index, false);
|
|
119
|
+
const rotateRight = el.querySelector(".udoc-ui__page-actions-rotate-right");
|
|
120
|
+
rotateRight.title = i18n.t("pageControls.rotate");
|
|
121
|
+
rotateRight.setAttribute("aria-label", i18n.t("pageControls.rotateLabel", { page }));
|
|
122
|
+
rotateRight.onclick = () => callbacks.onRotate(index, true);
|
|
123
|
+
const resize = el.querySelector(".udoc-ui__page-actions-resize");
|
|
124
|
+
resize.title = i18n.t("command.pageResize");
|
|
125
|
+
resize.setAttribute("aria-label", i18n.t("pageControls.resizeLabel", { page }));
|
|
107
126
|
const del = el.querySelector(".udoc-ui__page-actions-delete");
|
|
108
127
|
del.disabled = count <= 1;
|
|
109
128
|
del.title = i18n.t("pageControls.delete");
|
|
110
129
|
del.setAttribute("aria-label", i18n.t("pageControls.deleteLabel", { page }));
|
|
111
130
|
del.onclick = () => callbacks.onDelete(index);
|
|
112
131
|
// Stash the page's intrinsic (media-box) size for the
|
|
113
|
-
// settings dialog.
|
|
114
|
-
|
|
115
|
-
// rotation swaps width and height on screen, so undo that
|
|
116
|
-
// to recover the rotation-independent page rectangle.
|
|
117
|
-
const wPt = view.width / frame.scale;
|
|
118
|
-
const hPt = view.height / frame.scale;
|
|
119
|
-
const turned = view.rotation % 2 === 1;
|
|
120
|
-
pillSize.set(el, {
|
|
121
|
-
width: turned ? hPt : wPt,
|
|
122
|
-
height: turned ? wPt : hPt,
|
|
123
|
-
rotation: view.rotation,
|
|
124
|
-
});
|
|
132
|
+
// settings dialog.
|
|
133
|
+
pillSize.set(el, pageSizeInfo(view, frame.scale));
|
|
125
134
|
},
|
|
126
135
|
};
|
|
127
136
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageControls.js","sourceRoot":"","sources":["../../src/components/PageControls.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,cAAc;AACd,EAAE;AACF,qBAAqB;AACrB,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E
|
|
1
|
+
{"version":3,"file":"PageControls.js","sourceRoot":"","sources":["../../src/components/PageControls.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,6 @@ export interface PageSettingsContext {
|
|
|
9
9
|
height: number;
|
|
10
10
|
/** Resize the page to `width` × `height` points (one undo step). */
|
|
11
11
|
onResize: (width: number, height: number) => void;
|
|
12
|
-
/** Rotate the page one quarter turn (clockwise, or counter-clockwise). */
|
|
13
|
-
onRotate: (clockwise: boolean) => void;
|
|
14
12
|
}
|
|
15
13
|
/**
|
|
16
14
|
* Build the page-settings modal. The returned handle is mounted once by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../src/components/PageSettingsModal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../src/components/PageSettingsModal.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,kBAAkB,CAAC;AA2CzD,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAChC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AA+CD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI;;oBAuMvB,WAAW,KAAG,IAAI;oBApBlB,mBAAmB,KAAG,IAAI;iBAa/B,IAAI;mBAmBF,IAAI;EAM3B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
// The
|
|
2
|
-
//
|
|
3
|
-
// read and change one page's size (a named preset or
|
|
4
|
-
// inches / millimetres / points) and
|
|
5
|
-
//
|
|
6
|
-
// commit (Apply) instead of a hover-dismissed flyout.
|
|
1
|
+
// The per-page settings dialog, opened from a page's control rail (its resize
|
|
2
|
+
// button) and as a PDF's Page tab's Resize Page. A modal — backdrop + centered
|
|
3
|
+
// dialog — that lets the user read and change one page's size (a named preset or
|
|
4
|
+
// a custom width × height in inches / millimetres / points) and layout (portrait
|
|
5
|
+
// or landscape). Apply commits them and closes it.
|
|
7
6
|
//
|
|
8
|
-
// Storeless and imperative: mounted once
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
import { ICON_CLEAR,
|
|
7
|
+
// Storeless and imperative: mounted once and reused across pages. `open(ctx)`
|
|
8
|
+
// seeds it with a page's current size and the callback that turns an Apply into a
|
|
9
|
+
// page edit; it owns no document state of its own.
|
|
10
|
+
import { ICON_CLEAR, on } from "@docmentis/udoc-ui/internal";
|
|
12
11
|
/** Document points per unit — points are the engine's native page unit. */
|
|
13
12
|
const PT_PER_UNIT = {
|
|
14
13
|
in: 72,
|
|
@@ -48,18 +47,27 @@ function matchPreset(width, height) {
|
|
|
48
47
|
const near = (a, b) => Math.abs(a - b) <= MATCH_TOLERANCE;
|
|
49
48
|
return (PRESETS.find((p) => (near(p.width, width) && near(p.height, height)) || (near(p.width, height) && near(p.height, width))) ?? null);
|
|
50
49
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
field.className = "udoc-page-modal__field";
|
|
50
|
+
/** The label above a control. */
|
|
51
|
+
function fieldLabel(text) {
|
|
54
52
|
const label = document.createElement("span");
|
|
55
53
|
label.className = "udoc-page-modal__field-label";
|
|
56
|
-
label.textContent =
|
|
54
|
+
label.textContent = text;
|
|
55
|
+
return label;
|
|
56
|
+
}
|
|
57
|
+
/** `control` under the label `labelText`, which names it. */
|
|
58
|
+
function labeledField(labelText, control) {
|
|
59
|
+
const field = document.createElement("label");
|
|
60
|
+
field.className = "udoc-page-modal__field";
|
|
61
|
+
field.append(fieldLabel(labelText), control);
|
|
62
|
+
return field;
|
|
63
|
+
}
|
|
64
|
+
function lengthInput(ariaLabel) {
|
|
57
65
|
const input = document.createElement("input");
|
|
58
66
|
input.type = "text";
|
|
59
67
|
input.inputMode = "decimal";
|
|
60
68
|
input.className = "udoc-page-modal__input";
|
|
61
|
-
|
|
62
|
-
return
|
|
69
|
+
input.setAttribute("aria-label", ariaLabel);
|
|
70
|
+
return input;
|
|
63
71
|
}
|
|
64
72
|
/**
|
|
65
73
|
* Build the page-settings modal. The returned handle is mounted once by the
|
|
@@ -90,9 +98,6 @@ export function createPageSettingsModal(i18n) {
|
|
|
90
98
|
const body = document.createElement("div");
|
|
91
99
|
body.className = "udoc-page-modal__body";
|
|
92
100
|
// --- size section ---
|
|
93
|
-
const sizeLabel = document.createElement("div");
|
|
94
|
-
sizeLabel.className = "udoc-page-modal__section-label";
|
|
95
|
-
sizeLabel.textContent = i18n.t("pageSettings.pageSize");
|
|
96
101
|
const presetSelect = document.createElement("select");
|
|
97
102
|
presetSelect.className = "udoc-page-modal__select udoc-page-modal__preset";
|
|
98
103
|
presetSelect.setAttribute("aria-label", i18n.t("pageSettings.preset"));
|
|
@@ -108,22 +113,20 @@ export function createPageSettingsModal(i18n) {
|
|
|
108
113
|
presetSelect.appendChild(customOpt);
|
|
109
114
|
const dims = document.createElement("div");
|
|
110
115
|
dims.className = "udoc-page-modal__dims";
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
widthInput.setAttribute("aria-label", i18n.t("pageSettings.pageWidth"));
|
|
114
|
-
heightInput.setAttribute("aria-label", i18n.t("pageSettings.pageHeight"));
|
|
116
|
+
const widthInput = lengthInput(i18n.t("pageSettings.pageWidth"));
|
|
117
|
+
const heightInput = lengthInput(i18n.t("pageSettings.pageHeight"));
|
|
115
118
|
const unitSelect = document.createElement("select");
|
|
116
|
-
unitSelect.className = "udoc-page-modal__select
|
|
117
|
-
unitSelect.setAttribute("aria-label", i18n.t("pageSettings.units"));
|
|
119
|
+
unitSelect.className = "udoc-page-modal__select";
|
|
118
120
|
for (const u of ["in", "mm", "pt"]) {
|
|
119
121
|
const opt = document.createElement("option");
|
|
120
122
|
opt.value = u;
|
|
121
123
|
opt.textContent = i18n.t(UNIT_LABELS[u]);
|
|
122
124
|
unitSelect.appendChild(opt);
|
|
123
125
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
const unitField = labeledField(i18n.t("pageSettings.units"), unitSelect);
|
|
127
|
+
unitField.classList.add("udoc-page-modal__unit");
|
|
128
|
+
dims.append(labeledField(i18n.t("pageSettings.width"), widthInput), labeledField(i18n.t("pageSettings.height"), heightInput), unitField);
|
|
129
|
+
// --- layout section ---
|
|
127
130
|
const portraitBtn = document.createElement("button");
|
|
128
131
|
portraitBtn.type = "button";
|
|
129
132
|
portraitBtn.className = "udoc-page-modal__orient-btn";
|
|
@@ -132,26 +135,15 @@ export function createPageSettingsModal(i18n) {
|
|
|
132
135
|
landscapeBtn.type = "button";
|
|
133
136
|
landscapeBtn.className = "udoc-page-modal__orient-btn";
|
|
134
137
|
landscapeBtn.textContent = i18n.t("pageSettings.landscape");
|
|
138
|
+
const layoutLabel = i18n.t("pageSettings.layout");
|
|
139
|
+
const orient = document.createElement("div");
|
|
140
|
+
orient.className = "udoc-page-modal__orient";
|
|
141
|
+
orient.setAttribute("role", "group");
|
|
142
|
+
orient.setAttribute("aria-label", layoutLabel);
|
|
135
143
|
orient.append(portraitBtn, landscapeBtn);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
rotLabel.textContent = i18n.t("pageSettings.rotation");
|
|
140
|
-
const rotRow = document.createElement("div");
|
|
141
|
-
rotRow.className = "udoc-page-modal__rotate";
|
|
142
|
-
const rotLeftBtn = document.createElement("button");
|
|
143
|
-
rotLeftBtn.type = "button";
|
|
144
|
-
rotLeftBtn.className = "udoc-page-modal__rotate-btn";
|
|
145
|
-
rotLeftBtn.title = i18n.t("pageSettings.rotateLeft");
|
|
146
|
-
rotLeftBtn.setAttribute("aria-label", i18n.t("pageSettings.rotatePageLeft"));
|
|
147
|
-
rotLeftBtn.innerHTML = ICON_ROTATE_LEFT;
|
|
148
|
-
const rotRightBtn = document.createElement("button");
|
|
149
|
-
rotRightBtn.type = "button";
|
|
150
|
-
rotRightBtn.className = "udoc-page-modal__rotate-btn";
|
|
151
|
-
rotRightBtn.title = i18n.t("pageSettings.rotateRight");
|
|
152
|
-
rotRightBtn.setAttribute("aria-label", i18n.t("pageSettings.rotatePageRight"));
|
|
153
|
-
rotRightBtn.innerHTML = ICON_ROTATE_RIGHT;
|
|
154
|
-
rotRow.append(rotLeftBtn, rotRightBtn);
|
|
144
|
+
const layout = document.createElement("div");
|
|
145
|
+
layout.className = "udoc-page-modal__field udoc-page-modal__row";
|
|
146
|
+
layout.append(fieldLabel(layoutLabel), orient);
|
|
155
147
|
// --- footer ---
|
|
156
148
|
const footer = document.createElement("div");
|
|
157
149
|
footer.className = "udoc-page-modal__footer";
|
|
@@ -160,7 +152,7 @@ export function createPageSettingsModal(i18n) {
|
|
|
160
152
|
applyBtn.className = "udoc-page-modal__apply";
|
|
161
153
|
applyBtn.textContent = i18n.t("pageSettings.applySize");
|
|
162
154
|
footer.appendChild(applyBtn);
|
|
163
|
-
body.append(
|
|
155
|
+
body.append(labeledField(i18n.t("pageSettings.pageSize"), presetSelect), dims, layout);
|
|
164
156
|
dialog.append(header, body, footer);
|
|
165
157
|
el.append(backdrop, dialog);
|
|
166
158
|
// --- state ---
|
|
@@ -172,6 +164,11 @@ export function createPageSettingsModal(i18n) {
|
|
|
172
164
|
let ctx = null;
|
|
173
165
|
let isOpen = false;
|
|
174
166
|
const unsubEvents = [];
|
|
167
|
+
/** Whether the fields are wider than tall, past what measuring a page's size
|
|
168
|
+
* off the screen leaves on a square one. */
|
|
169
|
+
function isLandscape() {
|
|
170
|
+
return widthPt - heightPt > MATCH_TOLERANCE;
|
|
171
|
+
}
|
|
175
172
|
/** Reflect the current points/unit into the inputs, preset, orientation. */
|
|
176
173
|
function render() {
|
|
177
174
|
widthInput.value = fmtLen(widthPt, unit);
|
|
@@ -179,7 +176,7 @@ export function createPageSettingsModal(i18n) {
|
|
|
179
176
|
unitSelect.value = unit;
|
|
180
177
|
const preset = matchPreset(widthPt, heightPt);
|
|
181
178
|
presetSelect.value = preset ? preset.name : "Custom";
|
|
182
|
-
const landscape =
|
|
179
|
+
const landscape = isLandscape();
|
|
183
180
|
portraitBtn.classList.toggle("udoc-page-modal__orient-btn--selected", !landscape);
|
|
184
181
|
landscapeBtn.classList.toggle("udoc-page-modal__orient-btn--selected", landscape);
|
|
185
182
|
}
|
|
@@ -196,7 +193,7 @@ export function createPageSettingsModal(i18n) {
|
|
|
196
193
|
const preset = PRESETS.find((p) => p.name === presetSelect.value);
|
|
197
194
|
if (preset) {
|
|
198
195
|
// Keep the page's current orientation when swapping in a preset.
|
|
199
|
-
const landscape =
|
|
196
|
+
const landscape = isLandscape();
|
|
200
197
|
widthPt = landscape ? preset.height : preset.width;
|
|
201
198
|
heightPt = landscape ? preset.width : preset.height;
|
|
202
199
|
}
|
|
@@ -208,17 +205,18 @@ export function createPageSettingsModal(i18n) {
|
|
|
208
205
|
});
|
|
209
206
|
/** Force orientation by swapping the dimensions if needed. */
|
|
210
207
|
function setOrientation(landscape) {
|
|
211
|
-
|
|
212
|
-
if (isLandscape !== landscape)
|
|
208
|
+
if (isLandscape() !== landscape)
|
|
213
209
|
[widthPt, heightPt] = [heightPt, widthPt];
|
|
214
210
|
render();
|
|
215
211
|
}
|
|
216
212
|
on(portraitBtn, "click", () => setOrientation(false));
|
|
217
213
|
on(landscapeBtn, "click", () => setOrientation(true));
|
|
218
|
-
|
|
219
|
-
|
|
214
|
+
/** Resize the page, unless nothing changed: its size as opened was measured
|
|
215
|
+
* off the screen, which writing back would nudge. */
|
|
220
216
|
function apply() {
|
|
221
|
-
ctx
|
|
217
|
+
if (ctx && (widthPt !== ctx.width || heightPt !== ctx.height))
|
|
218
|
+
ctx.onResize(widthPt, heightPt);
|
|
219
|
+
close();
|
|
222
220
|
}
|
|
223
221
|
on(applyBtn, "click", apply);
|
|
224
222
|
for (const input of [widthInput, heightInput]) {
|
|
@@ -237,7 +235,7 @@ export function createPageSettingsModal(i18n) {
|
|
|
237
235
|
widthPt = context.width;
|
|
238
236
|
heightPt = context.height;
|
|
239
237
|
heading.textContent = i18n.t("pageSettings.title", { page: context.index + 1 });
|
|
240
|
-
dialog.setAttribute("aria-label", i18n.t("
|
|
238
|
+
dialog.setAttribute("aria-label", i18n.t("pageControls.resizeLabel", { page: context.index + 1 }));
|
|
241
239
|
render();
|
|
242
240
|
isOpen = true;
|
|
243
241
|
el.style.display = "";
|