@docmentis/udoc-editor 0.8.17 → 0.8.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cell-format.d.ts +30 -0
- package/dist/cell-format.d.ts.map +1 -0
- package/dist/cell-format.js +325 -0
- package/dist/cell-format.js.map +1 -0
- package/dist/commands.js +2 -2
- package/dist/commands.js.map +1 -1
- package/dist/components/TablePropertiesModal.d.ts +12 -0
- package/dist/components/TablePropertiesModal.d.ts.map +1 -0
- package/dist/components/TablePropertiesModal.js +222 -0
- package/dist/components/TablePropertiesModal.js.map +1 -0
- package/dist/context-menu.d.ts +11 -1
- package/dist/context-menu.d.ts.map +1 -1
- package/dist/context-menu.js +87 -7
- package/dist/context-menu.js.map +1 -1
- package/dist/docmentis-theme.d.ts +2 -0
- package/dist/docmentis-theme.d.ts.map +1 -1
- package/dist/docmentis-theme.js +4 -0
- package/dist/docmentis-theme.js.map +1 -1
- package/dist/edit-client.d.ts +28 -1
- package/dist/edit-client.d.ts.map +1 -1
- package/dist/edit-client.js +33 -0
- package/dist/edit-client.js.map +1 -1
- package/dist/edit-mode.d.ts.map +1 -1
- package/dist/edit-mode.js +25 -7
- package/dist/edit-mode.js.map +1 -1
- package/dist/grips.d.ts.map +1 -1
- package/dist/grips.js +173 -10
- package/dist/grips.js.map +1 -1
- package/dist/i18n/ar.d.ts.map +1 -1
- package/dist/i18n/ar.js +82 -7
- package/dist/i18n/ar.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +82 -7
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +82 -7
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +82 -7
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +82 -7
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +86 -11
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +82 -7
- package/dist/i18n/ko.js.map +1 -1
- package/dist/i18n/messages.d.ts +154 -7
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/i18n/pt-BR.d.ts.map +1 -1
- package/dist/i18n/pt-BR.js +82 -7
- package/dist/i18n/pt-BR.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +82 -7
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/zh-CN.d.ts.map +1 -1
- package/dist/i18n/zh-CN.js +86 -11
- package/dist/i18n/zh-CN.js.map +1 -1
- package/dist/i18n/zh-TW.d.ts.map +1 -1
- package/dist/i18n/zh-TW.js +82 -7
- package/dist/i18n/zh-TW.js.map +1 -1
- package/dist/icons.d.ts +50 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +50 -0
- package/dist/icons.js.map +1 -1
- package/dist/image.d.ts +5 -0
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +37 -4
- package/dist/image.js.map +1 -1
- package/dist/insert-table.d.ts +23 -0
- package/dist/insert-table.d.ts.map +1 -0
- package/dist/insert-table.js +135 -0
- package/dist/insert-table.js.map +1 -0
- package/dist/insert.d.ts +4 -1
- package/dist/insert.d.ts.map +1 -1
- package/dist/insert.js +5 -4
- package/dist/insert.js.map +1 -1
- package/dist/markup.d.ts +36 -1
- package/dist/markup.d.ts.map +1 -1
- package/dist/markup.js +175 -0
- package/dist/markup.js.map +1 -1
- package/dist/menu-action.d.ts +15 -3
- package/dist/menu-action.d.ts.map +1 -1
- package/dist/menu-action.js +21 -3
- package/dist/menu-action.js.map +1 -1
- package/dist/paint.d.ts +17 -2
- package/dist/paint.d.ts.map +1 -1
- package/dist/paint.js +11 -2
- package/dist/paint.js.map +1 -1
- package/dist/ruler-edits.js +7 -7
- package/dist/ruler-edits.js.map +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +66 -0
- package/dist/styles.js.map +1 -1
- package/dist/table-edits.d.ts +44 -0
- package/dist/table-edits.d.ts.map +1 -0
- package/dist/table-edits.js +97 -0
- package/dist/table-edits.js.map +1 -0
- package/dist/table-format.d.ts +88 -0
- package/dist/table-format.d.ts.map +1 -0
- package/dist/table-format.js +224 -0
- package/dist/table-format.js.map +1 -0
- package/dist/table-picker.d.ts +14 -0
- package/dist/table-picker.d.ts.map +1 -0
- package/dist/table-picker.js +15 -0
- package/dist/table-picker.js.map +1 -0
- package/dist/table-properties.d.ts +12 -0
- package/dist/table-properties.d.ts.map +1 -0
- package/dist/table-properties.js +27 -0
- package/dist/table-properties.js.map +1 -0
- package/dist/table.d.ts +21 -9
- package/dist/table.d.ts.map +1 -1
- package/dist/table.js +235 -41
- package/dist/table.js.map +1 -1
- package/dist/tabs.d.ts +1 -1
- package/dist/tabs.d.ts.map +1 -1
- package/dist/tabs.js +106 -41
- package/dist/tabs.js.map +1 -1
- package/dist/text-format.d.ts +16 -6
- package/dist/text-format.d.ts.map +1 -1
- package/dist/text-format.js +89 -45
- package/dist/text-format.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/handlers.d.ts.map +1 -1
- package/dist/worker/handlers.js +28 -0
- package/dist/worker/handlers.js.map +1 -1
- package/dist/worker/protocol.d.ts +38 -1
- package/dist/worker/protocol.d.ts.map +1 -1
- package/dist/worker/worker-source.js +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// The Table Properties dialog, opened from the Table tab or a table's context
|
|
2
|
+
// menu: the selected rows' height, the selected columns' width, the cells'
|
|
3
|
+
// margins and, in a word document, whether the rows repeat as a header on each
|
|
4
|
+
// page. A modal — backdrop + centered dialog — on the page-settings dialog's
|
|
5
|
+
// styles.
|
|
6
|
+
//
|
|
7
|
+
// Storeless and imperative: mounted once and reused. `open(seed, onApply)`
|
|
8
|
+
// seeds it with what the selection holds — a field the selection holds several
|
|
9
|
+
// values of opens blank — and OK hands back the values, which the caller turns
|
|
10
|
+
// into the edits of what changed.
|
|
11
|
+
import { ICON_CLEAR, on } from "@docmentis/udoc-ui/internal";
|
|
12
|
+
import { MARGIN_SIDES } from "../table-edits.js";
|
|
13
|
+
/** The largest measure a field takes, in points — 22 inches, past the widest
|
|
14
|
+
* page an Office document lays out. */
|
|
15
|
+
const MAX_POINTS = 1584;
|
|
16
|
+
/** A measure in points in `text`: `null` for a blank field (no change), `NaN`
|
|
17
|
+
* for one that isn't a measure in range. A height or a width must be more
|
|
18
|
+
* than nothing; a margin may be none. */
|
|
19
|
+
function parsePoints(text, min) {
|
|
20
|
+
const trimmed = text.trim();
|
|
21
|
+
if (trimmed === "")
|
|
22
|
+
return null;
|
|
23
|
+
const n = Number(trimmed.replace(",", "."));
|
|
24
|
+
const inRange = Number.isFinite(n) && n <= MAX_POINTS && (min === "zero" ? n >= 0 : n > 0);
|
|
25
|
+
return inRange ? n : Number.NaN;
|
|
26
|
+
}
|
|
27
|
+
/** A measure as a field shows it: up to two decimals, no trailing zeros. */
|
|
28
|
+
function formatPoints(value) {
|
|
29
|
+
return value === null ? "" : String(Math.round(value * 100) / 100);
|
|
30
|
+
}
|
|
31
|
+
function labeledField(labelText) {
|
|
32
|
+
const field = document.createElement("label");
|
|
33
|
+
field.className = "udoc-page-modal__field";
|
|
34
|
+
const label = document.createElement("span");
|
|
35
|
+
label.className = "udoc-page-modal__field-label";
|
|
36
|
+
label.textContent = labelText;
|
|
37
|
+
const input = document.createElement("input");
|
|
38
|
+
input.type = "text";
|
|
39
|
+
input.inputMode = "decimal";
|
|
40
|
+
input.className = "udoc-page-modal__input";
|
|
41
|
+
field.append(label, input);
|
|
42
|
+
return { field, input };
|
|
43
|
+
}
|
|
44
|
+
/** A titled row of fields, the unit after them. */
|
|
45
|
+
function section(title, fields, unit) {
|
|
46
|
+
const row = document.createElement("div");
|
|
47
|
+
row.className = "udoc-page-modal__row";
|
|
48
|
+
const heading = document.createElement("span");
|
|
49
|
+
heading.className = "udoc-page-modal__field-label";
|
|
50
|
+
heading.textContent = title;
|
|
51
|
+
const dims = document.createElement("div");
|
|
52
|
+
dims.className = "udoc-page-modal__dims";
|
|
53
|
+
const unitLabel = document.createElement("span");
|
|
54
|
+
unitLabel.className = "udoc-page-modal__unit-label";
|
|
55
|
+
unitLabel.textContent = unit;
|
|
56
|
+
dims.append(...fields, unitLabel);
|
|
57
|
+
row.append(heading, dims);
|
|
58
|
+
return row;
|
|
59
|
+
}
|
|
60
|
+
const SIDE_LABELS = {
|
|
61
|
+
top: "table.marginTop",
|
|
62
|
+
bottom: "table.marginBottom",
|
|
63
|
+
left: "table.marginLeft",
|
|
64
|
+
right: "table.marginRight",
|
|
65
|
+
};
|
|
66
|
+
/** Build the Table Properties dialog, mounted once and re-seeded by `open`. */
|
|
67
|
+
export function createTablePropertiesModal(i18n) {
|
|
68
|
+
const title = i18n.t("table.properties");
|
|
69
|
+
const points = i18n.t("pageSettings.points");
|
|
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
|
+
dialog.setAttribute("aria-label", title);
|
|
80
|
+
// --- header ---
|
|
81
|
+
const header = document.createElement("div");
|
|
82
|
+
header.className = "udoc-page-modal__header";
|
|
83
|
+
const heading = document.createElement("h2");
|
|
84
|
+
heading.className = "udoc-page-modal__heading";
|
|
85
|
+
heading.textContent = title;
|
|
86
|
+
const closeBtn = document.createElement("button");
|
|
87
|
+
closeBtn.type = "button";
|
|
88
|
+
closeBtn.className = "udoc-page-modal__close";
|
|
89
|
+
closeBtn.setAttribute("aria-label", i18n.t("common.close"));
|
|
90
|
+
closeBtn.title = i18n.t("common.close");
|
|
91
|
+
closeBtn.innerHTML = ICON_CLEAR;
|
|
92
|
+
header.append(heading, closeBtn);
|
|
93
|
+
// --- body ---
|
|
94
|
+
const body = document.createElement("div");
|
|
95
|
+
body.className = "udoc-page-modal__body";
|
|
96
|
+
const height = labeledField(i18n.t("table.rowHeight"));
|
|
97
|
+
const width = labeledField(i18n.t("table.columnWidth"));
|
|
98
|
+
const margins = Object.fromEntries(MARGIN_SIDES.map((side) => [side, labeledField(i18n.t(SIDE_LABELS[side]))]));
|
|
99
|
+
const repeat = document.createElement("label");
|
|
100
|
+
repeat.className = "udoc-page-modal__check";
|
|
101
|
+
const repeatInput = document.createElement("input");
|
|
102
|
+
repeatInput.type = "checkbox";
|
|
103
|
+
const repeatLabel = document.createElement("span");
|
|
104
|
+
repeatLabel.textContent = i18n.t("table.repeatHeaderRow");
|
|
105
|
+
repeat.append(repeatInput, repeatLabel);
|
|
106
|
+
body.append(section(i18n.t("table.size"), [height.field, width.field], points), section(i18n.t("table.cellMargins"), MARGIN_SIDES.map((side) => margins[side].field), points), repeat);
|
|
107
|
+
// --- footer ---
|
|
108
|
+
const footer = document.createElement("div");
|
|
109
|
+
footer.className = "udoc-page-modal__footer";
|
|
110
|
+
const okBtn = document.createElement("button");
|
|
111
|
+
okBtn.type = "button";
|
|
112
|
+
okBtn.className = "udoc-page-modal__apply";
|
|
113
|
+
okBtn.textContent = i18n.t("common.ok");
|
|
114
|
+
footer.append(okBtn);
|
|
115
|
+
dialog.append(header, body, footer);
|
|
116
|
+
el.append(backdrop, dialog);
|
|
117
|
+
// --- state ---
|
|
118
|
+
let onApply = null;
|
|
119
|
+
let isOpen = false;
|
|
120
|
+
const unsubEvents = [];
|
|
121
|
+
// The checkbox's own value is on / off; `mixed` is the selection's rows
|
|
122
|
+
// disagreeing, until the box is clicked and says one.
|
|
123
|
+
let headerMixed = false;
|
|
124
|
+
on(repeatInput, "change", () => {
|
|
125
|
+
headerMixed = false;
|
|
126
|
+
repeatInput.indeterminate = false;
|
|
127
|
+
});
|
|
128
|
+
/** The form's values, or `null` while a field holds what isn't a measure —
|
|
129
|
+
* that field marked invalid, the dialog left open. */
|
|
130
|
+
function read() {
|
|
131
|
+
const fields = [];
|
|
132
|
+
const measure = (input, min) => {
|
|
133
|
+
const value = parsePoints(input.value, min);
|
|
134
|
+
fields.push([input, value]);
|
|
135
|
+
return value;
|
|
136
|
+
};
|
|
137
|
+
const values = {
|
|
138
|
+
rowHeight: measure(height.input, "positive"),
|
|
139
|
+
columnWidth: measure(width.input, "positive"),
|
|
140
|
+
margins: {
|
|
141
|
+
top: measure(margins.top.input, "zero"),
|
|
142
|
+
bottom: measure(margins.bottom.input, "zero"),
|
|
143
|
+
left: measure(margins.left.input, "zero"),
|
|
144
|
+
right: measure(margins.right.input, "zero"),
|
|
145
|
+
},
|
|
146
|
+
header: headerMixed ? null : repeatInput.checked,
|
|
147
|
+
};
|
|
148
|
+
let valid = true;
|
|
149
|
+
for (const [input, value] of fields) {
|
|
150
|
+
const bad = value !== null && Number.isNaN(value);
|
|
151
|
+
input.setAttribute("aria-invalid", String(bad));
|
|
152
|
+
if (bad && valid) {
|
|
153
|
+
valid = false;
|
|
154
|
+
input.focus();
|
|
155
|
+
input.select();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return valid ? values : null;
|
|
159
|
+
}
|
|
160
|
+
function apply() {
|
|
161
|
+
const values = read();
|
|
162
|
+
if (!values)
|
|
163
|
+
return;
|
|
164
|
+
const done = onApply;
|
|
165
|
+
close();
|
|
166
|
+
done?.(values);
|
|
167
|
+
}
|
|
168
|
+
on(okBtn, "click", apply);
|
|
169
|
+
for (const input of [height.input, width.input, ...MARGIN_SIDES.map((side) => margins[side].input)]) {
|
|
170
|
+
on(input, "keydown", (e) => {
|
|
171
|
+
if (e.key === "Enter") {
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
apply();
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
on(closeBtn, "click", () => close());
|
|
178
|
+
on(backdrop, "click", () => close());
|
|
179
|
+
function open(seed, apply) {
|
|
180
|
+
onApply = apply;
|
|
181
|
+
const { values } = seed;
|
|
182
|
+
height.input.value = formatPoints(values.rowHeight);
|
|
183
|
+
width.input.value = formatPoints(values.columnWidth);
|
|
184
|
+
for (const side of MARGIN_SIDES)
|
|
185
|
+
margins[side].input.value = formatPoints(values.margins[side]);
|
|
186
|
+
for (const input of el.querySelectorAll("input"))
|
|
187
|
+
input.removeAttribute("aria-invalid");
|
|
188
|
+
repeat.style.display = seed.showHeader ? "" : "none";
|
|
189
|
+
headerMixed = values.header === null;
|
|
190
|
+
repeatInput.checked = values.header === true;
|
|
191
|
+
repeatInput.indeterminate = headerMixed;
|
|
192
|
+
isOpen = true;
|
|
193
|
+
el.style.display = "";
|
|
194
|
+
height.input.focus();
|
|
195
|
+
height.input.select();
|
|
196
|
+
}
|
|
197
|
+
function close() {
|
|
198
|
+
if (!isOpen)
|
|
199
|
+
return;
|
|
200
|
+
isOpen = false;
|
|
201
|
+
onApply = null;
|
|
202
|
+
el.style.display = "none";
|
|
203
|
+
}
|
|
204
|
+
function mount(parent) {
|
|
205
|
+
parent.appendChild(el);
|
|
206
|
+
const onKeydown = (e) => {
|
|
207
|
+
if (isOpen && e.key === "Escape") {
|
|
208
|
+
e.stopPropagation();
|
|
209
|
+
close();
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
document.addEventListener("keydown", onKeydown);
|
|
213
|
+
unsubEvents.push(() => document.removeEventListener("keydown", onKeydown));
|
|
214
|
+
}
|
|
215
|
+
function destroy() {
|
|
216
|
+
for (const off of unsubEvents)
|
|
217
|
+
off();
|
|
218
|
+
el.remove();
|
|
219
|
+
}
|
|
220
|
+
return { el, mount, open, close, destroy };
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=TablePropertiesModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablePropertiesModal.js","sourceRoot":"","sources":["../../src/components/TablePropertiesModal.ts"],"names":[],"mappings":"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"}
|
package/dist/context-menu.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export type ClipboardOp = "cut" | "paste";
|
|
|
13
13
|
*
|
|
14
14
|
* Cut and Copy gate on the engine's `copyable` verdict (Cut additionally on a
|
|
15
15
|
* delete kind — cut is copy-then-delete, so a copyable-but-locked object is only
|
|
16
|
-
* copied).
|
|
16
|
+
* copied). Delete is left out where it can't run, as over a workbook's cells,
|
|
17
|
+
* rather than shown greyed. Paste needs a document, not a selection: it reads the system
|
|
17
18
|
* clipboard, which may hold something to paste even when nothing is selected.
|
|
18
19
|
*
|
|
19
20
|
* Paste pastes the object, not merely its text: the copy path carries the
|
|
@@ -23,6 +24,15 @@ export type ClipboardOp = "cut" | "paste";
|
|
|
23
24
|
* with its own paste-confirmation UI.
|
|
24
25
|
*/
|
|
25
26
|
export declare const CONTEXT_MENU: readonly MenuItem<MessageKey>[];
|
|
27
|
+
/**
|
|
28
|
+
* The context menu as it reads over a **workbook's grid** or its headers — the
|
|
29
|
+
* rows above plus Select, Insert and Delete fly-outs, as a table's read: the
|
|
30
|
+
* selection widened to whole rows or columns or the whole sheet, rows above or
|
|
31
|
+
* below it and columns left or right of it, as many as it spans, and its rows
|
|
32
|
+
* or columns deleted. Whole columns offer the column rows, whole rows the row
|
|
33
|
+
* rows.
|
|
34
|
+
*/
|
|
35
|
+
export declare const GRID_CONTEXT_MENU: readonly MenuItem<MessageKey>[];
|
|
26
36
|
/**
|
|
27
37
|
* The context menu as it reads over a **table** — the rows above plus the
|
|
28
38
|
* Select fly-out that widens the pick to whole rows, whole columns, or the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../src/context-menu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../src/context-menu.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAsBlD;8CAC8C;AAC9C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC;AAa1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,QAAQ,CAAC,UAAU,CAAC,EAsBvD,CAAC;AAoBF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,QAAQ,CAAC,UAAU,CAAC,EAgD5D,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,QAAQ,CAAC,UAAU,CAAC,EAoC7D,CAAC"}
|
package/dist/context-menu.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
// Edit mode's canvas context menu rows: the clipboard and Delete over any
|
|
2
|
-
// selection,
|
|
3
|
-
//
|
|
2
|
+
// selection, over a table the Select, Insert, Delete, Merge and Table
|
|
3
|
+
// Properties rows, and over a workbook's grid the Insert and Delete of its rows
|
|
4
|
+
// and columns. The shell opens the menu (`UIExtension.contextMenuItems`).
|
|
4
5
|
import { allowsEdit, COPY_MENU_ITEM, ICON_DELETE, ICON_TOOL_POINTER } from "@docmentis/udoc-ui/internal";
|
|
5
|
-
import { ICON_CUT, ICON_INSERT_ROW_BELOW, ICON_MERGE_CELLS, ICON_PASTE } from "./icons.js";
|
|
6
|
+
import { ICON_CUT, ICON_INSERT_COLUMN_LEFT, ICON_INSERT_COLUMN_RIGHT, ICON_INSERT_ROW_ABOVE, ICON_INSERT_ROW_BELOW, ICON_MERGE_CELLS, ICON_PASTE, ICON_TABLE_PROPERTIES, } from "./icons.js";
|
|
6
7
|
import { editAction } from "./menu-action.js";
|
|
7
|
-
import { ICON_DELETE_ROWS, ICON_UNMERGE_CELLS, TABLE_DELETE_MENU, TABLE_INSERT_MENU, TABLE_SELECT_MENU, whenTableEdit, } from "./table.js";
|
|
8
|
+
import { ICON_DELETE_COLUMNS, ICON_DELETE_ROWS, ICON_UNMERGE_CELLS, TABLE_DELETE_MENU, TABLE_INSERT_MENU, TABLE_SELECT_MENU, whenTableEdit, } from "./table.js";
|
|
8
9
|
/** Enabled whenever a document is open — the rows that act on the document at
|
|
9
10
|
* large rather than on the selection. */
|
|
10
11
|
const whenReady = (c) => c.ready;
|
|
12
|
+
/** Whether the selection deletes — objects, annotations or shapes. */
|
|
13
|
+
const whenDeletes = (c) => allowsEdit(c.selection, "deleteObjects", "deleteAnnotations", "deleteShapes");
|
|
14
|
+
/** Whether the selection cuts: copies, and deletes objects or shapes — a
|
|
15
|
+
* copyable but locked object is only copied. */
|
|
16
|
+
const whenCuts = (c) => c.selection.copyable && allowsEdit(c.selection, "deleteObjects", "deleteShapes");
|
|
11
17
|
/**
|
|
12
18
|
* The canvas context menu in edit mode — what a right-click offers for the
|
|
13
19
|
* current selection: the shell's Copy row among edit mode's own. These are
|
|
@@ -18,7 +24,8 @@ const whenReady = (c) => c.ready;
|
|
|
18
24
|
*
|
|
19
25
|
* Cut and Copy gate on the engine's `copyable` verdict (Cut additionally on a
|
|
20
26
|
* delete kind — cut is copy-then-delete, so a copyable-but-locked object is only
|
|
21
|
-
* copied).
|
|
27
|
+
* copied). Delete is left out where it can't run, as over a workbook's cells,
|
|
28
|
+
* rather than shown greyed. Paste needs a document, not a selection: it reads the system
|
|
22
29
|
* clipboard, which may hold something to paste even when nothing is selected.
|
|
23
30
|
*
|
|
24
31
|
* Paste pastes the object, not merely its text: the copy path carries the
|
|
@@ -32,7 +39,7 @@ export const CONTEXT_MENU = [
|
|
|
32
39
|
action: editAction({ kind: "clipboard", op: "cut" }),
|
|
33
40
|
label: "contextMenu.cut",
|
|
34
41
|
icon: ICON_CUT,
|
|
35
|
-
enabledWhen:
|
|
42
|
+
enabledWhen: whenCuts,
|
|
36
43
|
},
|
|
37
44
|
COPY_MENU_ITEM,
|
|
38
45
|
{
|
|
@@ -45,10 +52,74 @@ export const CONTEXT_MENU = [
|
|
|
45
52
|
action: editAction({ kind: "delete" }),
|
|
46
53
|
label: "contextMenu.delete",
|
|
47
54
|
icon: ICON_DELETE,
|
|
48
|
-
enabledWhen:
|
|
55
|
+
enabledWhen: whenDeletes,
|
|
56
|
+
shownWhen: whenDeletes,
|
|
49
57
|
separatorBefore: true,
|
|
50
58
|
},
|
|
51
59
|
];
|
|
60
|
+
/** A workbook's grid edit of its rows or columns, as a menu row runs it,
|
|
61
|
+
* gated on its kind. */
|
|
62
|
+
function sheetTrackRow(edit, label, icon) {
|
|
63
|
+
return {
|
|
64
|
+
action: { kind: "selectionEdit", edit },
|
|
65
|
+
label,
|
|
66
|
+
icon,
|
|
67
|
+
enabledWhen: (c) => allowsEdit(c.selection, edit.kind),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The context menu as it reads over a **workbook's grid** or its headers — the
|
|
72
|
+
* rows above plus Select, Insert and Delete fly-outs, as a table's read: the
|
|
73
|
+
* selection widened to whole rows or columns or the whole sheet, rows above or
|
|
74
|
+
* below it and columns left or right of it, as many as it spans, and its rows
|
|
75
|
+
* or columns deleted. Whole columns offer the column rows, whole rows the row
|
|
76
|
+
* rows.
|
|
77
|
+
*/
|
|
78
|
+
export const GRID_CONTEXT_MENU = [
|
|
79
|
+
...CONTEXT_MENU,
|
|
80
|
+
{
|
|
81
|
+
submenu: [
|
|
82
|
+
{ action: editAction({ kind: "selectSheet", scope: "rows" }), label: "table.row", enabledWhen: whenReady },
|
|
83
|
+
{
|
|
84
|
+
action: editAction({ kind: "selectSheet", scope: "columns" }),
|
|
85
|
+
label: "table.column",
|
|
86
|
+
enabledWhen: whenReady,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
action: editAction({ kind: "selectSheet", scope: "sheet" }),
|
|
90
|
+
label: "grid.sheet",
|
|
91
|
+
enabledWhen: whenReady,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
label: "table.select",
|
|
95
|
+
icon: ICON_TOOL_POINTER,
|
|
96
|
+
enabledWhen: whenReady,
|
|
97
|
+
separatorBefore: true,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
submenu: [
|
|
101
|
+
sheetTrackRow({ kind: "insertSheetRows", before: true }, "table.rowAbove", ICON_INSERT_ROW_ABOVE),
|
|
102
|
+
sheetTrackRow({ kind: "insertSheetRows", before: false }, "table.rowBelow", ICON_INSERT_ROW_BELOW),
|
|
103
|
+
{
|
|
104
|
+
...sheetTrackRow({ kind: "insertSheetColumns", before: true }, "table.columnLeft", ICON_INSERT_COLUMN_LEFT),
|
|
105
|
+
separatorBefore: true,
|
|
106
|
+
},
|
|
107
|
+
sheetTrackRow({ kind: "insertSheetColumns", before: false }, "table.columnRight", ICON_INSERT_COLUMN_RIGHT),
|
|
108
|
+
],
|
|
109
|
+
label: "table.insert",
|
|
110
|
+
icon: ICON_INSERT_ROW_BELOW,
|
|
111
|
+
enabledWhen: (c) => allowsEdit(c.selection, "insertSheetRows", "insertSheetColumns"),
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
submenu: [
|
|
115
|
+
sheetTrackRow({ kind: "deleteSheetRows" }, "table.rows", ICON_DELETE_ROWS),
|
|
116
|
+
sheetTrackRow({ kind: "deleteSheetColumns" }, "table.columns", ICON_DELETE_COLUMNS),
|
|
117
|
+
],
|
|
118
|
+
label: "table.delete",
|
|
119
|
+
icon: ICON_DELETE_ROWS,
|
|
120
|
+
enabledWhen: (c) => allowsEdit(c.selection, "deleteSheetRows", "deleteSheetColumns"),
|
|
121
|
+
},
|
|
122
|
+
];
|
|
52
123
|
/**
|
|
53
124
|
* The context menu as it reads over a **table** — the rows above plus the
|
|
54
125
|
* Select fly-out that widens the pick to whole rows, whole columns, or the
|
|
@@ -90,5 +161,14 @@ export const TABLE_CONTEXT_MENU = [
|
|
|
90
161
|
icon: ICON_UNMERGE_CELLS,
|
|
91
162
|
enabledWhen: whenTableEdit("unmergeCells"),
|
|
92
163
|
},
|
|
164
|
+
// The dialog holding the measures — the rows' height, the columns' width,
|
|
165
|
+
// the cells' margins — as the Table tab's last button opens it.
|
|
166
|
+
{
|
|
167
|
+
action: editAction({ kind: "tableProperties" }),
|
|
168
|
+
label: "table.properties",
|
|
169
|
+
icon: ICON_TABLE_PROPERTIES,
|
|
170
|
+
enabledWhen: whenReady,
|
|
171
|
+
separatorBefore: true,
|
|
172
|
+
},
|
|
93
173
|
];
|
|
94
174
|
//# sourceMappingURL=context-menu.js.map
|
package/dist/context-menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../src/context-menu.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../src/context-menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare const DOCMENTIS_FILL = "#e0e7ff";
|
|
2
2
|
export declare const DOCMENTIS_LINE = "#4f46e5";
|
|
3
3
|
export declare const DOCMENTIS_ON_FILL = "#3730a3";
|
|
4
|
+
export declare const DOCMENTIS_FILL_PALE = "#eef2ff";
|
|
5
|
+
export declare const DOCMENTIS_ON_LINE = "#ffffff";
|
|
4
6
|
//# sourceMappingURL=docmentis-theme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docmentis-theme.d.ts","sourceRoot":"","sources":["../src/docmentis-theme.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,iBAAiB,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"docmentis-theme.d.ts","sourceRoot":"","sources":["../src/docmentis-theme.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAI3C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,iBAAiB,YAAY,CAAC"}
|
package/dist/docmentis-theme.js
CHANGED
|
@@ -3,4 +3,8 @@
|
|
|
3
3
|
export const DOCMENTIS_FILL = "#e0e7ff";
|
|
4
4
|
export const DOCMENTIS_LINE = "#4f46e5";
|
|
5
5
|
export const DOCMENTIS_ON_FILL = "#3730a3";
|
|
6
|
+
// A table's, beside those: its body a step paler than the fill its banded rows
|
|
7
|
+
// take, and white for the text on its indigo header and the rules between cells.
|
|
8
|
+
export const DOCMENTIS_FILL_PALE = "#eef2ff";
|
|
9
|
+
export const DOCMENTIS_ON_LINE = "#ffffff";
|
|
6
10
|
//# sourceMappingURL=docmentis-theme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docmentis-theme.js","sourceRoot":"","sources":["../src/docmentis-theme.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"docmentis-theme.js","sourceRoot":"","sources":["../src/docmentis-theme.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,+EAA+E;AAC/E,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC"}
|
package/dist/edit-client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FontFamily, FontFamilySummary, ParagraphStyleSummary, ShapeNode, ShapePreview, UDocFragment } from "@docmentis/udoc-wasm";
|
|
2
2
|
import type { DocumentLayout } from "@docmentis/udoc-ui";
|
|
3
|
-
import type { SelectionHandle, ThemePalette, UIShellHost, WorkerClient } from "@docmentis/udoc-ui/internal";
|
|
3
|
+
import type { SelectionBox, SelectionHandle, ThemePalette, UIShellHost, WorkerClient } from "@docmentis/udoc-ui/internal";
|
|
4
4
|
import type { FontPreviewImage } from "./worker/protocol.js";
|
|
5
5
|
/** Edit mode's requests of the render worker, over the shell's client. */
|
|
6
6
|
export declare class EditClient {
|
|
@@ -96,6 +96,14 @@ export declare class EditClient {
|
|
|
96
96
|
* follows via the client's `onSelection`.
|
|
97
97
|
*/
|
|
98
98
|
insertImage(bytes: Uint8Array, contentType: string): Promise<DocumentLayout>;
|
|
99
|
+
/**
|
|
100
|
+
* Insert a table of `rows` × `columns` and put the caret in its first cell
|
|
101
|
+
* — on a deck centred on the current slide, in a word document at the
|
|
102
|
+
* caret in a section's body, splitting the paragraph there. A committing
|
|
103
|
+
* edit (one undo step), so it resolves with the document's new layout; the
|
|
104
|
+
* selection follows via the client's `onSelection`.
|
|
105
|
+
*/
|
|
106
|
+
insertTable(rows: number, columns: number): Promise<DocumentLayout>;
|
|
99
107
|
/**
|
|
100
108
|
* Where handle `index` of the selection lands if dragged to `(x, y)` — the
|
|
101
109
|
* shape's text warp's handle when `textWarp`, as the streamed handle says,
|
|
@@ -118,6 +126,25 @@ export declare class EditClient {
|
|
|
118
126
|
* type whose pages take no shape nodes, or a page that isn't there.
|
|
119
127
|
*/
|
|
120
128
|
shapePreview(page: number, node: ShapeNode): Promise<ShapePreview | null>;
|
|
129
|
+
/**
|
|
130
|
+
* Where the anchor of the floating drawing selected in a word document would
|
|
131
|
+
* stand if it were dropped at CSS-px point `(x, y)` of the viewport: beside
|
|
132
|
+
* the paragraph nearest the point, a box on its page, as
|
|
133
|
+
* {@link moveObjectAnchor} would put it. What a live drag of the anchor
|
|
134
|
+
* draws, with nothing written until it ends. Cheap enough to call per
|
|
135
|
+
* pointer-move; the caller coalesces it latest-wins. Resolves `null` where
|
|
136
|
+
* the selection is not one floating drawing picked whole, its anchor is
|
|
137
|
+
* locked, or the point lands on no paragraph.
|
|
138
|
+
*/
|
|
139
|
+
objectAnchorPreview(x: number, y: number): Promise<SelectionBox | null>;
|
|
140
|
+
/**
|
|
141
|
+
* Move the anchor of the floating drawing selected in a word document onto
|
|
142
|
+
* the paragraph nearest CSS-px point `(x, y)` of the viewport — to that
|
|
143
|
+
* paragraph's start, as Word does — keeping the drawing where it stands on
|
|
144
|
+
* the page. A committing edit (one undo step), so it resolves with the
|
|
145
|
+
* document's new layout; the drawing stays selected.
|
|
146
|
+
*/
|
|
147
|
+
moveObjectAnchor(x: number, y: number): Promise<DocumentLayout>;
|
|
121
148
|
/** The id of the deck's slide at `index` (0-based), or `null` past the last
|
|
122
149
|
* slide or with no presentation open — what a shape placed on it names
|
|
123
150
|
* its slide by. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-client.d.ts","sourceRoot":"","sources":["../src/edit-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,YAAY,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"edit-client.d.ts","sourceRoot":"","sources":["../src/edit-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,YAAY,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EACR,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,0EAA0E;AAC1E,qBAAa,UAAU;;gBAGP,MAAM,EAAE,YAAY;IAehC;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI1C;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAIxC;;;;;OAKG;IACH,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAI5C;;;;;;;;;;;OAWG;IACH,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAInD;;;;;;;;OAQG;IACH,uBAAuB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAI3D;;;;;;;;OAQG;IACH,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI1C;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIrC;;;;;;;OAOG;IACH,iBAAiB,CACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAWnC;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAItD;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAM5E;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAInE;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI/G;;;;;;OAMG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIzE;;;;;;;;;OASG;IACH,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIvE;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAI/D;;wBAEoB;IACpB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGjD;AAED,mFAAmF;AACnF,MAAM,WAAW,QAAS,SAAQ,WAAW;IACzC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC7B"}
|
package/dist/edit-client.js
CHANGED
|
@@ -129,6 +129,16 @@ export class EditClient {
|
|
|
129
129
|
const buffer = bytes.slice().buffer;
|
|
130
130
|
return this.#request({ type: "insertImage", bytes: buffer, contentType }, { transfer: [buffer] });
|
|
131
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Insert a table of `rows` × `columns` and put the caret in its first cell
|
|
134
|
+
* — on a deck centred on the current slide, in a word document at the
|
|
135
|
+
* caret in a section's body, splitting the paragraph there. A committing
|
|
136
|
+
* edit (one undo step), so it resolves with the document's new layout; the
|
|
137
|
+
* selection follows via the client's `onSelection`.
|
|
138
|
+
*/
|
|
139
|
+
insertTable(rows, columns) {
|
|
140
|
+
return this.#request({ type: "insertTable", rows, columns });
|
|
141
|
+
}
|
|
132
142
|
/**
|
|
133
143
|
* Where handle `index` of the selection lands if dragged to `(x, y)` — the
|
|
134
144
|
* shape's text warp's handle when `textWarp`, as the streamed handle says,
|
|
@@ -155,6 +165,29 @@ export class EditClient {
|
|
|
155
165
|
shapePreview(page, node) {
|
|
156
166
|
return this.#request({ type: "shapePreview", page, node });
|
|
157
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Where the anchor of the floating drawing selected in a word document would
|
|
170
|
+
* stand if it were dropped at CSS-px point `(x, y)` of the viewport: beside
|
|
171
|
+
* the paragraph nearest the point, a box on its page, as
|
|
172
|
+
* {@link moveObjectAnchor} would put it. What a live drag of the anchor
|
|
173
|
+
* draws, with nothing written until it ends. Cheap enough to call per
|
|
174
|
+
* pointer-move; the caller coalesces it latest-wins. Resolves `null` where
|
|
175
|
+
* the selection is not one floating drawing picked whole, its anchor is
|
|
176
|
+
* locked, or the point lands on no paragraph.
|
|
177
|
+
*/
|
|
178
|
+
objectAnchorPreview(x, y) {
|
|
179
|
+
return this.#request({ type: "objectAnchorPreview", x, y });
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Move the anchor of the floating drawing selected in a word document onto
|
|
183
|
+
* the paragraph nearest CSS-px point `(x, y)` of the viewport — to that
|
|
184
|
+
* paragraph's start, as Word does — keeping the drawing where it stands on
|
|
185
|
+
* the page. A committing edit (one undo step), so it resolves with the
|
|
186
|
+
* document's new layout; the drawing stays selected.
|
|
187
|
+
*/
|
|
188
|
+
moveObjectAnchor(x, y) {
|
|
189
|
+
return this.#request({ type: "moveObjectAnchor", x, y });
|
|
190
|
+
}
|
|
158
191
|
/** The id of the deck's slide at `index` (0-based), or `null` past the last
|
|
159
192
|
* slide or with no presentation open — what a shape placed on it names
|
|
160
193
|
* its slide by. */
|
package/dist/edit-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-client.js","sourceRoot":"","sources":["../src/edit-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"edit-client.js","sourceRoot":"","sources":["../src/edit-client.ts"],"names":[],"mappings":"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"}
|
package/dist/edit-mode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-mode.d.ts","sourceRoot":"","sources":["../src/edit-mode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"edit-mode.d.ts","sourceRoot":"","sources":["../src/edit-mode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAuBrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAc5C,6FAA6F;AAC7F,MAAM,WAAW,QAAS,SAAQ,WAAW;IACzC,kEAAkE;IAClE,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,wDAAwD;IACxD,WAAW,IAAI,UAAU,CAAC;IAC1B,kDAAkD;IAClD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,uEAAuE;IACvE,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AA0JD,4CAA4C;AAC5C,wBAAgB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,QAAQ,CAwI7D"}
|