@w100n/documents 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SheetView-43MPR64N.css → SheetView-GBGCZMYL.css} +22 -1
- package/dist/{SheetView-43MPR64N.css.map → SheetView-GBGCZMYL.css.map} +1 -1
- package/dist/{SheetView-PUSRW7W2.js → SheetView-Q6K3UGVP.js} +69 -24
- package/dist/SheetView-Q6K3UGVP.js.map +1 -0
- package/dist/{TextEditor-Z4KSBLBV.js → TextEditor-NDWZUYDA.js} +23 -7
- package/dist/TextEditor-NDWZUYDA.js.map +1 -0
- package/dist/{chunk-JSJEB2CO.js → chunk-2JGDV5HG.js} +30 -2
- package/dist/chunk-2JGDV5HG.js.map +1 -0
- package/dist/{chunk-ZQYSBWLK.js → chunk-KIKKIOW6.js} +48 -3
- package/dist/chunk-KIKKIOW6.js.map +1 -0
- package/dist/collab.cjs +33 -3
- package/dist/collab.cjs.map +1 -1
- package/dist/collab.d.cts +6 -1
- package/dist/collab.d.ts +6 -1
- package/dist/collab.js +7 -3
- package/dist/{grid-IR5YFFSF.js → grid-FUHH7UHO.js} +28 -3
- package/dist/grid-FUHH7UHO.js.map +1 -0
- package/dist/index.cjs +1168 -1013
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +168 -12
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +17 -2
- package/dist/index.d.ts +17 -2
- package/dist/index.js +45 -33
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/SheetView-PUSRW7W2.js.map +0 -1
- package/dist/TextEditor-Z4KSBLBV.js.map +0 -1
- package/dist/chunk-JSJEB2CO.js.map +0 -1
- package/dist/chunk-ZQYSBWLK.js.map +0 -1
- package/dist/grid-IR5YFFSF.js.map +0 -1
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
pending,
|
|
6
6
|
save,
|
|
7
7
|
seed
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2JGDV5HG.js";
|
|
9
9
|
|
|
10
10
|
// src/editor/live.ts
|
|
11
11
|
import { HocuspocusProvider } from "@hocuspocus/provider";
|
|
@@ -190,7 +190,52 @@ ${id}`, id, kind, doc, host2, { id: me.id, name: me.name, language }, edit) : ne
|
|
|
190
190
|
return url ? { ...state, wire, save: save2 } : null;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
// src/Swatches.tsx
|
|
194
|
+
import { Check } from "lucide-react";
|
|
195
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
196
|
+
var neutrals = ["#000000", "#475569", "#94a3b8", "#e2e8f0", "#ffffff"];
|
|
197
|
+
var hues = [
|
|
198
|
+
["#fecaca", "#dc2626", "#991b1b"],
|
|
199
|
+
["#fed7aa", "#ea580c", "#9a3412"],
|
|
200
|
+
["#fde68a", "#d97706", "#92400e"],
|
|
201
|
+
["#fef08a", "#ca8a04", "#854d0e"],
|
|
202
|
+
["#bbf7d0", "#16a34a", "#166534"],
|
|
203
|
+
["#99f6e4", "#0d9488", "#115e59"],
|
|
204
|
+
["#bae6fd", "#0284c7", "#075985"],
|
|
205
|
+
["#bfdbfe", "#2563eb", "#1e40af"],
|
|
206
|
+
["#ddd6fe", "#7c3aed", "#5b21b6"],
|
|
207
|
+
["#fbcfe8", "#db2777", "#9d174d"]
|
|
208
|
+
];
|
|
209
|
+
var light = (hex) => {
|
|
210
|
+
const n = parseInt(hex.slice(1), 16);
|
|
211
|
+
return ((n >> 16) * 299 + (n >> 8 & 255) * 587 + (n & 255) * 114) / 1e3 > 150;
|
|
212
|
+
};
|
|
213
|
+
function Swatches({ current, none, onPick, onNone }) {
|
|
214
|
+
const chosen = current?.toLowerCase() ?? null;
|
|
215
|
+
const swatch = (c) => /* @__PURE__ */ jsx(
|
|
216
|
+
"button",
|
|
217
|
+
{
|
|
218
|
+
type: "button",
|
|
219
|
+
className: "w100n-swatch",
|
|
220
|
+
"aria-label": c,
|
|
221
|
+
"aria-pressed": chosen === c,
|
|
222
|
+
"data-light": light(c) || void 0,
|
|
223
|
+
style: { background: c },
|
|
224
|
+
onClick: () => onPick(c),
|
|
225
|
+
children: chosen === c && /* @__PURE__ */ jsx(Check, { "aria-hidden": true })
|
|
226
|
+
},
|
|
227
|
+
c
|
|
228
|
+
);
|
|
229
|
+
return /* @__PURE__ */ jsxs("span", { className: "w100n-swatches", role: "group", children: [
|
|
230
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "w100n-swatches-none", "aria-pressed": !chosen, onClick: onNone, children: none }),
|
|
231
|
+
neutrals.map(swatch),
|
|
232
|
+
/* @__PURE__ */ jsx("span", { className: "w100n-swatches-gap" }),
|
|
233
|
+
[0, 1, 2].flatMap((tone) => hues.map((h) => swatch(h[tone])))
|
|
234
|
+
] });
|
|
235
|
+
}
|
|
236
|
+
|
|
193
237
|
export {
|
|
194
|
-
useLive
|
|
238
|
+
useLive,
|
|
239
|
+
Swatches
|
|
195
240
|
};
|
|
196
|
-
//# sourceMappingURL=chunk-
|
|
241
|
+
//# sourceMappingURL=chunk-KIKKIOW6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editor/live.ts","../src/room.ts","../src/Swatches.tsx"],"sourcesContent":["import { HocuspocusProvider } from '@hocuspocus/provider';\nimport type { JSONContent } from '@tiptap/core';\nimport { useEffect, useRef, useState } from 'react';\nimport type { Awareness } from 'y-protocols/awareness';\nimport * as Y from 'yjs';\nimport { filled, seed, type Kind } from '../collab';\nimport { Link } from '../room';\nimport type { DocumentsHost, Language, Person } from '../types';\n\ntype Peer = Person & { color: string; me: boolean; selection?: { sheet: string; range: string } };\n\ntype Wire = {\n awareness: Awareness | null;\n isSynced: boolean;\n unsyncedChanges: number;\n on(name: string, fn: (payload: never) => void): unknown;\n off(name: string, fn: (payload: never) => void): unknown;\n sendStateless(payload: string): void;\n destroy(): void;\n};\n\ntype State = { synced: boolean; ready: boolean; online: boolean; late: boolean; denied: boolean; readonly: boolean; people: Peer[]; pending: boolean; unsynced: boolean };\n\nconst colors = ['#1d4ed8', '#be185d', '#15803d', '#c2410c', '#6d28d9', '#0e7490', '#a16207', '#b91c1c'];\nconst colorOf = (id: string) => colors[[...id].reduce((h, c) => (Math.imul(h, 31) + c.charCodeAt(0)) >>> 0, 7) % colors.length];\n\nconst idle: State = { synced: false, ready: false, online: false, late: false, denied: false, readonly: false, people: [], pending: false, unsynced: false };\n\nexport function useLive(host: DocumentsHost | undefined, id: string, kind: Kind, bytes: ArrayBuffer, json: JSONContent | undefined, language: Language, edit: boolean, onSaved?: () => void) {\n const url = host?.collab?.url;\n const owner = useRef(host);\n const [wire, setWire] = useState<{ doc: Y.Doc; link: Wire; user: Record<string, string> } | null>(null);\n const [state, setState] = useState(idle);\n const waiting = useRef<((ok: boolean) => void) | null>(null);\n const saved = useRef(onSaved);\n\n useEffect(() => {\n owner.current = host;\n saved.current = onSaved;\n });\n\n useEffect(() => {\n const host = owner.current;\n if (!host?.collab || !url) return;\n const doc = new Y.Doc();\n const me = host.me;\n const user = { id: me.id, name: me.name, avatar: me.avatarUrl ?? '', color: colorOf(me.id) };\n const wire = new URL(url, location.href);\n wire.protocol = wire.protocol.replace('http', 'ws');\n wire.searchParams.set('lang', language);\n const link: Wire = url.startsWith('memory:')\n ? new Link(`${url}\\n${id}`, id, kind, doc, host, { id: me.id, name: me.name, language }, edit)\n : new HocuspocusProvider({ url: wire.href, name: id, document: doc, token: () => owner.current!.collab!.token() });\n const set = (next: Partial<State>) => setState(s => ({ ...s, ...next }));\n const editors = doc.getMap('editors');\n const meta = doc.getMap('meta');\n const people = () => {\n const seen = new Map<string, Peer>();\n link.awareness?.getStates().forEach((s, client) => {\n const u = s.user as { id?: string; name?: string; avatar?: string; color?: string } | undefined;\n if (u?.id && u.name && !seen.has(u.id)) seen.set(u.id, { id: u.id, name: u.name, avatarUrl: u.avatar || null, color: u.color ?? colorOf(u.id), me: client === doc.clientID, selection: s.selection });\n });\n set({ people: [...seen.values()] });\n };\n const on = <T,>(name: string, fn: (payload: T) => void) => link.on(name, fn as (payload: never) => void);\n on<{ state: boolean }>('synced', ({ state }) => { if (state) set({ synced: true, online: true }); });\n on<{ status: string }>('status', ({ status }) => set({ online: status === 'connected' && link.isSynced }));\n on<{ scope: string }>('authenticated', ({ scope }) => set({ readonly: scope === 'readonly' }));\n on('authenticationFailed', () => set({ denied: true }));\n on<{ number: number }>('unsyncedChanges', ({ number }) => set({ unsynced: number > 0 }));\n on<{ payload: string }>('stateless', ({ payload }) => {\n const reply = JSON.parse(payload) as { saved?: string | null; failed?: boolean };\n if (!('saved' in reply) && !reply.failed) return;\n waiting.current?.(!reply.failed);\n waiting.current = null;\n });\n link.awareness?.on('change', people);\n editors.observe(() => set({ pending: editors.size > 0 }));\n meta.observe(e => { if (e.keysChanged.has('version')) saved.current?.(); });\n const late = setTimeout(() => set({ late: true }), 4000);\n setWire({ doc, link, user });\n return () => {\n clearTimeout(late);\n waiting.current?.(false);\n link.destroy();\n doc.destroy();\n setWire(null);\n setState(idle);\n };\n }, [url, id, kind, edit, language]);\n\n useEffect(() => {\n if (!wire || !state.synced || state.ready) return;\n if (filled(wire.doc) || ((json || kind === 'xlsx' || kind === 'csv') && seed(wire.doc, kind, bytes, json))) setState(s => ({ ...s, ready: true }));\n }, [wire, state.synced, state.ready, json, bytes, kind]);\n\n const save = () => new Promise<boolean>(done => {\n if (!wire) return done(false);\n waiting.current?.(false);\n waiting.current = done;\n wire.link.sendStateless(JSON.stringify({ save: true }));\n setTimeout(() => { if (waiting.current === done) { waiting.current = null; done(false); } }, 30000);\n });\n\n return url ? { ...state, wire, save } : null;\n}\n","import { applyAwarenessUpdate, Awareness, encodeAwarenessUpdate, removeAwarenessStates } from 'y-protocols/awareness';\nimport * as Y from 'yjs';\nimport { follow, pending, save, type Author, type Kind } from './collab';\nimport type { DocumentsHost } from './types';\n\ntype Room = { doc: Y.Doc; links: Set<Link>; base: ArrayBuffer | null; busy: Promise<unknown> };\ntype Listener = (payload: never) => void;\n\nexport const rooms = new Map<string, Room>();\n\nexport class Link {\n awareness: Awareness;\n isSynced = false;\n unsyncedChanges = 0;\n authorizedScope: 'read-write' | 'readonly';\n private room: Room;\n private live = false;\n private stop: () => void;\n private events = new Map<string, Set<Listener>>();\n\n constructor(key: string, private id: string, private kind: Kind, readonly document: Y.Doc, private host: DocumentsHost, readonly author: Author, edit: boolean) {\n this.awareness = new Awareness(document);\n this.authorizedScope = edit ? 'read-write' : 'readonly';\n if (!rooms.has(key)) rooms.set(key, { doc: new Y.Doc(), links: new Set(), base: null, busy: Promise.resolve() });\n this.room = rooms.get(key)!;\n this.room.links.add(this);\n this.stop = follow(this.room.doc, origin => origin === this && edit ? this.author : null);\n document.on('update', this.local);\n this.awareness.on('update', this.presence);\n this.room.doc.on('update', this.remote);\n queueMicrotask(() => this.online(true));\n }\n\n on(name: string, fn: Listener) {\n if (!this.events.has(name)) this.events.set(name, new Set());\n this.events.get(name)!.add(fn);\n }\n\n off(name: string, fn: Listener) {\n this.events.get(name)?.delete(fn);\n }\n\n private emit(name: string, payload: unknown) {\n this.events.get(name)?.forEach(fn => (fn as (p: unknown) => void)(payload));\n }\n\n private peers = () => [...this.room.links].filter(l => l !== this && l.live);\n\n online(on: boolean) {\n if (on === this.live || !this.room.links.has(this)) return;\n this.live = on;\n if (on) {\n Y.applyUpdate(this.document, Y.encodeStateAsUpdate(this.room.doc, Y.encodeStateVector(this.document)), this.room);\n if (this.authorizedScope === 'read-write') Y.applyUpdate(this.room.doc, Y.encodeStateAsUpdate(this.document, Y.encodeStateVector(this.room.doc)), this);\n for (const peer of this.peers()) {\n applyAwarenessUpdate(this.awareness, encodeAwarenessUpdate(peer.awareness, [peer.awareness.clientID]), this.room);\n applyAwarenessUpdate(peer.awareness, encodeAwarenessUpdate(this.awareness, [this.awareness.clientID]), this.room);\n }\n this.isSynced = true;\n } else for (const peer of this.peers()) removeAwarenessStates(peer.awareness, [this.awareness.clientID], this.room);\n this.emit('status', { status: on ? 'connected' : 'disconnected' });\n if (on) this.emit('synced', { state: true });\n }\n\n private local = (update: Uint8Array, origin: unknown) => {\n if (this.live && origin !== this.room && this.authorizedScope === 'read-write') Y.applyUpdate(this.room.doc, update, this);\n };\n\n private remote = (update: Uint8Array, origin: unknown) => {\n if (this.live && origin !== this) Y.applyUpdate(this.document, update, this.room);\n };\n\n private presence = ({ added, updated, removed }: { added: number[]; updated: number[]; removed: number[] }, origin: unknown) => {\n if (!this.live || origin === this.room) return;\n const update = encodeAwarenessUpdate(this.awareness, [...added, ...updated, ...removed]);\n for (const peer of this.peers()) applyAwarenessUpdate(peer.awareness, update, this.room);\n };\n\n private store() {\n const room = this.room;\n const run = room.busy.then(async () => {\n const done = await save(room.doc, this.kind, room.base ?? await this.host.content(this.id), async (bytes, note) => (await this.host.save!(this.id, bytes, note)).versionId);\n if (done) room.base = done.bytes;\n return done;\n });\n room.busy = run.catch(() => null);\n return run;\n }\n\n sendStateless(payload: string) {\n if (!this.live || this.authorizedScope !== 'read-write' || !(JSON.parse(payload) as { save?: boolean }).save) return;\n this.store().then(\n done => this.emit('stateless', { payload: JSON.stringify({ saved: done?.version ?? null }) }),\n () => this.emit('stateless', { payload: JSON.stringify({ failed: true }) }),\n );\n }\n\n destroy() {\n this.online(false);\n this.room.links.delete(this);\n this.stop();\n this.document.off('update', this.local);\n this.awareness.off('update', this.presence);\n this.room.doc.off('update', this.remote);\n this.awareness.destroy();\n if (!this.room.links.size && pending(this.room.doc) && this.authorizedScope === 'read-write') this.store().catch(() => null);\n }\n}\n","import { Check } from 'lucide-react';\n\nexport const neutrals = ['#000000', '#475569', '#94a3b8', '#e2e8f0', '#ffffff'];\nexport const hues = [\n ['#fecaca', '#dc2626', '#991b1b'], ['#fed7aa', '#ea580c', '#9a3412'], ['#fde68a', '#d97706', '#92400e'], ['#fef08a', '#ca8a04', '#854d0e'], ['#bbf7d0', '#16a34a', '#166534'],\n ['#99f6e4', '#0d9488', '#115e59'], ['#bae6fd', '#0284c7', '#075985'], ['#bfdbfe', '#2563eb', '#1e40af'], ['#ddd6fe', '#7c3aed', '#5b21b6'], ['#fbcfe8', '#db2777', '#9d174d'],\n];\n\nconst light = (hex: string) => {\n const n = parseInt(hex.slice(1), 16);\n return ((n >> 16) * 299 + ((n >> 8) & 255) * 587 + (n & 255) * 114) / 1000 > 150;\n};\n\nexport default function Swatches({ current, none, onPick, onNone }: { current: string | null; none: string; onPick: (color: string) => void; onNone: () => void }) {\n const chosen = current?.toLowerCase() ?? null;\n const swatch = (c: string) => <button key={c} type=\"button\" className=\"w100n-swatch\" aria-label={c} aria-pressed={chosen === c} data-light={light(c) || undefined}\n style={{ background: c }} onClick={() => onPick(c)}>{chosen === c && <Check aria-hidden />}</button>;\n return <span className=\"w100n-swatches\" role=\"group\">\n <button type=\"button\" className=\"w100n-swatches-none\" aria-pressed={!chosen} onClick={onNone}>{none}</button>\n {neutrals.map(swatch)}\n <span className=\"w100n-swatches-gap\" />\n {[0, 1, 2].flatMap(tone => hues.map(h => swatch(h[tone])))}\n </span>;\n}\n"],"mappings":"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","names":["Y","host","wire","state","save"]}
|
package/dist/collab.cjs
CHANGED
|
@@ -32,6 +32,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
32
32
|
var collab_exports = {};
|
|
33
33
|
__export(collab_exports, {
|
|
34
34
|
Refusal: () => Refusal,
|
|
35
|
+
addSheet: () => addSheet,
|
|
35
36
|
appendRows: () => appendRows,
|
|
36
37
|
applyCells: () => applyCells,
|
|
37
38
|
applySteps: () => applySteps,
|
|
@@ -45,7 +46,8 @@ __export(collab_exports, {
|
|
|
45
46
|
parse: () => parse3,
|
|
46
47
|
pending: () => pending,
|
|
47
48
|
save: () => save,
|
|
48
|
-
seed: () => seed
|
|
49
|
+
seed: () => seed,
|
|
50
|
+
where: () => where
|
|
49
51
|
});
|
|
50
52
|
module.exports = __toCommonJS(collab_exports);
|
|
51
53
|
var import_core3 = require("@tiptap/core");
|
|
@@ -54,7 +56,7 @@ var import_y_tiptap2 = require("@tiptap/y-tiptap");
|
|
|
54
56
|
var Y3 = __toESM(require("yjs"), 1);
|
|
55
57
|
|
|
56
58
|
// package.json
|
|
57
|
-
var version = "0.
|
|
59
|
+
var version = "0.20.0";
|
|
58
60
|
|
|
59
61
|
// src/docx/xml.ts
|
|
60
62
|
function parse(s) {
|
|
@@ -6086,6 +6088,9 @@ var en = {
|
|
|
6086
6088
|
loading: "Opening the sheet",
|
|
6087
6089
|
failed: "This sheet could not be opened",
|
|
6088
6090
|
retry: "Try again",
|
|
6091
|
+
fontSize: "Font size",
|
|
6092
|
+
smaller: "Smaller text",
|
|
6093
|
+
bigger: "Bigger text",
|
|
6089
6094
|
undo: "Undo",
|
|
6090
6095
|
redo: "Redo",
|
|
6091
6096
|
bold: "Bold",
|
|
@@ -6159,6 +6164,9 @@ var pl = {
|
|
|
6159
6164
|
loading: "Otwieranie arkusza",
|
|
6160
6165
|
failed: "Nie uda\u0142o si\u0119 otworzy\u0107 tego arkusza",
|
|
6161
6166
|
retry: "Spr\xF3buj ponownie",
|
|
6167
|
+
fontSize: "Rozmiar czcionki",
|
|
6168
|
+
smaller: "Mniejszy tekst",
|
|
6169
|
+
bigger: "Wi\u0119kszy tekst",
|
|
6162
6170
|
undo: "Cofnij",
|
|
6163
6171
|
redo: "Pon\xF3w",
|
|
6164
6172
|
bold: "Pogrubienie",
|
|
@@ -6232,6 +6240,9 @@ var uk = {
|
|
|
6232
6240
|
loading: "\u0412\u0456\u0434\u043A\u0440\u0438\u0432\u0430\u0454\u043C\u043E \u0442\u0430\u0431\u043B\u0438\u0446\u044E",
|
|
6233
6241
|
failed: "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0446\u044E \u0442\u0430\u0431\u043B\u0438\u0446\u044E",
|
|
6234
6242
|
retry: "\u0421\u043F\u0440\u043E\u0431\u0443\u0432\u0430\u0442\u0438 \u0449\u0435",
|
|
6243
|
+
fontSize: "\u0420\u043E\u0437\u043C\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0443",
|
|
6244
|
+
smaller: "\u041C\u0435\u043D\u0448\u0438\u0439 \u0442\u0435\u043A\u0441\u0442",
|
|
6245
|
+
bigger: "\u0411\u0456\u043B\u044C\u0448\u0438\u0439 \u0442\u0435\u043A\u0441\u0442",
|
|
6235
6246
|
undo: "\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438",
|
|
6236
6247
|
redo: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438",
|
|
6237
6248
|
bold: "\u0416\u0438\u0440\u043D\u0438\u0439",
|
|
@@ -7478,6 +7489,23 @@ function clashes(doc, kind, seen, list) {
|
|
|
7478
7489
|
old.destroy();
|
|
7479
7490
|
return out;
|
|
7480
7491
|
}
|
|
7492
|
+
function addSheet(doc, name, origin) {
|
|
7493
|
+
if (sheetId(doc, name)) return false;
|
|
7494
|
+
const { order: order2, sheets } = parts(doc);
|
|
7495
|
+
const sid = fresh("sheet");
|
|
7496
|
+
doc.transact(() => {
|
|
7497
|
+
sheets.set(sid, made({ id: sid, name }, { rows: Array.from({ length: 1e3 }, () => fresh("n")), cols: Array.from({ length: 26 }, () => fresh("n")) }));
|
|
7498
|
+
order2.push([sid]);
|
|
7499
|
+
}, origin);
|
|
7500
|
+
return true;
|
|
7501
|
+
}
|
|
7502
|
+
function where(doc, sheet, refs3) {
|
|
7503
|
+
const sid = sheetId(doc, sheet);
|
|
7504
|
+
const at3 = refs3.flatMap((r) => r.split(":")).map(cell).filter(([r]) => r >= 0);
|
|
7505
|
+
if (!sid || !at3.length) return null;
|
|
7506
|
+
const rows = at3.map((x) => x[0]), cols = at3.map((x) => x[1]);
|
|
7507
|
+
return { sheet: sid, range: span({ startRow: Math.min(...rows), endRow: Math.max(...rows), startColumn: Math.min(...cols), endColumn: Math.max(...cols) }) };
|
|
7508
|
+
}
|
|
7481
7509
|
function appendRows(doc, sheet, lines2, origin) {
|
|
7482
7510
|
const sid = sheetId(doc, sheet);
|
|
7483
7511
|
if (!sid || !lines2.length) return null;
|
|
@@ -7719,6 +7747,7 @@ async function workbook(doc, kind, base, put, who, note) {
|
|
|
7719
7747
|
// Annotate the CommonJS export names for ESM import in node:
|
|
7720
7748
|
0 && (module.exports = {
|
|
7721
7749
|
Refusal,
|
|
7750
|
+
addSheet,
|
|
7722
7751
|
appendRows,
|
|
7723
7752
|
applyCells,
|
|
7724
7753
|
applySteps,
|
|
@@ -7732,6 +7761,7 @@ async function workbook(doc, kind, base, put, who, note) {
|
|
|
7732
7761
|
parse,
|
|
7733
7762
|
pending,
|
|
7734
7763
|
save,
|
|
7735
|
-
seed
|
|
7764
|
+
seed,
|
|
7765
|
+
where
|
|
7736
7766
|
});
|
|
7737
7767
|
//# sourceMappingURL=collab.cjs.map
|