@docmentis/udoc-editor 0.8.5 → 0.8.7

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 (56) hide show
  1. package/dist/arrange.d.ts.map +1 -1
  2. package/dist/arrange.js +2 -2
  3. package/dist/arrange.js.map +1 -1
  4. package/dist/components/PageControls.d.ts.map +1 -1
  5. package/dist/components/PageControls.js +1 -2
  6. package/dist/components/PageControls.js.map +1 -1
  7. package/dist/components/PageSettingsModal.d.ts.map +1 -1
  8. package/dist/components/PageSettingsModal.js +1 -2
  9. package/dist/components/PageSettingsModal.js.map +1 -1
  10. package/dist/edit-mode.d.ts.map +1 -1
  11. package/dist/edit-mode.js +5 -2
  12. package/dist/edit-mode.js.map +1 -1
  13. package/dist/icons.d.ts +0 -6
  14. package/dist/icons.d.ts.map +1 -1
  15. package/dist/icons.js +0 -6
  16. package/dist/icons.js.map +1 -1
  17. package/dist/insert.d.ts +2 -1
  18. package/dist/insert.d.ts.map +1 -1
  19. package/dist/insert.js +3 -2
  20. package/dist/insert.js.map +1 -1
  21. package/dist/new-slide.d.ts +5 -4
  22. package/dist/new-slide.d.ts.map +1 -1
  23. package/dist/new-slide.js +39 -15
  24. package/dist/new-slide.js.map +1 -1
  25. package/dist/page-controls.d.ts.map +1 -1
  26. package/dist/page-controls.js +31 -10
  27. package/dist/page-controls.js.map +1 -1
  28. package/dist/ruler-controls.d.ts +54 -0
  29. package/dist/ruler-controls.d.ts.map +1 -0
  30. package/dist/ruler-controls.js +270 -0
  31. package/dist/ruler-controls.js.map +1 -0
  32. package/dist/ruler-edits.d.ts +38 -0
  33. package/dist/ruler-edits.d.ts.map +1 -0
  34. package/dist/ruler-edits.js +157 -0
  35. package/dist/ruler-edits.js.map +1 -0
  36. package/dist/ruler.d.ts +6 -3
  37. package/dist/ruler.d.ts.map +1 -1
  38. package/dist/ruler.js +174 -33
  39. package/dist/ruler.js.map +1 -1
  40. package/dist/state.d.ts +7 -0
  41. package/dist/state.d.ts.map +1 -1
  42. package/dist/state.js +2 -0
  43. package/dist/state.js.map +1 -1
  44. package/dist/styles.d.ts.map +1 -1
  45. package/dist/styles.js +99 -0
  46. package/dist/styles.js.map +1 -1
  47. package/dist/tabs.d.ts.map +1 -1
  48. package/dist/tabs.js +4 -2
  49. package/dist/tabs.js.map +1 -1
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.js +1 -1
  52. package/dist/worker/handlers.d.ts.map +1 -1
  53. package/dist/worker/handlers.js +16 -10
  54. package/dist/worker/handlers.js.map +1 -1
  55. package/dist/worker/worker-source.js +1 -1
  56. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruler-edits.js","sourceRoot":"","sources":["../src/ruler-edits.ts"],"names":[],"mappings":"AAoCA,mDAAmD;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACjD,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;CACpB,CAAC;AAEF,2DAA2D;AAC3D,SAAS,MAAM,CAAI,SAAuB;IACtC,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED;;qBAEqB;AACrB,MAAM,UAAU,cAAc,CAAC,UAA0C;IACrE,MAAM,MAAM,GACR,UAAU,IAAI,cAAc,IAAI,UAAU;QACtC,CAAC,CAAC,UAAU,CAAC,YAAY;QACzB,CAAC,CAAC,UAAU,IAAI,gBAAgB,IAAI,UAAU;YAC5C,CAAC,CAAC,UAAU,CAAC,cAAc;YAC3B,CAAC,CAAC,IAAI,CAAC;IACjB,IAAI,CAAC,MAAM;QAAE,OAAO,qBAAqB,CAAC;IAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC/B,OAAO;QACH,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QAC7C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;KACzC,CAAC;AACN,CAAC;AAED,8EAA8E;AAC9E,MAAM,YAAY,GAAsC;IACpD,cAAc,EAAE,uBAAuB;IACvC,YAAY,EAAE,4BAA4B;IAC1C,QAAQ,EAAE,eAAe;CAC5B,CAAC;AAEF;qEACqE;AACrE,MAAM,UAAU,YAAY,CACxB,OAAqB,EACrB,KAAiB,EACjB,OAAiB,EACjB,IAA2B,EAC3B,KAAqB;IAErB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC1F,OAAO,CACH,IAAI,KAAK,SAAS;QAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3B,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,CAChE,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACrB,IAAe,EACf,KAAiB,EACjB,OAAiB,EACjB,KAAqB;IAErB,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,UAAU,IAAI,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC;QACxE,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACT,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,KAAK,IAAI,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,KAAK,QAAQ;YACT,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACL,CAAC;AAED;;gFAEgF;AAChF,SAAS,gBAAgB,CAAC,MAAmB,EAAE,EAAU,EAAE,KAAqB;IAC5E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAC3D,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,WAAW;YACZ,OAAO,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC,CAAC;QACzF,KAAK,SAAS;YACV,OAAO,UAAU,KAAK,IAAI,IAAI,eAAe,KAAK,IAAI;gBAClD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC,CAAC;QACvF,KAAK,MAAM;YACP,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1E,KAAK,OAAO;YACR,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;AACL,CAAC;AAED;;;2DAG2D;AAC3D,SAAS,aAAa,CAAC,KAAa,EAAE,EAAU,EAAE,OAAiB,EAAE,KAAqB;IACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1G,IAAI,OAAO,KAAK,gBAAgB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtG,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,GAAG;IACf,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,aAAa;CAC8D,CAAC;AAExF,iDAAiD;AACjD,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAGpE,CAAC;AAEF;;;8EAG8E;AAC9E,SAAS,UAAU,CACf,IAAe,EACf,EAAU,EACV,KAAiB,EACjB,OAAiB,EACjB,KAAqB;IAErB,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC;IAC/C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClG,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACpB,MAAM,KAAK,GAAqE,EAAE,CAAC;YACnF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;YACrF,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,KAAK,EAAE,CAAC;QACvD,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YAClB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAChC,MAAM,UAAU,GAAuB,EAAE,CAAC;YAC1C,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC;QAC9D,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;YAC7C,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC/D,MAAM,KAAK,GAAS;gBAChB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;gBAClC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;gBAClC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;gBAChC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;aACnC,CAAC;YACF,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC;QACtE,CAAC;QACD;YACI,OAAO,IAAI,CAAC;IACpB,CAAC;AACL,CAAC"}
package/dist/ruler.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import type { Action, GuideBand, Store, UIState } from "@docmentis/udoc-ui/internal";
2
- /** The ruler band. Paints only a ruler projection; any other leaves the strips
3
- * cleared to their band background until one lands. */
4
- export declare const RULER: GuideBand;
2
+ import type { EditHost } from "./edit-client.js";
3
+ /** The ruler band, with controls of its own — one per editor, whose edits run
4
+ * through the `host` edit mode lends once it is mounted. Paints only a ruler
5
+ * projection; any other leaves the strips cleared to their band background
6
+ * until one lands. */
7
+ export declare function createRuler(host: () => EditHost | null): GuideBand;
5
8
  /** Whether the ruler shows in `state`: a ruled doc type in edit mode, with the
6
9
  * preference on. */
7
10
  export declare function rulerShown(state: UIState): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ruler.d.ts","sourceRoot":"","sources":["../src/ruler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAc,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAyFjG;wDACwD;AACxD,eAAO,MAAM,KAAK,EAAE,SAKnB,CAAC;AAEF;qBACqB;AACrB,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAElF"}
1
+ {"version":3,"file":"ruler.d.ts","sourceRoot":"","sources":["../src/ruler.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAyB,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC5G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAqOjD;;;uBAGuB;AACvB,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,CA4BlE;AAED;qBACqB;AACrB,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAElF"}
package/dist/ruler.js CHANGED
@@ -1,8 +1,22 @@
1
+ import { createRulerControls } from "./ruler-controls.js";
2
+ import { rulerEdit, rulerMovable } from "./ruler-edits.js";
1
3
  import { editState, updateEditState } from "./state.js";
2
4
  /** The doc types the engine measures with a ruler: the paged ones. */
3
5
  const RULED = new Set(["portable", "presentation", "wordprocessing"]);
6
+ /** The rulers' depth, top and left alike, CSS px. */
7
+ const THICKNESS = 22;
4
8
  /** A screen-fixed UI font for the labels — not the document's fonts. */
5
9
  const UI_FONT = `-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif`;
10
+ /** Points per inch — the unit the rulers count in. */
11
+ const POINTS_PER_INCH = 72;
12
+ /** The subdivisions of an inch a ruler can tick, finest first. */
13
+ const SUBDIVISIONS = [8, 4, 2, 1];
14
+ /** How many inches apart the figures can stand, nearest first. */
15
+ const FIGURE_STEPS = [1, 2, 5, 10, 20, 50];
16
+ /** The closest two ticks stand, CSS px: a finer subdivision drops out below it. */
17
+ const MIN_TICK_GAP = 6;
18
+ /** The closest two figures stand, CSS px: a wider step takes over below it. */
19
+ const MIN_FIGURE_GAP = 24;
6
20
  function stroke(ctx, color, x0, y0, x1, y1) {
7
21
  ctx.strokeStyle = color;
8
22
  ctx.lineWidth = 1;
@@ -11,38 +25,138 @@ function stroke(ctx, color, x0, y0, x1, y1) {
11
25
  ctx.lineTo(x1, y1);
12
26
  ctx.stroke();
13
27
  }
14
- function drawAxis(canvas, ctx, axis, thickness, orient) {
15
- const { colors } = canvas;
16
- const size = Math.min(11, Math.max(8, thickness * 0.5));
17
- ctx.font = `${size}px ${UI_FONT}`;
18
- const majorLen = thickness * 0.3;
19
- const minorLen = thickness * 0.16;
20
- const figCenter = (thickness - majorLen) / 2;
28
+ /** `v` CSS px along `ctx`'s `axis`, moved onto the nearest device pixel edge. */
29
+ function snap(ctx, v, axis) {
30
+ const m = ctx.getTransform();
31
+ const [k, offset] = axis === "x" ? [m.a, m.e] : [m.d, m.f];
32
+ return (Math.round(v * k + offset) - offset) / k;
33
+ }
34
+ /**
35
+ * Where a tick at `p` CSS px along the ruler stands: its `start` and `width`
36
+ * along it in CSS px, whole device pixels — as many as a CSS px holds, one at
37
+ * least — so every tick lands as sharp and as dark as the next however the
38
+ * zoom and the dpr place it.
39
+ */
40
+ function tickSpan(ctx, p, orient) {
41
+ const k = ctx.getTransform().a;
42
+ const width = Math.max(1, Math.round(k)) / k;
43
+ return { start: snap(ctx, p - width / 2, orient === "h" ? "x" : "y"), width };
44
+ }
45
+ /** The centre of the tick at `p` — where a control standing on it centres. */
46
+ function tickCenter(ctx, p, orient) {
47
+ const { start, width } = tickSpan(ctx, p, orient);
48
+ return start + width / 2;
49
+ }
50
+ /** Fill a tick at `p`, `len` CSS px long, hanging from the inner edge of a strip
51
+ * `thickness` deep — its ends on device pixel edges too. */
52
+ function tick(ctx, color, p, len, thickness, orient) {
53
+ const { start, width } = tickSpan(ctx, p, orient);
54
+ const across = orient === "h" ? "y" : "x";
55
+ const top = snap(ctx, thickness - len, across);
56
+ const bottom = snap(ctx, thickness, across);
57
+ ctx.fillStyle = color;
58
+ if (orient === "h")
59
+ ctx.fillRect(start, top, width, bottom - top);
60
+ else
61
+ ctx.fillRect(top, start, bottom - top, width);
62
+ }
63
+ /**
64
+ * Draw one ruler into its strip, `length` CSS px long and `thickness` deep: the
65
+ * selection's span and the margins of the text a caret edits behind it, then
66
+ * its graduation over the page.
67
+ */
68
+ function drawAxis(canvas, ctx, axis, length, thickness, orient) {
69
+ const { colors, extent, scale } = canvas;
21
70
  // Shift the horizontal ruler's marks (along x) to ride the content canvas
22
71
  // mid-resize; the vertical ruler tracks height, which isn't shifted. See
23
72
  // `GuideBands.setContentShift`. `0` when settled.
73
+ const shift = orient === "h" ? canvas.shiftX : 0;
24
74
  ctx.save();
25
- if (orient === "h")
26
- ctx.translate(canvas.shiftX, 0);
27
- for (const m of axis.marks) {
28
- const len = m.major ? majorLen : minorLen;
29
- const p = m.position;
30
- // Ticks hang from the inner (content) edge toward the outer, on the
31
- // soft `grid` they share with the ruler edge and the header separators.
75
+ ctx.translate(shift, 0);
76
+ /** Where `points` from the origin falls in the strip, CSS px. */
77
+ const at = (points) => axis.origin + points * scale;
78
+ // Each span ends on device pixel edges, so a margin's edge meets its fill
79
+ // without a sliver of another between them.
80
+ const span = (from, to, color) => {
81
+ const along = orient === "h" ? "x" : "y";
82
+ const start = snap(ctx, from, along);
83
+ const end = snap(ctx, to, along);
84
+ if (end <= start)
85
+ return;
86
+ ctx.fillStyle = color;
87
+ if (orient === "h")
88
+ ctx.fillRect(start, 0, end - start, thickness);
89
+ else
90
+ ctx.fillRect(0, start, thickness, end - start);
91
+ };
92
+ // The selection's span lights up behind the marks; while a caret edits
93
+ // text, its text area does, between the darker margins of the page. All
94
+ // ride the shift with the marks, so they keep their reading against them.
95
+ if (extent) {
32
96
  if (orient === "h")
33
- stroke(ctx, colors.grid, p, thickness, p, thickness - len);
97
+ span(extent.x0, extent.x1, colors.range);
34
98
  else
35
- stroke(ctx, colors.grid, thickness, p, thickness - len, p);
36
- if (m.label != null) {
99
+ span(extent.y0, extent.y1, colors.range);
100
+ }
101
+ const { page, margins } = axis;
102
+ if (margins) {
103
+ span(at(page.start), at(margins.start), colors.margin);
104
+ span(at(margins.start), at(margins.end), colors.range);
105
+ span(at(margins.end), at(page.end), colors.margin);
106
+ // Each margin's edge, a line the ruler's depth on the tick its fill
107
+ // ends at, in the soft `grid` of the ticks — drawn here with the fills
108
+ // it bounds, the strip a drag takes it by over it (ruler-controls.ts).
109
+ tick(ctx, colors.grid, at(margins.start), thickness, thickness, orient);
110
+ tick(ctx, colors.grid, at(margins.end), thickness, thickness, orient);
111
+ }
112
+ // Graduate the page in inches, as finely as the zoom leaves room for, the
113
+ // figures counting outward from the origin — only where the strip shows.
114
+ const inch = POINTS_PER_INCH * scale;
115
+ const subdivisions = SUBDIVISIONS.find((n) => inch / n >= MIN_TICK_GAP) ?? 1;
116
+ const figureStep = FIGURE_STEPS.find((n) => inch * n >= MIN_FIGURE_GAP) ?? FIGURE_STEPS[FIGURE_STEPS.length - 1];
117
+ const step = POINTS_PER_INCH / subdivisions;
118
+ const from = Math.max(page.start, (-shift - axis.origin) / scale);
119
+ const to = Math.min(page.end, (length - shift - axis.origin) / scale);
120
+ const size = Math.min(11, Math.max(8, thickness * 0.5));
121
+ ctx.font = `${size}px ${UI_FONT}`;
122
+ const inchLen = thickness * 0.3;
123
+ const figCenter = (thickness - inchLen) / 2;
124
+ for (let n = Math.ceil(from / step); n <= Math.floor(to / step); n++) {
125
+ const p = at(n * step);
126
+ // An inch, a half, or a short tick at each finer division — as Word
127
+ // and Google Docs graduate, three lengths a glance tells apart.
128
+ const len = n % subdivisions === 0 ? inchLen : n % (subdivisions / 2) === 0 ? thickness * 0.22 : thickness * 0.14;
129
+ // Ticks hang from the inner (content) edge toward the outer, on the
130
+ // soft `grid` they share with the ruler edge and the header separators.
131
+ tick(ctx, colors.grid, p, len, thickness, orient);
132
+ const inches = n / subdivisions;
133
+ if (n % subdivisions === 0 && inches % figureStep === 0) {
134
+ const figure = String(Math.abs(inches));
135
+ const c = tickCenter(ctx, p, orient);
37
136
  ctx.fillStyle = colors.text;
38
137
  if (orient === "h")
39
- ctx.fillText(m.label, m.position, figCenter);
138
+ ctx.fillText(figure, c, figCenter);
40
139
  else
41
- ctx.fillText(m.label, figCenter, m.position);
140
+ ctx.fillText(figure, figCenter, c);
42
141
  }
43
142
  }
44
143
  ctx.restore();
45
144
  }
145
+ /**
146
+ * Where the controls stand along the ruler `axis` drew in `strip`: on its
147
+ * ticks, riding the top ruler's shift with them (see {@link drawAxis}).
148
+ */
149
+ function placement(canvas, strip, axis, orient) {
150
+ const shift = orient === "h" ? canvas.shiftX : 0;
151
+ return {
152
+ layer: canvas.layer(orient === "h" ? "top" : "left"),
153
+ pane: canvas.layer("pane"),
154
+ axis,
155
+ origin: axis.origin + shift,
156
+ scale: canvas.scale,
157
+ at: (points) => tickCenter(strip.ctx, axis.origin + points * canvas.scale + shift, orient),
158
+ };
159
+ }
46
160
  /**
47
161
  * Fill the ruler's corner box and mark only the junction dot — the single
48
162
  * pixel both the top ruler's bottom edge and the left ruler's right edge pass
@@ -59,32 +173,59 @@ function drawCorner(canvas) {
59
173
  ctx.fillStyle = canvas.colors.grid;
60
174
  ctx.fillRect(w - 1, h - 1, 1, 1);
61
175
  }
62
- function drawRuler(guide, canvas) {
176
+ /** Draw `guide`'s rulers into `canvas`'s strips, and stand `controls` over them,
177
+ * those `movable` refuses fixed. */
178
+ function drawRuler(guide, canvas, controls, movable) {
63
179
  const { colors } = canvas;
64
180
  const top = canvas.prepare("top");
65
- if (top && guide.horizontal) {
66
- drawAxis(canvas, top.ctx, guide.horizontal, top.h, "h");
181
+ if (top) {
182
+ drawAxis(canvas, top.ctx, guide.horizontal, top.w, top.h, "h");
67
183
  // The ruler's inner (content-facing) edge line — a baseline the ticks
68
184
  // hang from, framing the ruler off the page below (mirrors the header
69
185
  // band's bottom border). The same soft `grid` as the ticks.
70
186
  stroke(top.ctx, colors.grid, 0, top.h - 0.5, top.w, top.h - 0.5);
71
187
  }
72
188
  const left = canvas.prepare("left");
73
- if (left && guide.vertical) {
74
- drawAxis(canvas, left.ctx, guide.vertical, left.w, "v");
189
+ if (left) {
190
+ drawAxis(canvas, left.ctx, guide.vertical, left.h, left.w, "v");
75
191
  stroke(left.ctx, colors.grid, left.w - 0.5, 0, left.w - 0.5, left.h);
76
192
  }
77
193
  drawCorner(canvas);
194
+ controls.place(top && placement(canvas, top, guide.horizontal, "h"), left && placement(canvas, left, guide.vertical, "v"), guide.text ?? null, movable);
195
+ }
196
+ /** The ruler band, with controls of its own — one per editor, whose edits run
197
+ * through the `host` edit mode lends once it is mounted. Paints only a ruler
198
+ * projection; any other leaves the strips cleared to their band background
199
+ * until one lands. */
200
+ export function createRuler(host) {
201
+ /** The projection the controls last stood on — what a drop is read off. */
202
+ let placed = null;
203
+ /** Send the edit `drop` means to the open document, as one undo step; null
204
+ * where it means none. */
205
+ const drop = (drop) => {
206
+ const lent = host();
207
+ const state = lent?.store.getState();
208
+ const edit = placed && state?.docType && rulerEdit(drop, placed, state.docType, editState(state).selectionRuler);
209
+ if (!lent || !edit)
210
+ return null;
211
+ return lent.commit(() => lent.client.executeOnSelection(edit));
212
+ };
213
+ const controls = createRulerControls(THICKNESS, drop);
214
+ return {
215
+ thickness: THICKNESS,
216
+ draw(guide, canvas) {
217
+ if (guide.type !== "ruler")
218
+ return;
219
+ placed = guide;
220
+ const state = host()?.store.getState();
221
+ const docType = state?.docType;
222
+ const movable = (control) => !!state &&
223
+ !!docType &&
224
+ rulerMovable(control, guide, docType, state.selectionCaps, editState(state).selectionRuler);
225
+ drawRuler(guide, canvas, controls, movable);
226
+ },
227
+ };
78
228
  }
79
- /** The ruler band. Paints only a ruler projection; any other leaves the strips
80
- * cleared to their band background until one lands. */
81
- export const RULER = {
82
- thickness: 22,
83
- draw(guide, canvas) {
84
- if (guide.type === "ruler")
85
- drawRuler(guide, canvas);
86
- },
87
- };
88
229
  /** Whether the ruler shows in `state`: a ruled doc type in edit mode, with the
89
230
  * preference on. */
90
231
  export function rulerShown(state) {
package/dist/ruler.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ruler.js","sourceRoot":"","sources":["../src/ruler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ruler.js","sourceRoot":"","sources":["../src/ruler.ts"],"names":[],"mappings":"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"}
package/dist/state.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { FontFamilySummary } from "@docmentis/udoc-wasm";
2
2
  import type { Action, CommandContext, SelectionPaint, SelectionTextFormat, Store, ThemePalette, UIState } from "@docmentis/udoc-ui/internal";
3
3
  import type { EditorMode } from "./mode.js";
4
+ import type { SelectionRuler } from "./ruler-edits.js";
4
5
  export interface EditState {
5
6
  /**
6
7
  * Whether formatting marks (`¶`, a dot per space, a tab's arrow, `↵`) are
@@ -62,6 +63,12 @@ export interface EditState {
62
63
  * open, a channel the doc type doesn't surface, or none.
63
64
  */
64
65
  selectionPaint: SelectionPaint;
66
+ /**
67
+ * What a drop on the ruler moves from — the selection's resolved indents
68
+ * and tab stops, and its shape's text insets. Pushed from the worker's
69
+ * selection reports, projected from the engine's selection properties.
70
+ */
71
+ selectionRuler: SelectionRuler;
65
72
  /** The modes the host lets the user switch between (drives the mode
66
73
  * switcher, which offers those the session is entitled to —
67
74
  * `modeEntitled`). */
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EACR,MAAM,EACN,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,YAAY,EACZ,OAAO,EACV,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,SAAS;IACtB;;;;;;OAMG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAE7B;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;;OAKG;IACH,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAElC;;;;;;;;;;;OAWG;IACH,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAE3C;;;;;;;OAOG;IACH,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzC;;;;;;OAMG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;;;;;OAMG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;2BAEuB;IACvB,YAAY,EAAE,SAAS,UAAU,EAAE,CAAC;IAEpC;sCACkC;IAClC,cAAc,EAAE,OAAO,CAAC;IAExB;;kDAE8C;IAC9C,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,EAAE,SAWhC,CAAC;AAEF,oCAAoC;AACpC,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAEnD;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAE9D;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAE/F"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EACR,MAAM,EACN,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,YAAY,EACZ,OAAO,EACV,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,SAAS;IACtB;;;;;;OAMG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAE7B;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;;OAKG;IACH,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAElC;;;;;;;;;;;OAWG;IACH,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAE3C;;;;;;;OAOG;IACH,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzC;;;;;;OAMG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;;;;;OAMG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;;;OAIG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;2BAEuB;IACvB,YAAY,EAAE,SAAS,UAAU,EAAE,CAAC;IAEpC;sCACkC;IAClC,cAAc,EAAE,OAAO,CAAC;IAExB;;kDAE8C;IAC9C,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,EAAE,SAYhC,CAAC;AAEF,oCAAoC;AACpC,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAEnD;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAE9D;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAE/F"}
package/dist/state.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { EMPTY_SELECTION_PAINT, EMPTY_SELECTION_TEXT_FORMAT } from "@docmentis/udoc-ui/internal";
2
2
  import { ALL_MODES } from "./mode.js";
3
+ import { EMPTY_SELECTION_RULER } from "./ruler-edits.js";
3
4
  /** Edit mode's state at start. */
4
5
  export const INITIAL_EDIT_STATE = {
5
6
  showFormattingMarks: false,
@@ -9,6 +10,7 @@ export const INITIAL_EDIT_STATE = {
9
10
  loadedFontFamilyNames: [],
10
11
  selectionText: EMPTY_SELECTION_TEXT_FORMAT,
11
12
  selectionPaint: EMPTY_SELECTION_PAINT,
13
+ selectionRuler: EMPTY_SELECTION_RULER,
12
14
  allowedModes: ALL_MODES,
13
15
  showModeSwitch: true,
14
16
  alignToPage: false,
package/dist/state.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAUjG,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAsFtC,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAc;IACzC,mBAAmB,EAAE,KAAK;IAC1B,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,EAAE;IAChB,qBAAqB,EAAE,EAAE;IACzB,aAAa,EAAE,2BAA2B;IAC1C,cAAc,EAAE,qBAAqB;IACrC,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,KAAK;CACrB,CAAC;AAEF,oCAAoC;AACpC,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,OAAO,KAAK,CAAC,SAAsB,CAAC;AACxC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,OAAuB;IAC/C,OAAO,OAAO,CAAC,SAAsB,CAAC;AAC1C,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,eAAe,CAAC,KAA6B,EAAE,MAA0B;IACrF,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9G,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAUjG,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AA6FzD,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAc;IACzC,mBAAmB,EAAE,KAAK;IAC1B,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,EAAE;IAChB,qBAAqB,EAAE,EAAE;IACzB,aAAa,EAAE,2BAA2B;IAC1C,cAAc,EAAE,qBAAqB;IACrC,cAAc,EAAE,qBAAqB;IACrC,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,KAAK;CACrB,CAAC;AAEF,oCAAoC;AACpC,MAAM,UAAU,SAAS,CAAC,KAAc;IACpC,OAAO,KAAK,CAAC,SAAsB,CAAC;AACxC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,OAAuB;IAC/C,OAAO,OAAO,CAAC,SAAsB,CAAC;AAC1C,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,eAAe,CAAC,KAA6B,EAAE,MAA0B;IACrF,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9G,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,QA6uBxB,CAAC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,QAg1BxB,CAAC"}
package/dist/styles.js CHANGED
@@ -754,5 +754,104 @@ export const editorStyles = css `
754
754
  border: 1.5px solid #b8860b;
755
755
  will-change: transform;
756
756
  }
757
+
758
+ /* The ruler's controls (ruler-controls.ts), in the layers over its strips:
759
+ each margin's edge, and the indent markers and tab stops of the paragraph a
760
+ caret is in. Each takes its own press, where the layer under them takes
761
+ none; placed along the ruler each frame by left (or top) in CSS px. */
762
+ .udoc-ui-root .udoc-ui__ruler-control {
763
+ position: absolute;
764
+ pointer-events: auto;
765
+ touch-action: none;
766
+ }
767
+ /* A margin's edge: a strip a few px wide to grab, over the line the band's
768
+ canvas draws at rest — with the fills it bounds, so the two meet without a
769
+ seam. While dragged, the strip carries a line of its own down its middle,
770
+ in the same soft outline as the ticks. */
771
+ .udoc-ui-root .udoc-ui__ruler-edge--h {
772
+ top: 0;
773
+ bottom: 0;
774
+ width: 7px;
775
+ cursor: col-resize;
776
+ }
777
+ .udoc-ui-root .udoc-ui__ruler-edge--v {
778
+ left: 0;
779
+ right: 0;
780
+ height: 7px;
781
+ cursor: row-resize;
782
+ }
783
+ .udoc-ui-root .udoc-ui__ruler-edge::after {
784
+ content: "";
785
+ position: absolute;
786
+ background: var(--udoc-color-outline-variant);
787
+ display: none;
788
+ }
789
+ .udoc-ui-root .udoc-ui__ruler-control--dragging::after {
790
+ display: block;
791
+ }
792
+ .udoc-ui-root .udoc-ui__ruler-edge--h::after {
793
+ top: 0;
794
+ bottom: 0;
795
+ left: 3px;
796
+ width: 1px;
797
+ }
798
+ .udoc-ui-root .udoc-ui__ruler-edge--v::after {
799
+ left: 0;
800
+ right: 0;
801
+ top: 3px;
802
+ height: 1px;
803
+ }
804
+ /* The dashed line a drag on a ruler control draws across the content pane
805
+ at it, as Word's does — down from the horizontal ruler, across from the
806
+ vertical — in the outline that reads over a page and the canvas alike. */
807
+ .udoc-ui-root .udoc-ui__ruler-guide {
808
+ position: absolute;
809
+ pointer-events: none;
810
+ }
811
+ .udoc-ui-root .udoc-ui__ruler-guide--h {
812
+ top: 0;
813
+ bottom: 0;
814
+ border-left: 1px dashed var(--udoc-color-outline);
815
+ }
816
+ .udoc-ui-root .udoc-ui__ruler-guide--v {
817
+ left: 0;
818
+ right: 0;
819
+ border-top: 1px dashed var(--udoc-color-outline);
820
+ }
821
+ .udoc-ui-root .udoc-ui__ruler-marker svg {
822
+ display: block;
823
+ overflow: visible;
824
+ }
825
+ /* An indent marker: filled as the text area it stands on, outlined. Its box
826
+ runs the ruler's depth, and takes a press only on the shape, so beside the
827
+ hourglass's narrow waist one reaches the margin's edge under it. */
828
+ .udoc-ui-root .udoc-ui__ruler-marker--indent {
829
+ top: 0;
830
+ pointer-events: none;
831
+ }
832
+ .udoc-ui-root .udoc-ui__ruler-marker--indent path {
833
+ fill: var(--udoc-color-surface-container-highest);
834
+ stroke: var(--udoc-color-outline);
835
+ stroke-width: 1px;
836
+ stroke-linejoin: round;
837
+ pointer-events: visiblePainted;
838
+ }
839
+ /* A tab stop's mark, in the ruler's figures' ink. */
840
+ .udoc-ui-root .udoc-ui__ruler-marker--tab path {
841
+ fill: none;
842
+ stroke: var(--udoc-color-on-surface-variant);
843
+ stroke-width: 1px;
844
+ }
845
+ .udoc-ui-root .udoc-ui__ruler-marker--tab rect {
846
+ fill: var(--udoc-color-on-surface-variant);
847
+ }
848
+ /* A control the open document can't move now — the engine gates its edit
849
+ off, or the selected paragraphs disagree on what it shows: it stands where
850
+ the guide puts it and takes no press. After the indent's path rule, which
851
+ it outranks at the same specificity. */
852
+ .udoc-ui-root .udoc-ui__ruler-control--fixed,
853
+ .udoc-ui-root .udoc-ui__ruler-control--fixed path {
854
+ pointer-events: none;
855
+ }
757
856
  `;
758
857
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mDAAmD;AACnD,EAAE;AACF,uEAAuE;AACvE,+EAA+E;AAC/E,4BAA4B;AAC5B,MAAM,GAAG,GAAG,CAAC,OAA6B,EAAE,GAAG,MAAiB,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6uB9B,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mDAAmD;AACnD,EAAE;AACF,uEAAuE;AACvE,+EAA+E;AAC/E,4BAA4B;AAC5B,MAAM,GAAG,GAAG,CAAC,OAA6B,EAAE,GAAG,MAAiB,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAg1B9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../src/tabs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,uEAAuE;AACvE,MAAM,MAAM,aAAa,GACnB,SAAS,GACT,YAAY,GACZ,UAAU,GACV,MAAM,GACN,QAAQ,GACR,WAAW,GACX,eAAe,GACf,aAAa,GACb,WAAW,GACX,YAAY,GACZ,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,aAAa,CAAC;AAEpB,4BAA4B;AAC5B,KAAK,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AA4JtC,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,OAAO,EAAE,CAWrE"}
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../src/tabs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,uEAAuE;AACvE,MAAM,MAAM,aAAa,GACnB,SAAS,GACT,YAAY,GACZ,UAAU,GACV,MAAM,GACN,QAAQ,GACR,WAAW,GACX,eAAe,GACf,aAAa,GACb,WAAW,GACX,YAAY,GACZ,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,aAAa,CAAC;AAEpB,4BAA4B;AAC5B,KAAK,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AA8JtC,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,OAAO,EAAE,CAWrE"}
package/dist/tabs.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ANNOTATE_TAB } from "@docmentis/udoc-ui/internal";
1
+ import { ANNOTATE_TAB, VIEW_TAB } from "@docmentis/udoc-ui/internal";
2
2
  /**
3
3
  * The text-formatting commands — the character half first (the font family /
4
4
  * size fields, the Bold / Italic / Underline / Strikethrough / Superscript /
@@ -127,12 +127,14 @@ const DEFAULT_TABS = [HOME_TAB];
127
127
  * content objects) and Annotate, but no Text tab. */
128
128
  const PORTABLE_TABS = [PORTABLE_HOME_TAB, PORTABLE_INSERT_TAB, OBJECT_TAB, ANNOTATE_TAB];
129
129
  /** The presentation strip: the slide-aware Home and its own Insert, then Text
130
- * (character formatting) and Shape (free-floating graphics). */
130
+ * (character formatting) and Shape (free-floating graphics), and udoc-ui's
131
+ * View last (the notes pane), as view mode has it. */
131
132
  const PRESENTATION_TABS = [
132
133
  PRESENTATION_HOME_TAB,
133
134
  PRESENTATION_INSERT_TAB,
134
135
  PRESENTATION_TEXT_TAB,
135
136
  SHAPE_TAB,
137
+ VIEW_TAB,
136
138
  ];
137
139
  /** The wordprocessing strip: Home plus Text. No Shape tab yet — the flow
138
140
  * document has no free-floating shapes. */
package/dist/tabs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../src/tabs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../src/tabs.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const WRAPPER_VERSION = "0.8.5";
1
+ export declare const WRAPPER_VERSION = "0.8.7";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -3,5 +3,5 @@
3
3
  // This package's version, reported to the engine as the wrapper version so a
4
4
  // permit request and a usage event can name what produced them. Generated from
5
5
  // package.json, which is the one place a release bumps.
6
- export const WRAPPER_VERSION = "0.8.5";
6
+ export const WRAPPER_VERSION = "0.8.7";
7
7
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/worker/handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,2DAA2D;AAC3D,KAAK,YAAY,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAAE,CAAC;AAE9G,eAAO,MAAM,aAAa,EAAE,YAiI3B,CAAC"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/worker/handlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,2DAA2D;AAC3D,KAAK,YAAY,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAAE,CAAC;AAE9G,eAAO,MAAM,aAAa,EAAE,YAqI3B,CAAC"}
@@ -5,7 +5,7 @@ export const EDIT_HANDLERS = {
5
5
  handle(request, worker) {
6
6
  // Sticky in Rust, like the scroll mode. Only the clip changes, so
7
7
  // a full repaint paints off-page content in (or clips it out).
8
- worker.session?.setOverflowVisible(request.visible);
8
+ worker.session?.setOverflowVisible(worker.viewer, request.visible);
9
9
  worker.scheduleFrame();
10
10
  },
11
11
  },
@@ -13,8 +13,13 @@ export const EDIT_HANDLERS = {
13
13
  sticky: true,
14
14
  handle(request, worker) {
15
15
  // Sticky in Rust, like the backdrop. Only presentations draw
16
- // prompts; a full repaint shows/clears them on the next frame.
17
- worker.session?.setPlaceholderPrompts(request.on);
16
+ // prompts — on every viewer, so empty notes prompt in their pane
17
+ // as an empty placeholder does on the slide; a full repaint
18
+ // shows/clears them on the next frame.
19
+ const session = worker.session;
20
+ if (session)
21
+ for (let v = 0; v < session.viewerCount(); v++)
22
+ session.setPlaceholderPrompts(v, request.on);
18
23
  worker.scheduleFrame();
19
24
  },
20
25
  },
@@ -23,7 +28,7 @@ export const EDIT_HANDLERS = {
23
28
  handle(request, worker) {
24
29
  // Sticky in Rust, like the backdrop; a full repaint shows or
25
30
  // clears the marks on the next frame.
26
- worker.session?.setFormattingMarks(request.on);
31
+ worker.session?.setFormattingMarks(worker.viewer, request.on);
27
32
  worker.scheduleFrame();
28
33
  },
29
34
  },
@@ -32,8 +37,8 @@ export const EDIT_HANDLERS = {
32
37
  // single document theme for a word doc — a pure read. `null` when no
33
38
  // document is open or the doc type carries no theme (PDF / image); the
34
39
  // host then keeps its stand-in.
35
- handle(_request, { session }) {
36
- const json = session?.themePalette();
40
+ handle(_request, { session, viewer }) {
41
+ const json = session?.themePalette(viewer);
37
42
  return json !== undefined ? JSON.parse(json) : null;
38
43
  },
39
44
  },
@@ -80,8 +85,9 @@ export const EDIT_HANDLERS = {
80
85
  // guide, so the host can draw the grip on its own track instead of under
81
86
  // the raw cursor. A pure read, no edit, no repaint; `null` when the
82
87
  // selection offers no such handle.
83
- handle: (request, { session }) => session
84
- ? (session.selectionHandlePreview(request.textWarp, request.index, request.x, request.y) ?? null)
88
+ handle: (request, { session, viewer }) => session
89
+ ? (session.selectionHandlePreview(viewer, request.textWarp, request.index, request.x, request.y) ??
90
+ null)
85
91
  : null,
86
92
  },
87
93
  slideMastersSummary: {
@@ -109,7 +115,7 @@ export const EDIT_HANDLERS = {
109
115
  // already doc-type-tagged (from `copy`), so it crosses as-is. A
110
116
  // committing edit like `execute`: the layout rides back, the
111
117
  // selection re-posts, history updates, repaint.
112
- session.paste(request.fragment);
118
+ session.paste(worker.viewer, request.fragment);
113
119
  return worker.committed(session);
114
120
  },
115
121
  },
@@ -121,7 +127,7 @@ export const EDIT_HANDLERS = {
121
127
  // A committing edit like `execute`: the picture lands on the
122
128
  // current page and is selected, so the layout rides back, the
123
129
  // selection re-posts, history updates, and a repaint redraws.
124
- session.insertImage(new Uint8Array(request.bytes), request.contentType);
130
+ session.insertImage(worker.viewer, new Uint8Array(request.bytes), request.contentType);
125
131
  return worker.committed(session);
126
132
  },
127
133
  },