@docmentis/udoc-editor 0.0.1 → 0.8.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.
Files changed (207) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +48 -0
  4. package/dist/arrange.d.ts +37 -0
  5. package/dist/arrange.d.ts.map +1 -0
  6. package/dist/arrange.js +431 -0
  7. package/dist/arrange.js.map +1 -0
  8. package/dist/clipboard.d.ts +12 -0
  9. package/dist/clipboard.d.ts.map +1 -0
  10. package/dist/clipboard.js +101 -0
  11. package/dist/clipboard.js.map +1 -0
  12. package/dist/commands.d.ts +12 -0
  13. package/dist/commands.d.ts.map +1 -0
  14. package/dist/commands.js +225 -0
  15. package/dist/commands.js.map +1 -0
  16. package/dist/components/ComboBox.d.ts +38 -0
  17. package/dist/components/ComboBox.d.ts.map +1 -0
  18. package/dist/components/ComboBox.js +57 -0
  19. package/dist/components/ComboBox.js.map +1 -0
  20. package/dist/components/ModeSwitch.d.ts +15 -0
  21. package/dist/components/ModeSwitch.d.ts.map +1 -0
  22. package/dist/components/ModeSwitch.js +94 -0
  23. package/dist/components/ModeSwitch.js.map +1 -0
  24. package/dist/components/NewSlideModal.d.ts +41 -0
  25. package/dist/components/NewSlideModal.d.ts.map +1 -0
  26. package/dist/components/NewSlideModal.js +136 -0
  27. package/dist/components/NewSlideModal.js.map +1 -0
  28. package/dist/components/PageControls.d.ts +78 -0
  29. package/dist/components/PageControls.d.ts.map +1 -0
  30. package/dist/components/PageControls.js +201 -0
  31. package/dist/components/PageControls.js.map +1 -0
  32. package/dist/components/PageSettingsModal.d.ts +27 -0
  33. package/dist/components/PageSettingsModal.d.ts.map +1 -0
  34. package/dist/components/PageSettingsModal.js +273 -0
  35. package/dist/components/PageSettingsModal.js.map +1 -0
  36. package/dist/components/PaintOptionsModal.d.ts +19 -0
  37. package/dist/components/PaintOptionsModal.d.ts.map +1 -0
  38. package/dist/components/PaintOptionsModal.js +103 -0
  39. package/dist/components/PaintOptionsModal.js.map +1 -0
  40. package/dist/components/TextControls.d.ts +49 -0
  41. package/dist/components/TextControls.d.ts.map +1 -0
  42. package/dist/components/TextControls.js +452 -0
  43. package/dist/components/TextControls.js.map +1 -0
  44. package/dist/context-menu.d.ts +46 -0
  45. package/dist/context-menu.d.ts.map +1 -0
  46. package/dist/context-menu.js +144 -0
  47. package/dist/context-menu.js.map +1 -0
  48. package/dist/edit-client.d.ts +121 -0
  49. package/dist/edit-client.d.ts.map +1 -0
  50. package/dist/edit-client.js +154 -0
  51. package/dist/edit-client.js.map +1 -0
  52. package/dist/edit-command.d.ts +7 -0
  53. package/dist/edit-command.d.ts.map +1 -0
  54. package/dist/edit-command.js +18 -0
  55. package/dist/edit-command.js.map +1 -0
  56. package/dist/edit-mode.d.ts +19 -0
  57. package/dist/edit-mode.d.ts.map +1 -0
  58. package/dist/edit-mode.js +214 -0
  59. package/dist/edit-mode.js.map +1 -0
  60. package/dist/editor.d.ts +101 -0
  61. package/dist/editor.d.ts.map +1 -0
  62. package/dist/editor.js +101 -0
  63. package/dist/editor.js.map +1 -0
  64. package/dist/fonts/faces.d.ts +28 -0
  65. package/dist/fonts/faces.d.ts.map +1 -0
  66. package/dist/fonts/faces.js +38 -0
  67. package/dist/fonts/faces.js.map +1 -0
  68. package/dist/fonts/preview.d.ts +98 -0
  69. package/dist/fonts/preview.d.ts.map +1 -0
  70. package/dist/fonts/preview.js +149 -0
  71. package/dist/fonts/preview.js.map +1 -0
  72. package/dist/formatting-marks.d.ts +23 -0
  73. package/dist/formatting-marks.d.ts.map +1 -0
  74. package/dist/formatting-marks.js +55 -0
  75. package/dist/formatting-marks.js.map +1 -0
  76. package/dist/grips.d.ts +14 -0
  77. package/dist/grips.d.ts.map +1 -0
  78. package/dist/grips.js +459 -0
  79. package/dist/grips.js.map +1 -0
  80. package/dist/i18n/ar.d.ts +4 -0
  81. package/dist/i18n/ar.d.ts.map +1 -0
  82. package/dist/i18n/ar.js +175 -0
  83. package/dist/i18n/ar.js.map +1 -0
  84. package/dist/i18n/de.d.ts +4 -0
  85. package/dist/i18n/de.d.ts.map +1 -0
  86. package/dist/i18n/de.js +175 -0
  87. package/dist/i18n/de.js.map +1 -0
  88. package/dist/i18n/en.d.ts +5 -0
  89. package/dist/i18n/en.d.ts.map +1 -0
  90. package/dist/i18n/en.js +176 -0
  91. package/dist/i18n/en.js.map +1 -0
  92. package/dist/i18n/es.d.ts +4 -0
  93. package/dist/i18n/es.d.ts.map +1 -0
  94. package/dist/i18n/es.js +175 -0
  95. package/dist/i18n/es.js.map +1 -0
  96. package/dist/i18n/fr.d.ts +4 -0
  97. package/dist/i18n/fr.d.ts.map +1 -0
  98. package/dist/i18n/fr.js +175 -0
  99. package/dist/i18n/fr.js.map +1 -0
  100. package/dist/i18n/index.d.ts +21 -0
  101. package/dist/i18n/index.d.ts.map +1 -0
  102. package/dist/i18n/index.js +42 -0
  103. package/dist/i18n/index.js.map +1 -0
  104. package/dist/i18n/ja.d.ts +4 -0
  105. package/dist/i18n/ja.d.ts.map +1 -0
  106. package/dist/i18n/ja.js +175 -0
  107. package/dist/i18n/ja.js.map +1 -0
  108. package/dist/i18n/ko.d.ts +4 -0
  109. package/dist/i18n/ko.d.ts.map +1 -0
  110. package/dist/i18n/ko.js +175 -0
  111. package/dist/i18n/ko.js.map +1 -0
  112. package/dist/i18n/messages.d.ts +316 -0
  113. package/dist/i18n/messages.d.ts.map +1 -0
  114. package/dist/i18n/messages.js +2 -0
  115. package/dist/i18n/messages.js.map +1 -0
  116. package/dist/i18n/pt-BR.d.ts +4 -0
  117. package/dist/i18n/pt-BR.d.ts.map +1 -0
  118. package/dist/i18n/pt-BR.js +175 -0
  119. package/dist/i18n/pt-BR.js.map +1 -0
  120. package/dist/i18n/ru.d.ts +4 -0
  121. package/dist/i18n/ru.d.ts.map +1 -0
  122. package/dist/i18n/ru.js +175 -0
  123. package/dist/i18n/ru.js.map +1 -0
  124. package/dist/i18n/zh-CN.d.ts +4 -0
  125. package/dist/i18n/zh-CN.d.ts.map +1 -0
  126. package/dist/i18n/zh-CN.js +175 -0
  127. package/dist/i18n/zh-CN.js.map +1 -0
  128. package/dist/i18n/zh-TW.d.ts +4 -0
  129. package/dist/i18n/zh-TW.d.ts.map +1 -0
  130. package/dist/i18n/zh-TW.js +175 -0
  131. package/dist/i18n/zh-TW.js.map +1 -0
  132. package/dist/icons.d.ts +97 -0
  133. package/dist/icons.d.ts.map +1 -0
  134. package/dist/icons.js +103 -0
  135. package/dist/icons.js.map +1 -0
  136. package/dist/index.d.ts +9 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +14 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/insert.d.ts +21 -0
  141. package/dist/insert.d.ts.map +1 -0
  142. package/dist/insert.js +129 -0
  143. package/dist/insert.js.map +1 -0
  144. package/dist/menu-action.d.ts +73 -0
  145. package/dist/menu-action.d.ts.map +1 -0
  146. package/dist/menu-action.js +89 -0
  147. package/dist/menu-action.js.map +1 -0
  148. package/dist/mode.d.ts +21 -0
  149. package/dist/mode.d.ts.map +1 -0
  150. package/dist/mode.js +17 -0
  151. package/dist/mode.js.map +1 -0
  152. package/dist/new-slide.d.ts +21 -0
  153. package/dist/new-slide.d.ts.map +1 -0
  154. package/dist/new-slide.js +63 -0
  155. package/dist/new-slide.js.map +1 -0
  156. package/dist/page-controls.d.ts +20 -0
  157. package/dist/page-controls.d.ts.map +1 -0
  158. package/dist/page-controls.js +99 -0
  159. package/dist/page-controls.js.map +1 -0
  160. package/dist/paint.d.ts +52 -0
  161. package/dist/paint.d.ts.map +1 -0
  162. package/dist/paint.js +262 -0
  163. package/dist/paint.js.map +1 -0
  164. package/dist/ruler.d.ts +10 -0
  165. package/dist/ruler.d.ts.map +1 -0
  166. package/dist/ruler.js +97 -0
  167. package/dist/ruler.js.map +1 -0
  168. package/dist/state.d.ts +85 -0
  169. package/dist/state.d.ts.map +1 -0
  170. package/dist/state.js +28 -0
  171. package/dist/state.js.map +1 -0
  172. package/dist/styles.d.ts +2 -0
  173. package/dist/styles.d.ts.map +1 -0
  174. package/dist/styles.js +758 -0
  175. package/dist/styles.js.map +1 -0
  176. package/dist/tabs.d.ts +11 -0
  177. package/dist/tabs.d.ts.map +1 -0
  178. package/dist/tabs.js +153 -0
  179. package/dist/tabs.js.map +1 -0
  180. package/dist/text-format.d.ts +114 -0
  181. package/dist/text-format.d.ts.map +1 -0
  182. package/dist/text-format.js +315 -0
  183. package/dist/text-format.js.map +1 -0
  184. package/dist/tools.d.ts +35 -0
  185. package/dist/tools.d.ts.map +1 -0
  186. package/dist/tools.js +41 -0
  187. package/dist/tools.js.map +1 -0
  188. package/dist/version.d.ts +2 -0
  189. package/dist/version.d.ts.map +1 -0
  190. package/dist/version.js +7 -0
  191. package/dist/version.js.map +1 -0
  192. package/dist/worker/handlers.d.ts +11 -0
  193. package/dist/worker/handlers.d.ts.map +1 -0
  194. package/dist/worker/handlers.js +127 -0
  195. package/dist/worker/handlers.js.map +1 -0
  196. package/dist/worker/protocol.d.ts +190 -0
  197. package/dist/worker/protocol.d.ts.map +1 -0
  198. package/dist/worker/protocol.js +2 -0
  199. package/dist/worker/protocol.js.map +1 -0
  200. package/dist/worker/worker-source.d.ts +3 -0
  201. package/dist/worker/worker-source.d.ts.map +1 -0
  202. package/dist/worker/worker-source.js +11 -0
  203. package/dist/worker/worker.d.ts +2 -0
  204. package/dist/worker/worker.d.ts.map +1 -0
  205. package/dist/worker/worker.js +6 -0
  206. package/dist/worker/worker.js.map +1 -0
  207. package/package.json +68 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewSlideModal.js","sourceRoot":"","sources":["../../src/components/NewSlideModal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type { OverlaySource } from "@docmentis/udoc-ui";
2
+ import type { I18n } from "../i18n/index.js";
3
+ /**
4
+ * A page's current size and orientation, as the "more" button hands it to the
5
+ * settings dialog. `width`/`height` are the page's media-box size in document
6
+ * points (rotation-independent — the intrinsic page rectangle); `rotation` is
7
+ * the display rotation in quarter turns clockwise (0–3).
8
+ */
9
+ export interface PageSizeInfo {
10
+ width: number;
11
+ height: number;
12
+ rotation: number;
13
+ }
14
+ /** The page-structure verbs the per-page pill dispatches. */
15
+ export interface PageActionsCallbacks {
16
+ /** The language the controls' names are in. Default English. */
17
+ i18n?: I18n;
18
+ /** Total page count — bounds move-down and gates delete. */
19
+ composedPageCount: () => number;
20
+ /**
21
+ * The page the pointer is currently over (null when none) — the rail is
22
+ * hidden until its page is hovered, so only that page's controls show.
23
+ */
24
+ hoveredPage: () => number | null;
25
+ onMoveUp: (index: number) => void;
26
+ onMoveDown: (index: number) => void;
27
+ /** Rotate the page one quarter turn — clockwise, or counter-clockwise
28
+ * when `clockwise` is false. */
29
+ onRotate: (index: number, clockwise: boolean) => void;
30
+ onDelete: (index: number) => void;
31
+ /** Open the page-settings dialog for `index`, seeded with its current
32
+ * size + rotation — the "more" button's action. */
33
+ onOpenSettings: (index: number, size: PageSizeInfo) => void;
34
+ }
35
+ /**
36
+ * The per-page control rail (`udoc:page-actions`): a vertical column — move
37
+ * up, move down, rotate, more, delete — beside each visible page's right
38
+ * edge, top-aligned with the page. "More" opens the shared page-settings
39
+ * dialog (size + rotation). Constant CSS size — pair with px page spacing,
40
+ * whose screen-fixed side padding gives the rail room at every zoom.
41
+ */
42
+ export declare function pageActions(callbacks: PageActionsCallbacks): OverlaySource;
43
+ /** Options for the insert-between-pages affordance. */
44
+ export interface PageInsertsOptions {
45
+ /** The language the insert button's name is in. Default English. */
46
+ i18n?: I18n;
47
+ /**
48
+ * The inter-page gap in **document points** — the same value the shell set
49
+ * via `setSpacing`. The strip's on-screen hover-zone height is this × the
50
+ * frame's scale, so it fills the (page-fixed) gap at every zoom.
51
+ */
52
+ gapPt: number;
53
+ /** Total page count (for the after-the-last-page strip). */
54
+ composedPageCount: () => number;
55
+ /** Insert a blank page at `index` (`0` = before the first page). */
56
+ onInsert: (index: number) => void;
57
+ /**
58
+ * The region (viewport CSS px) the live selection's edit chrome covers, or
59
+ * null when nothing is selected — read every frame. Any insert strip that
60
+ * overlaps it is dropped: a selection near a page edge floats its resize
61
+ * handles and rotation grip into the gap, so yielding the strip there keeps
62
+ * the insert "+" from lighting up under them. Omit to never yield.
63
+ */
64
+ keepOut?: () => {
65
+ left: number;
66
+ top: number;
67
+ right: number;
68
+ bottom: number;
69
+ } | null;
70
+ }
71
+ /**
72
+ * The insert affordance (`udoc:page-insert`): an invisible strip filling each
73
+ * inter-page gap (plus above the first and below the last page) that reveals
74
+ * a divider line and a centered "+" button on hover. The strip at index `i`
75
+ * inserts before page `i`, dissolving the before/after question spatially.
76
+ */
77
+ export declare function pageInserts(options: PageInsertsOptions): OverlaySource;
78
+ //# sourceMappingURL=PageControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageControls.d.ts","sourceRoot":"","sources":["../../src/components/PageControls.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAcD,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACjC,gEAAgE;IAChE,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC;;;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,CA2F1E;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,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,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"}
@@ -0,0 +1,201 @@
1
+ // The editor's built-in page-management overlays: a per-page control pill and
2
+ // an insert-between-pages affordance. Both are plain {@link OverlaySource}s
3
+ // registered through the public overlay registry (under `udoc:page-actions` /
4
+ // `udoc:page-insert`), so a host can remove or replace either like any overlay
5
+ // of its own.
6
+ //
7
+ // Geometry contract:
8
+ //
9
+ // - The control rail is **constant-size screen chrome** that sits just
10
+ // *beside* a page's right edge, top-aligned with the page — so the shell
11
+ // pairs it with screen-fixed (px) content padding, which holds its on-screen
12
+ // width at every zoom. It is a vertical column of actions — move up / move
13
+ // down / rotate / more / delete — and "more" opens the shared page-settings
14
+ // modal dialog (size + rotation) for the page.
15
+ // - Insert lives *between* pages, in the inter-page gap. The gap is page-fixed
16
+ // (document points), so its on-screen size tracks the zoom; the strip is
17
+ // sized from the gap in points × the frame's scale, so it fills the gap at
18
+ // every zoom by construction. Hovering it reveals a divider with a centered
19
+ // "+" button. Inserting in the gap above page N is "before N" and "after
20
+ // N−1" at once, so there is no before/after question to ask.
21
+ import { ICON_CHEVRON_DOWN, ICON_CHEVRON_UP, ICON_DELETE, ICON_MORE } from "@docmentis/udoc-ui/internal";
22
+ import { ICON_PAGE_ADD, ICON_ROTATE_RIGHT } from "../icons.js";
23
+ import { createI18n } from "../i18n/index.js";
24
+ /** Gap between the rail's left edge and its page's right edge, CSS px. */
25
+ const PILL_OFFSET = 7;
26
+ /** Hide the per-page chrome (control rail *and* insert affordance) when the
27
+ * page is shorter than this on screen — a control rail taller than its page
28
+ * reads as attached to nothing, and a lone insert by a too-small page is just
29
+ * as adrift. */
30
+ const MIN_PAGE_HEIGHT = 130;
31
+ /** Minimum hover/tap width of an insert strip, CSS px. */
32
+ const MIN_INSERT_WIDTH = 48;
33
+ function button(className, icon) {
34
+ const el = document.createElement("button");
35
+ el.type = "button";
36
+ el.className = className;
37
+ el.innerHTML = icon;
38
+ return el;
39
+ }
40
+ /**
41
+ * The latest media-box size + rotation of each pill's page, refreshed every
42
+ * frame in `update` and read by the "more" click handler (set once in `create`)
43
+ * — the click fires the page-settings dialog with the page's current size.
44
+ * Keyed by the pooled pill element so it survives across frames.
45
+ */
46
+ const pillSize = new WeakMap();
47
+ /**
48
+ * The per-page control rail (`udoc:page-actions`): a vertical column — move
49
+ * up, move down, rotate, more, delete — beside each visible page's right
50
+ * edge, top-aligned with the page. "More" opens the shared page-settings
51
+ * dialog (size + rotation). Constant CSS size — pair with px page spacing,
52
+ * whose screen-fixed side padding gives the rail room at every zoom.
53
+ */
54
+ export function pageActions(callbacks) {
55
+ const i18n = callbacks.i18n ?? createI18n("en");
56
+ return (frame) => frame.views
57
+ .filter((view) => view.height >= MIN_PAGE_HEIGHT)
58
+ .map((view) => {
59
+ return {
60
+ key: `pill:${view.index}`,
61
+ // The rail's top-left corner: just right of the page,
62
+ // level with its top edge.
63
+ x: view.x + view.width + PILL_OFFSET,
64
+ y: view.y,
65
+ create: () => {
66
+ const el = document.createElement("div");
67
+ el.className = "udoc-ui__page-actions";
68
+ el.setAttribute("role", "group");
69
+ el.append(button("udoc-ui__page-actions-btn udoc-ui__page-actions-up", ICON_CHEVRON_UP), button("udoc-ui__page-actions-btn udoc-ui__page-actions-down", ICON_CHEVRON_DOWN), button("udoc-ui__page-actions-btn udoc-ui__page-actions-rotate", ICON_ROTATE_RIGHT), button("udoc-ui__page-actions-btn udoc-ui__page-actions-more", ICON_MORE), button("udoc-ui__page-actions-btn udoc-ui__page-actions-delete", ICON_DELETE));
70
+ // "More" opens the shared settings dialog for this page,
71
+ // seeded with the size last stashed by `update`. The
72
+ // pill's index is encoded in its key, so the pooled
73
+ // element always speaks for the same page.
74
+ const more = el.querySelector(".udoc-ui__page-actions-more");
75
+ more.addEventListener("click", () => {
76
+ const size = pillSize.get(el);
77
+ if (size)
78
+ callbacks.onOpenSettings(view.index, size);
79
+ });
80
+ return el;
81
+ },
82
+ update: (el) => {
83
+ const index = view.index;
84
+ const page = index + 1;
85
+ const count = callbacks.composedPageCount();
86
+ el.setAttribute("aria-label", i18n.t("pageControls.label", { page }));
87
+ // Reveal only the hovered page's rail.
88
+ el.classList.toggle("udoc-ui__page-actions--peek", callbacks.hoveredPage() === index);
89
+ const up = el.querySelector(".udoc-ui__page-actions-up");
90
+ up.disabled = index === 0;
91
+ up.title = i18n.t("pageControls.moveUp");
92
+ up.setAttribute("aria-label", i18n.t("pageControls.moveUpLabel", { page }));
93
+ up.onclick = () => callbacks.onMoveUp(index);
94
+ const down = el.querySelector(".udoc-ui__page-actions-down");
95
+ down.disabled = index >= count - 1;
96
+ down.title = i18n.t("pageControls.moveDown");
97
+ down.setAttribute("aria-label", i18n.t("pageControls.moveDownLabel", { page }));
98
+ down.onclick = () => callbacks.onMoveDown(index);
99
+ // The pill's rotate button turns the page clockwise; the
100
+ // settings dialog offers both directions.
101
+ const rotate = el.querySelector(".udoc-ui__page-actions-rotate");
102
+ rotate.title = i18n.t("pageControls.rotate");
103
+ rotate.setAttribute("aria-label", i18n.t("pageControls.rotateLabel", { page }));
104
+ rotate.onclick = () => callbacks.onRotate(index, true);
105
+ const more = el.querySelector(".udoc-ui__page-actions-more");
106
+ more.title = i18n.t("pageControls.settings");
107
+ more.setAttribute("aria-label", i18n.t("pageControls.settingsLabel", { page }));
108
+ const del = el.querySelector(".udoc-ui__page-actions-delete");
109
+ del.disabled = count <= 1;
110
+ del.title = i18n.t("pageControls.delete");
111
+ del.setAttribute("aria-label", i18n.t("pageControls.deleteLabel", { page }));
112
+ del.onclick = () => callbacks.onDelete(index);
113
+ // Stash the page's intrinsic (media-box) size for the
114
+ // settings dialog. The frame's geometry is the *displayed*
115
+ // size (CSS px / scale = document points); a quarter-turn
116
+ // rotation swaps width and height on screen, so undo that
117
+ // to recover the rotation-independent page rectangle.
118
+ const wPt = view.width / frame.scale;
119
+ const hPt = view.height / frame.scale;
120
+ const turned = view.rotation % 2 === 1;
121
+ pillSize.set(el, {
122
+ width: turned ? hPt : wPt,
123
+ height: turned ? wPt : hPt,
124
+ rotation: view.rotation,
125
+ });
126
+ },
127
+ };
128
+ });
129
+ }
130
+ /**
131
+ * The insert affordance (`udoc:page-insert`): an invisible strip filling each
132
+ * inter-page gap (plus above the first and below the last page) that reveals
133
+ * a divider line and a centered "+" button on hover. The strip at index `i`
134
+ * inserts before page `i`, dissolving the before/after question spatially.
135
+ */
136
+ export function pageInserts(options) {
137
+ const i18n = options.i18n ?? createI18n("en");
138
+ // Anchored by the strip's top-left (integer-friendly — a -50% centering
139
+ // translate of a fractional width would land the layer on a half pixel
140
+ // and blur it; the manager snaps the wrapper to the device grid).
141
+ const stripItem = (insertIndex, left, top, width, height) => ({
142
+ key: `gap:${insertIndex}`,
143
+ x: left,
144
+ y: top,
145
+ create: () => {
146
+ const el = document.createElement("div");
147
+ el.className = "udoc-ui__page-insert";
148
+ const line = document.createElement("span");
149
+ line.className = "udoc-ui__page-insert-line";
150
+ const btn = button("udoc-ui__page-insert-btn", ICON_PAGE_ADD);
151
+ btn.title = i18n.t("pageControls.insert");
152
+ el.append(line, btn);
153
+ return el;
154
+ },
155
+ update: (el) => {
156
+ el.style.width = `${width}px`;
157
+ el.style.height = `${height}px`;
158
+ const btn = el.querySelector(".udoc-ui__page-insert-btn");
159
+ btn.setAttribute("aria-label", insertIndex >= options.composedPageCount()
160
+ ? i18n.t("pageControls.insertAtEnd")
161
+ : i18n.t("pageControls.insertBefore", { page: insertIndex + 1 }));
162
+ btn.onclick = () => options.onInsert(insertIndex);
163
+ },
164
+ });
165
+ return (frame) => {
166
+ const items = [];
167
+ // The gap is page-fixed (document points); its on-screen height is the
168
+ // gap scaled by this frame's CSS-px-per-point factor.
169
+ const gapPx = options.gapPt * frame.scale;
170
+ // The selection's edit chrome for this frame (null when nothing is
171
+ // selected). A strip that overlaps it yields the gap to the handles.
172
+ const keepOut = options.keepOut?.() ?? null;
173
+ const clearOfSelection = (left, top, width, height) => keepOut === null ||
174
+ left + width <= keepOut.left ||
175
+ left >= keepOut.right ||
176
+ top + height <= keepOut.top ||
177
+ top >= keepOut.bottom;
178
+ // Drop the insert affordance once a page is too short on screen to carry
179
+ // its own control rail — same threshold as `pageActions`, so the two
180
+ // page-management overlays appear and vanish together at every zoom
181
+ // rather than leaving stray inserts around pages with no controls.
182
+ for (const view of frame.views.filter((v) => v.height >= MIN_PAGE_HEIGHT)) {
183
+ const width = Math.round(Math.max(view.width, MIN_INSERT_WIDTH));
184
+ const left = view.x + (view.width - width) / 2;
185
+ // The gap above this page: inserting there is "before this page".
186
+ const top = view.y - gapPx;
187
+ if (clearOfSelection(left, top, width, gapPx)) {
188
+ items.push(stripItem(view.index, left, top, width, gapPx));
189
+ }
190
+ // Below the document's last page: "append at the end".
191
+ if (view.index === options.composedPageCount() - 1) {
192
+ const tail = view.y + view.height;
193
+ if (clearOfSelection(left, tail, width, gapPx)) {
194
+ items.push(stripItem(view.index + 1, left, tail, width, gapPx));
195
+ }
196
+ }
197
+ }
198
+ return items;
199
+ };
200
+ }
201
+ //# sourceMappingURL=PageControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageControls.js","sourceRoot":"","sources":["../../src/components/PageControls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { I18n } from "../i18n/index.js";
2
+ /** What `open` needs: the page being edited and how to apply changes to it. */
3
+ export interface PageSettingsContext {
4
+ /** 0-based page index. */
5
+ index: number;
6
+ /** Current media-box width in points (rotation-independent). */
7
+ width: number;
8
+ /** Current media-box height in points. */
9
+ height: number;
10
+ /** Resize the page to `width` × `height` points (one undo step). */
11
+ onResize: (width: number, height: number) => void;
12
+ /** Rotate the page one quarter turn (clockwise, or counter-clockwise). */
13
+ onRotate: (clockwise: boolean) => void;
14
+ }
15
+ /**
16
+ * Build the page-settings modal. The returned handle is mounted once by the
17
+ * shell; `open` re-seeds it for whichever page's rail was clicked.
18
+ */
19
+ export declare function createPageSettingsModal(i18n: I18n): {
20
+ el: HTMLDivElement;
21
+ mount: (parent: HTMLElement) => void;
22
+ open: (context: PageSettingsContext) => void;
23
+ close: () => void;
24
+ destroy: () => void;
25
+ };
26
+ export type PageSettingsModal = ReturnType<typeof createPageSettingsModal>;
27
+ //# sourceMappingURL=PageSettingsModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../src/components/PageSettingsModal.ts"],"names":[],"mappings":"AAaA,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;IAClD,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAoCD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI;;oBAgNvB,WAAW,KAAG,IAAI;oBApBlB,mBAAmB,KAAG,IAAI;iBAa/B,IAAI;mBAmBF,IAAI;EAM3B;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,273 @@
1
+ // The shared per-page settings dialog, opened from a page's control rail (the
2
+ // "more" button). A modal — backdrop + centered dialog — that lets the user
3
+ // read and change one page's size (a named preset or a custom width × height in
4
+ // inches / millimetres / points) and rotation. It replaces the old anchored
5
+ // info popup; being a real dialog gives the size fields room and a clear
6
+ // commit (Apply) instead of a hover-dismissed flyout.
7
+ //
8
+ // Storeless and imperative: mounted once by the shell and reused across pages.
9
+ // `open(ctx)` seeds it with a page's current geometry and the callbacks that
10
+ // turn an Apply / rotate into a page edit; it owns no document state of its own.
11
+ import { ICON_CLEAR, on } from "@docmentis/udoc-ui/internal";
12
+ import { ICON_ROTATE_LEFT, ICON_ROTATE_RIGHT } from "../icons.js";
13
+ /** Document points per unit — points are the engine's native page unit. */
14
+ const PT_PER_UNIT = {
15
+ in: 72,
16
+ mm: 72 / 25.4,
17
+ pt: 1,
18
+ };
19
+ /** Decimal places shown per unit (points are whole). */
20
+ const UNIT_DECIMALS = { in: 2, mm: 1, pt: 0 };
21
+ /** What the unit dropdown calls each unit. */
22
+ const UNIT_LABELS = {
23
+ in: "pageSettings.inches",
24
+ mm: "pageSettings.millimeters",
25
+ pt: "pageSettings.points",
26
+ };
27
+ /** The common page sizes offered in the preset dropdown. */
28
+ const PRESETS = [
29
+ { name: "Letter", label: "pageSize.letter", width: 612, height: 792 },
30
+ { name: "Legal", label: "pageSize.legal", width: 612, height: 1008 },
31
+ { name: "Tabloid", label: "pageSize.tabloid", width: 792, height: 1224 },
32
+ { name: "A3", label: "pageSize.a3", width: 841.89, height: 1190.55 },
33
+ { name: "A4", label: "pageSize.a4", width: 595.28, height: 841.89 },
34
+ { name: "A5", label: "pageSize.a5", width: 419.53, height: 595.28 },
35
+ ];
36
+ /** Two sizes count as the same preset within half a point either way. */
37
+ const MATCH_TOLERANCE = 0.5;
38
+ function fmtLen(pt, unit) {
39
+ return (pt / PT_PER_UNIT[unit]).toFixed(UNIT_DECIMALS[unit]);
40
+ }
41
+ function parseLen(text, unit) {
42
+ const n = parseFloat(text);
43
+ if (!isFinite(n) || n <= 0)
44
+ return null;
45
+ return n * PT_PER_UNIT[unit];
46
+ }
47
+ /** The preset matching `width` × `height` (either orientation), or null. */
48
+ function matchPreset(width, height) {
49
+ const near = (a, b) => Math.abs(a - b) <= MATCH_TOLERANCE;
50
+ return (PRESETS.find((p) => (near(p.width, width) && near(p.height, height)) || (near(p.width, height) && near(p.height, width))) ?? null);
51
+ }
52
+ function labeledField(labelText) {
53
+ const field = document.createElement("label");
54
+ field.className = "udoc-page-modal__field";
55
+ const label = document.createElement("span");
56
+ label.className = "udoc-page-modal__field-label";
57
+ label.textContent = labelText;
58
+ const input = document.createElement("input");
59
+ input.type = "text";
60
+ input.inputMode = "decimal";
61
+ input.className = "udoc-page-modal__input";
62
+ field.append(label, input);
63
+ return { field, input };
64
+ }
65
+ /**
66
+ * Build the page-settings modal. The returned handle is mounted once by the
67
+ * shell; `open` re-seeds it for whichever page's rail was clicked.
68
+ */
69
+ export function createPageSettingsModal(i18n) {
70
+ const el = document.createElement("div");
71
+ el.className = "udoc-page-modal";
72
+ el.style.display = "none";
73
+ const backdrop = document.createElement("div");
74
+ backdrop.className = "udoc-page-modal__backdrop";
75
+ const dialog = document.createElement("div");
76
+ dialog.className = "udoc-page-modal__dialog";
77
+ dialog.setAttribute("role", "dialog");
78
+ dialog.setAttribute("aria-modal", "true");
79
+ // --- header ---
80
+ const header = document.createElement("div");
81
+ header.className = "udoc-page-modal__header";
82
+ const heading = document.createElement("h2");
83
+ heading.className = "udoc-page-modal__heading";
84
+ const closeBtn = document.createElement("button");
85
+ closeBtn.type = "button";
86
+ closeBtn.className = "udoc-page-modal__close";
87
+ closeBtn.setAttribute("aria-label", i18n.t("common.close"));
88
+ closeBtn.title = i18n.t("common.close");
89
+ closeBtn.innerHTML = ICON_CLEAR;
90
+ header.append(heading, closeBtn);
91
+ const body = document.createElement("div");
92
+ body.className = "udoc-page-modal__body";
93
+ // --- size section ---
94
+ const sizeLabel = document.createElement("div");
95
+ sizeLabel.className = "udoc-page-modal__section-label";
96
+ sizeLabel.textContent = i18n.t("pageSettings.pageSize");
97
+ const presetSelect = document.createElement("select");
98
+ presetSelect.className = "udoc-page-modal__select udoc-page-modal__preset";
99
+ presetSelect.setAttribute("aria-label", i18n.t("pageSettings.preset"));
100
+ for (const p of PRESETS) {
101
+ const opt = document.createElement("option");
102
+ opt.value = p.name;
103
+ opt.textContent = i18n.t(p.label);
104
+ presetSelect.appendChild(opt);
105
+ }
106
+ const customOpt = document.createElement("option");
107
+ customOpt.value = "Custom";
108
+ customOpt.textContent = i18n.t("pageSize.custom");
109
+ presetSelect.appendChild(customOpt);
110
+ const dims = document.createElement("div");
111
+ dims.className = "udoc-page-modal__dims";
112
+ const { field: wField, input: widthInput } = labeledField(i18n.t("pageSettings.width"));
113
+ const { field: hField, input: heightInput } = labeledField(i18n.t("pageSettings.height"));
114
+ widthInput.setAttribute("aria-label", i18n.t("pageSettings.pageWidth"));
115
+ heightInput.setAttribute("aria-label", i18n.t("pageSettings.pageHeight"));
116
+ const unitSelect = document.createElement("select");
117
+ unitSelect.className = "udoc-page-modal__select udoc-page-modal__unit";
118
+ unitSelect.setAttribute("aria-label", i18n.t("pageSettings.units"));
119
+ for (const u of ["in", "mm", "pt"]) {
120
+ const opt = document.createElement("option");
121
+ opt.value = u;
122
+ opt.textContent = i18n.t(UNIT_LABELS[u]);
123
+ unitSelect.appendChild(opt);
124
+ }
125
+ dims.append(wField, hField, unitSelect);
126
+ const orient = document.createElement("div");
127
+ orient.className = "udoc-page-modal__orient";
128
+ const portraitBtn = document.createElement("button");
129
+ portraitBtn.type = "button";
130
+ portraitBtn.className = "udoc-page-modal__orient-btn";
131
+ portraitBtn.textContent = i18n.t("pageSettings.portrait");
132
+ const landscapeBtn = document.createElement("button");
133
+ landscapeBtn.type = "button";
134
+ landscapeBtn.className = "udoc-page-modal__orient-btn";
135
+ landscapeBtn.textContent = i18n.t("pageSettings.landscape");
136
+ orient.append(portraitBtn, landscapeBtn);
137
+ // --- rotation section ---
138
+ const rotLabel = document.createElement("div");
139
+ rotLabel.className = "udoc-page-modal__section-label";
140
+ rotLabel.textContent = i18n.t("pageSettings.rotation");
141
+ const rotRow = document.createElement("div");
142
+ rotRow.className = "udoc-page-modal__rotate";
143
+ const rotLeftBtn = document.createElement("button");
144
+ rotLeftBtn.type = "button";
145
+ rotLeftBtn.className = "udoc-page-modal__rotate-btn";
146
+ rotLeftBtn.title = i18n.t("pageSettings.rotateLeft");
147
+ rotLeftBtn.setAttribute("aria-label", i18n.t("pageSettings.rotatePageLeft"));
148
+ rotLeftBtn.innerHTML = ICON_ROTATE_LEFT;
149
+ const rotRightBtn = document.createElement("button");
150
+ rotRightBtn.type = "button";
151
+ rotRightBtn.className = "udoc-page-modal__rotate-btn";
152
+ rotRightBtn.title = i18n.t("pageSettings.rotateRight");
153
+ rotRightBtn.setAttribute("aria-label", i18n.t("pageSettings.rotatePageRight"));
154
+ rotRightBtn.innerHTML = ICON_ROTATE_RIGHT;
155
+ rotRow.append(rotLeftBtn, rotRightBtn);
156
+ // --- footer ---
157
+ const footer = document.createElement("div");
158
+ footer.className = "udoc-page-modal__footer";
159
+ const applyBtn = document.createElement("button");
160
+ applyBtn.type = "button";
161
+ applyBtn.className = "udoc-page-modal__apply";
162
+ applyBtn.textContent = i18n.t("pageSettings.applySize");
163
+ footer.appendChild(applyBtn);
164
+ body.append(sizeLabel, presetSelect, dims, orient, rotLabel, rotRow);
165
+ dialog.append(header, body, footer);
166
+ el.append(backdrop, dialog);
167
+ // --- state ---
168
+ // Width/height the fields currently represent, in points. `unit` persists
169
+ // across opens so a user's chosen unit sticks for the session.
170
+ let widthPt = 612;
171
+ let heightPt = 792;
172
+ let unit = "in";
173
+ let ctx = null;
174
+ let isOpen = false;
175
+ const unsubEvents = [];
176
+ /** Reflect the current points/unit into the inputs, preset, orientation. */
177
+ function render() {
178
+ widthInput.value = fmtLen(widthPt, unit);
179
+ heightInput.value = fmtLen(heightPt, unit);
180
+ unitSelect.value = unit;
181
+ const preset = matchPreset(widthPt, heightPt);
182
+ presetSelect.value = preset ? preset.name : "Custom";
183
+ const landscape = widthPt > heightPt;
184
+ portraitBtn.classList.toggle("udoc-page-modal__orient-btn--selected", !landscape);
185
+ landscapeBtn.classList.toggle("udoc-page-modal__orient-btn--selected", landscape);
186
+ }
187
+ /** Commit an edited field, falling back to the prior value if unparseable. */
188
+ function commitInput(input, set) {
189
+ const pt = parseLen(input.value, unit);
190
+ if (pt !== null)
191
+ set(pt);
192
+ render();
193
+ }
194
+ on(widthInput, "change", () => commitInput(widthInput, (pt) => (widthPt = pt)));
195
+ on(heightInput, "change", () => commitInput(heightInput, (pt) => (heightPt = pt)));
196
+ on(presetSelect, "change", () => {
197
+ const preset = PRESETS.find((p) => p.name === presetSelect.value);
198
+ if (preset) {
199
+ // Keep the page's current orientation when swapping in a preset.
200
+ const landscape = widthPt > heightPt;
201
+ widthPt = landscape ? preset.height : preset.width;
202
+ heightPt = landscape ? preset.width : preset.height;
203
+ }
204
+ render();
205
+ });
206
+ on(unitSelect, "change", () => {
207
+ unit = unitSelect.value;
208
+ render();
209
+ });
210
+ /** Force orientation by swapping the dimensions if needed. */
211
+ function setOrientation(landscape) {
212
+ const isLandscape = widthPt > heightPt;
213
+ if (isLandscape !== landscape)
214
+ [widthPt, heightPt] = [heightPt, widthPt];
215
+ render();
216
+ }
217
+ on(portraitBtn, "click", () => setOrientation(false));
218
+ on(landscapeBtn, "click", () => setOrientation(true));
219
+ on(rotLeftBtn, "click", () => ctx?.onRotate(false));
220
+ on(rotRightBtn, "click", () => ctx?.onRotate(true));
221
+ function apply() {
222
+ ctx?.onResize(widthPt, heightPt);
223
+ }
224
+ on(applyBtn, "click", apply);
225
+ for (const input of [widthInput, heightInput]) {
226
+ on(input, "keydown", (e) => {
227
+ if (e.key === "Enter") {
228
+ e.preventDefault();
229
+ input.dispatchEvent(new Event("change"));
230
+ apply();
231
+ }
232
+ });
233
+ }
234
+ on(closeBtn, "click", () => close());
235
+ on(backdrop, "click", () => close());
236
+ function open(context) {
237
+ ctx = context;
238
+ widthPt = context.width;
239
+ heightPt = context.height;
240
+ heading.textContent = i18n.t("pageSettings.title", { page: context.index + 1 });
241
+ dialog.setAttribute("aria-label", i18n.t("pageSettings.label", { page: context.index + 1 }));
242
+ render();
243
+ isOpen = true;
244
+ el.style.display = "";
245
+ widthInput.focus();
246
+ widthInput.select();
247
+ }
248
+ function close() {
249
+ if (!isOpen)
250
+ return;
251
+ isOpen = false;
252
+ ctx = null;
253
+ el.style.display = "none";
254
+ }
255
+ function mount(parent) {
256
+ parent.appendChild(el);
257
+ const onKeydown = (e) => {
258
+ if (isOpen && e.key === "Escape") {
259
+ e.stopPropagation();
260
+ close();
261
+ }
262
+ };
263
+ document.addEventListener("keydown", onKeydown);
264
+ unsubEvents.push(() => document.removeEventListener("keydown", onKeydown));
265
+ }
266
+ function destroy() {
267
+ for (const off of unsubEvents)
268
+ off();
269
+ el.remove();
270
+ }
271
+ return { el, mount, open, close, destroy };
272
+ }
273
+ //# sourceMappingURL=PageSettingsModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageSettingsModal.js","sourceRoot":"","sources":["../../src/components/PageSettingsModal.ts"],"names":[],"mappings":"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"}