@docmentis/udoc-editor 0.8.4 → 0.8.6

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruler-controls.js","sourceRoot":"","sources":["../src/ruler-controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Guide, TextTabStop, UDocSelectionProperties, UDocType } from "@docmentis/udoc-wasm";
2
+ import type { SelectionCapabilities, SelectionEdit } from "@docmentis/udoc-ui/internal";
3
+ import type { RulerControl, RulerDrop } from "./ruler-controls.js";
4
+ /** The ruler arm of the engine's guide projection. */
5
+ type RulerGuide = Extract<Guide, {
6
+ type: "ruler";
7
+ }>;
8
+ /** What a ruler drop moves from: the selection's resolved indents and tab
9
+ * stops, and the text insets of the shape it is in, each `null` where the
10
+ * selection holds none or its paragraphs or shapes disagree. */
11
+ export interface SelectionRuler {
12
+ readonly indentLeft: number | null;
13
+ readonly indentRight: number | null;
14
+ readonly indentFirstLine: number | null;
15
+ readonly tabStops: readonly TextTabStop[] | null;
16
+ readonly insetLeft: number | null;
17
+ readonly insetTop: number | null;
18
+ readonly insetRight: number | null;
19
+ readonly insetBottom: number | null;
20
+ }
21
+ /** A selection a ruler drop moves nothing from. */
22
+ export declare const EMPTY_SELECTION_RULER: SelectionRuler;
23
+ /** Project the engine's selection `properties` onto what a ruler drop moves
24
+ * from. The office doc types carry the text and shape reads alike; any other
25
+ * moves nothing. */
26
+ export declare function selectionRuler(properties: UDocSelectionProperties | null): SelectionRuler;
27
+ /** Whether `control` takes a drag on `docType` now — the engine gates the edit
28
+ * it would send, and the selection has the values it moves from. */
29
+ export declare function rulerMovable(control: RulerControl, guide: RulerGuide, docType: UDocType, caps: SelectionCapabilities, ruler: SelectionRuler): boolean;
30
+ /**
31
+ * The selection edit `drop` sends on `docType` — its control moved `by` points
32
+ * along its ruler — or `null` where it means none: an indent or a tab moves
33
+ * the paragraphs' own, a margin edge a Word section's page margin, a shape's
34
+ * text inset or a PDF text box's side.
35
+ */
36
+ export declare function rulerEdit(drop: RulerDrop, guide: RulerGuide, docType: UDocType, ruler: SelectionRuler): SelectionEdit | null;
37
+ export {};
38
+ //# sourceMappingURL=ruler-edits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruler-edits.d.ts","sourceRoot":"","sources":["../src/ruler-edits.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAER,KAAK,EAIL,WAAW,EACX,uBAAuB,EACvB,QAAQ,EACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAA0B,MAAM,qBAAqB,CAAC;AAE3F,sDAAsD;AACtD,KAAK,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEpD;;iEAEiE;AACjE,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,EAAE,cASnC,CAAC;AAOF;;qBAEqB;AACrB,wBAAgB,cAAc,CAAC,UAAU,EAAE,uBAAuB,GAAG,IAAI,GAAG,cAAc,CAmBzF;AASD;qEACqE;AACrE,wBAAgB,YAAY,CACxB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,cAAc,GACtB,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,cAAc,GACtB,aAAa,GAAG,IAAI,CActB"}
@@ -0,0 +1,157 @@
1
+ /** A selection a ruler drop moves nothing from. */
2
+ export const EMPTY_SELECTION_RULER = {
3
+ indentLeft: null,
4
+ indentRight: null,
5
+ indentFirstLine: null,
6
+ tabStops: null,
7
+ insetLeft: null,
8
+ insetTop: null,
9
+ insetRight: null,
10
+ insetBottom: null,
11
+ };
12
+ /** The value `consensus` agrees on, or `null` for none. */
13
+ function agreed(consensus) {
14
+ return typeof consensus === "object" ? consensus.value : null;
15
+ }
16
+ /** Project the engine's selection `properties` onto what a ruler drop moves
17
+ * from. The office doc types carry the text and shape reads alike; any other
18
+ * moves nothing. */
19
+ export function selectionRuler(properties) {
20
+ const common = properties && "presentation" in properties
21
+ ? properties.presentation
22
+ : properties && "wordprocessing" in properties
23
+ ? properties.wordprocessing
24
+ : null;
25
+ if (!common)
26
+ return EMPTY_SELECTION_RULER;
27
+ const { text, shape } = common;
28
+ return {
29
+ indentLeft: agreed(text.indentLeft),
30
+ indentRight: agreed(text.indentRight),
31
+ indentFirstLine: agreed(text.indentFirstLine),
32
+ tabStops: agreed(text.tabStops),
33
+ insetLeft: agreed(shape.insetLeft),
34
+ insetTop: agreed(shape.insetTop),
35
+ insetRight: agreed(shape.insetRight),
36
+ insetBottom: agreed(shape.insetBottom),
37
+ };
38
+ }
39
+ /** The gate a margin edge's edit goes by, for the doc types that take one. */
40
+ const MARGIN_GATES = {
41
+ wordprocessing: "setSectionPageMargins",
42
+ presentation: "setShapeTextBodyProperties",
43
+ portable: "resizeTextBox",
44
+ };
45
+ /** Whether `control` takes a drag on `docType` now — the engine gates the edit
46
+ * it would send, and the selection has the values it moves from. */
47
+ export function rulerMovable(control, guide, docType, caps, ruler) {
48
+ const gate = control.kind === "margin" ? MARGIN_GATES[docType] : "setParagraphProperties";
49
+ return (gate !== undefined &&
50
+ caps.allowed.includes(gate) &&
51
+ rulerEdit({ control, by: 0 }, guide, docType, ruler) !== null);
52
+ }
53
+ /**
54
+ * The selection edit `drop` sends on `docType` — its control moved `by` points
55
+ * along its ruler — or `null` where it means none: an indent or a tab moves
56
+ * the paragraphs' own, a margin edge a Word section's page margin, a shape's
57
+ * text inset or a PDF text box's side.
58
+ */
59
+ export function rulerEdit(drop, guide, docType, ruler) {
60
+ const { control, by } = drop;
61
+ switch (control.kind) {
62
+ case "indent": {
63
+ const properties = indentProperties(control.indent, by, ruler);
64
+ return properties && { kind: "setParagraphProperties", properties };
65
+ }
66
+ case "tab": {
67
+ const stops = movedTabStops(control.index, by, docType, ruler);
68
+ return stops && { kind: "setParagraphProperties", properties: [{ tabStops: stops }] };
69
+ }
70
+ case "margin":
71
+ return marginEdit(control.edge, by, guide, docType, ruler);
72
+ }
73
+ }
74
+ /** The indents a drag of `indent` by `by` sets, as Word's ruler moves them:
75
+ * the first line alone; the hanging indent's lines with the first line
76
+ * staying put; the left indent's box both; the right indent from the right. */
77
+ function indentProperties(indent, by, ruler) {
78
+ const { indentLeft, indentRight, indentFirstLine } = ruler;
79
+ switch (indent) {
80
+ case "firstLine":
81
+ return indentFirstLine === null ? null : [{ indentFirstLine: indentFirstLine + by }];
82
+ case "hanging":
83
+ return indentLeft === null || indentFirstLine === null
84
+ ? null
85
+ : [{ indentLeft: indentLeft + by }, { indentFirstLine: indentFirstLine - by }];
86
+ case "left":
87
+ return indentLeft === null ? null : [{ indentLeft: indentLeft + by }];
88
+ case "right":
89
+ return indentRight === null ? null : [{ indentRight: indentRight - by }];
90
+ }
91
+ }
92
+ /** The paragraphs' tab stops with stop `index` — counted as the ruler shows
93
+ * them, `clear` entries skipped — moved `by`. Word merges a paragraph's stops
94
+ * with its style's, so there a stop moved off a position is cleared at it,
95
+ * which a slide's list, written whole, has no need of. */
96
+ function movedTabStops(index, by, docType, ruler) {
97
+ const { tabStops } = ruler;
98
+ const moved = tabStops?.filter((stop) => stop.alignment !== "clear")[index];
99
+ if (!tabStops || !moved)
100
+ return null;
101
+ const stops = tabStops.map((stop) => (stop === moved ? { ...stop, position: stop.position + by } : stop));
102
+ if (docType === "wordprocessing" && by !== 0 && !stops.some((stop) => stop.position === moved.position)) {
103
+ stops.push({ position: moved.position, alignment: "clear", leader: "none" });
104
+ }
105
+ return stops.sort((a, b) => a.position - b.position);
106
+ }
107
+ /** The insets each margin edge sets. */
108
+ const INSET_KEYS = {
109
+ left: "insetLeft",
110
+ top: "insetTop",
111
+ right: "insetRight",
112
+ bottom: "insetBottom",
113
+ };
114
+ /** The side of a frame each margin edge sets. */
115
+ const FRAME_KEYS = { left: "x0", top: "y0", right: "x1", bottom: "y1" };
116
+ /** The edit moving margin `edge` by `by`: a Word section's page margin, from
117
+ * the page's edge to the text area's; a shape's text inset, from the one it
118
+ * has; a PDF text box's side, the guide's text area moved into page-local
119
+ * points. A PDF box's height follows its lines, so its bottom takes none. */
120
+ function marginEdit(edge, by, guide, docType, ruler) {
121
+ const near = edge === "left" || edge === "top";
122
+ const { page, margins } = edge === "left" || edge === "right" ? guide.horizontal : guide.vertical;
123
+ if (!margins)
124
+ return null;
125
+ switch (docType) {
126
+ case "wordprocessing": {
127
+ const sides = {};
128
+ sides[edge] = near ? margins.start + by - page.start : page.end - (margins.end + by);
129
+ return { kind: "setSectionPageMargins", ...sides };
130
+ }
131
+ case "presentation": {
132
+ const key = INSET_KEYS[edge];
133
+ const inset = ruler[key];
134
+ if (inset === null)
135
+ return null;
136
+ const properties = {};
137
+ properties[key] = inset + (near ? by : -by);
138
+ return { kind: "setShapeTextBodyProperties", properties };
139
+ }
140
+ case "portable": {
141
+ const { horizontal: h, vertical: v } = guide;
142
+ if (edge === "bottom" || !h.margins || !v.margins)
143
+ return null;
144
+ const frame = {
145
+ x0: h.margins.start - h.page.start,
146
+ y0: v.margins.start - v.page.start,
147
+ x1: h.margins.end - h.page.start,
148
+ y1: v.margins.end - v.page.start,
149
+ };
150
+ frame[FRAME_KEYS[edge]] += by;
151
+ return { kind: "object", edit: { kind: "resizeTextBox", frame } };
152
+ }
153
+ default:
154
+ return null;
155
+ }
156
+ }
157
+ //# sourceMappingURL=ruler-edits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruler-edits.js","sourceRoot":"","sources":["../src/ruler-edits.ts"],"names":[],"mappings":"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"}
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"}