@pixerate/editor-svelte 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +4 -0
  2. package/dist/MergePreview.svelte +201 -0
  3. package/dist/MergePreview.svelte.d.ts +25 -0
  4. package/dist/MergePreview.svelte.d.ts.map +1 -0
  5. package/dist/TemplateRenderer.svelte +4 -10
  6. package/dist/TemplateRenderer.svelte.d.ts.map +1 -1
  7. package/dist/canvas/createCanvasArrange.svelte.d.ts.map +1 -1
  8. package/dist/canvas/createCanvasAutoLayout.svelte.d.ts +68 -0
  9. package/dist/canvas/createCanvasAutoLayout.svelte.d.ts.map +1 -0
  10. package/dist/canvas/createCanvasAutoLayout.svelte.js +78 -0
  11. package/dist/canvas/index.d.ts +2 -0
  12. package/dist/canvas/index.d.ts.map +1 -1
  13. package/dist/canvas/index.js +3 -0
  14. package/dist/find-replace/FindReplaceBar.svelte +203 -0
  15. package/dist/find-replace/FindReplaceBar.svelte.d.ts +15 -0
  16. package/dist/find-replace/FindReplaceBar.svelte.d.ts.map +1 -0
  17. package/dist/find-replace/findReplace.svelte.d.ts +27 -0
  18. package/dist/find-replace/findReplace.svelte.d.ts.map +1 -0
  19. package/dist/find-replace/findReplace.svelte.js +79 -0
  20. package/dist/find-replace/index.d.ts +6 -0
  21. package/dist/find-replace/index.d.ts.map +1 -0
  22. package/dist/find-replace/index.js +2 -0
  23. package/dist/generation/GenerationSettings.svelte +174 -0
  24. package/dist/generation/GenerationSettings.svelte.d.ts +23 -0
  25. package/dist/generation/GenerationSettings.svelte.d.ts.map +1 -0
  26. package/dist/generation/JobProgress.svelte +53 -0
  27. package/dist/generation/JobProgress.svelte.d.ts +17 -0
  28. package/dist/generation/JobProgress.svelte.d.ts.map +1 -0
  29. package/dist/generation/index.d.ts +10 -0
  30. package/dist/generation/index.d.ts.map +1 -0
  31. package/dist/generation/index.js +4 -0
  32. package/dist/generation/plan.svelte.d.ts +16 -0
  33. package/dist/generation/plan.svelte.d.ts.map +1 -0
  34. package/dist/generation/plan.svelte.js +26 -0
  35. package/dist/generation/progress.svelte.d.ts +25 -0
  36. package/dist/generation/progress.svelte.d.ts.map +1 -0
  37. package/dist/generation/progress.svelte.js +36 -0
  38. package/dist/image-editor/AdjustmentLayersPanel.svelte +309 -0
  39. package/dist/image-editor/AdjustmentLayersPanel.svelte.d.ts +11 -0
  40. package/dist/image-editor/AdjustmentLayersPanel.svelte.d.ts.map +1 -0
  41. package/dist/image-editor/ControlSlider.svelte +39 -0
  42. package/dist/image-editor/ControlSlider.svelte.d.ts +13 -0
  43. package/dist/image-editor/ControlSlider.svelte.d.ts.map +1 -0
  44. package/dist/image-editor/CurvesEditor.svelte +105 -0
  45. package/dist/image-editor/CurvesEditor.svelte.d.ts +13 -0
  46. package/dist/image-editor/CurvesEditor.svelte.d.ts.map +1 -0
  47. package/dist/image-editor/Histogram.svelte +49 -0
  48. package/dist/image-editor/Histogram.svelte.d.ts +12 -0
  49. package/dist/image-editor/Histogram.svelte.d.ts.map +1 -0
  50. package/dist/image-editor/ImageEditor.svelte +32 -140
  51. package/dist/image-editor/ImageEditor.svelte.d.ts.map +1 -1
  52. package/dist/image-editor/imageEditorState.svelte.d.ts +14 -1
  53. package/dist/image-editor/imageEditorState.svelte.d.ts.map +1 -1
  54. package/dist/image-editor/imageEditorState.svelte.js +40 -0
  55. package/dist/image-editor/index.d.ts +12 -0
  56. package/dist/image-editor/index.d.ts.map +1 -1
  57. package/dist/image-editor/index.js +4 -0
  58. package/dist/index.d.ts +8 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -0
  61. package/dist/merge.svelte.d.ts +51 -0
  62. package/dist/merge.svelte.d.ts.map +1 -0
  63. package/dist/merge.svelte.js +117 -0
  64. package/dist/persistence/RecoveryPrompt.svelte +57 -0
  65. package/dist/persistence/RecoveryPrompt.svelte.d.ts +18 -0
  66. package/dist/persistence/RecoveryPrompt.svelte.d.ts.map +1 -0
  67. package/dist/persistence/autosave.svelte.d.ts +63 -0
  68. package/dist/persistence/autosave.svelte.d.ts.map +1 -0
  69. package/dist/persistence/autosave.svelte.js +110 -0
  70. package/dist/persistence/index.d.ts +6 -0
  71. package/dist/persistence/index.d.ts.map +1 -0
  72. package/dist/persistence/index.js +2 -0
  73. package/dist/review/documentCompare.svelte.d.ts +21 -0
  74. package/dist/review/documentCompare.svelte.d.ts.map +1 -0
  75. package/dist/review/documentCompare.svelte.js +23 -0
  76. package/dist/review/index.d.ts +1 -0
  77. package/dist/review/index.d.ts.map +1 -1
  78. package/dist/review/index.js +1 -0
  79. package/dist/spreadsheet/SpreadsheetContextMenu.svelte +6 -3
  80. package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts.map +1 -1
  81. package/dist/spreadsheet/SpreadsheetEditor.svelte +6 -2
  82. package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts.map +1 -1
  83. package/dist/spreadsheet/spreadsheet.svelte.d.ts +2 -0
  84. package/dist/spreadsheet/spreadsheet.svelte.d.ts.map +1 -1
  85. package/package.json +18 -2
@@ -0,0 +1,18 @@
1
+ import { type RecoveryMeta } from '@pixerate/editor/persistence';
2
+ interface Props {
3
+ /** `createAutosave(...).recovery`; nothing renders while it is `null`. */
4
+ recovery: {
5
+ meta: RecoveryMeta;
6
+ } | null;
7
+ onRestore: () => void;
8
+ onDiscard: () => void;
9
+ /** Formats the snapshot time (default `toLocaleString`). */
10
+ formatTime?: (time: number) => string;
11
+ restoreLabel?: string;
12
+ discardLabel?: string;
13
+ class?: string;
14
+ }
15
+ declare const RecoveryPrompt: import("svelte").Component<Props, {}, "">;
16
+ type RecoveryPrompt = ReturnType<typeof RecoveryPrompt>;
17
+ export default RecoveryPrompt;
18
+ //# sourceMappingURL=RecoveryPrompt.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecoveryPrompt.svelte.d.ts","sourceRoot":"","sources":["../../src/persistence/RecoveryPrompt.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGtF,UAAU,KAAK;IACb,0EAA0E;IAC1E,QAAQ,EAAE;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmCH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { type AutosaveController, type AutosaveRecovery, type AutosaveStatusInfo, type DirtyFlagSource, type RevisionChangeSource, type StorageAdapter } from "@pixerate/editor/persistence";
2
+ export interface CreateAutosaveOptions<T> {
3
+ storage: StorageAdapter;
4
+ /** Snapshot key (the meta lives at `<key>:meta`). */
5
+ key: string;
6
+ /** Reads the current document. */
7
+ getSnapshot: () => T;
8
+ serialize?: (snapshot: T) => string;
9
+ deserialize?: (text: string) => T;
10
+ /** Document name stored with the snapshot. */
11
+ name?: string | (() => string | undefined);
12
+ /** Change notifications, e.g. `createHistory().manager`. */
13
+ history?: RevisionChangeSource;
14
+ /** Saved-vs-current flag, e.g. `createHistoryDirty(...).tracker` or a `bindDirtyToHistory` binding. */
15
+ dirty?: DirtyFlagSource;
16
+ interval?: number;
17
+ debounceMs?: number;
18
+ retryBaseMs?: number;
19
+ retryMaxMs?: number;
20
+ /**
21
+ * Whether the document has finished loading (default `true`). With `false`,
22
+ * call `ready()` once it has. Snapshots also wait for any recovered snapshot
23
+ * to be restored or discarded.
24
+ */
25
+ ready?: boolean;
26
+ /** Look for an earlier session's snapshot (default `true`). */
27
+ recover?: boolean;
28
+ /** Write pending changes on `pagehide` and when the tab is hidden (default `true`). */
29
+ flushOnHide?: boolean;
30
+ }
31
+ export interface SvelteAutosave<T> {
32
+ /** Reactive status. */
33
+ readonly status: AutosaveStatusInfo;
34
+ /** An earlier session's unsaved snapshot, until restored or discarded (reactive). */
35
+ readonly recovery: AutosaveRecovery<T> | null;
36
+ /** True while the recovery check runs or a recovered snapshot awaits a decision (reactive). */
37
+ readonly pendingRecovery: boolean;
38
+ /** Takes the recovered snapshot (apply it to the editor) and starts autosaving. */
39
+ restore(): T | undefined;
40
+ /** Deletes the recovered snapshot and starts autosaving. */
41
+ discard(): Promise<void>;
42
+ /** Marks the document loaded (with `ready: false`). */
43
+ ready(): void;
44
+ /** Writes pending changes now. */
45
+ flushNow(): Promise<void>;
46
+ /** Call after an explicit save: marks the current revision saved and retires this session's snapshot. */
47
+ markClean(): Promise<void>;
48
+ /** Records a change made outside `history`. */
49
+ notifyChange(): void;
50
+ /** Resolves once the recovery check finished. */
51
+ readonly checked: Promise<void>;
52
+ readonly controller: AutosaveController<T>;
53
+ /** Stops timers and listeners. */
54
+ destroy(): void;
55
+ }
56
+ /**
57
+ * Svelte 5 rune: crash-recovery autosave bound to a history and dirty flag,
58
+ * with page lifecycle flushing and a recovery check (see
59
+ * `createAutosaveController` in `@pixerate/editor/persistence`). Render
60
+ * `<RecoveryPrompt>` with `recovery`, `restore` and `discard`.
61
+ */
62
+ export declare function createAutosave<T>(options: CreateAutosaveOptions<T>): SvelteAutosave<T>;
63
+ //# sourceMappingURL=autosave.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autosave.svelte.d.ts","sourceRoot":"","sources":["../../src/persistence/autosave.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,OAAO,EAAE,cAAc,CAAC;IACxB,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,MAAM,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,CAAC;IAClC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,uGAAuG;IACvG,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,+FAA+F;IAC/F,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,mFAAmF;IACnF,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC;IACzB,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,uDAAuD;IACvD,KAAK,IAAI,IAAI,CAAC;IACd,kCAAkC;IAClC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,yGAAyG;IACzG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,+CAA+C;IAC/C,YAAY,IAAI,IAAI,CAAC;IACrB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC3C,kCAAkC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAyGtF"}
@@ -0,0 +1,110 @@
1
+ import { createAutosaveController, createRevisionTracker, } from "@pixerate/editor/persistence";
2
+ /**
3
+ * Svelte 5 rune: crash-recovery autosave bound to a history and dirty flag,
4
+ * with page lifecycle flushing and a recovery check (see
5
+ * `createAutosaveController` in `@pixerate/editor/persistence`). Render
6
+ * `<RecoveryPrompt>` with `recovery`, `restore` and `discard`.
7
+ */
8
+ export function createAutosave(options) {
9
+ const revisions = createRevisionTracker({ history: options.history, dirty: options.dirty });
10
+ const controller = createAutosaveController({
11
+ storage: options.storage,
12
+ key: options.key,
13
+ getSnapshot: options.getSnapshot,
14
+ serialize: options.serialize,
15
+ deserialize: options.deserialize,
16
+ name: options.name,
17
+ revision: revisions.revision,
18
+ savedRevision: revisions.savedRevision,
19
+ interval: options.interval,
20
+ debounceMs: options.debounceMs,
21
+ retryBaseMs: options.retryBaseMs,
22
+ retryMaxMs: options.retryMaxMs,
23
+ });
24
+ const recover = options.recover !== false;
25
+ let status = $state.raw(controller.getStatus());
26
+ let recovery = $state.raw(null);
27
+ let pendingRecovery = $state(recover);
28
+ let loaded = options.ready !== false;
29
+ let destroyed = false;
30
+ const maybeReady = () => {
31
+ if (!destroyed && loaded && !pendingRecovery)
32
+ controller.ready();
33
+ };
34
+ const unsubscribeStatus = controller.subscribe((info) => {
35
+ status = info;
36
+ });
37
+ const unsubscribeRevisions = revisions.subscribe(() => controller.notify());
38
+ const checked = recover
39
+ ? controller
40
+ .checkRecovery()
41
+ .catch(() => null)
42
+ .then((found) => {
43
+ if (destroyed)
44
+ return;
45
+ recovery = found;
46
+ pendingRecovery = found !== null;
47
+ maybeReady();
48
+ })
49
+ : Promise.resolve();
50
+ maybeReady();
51
+ let removeListeners = () => { };
52
+ if (options.flushOnHide !== false && typeof window !== "undefined") {
53
+ const flush = () => void controller.flushNow();
54
+ const onVisibility = () => {
55
+ if (document.visibilityState === "hidden")
56
+ flush();
57
+ };
58
+ window.addEventListener("pagehide", flush);
59
+ document.addEventListener("visibilitychange", onVisibility);
60
+ removeListeners = () => {
61
+ window.removeEventListener("pagehide", flush);
62
+ document.removeEventListener("visibilitychange", onVisibility);
63
+ };
64
+ }
65
+ return {
66
+ get status() {
67
+ return status;
68
+ },
69
+ get recovery() {
70
+ return recovery;
71
+ },
72
+ get pendingRecovery() {
73
+ return pendingRecovery;
74
+ },
75
+ restore() {
76
+ const snapshot = recovery?.snapshot;
77
+ recovery = null;
78
+ pendingRecovery = false;
79
+ // Deferred so the caller can apply the snapshot first.
80
+ queueMicrotask(maybeReady);
81
+ return snapshot;
82
+ },
83
+ async discard() {
84
+ await controller.discardRecovery();
85
+ recovery = null;
86
+ pendingRecovery = false;
87
+ maybeReady();
88
+ },
89
+ ready() {
90
+ loaded = true;
91
+ maybeReady();
92
+ },
93
+ flushNow: () => controller.flushNow(),
94
+ async markClean() {
95
+ revisions.markSaved();
96
+ await controller.markClean();
97
+ },
98
+ notifyChange: () => revisions.bump(),
99
+ checked,
100
+ controller,
101
+ destroy() {
102
+ destroyed = true;
103
+ removeListeners();
104
+ unsubscribeStatus();
105
+ unsubscribeRevisions();
106
+ revisions.destroy();
107
+ controller.destroy();
108
+ },
109
+ };
110
+ }
@@ -0,0 +1,6 @@
1
+ import type { ComponentProps } from "svelte";
2
+ import type RecoveryPromptComponent from "./RecoveryPrompt.svelte";
3
+ export { default as RecoveryPrompt } from "./RecoveryPrompt.svelte";
4
+ export * from "./autosave.svelte.js";
5
+ export type RecoveryPromptProps = ComponentProps<typeof RecoveryPromptComponent>;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,uBAAuB,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,cAAc,sBAAsB,CAAC;AAErC,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as RecoveryPrompt } from "./RecoveryPrompt.svelte";
2
+ export * from "./autosave.svelte.js";
@@ -0,0 +1,21 @@
1
+ import type { Editor } from "@tiptap/core";
2
+ import { type CompareSource, type CompareSummary, type EditorCompareOptions } from "@pixerate/editor";
3
+ export type { CompareSource, CompareSummary, EditorCompareOptions } from "@pixerate/editor";
4
+ export interface SvelteDocumentCompare {
5
+ /** Summary of the last comparison, or `null` (reactive). */
6
+ readonly summary: CompareSummary | null;
7
+ /**
8
+ * Replaces the editor content with the comparison of two versions (nodes,
9
+ * JSON or HTML) as tracked changes, ready to review with `ReviewToolbar`.
10
+ * Returns the summary, or `null` without an editor.
11
+ */
12
+ compare(original: CompareSource, revised: CompareSource, options?: EditorCompareOptions): CompareSummary | null;
13
+ /** Forgets the last summary. */
14
+ clear(): void;
15
+ }
16
+ /**
17
+ * Compare two document versions into an editor using `TrackChanges`.
18
+ * `options` are defaults for every comparison.
19
+ */
20
+ export declare function createDocumentCompare(editor: Editor | null | undefined, options?: EditorCompareOptions): SvelteDocumentCompare;
21
+ //# sourceMappingURL=documentCompare.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentCompare.svelte.d.ts","sourceRoot":"","sources":["../../src/review/documentCompare.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE5F,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CACL,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,cAAc,GAAG,IAAI,CAAC;IACzB,gCAAgC;IAChC,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,qBAAqB,CAgBvB"}
@@ -0,0 +1,23 @@
1
+ import { applyDocumentComparison, } from "@pixerate/editor";
2
+ /**
3
+ * Compare two document versions into an editor using `TrackChanges`.
4
+ * `options` are defaults for every comparison.
5
+ */
6
+ export function createDocumentCompare(editor, options) {
7
+ let summary = $state.raw(null);
8
+ return {
9
+ get summary() {
10
+ return summary;
11
+ },
12
+ compare(original, revised, overrides) {
13
+ if (!editor || editor.isDestroyed)
14
+ return null;
15
+ const result = applyDocumentComparison(editor, original, revised, { ...options, ...overrides });
16
+ summary = result.summary;
17
+ return result.summary;
18
+ },
19
+ clear() {
20
+ summary = null;
21
+ },
22
+ };
23
+ }
@@ -6,6 +6,7 @@ export { default as CommentsPanel } from "./CommentsPanel.svelte";
6
6
  export { default as ReviewToolbar } from "./ReviewToolbar.svelte";
7
7
  export { default as CommentButton } from "./CommentButton.svelte";
8
8
  export * from "./review.svelte.js";
9
+ export * from "./documentCompare.svelte.js";
9
10
  export type CommentsPanelProps = ComponentProps<typeof CommentsPanelComponent>;
10
11
  export type ReviewToolbarProps = ComponentProps<typeof ReviewToolbarComponent>;
11
12
  export type CommentButtonProps = ComponentProps<typeof CommentButtonComponent>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,cAAc,oBAAoB,CAAC;AAEnC,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -2,3 +2,4 @@ export { default as CommentsPanel } from "./CommentsPanel.svelte";
2
2
  export { default as ReviewToolbar } from "./ReviewToolbar.svelte";
3
3
  export { default as CommentButton } from "./CommentButton.svelte";
4
4
  export * from "./review.svelte.js";
5
+ export * from "./documentCompare.svelte.js";
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { clampMenuPosition, type SpreadsheetMenuItem } from '@pixerate/editor/spreadsheet';
2
+ import { clampMenuPosition, runSpreadsheetMenuItem, type SpreadsheetMenuItem } from '@pixerate/editor/spreadsheet';
3
3
 
4
4
  // Gap kept between the menu and the viewport edges.
5
5
  const VIEWPORT_MARGIN = 4;
@@ -66,11 +66,14 @@
66
66
  type="button"
67
67
  role="menuitem"
68
68
  data-action={item.id}
69
+ data-checked={item.checked ? '' : undefined}
69
70
  disabled={item.disabled}
70
- class="block w-full px-3 py-1 text-left hover:bg-muted disabled:cursor-default disabled:opacity-40 disabled:hover:bg-transparent"
71
+ class="block w-full px-3 py-1 text-left hover:bg-muted disabled:cursor-default disabled:opacity-40 disabled:hover:bg-transparent {item.checked
72
+ ? 'font-semibold'
73
+ : ''}"
71
74
  onclick={() => {
72
75
  onClose();
73
- item.run();
76
+ runSpreadsheetMenuItem(item);
74
77
  }}
75
78
  >
76
79
  {item.label}
@@ -1 +1 @@
1
- {"version":3,"file":"SpreadsheetContextMenu.svelte.d.ts","sourceRoot":"","sources":["../../src/spreadsheet/SpreadsheetContextMenu.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGzF,UAAU,KAAK;IACb,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA6DH,QAAA,MAAM,sBAAsB,2CAAwC,CAAC;AACrE,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACxE,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"SpreadsheetContextMenu.svelte.d.ts","sourceRoot":"","sources":["../../src/spreadsheet/SpreadsheetContextMenu.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6C,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGjH,UAAU,KAAK;IACb,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA+DH,QAAA,MAAM,sBAAsB,2CAAwC,CAAC;AACrE,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACxE,eAAe,sBAAsB,CAAC"}
@@ -13,7 +13,8 @@
13
13
  type SpreadsheetMenuItem,
14
14
  type SpreadsheetViewColumn,
15
15
  type SpreadsheetViewRow,
16
- formatCellDisplay
16
+ formatCellForDisplay,
17
+ numberFormatColorToCss
17
18
  } from '@pixerate/editor/spreadsheet';
18
19
  import FormulaBar from './FormulaBar.svelte';
19
20
  import SpreadsheetContextMenu from './SpreadsheetContextMenu.svelte';
@@ -586,11 +587,14 @@
586
587
  {@const cellArg = Object.assign({ row, col, cell }, cell)}
587
588
  {@render (customCellRenderer as any)(cellArg, col, row)}
588
589
  {:else}
590
+ {@const shown = formatCellForDisplay(cell)}
589
591
  <span
590
592
  class="truncate block max-w-full {cell.error ? 'text-destructive font-semibold' : ''}"
591
593
  title={cell.error ? (cell.errorMessage ?? cell.error) : undefined}
594
+ data-numeric={shown.numeric ? '' : undefined}
595
+ style="{shown.numeric ? 'text-align: right;' : ''}{shown.color ? ` color: ${numberFormatColorToCss(shown.color)};` : ''}"
592
596
  >
593
- {formatCellDisplay(cell)}
597
+ {shown.text}
594
598
  </span>
595
599
  {/if}
596
600
  {#if activeSpill && rangeContains(activeSpill.range, rIdx, cIdx)}
@@ -1 +1 @@
1
- {"version":3,"file":"SpreadsheetEditor.svelte.d.ts","sourceRoot":"","sources":["../../src/spreadsheet/SpreadsheetEditor.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAMH,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAMd,MAAM,8BAA8B,CAAC;AAKxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EACf,OAAO,CAAC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC,GACtD,OAAO,CAAC,CAAC;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AA+hBH,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"SpreadsheetEditor.svelte.d.ts","sourceRoot":"","sources":["../../src/spreadsheet/SpreadsheetEditor.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAMH,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAOd,MAAM,8BAA8B,CAAC;AAKxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EACf,OAAO,CAAC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC,GACtD,OAAO,CAAC,CAAC;QAAE,GAAG,EAAE,cAAc,CAAC;QAAC,GAAG,EAAE,iBAAiB,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAgiBH,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
@@ -33,6 +33,8 @@ export declare function createReactiveSpreadsheet(options?: SpreadsheetControlle
33
33
  toggleGroupCollapsed: (key: string) => void;
34
34
  getGroups: () => import("@pixerate/editor").SpreadsheetRowGroup[];
35
35
  transposeRange: (range?: CellRange | null) => boolean;
36
+ setCellNumberFormat: (range: CellRange | null, code: string | null) => boolean;
37
+ setColumnNumberFormat: (colId: string, code: string | null) => void;
36
38
  exportToCsv: (options?: import("@pixerate/editor").CsvExportOptions) => string;
37
39
  importFromCsv: (csv: string, options?: import("@pixerate/editor").CsvImportOptions) => void;
38
40
  copyToClipboardData: (range?: CellRange | null) => import("@pixerate/editor").SpreadsheetClipboardData;
@@ -1 +1 @@
1
- {"version":3,"file":"spreadsheet.svelte.d.ts","sourceRoot":"","sources":["../../src/spreadsheet/spreadsheet.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,4BAAiC;;aAmLy20B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA/Gt60B,MAAM;;mBAMX,MAAM,SAAS,MAAM,GAAG,QAAQ;wBAG3B,MAAM,SAAS,MAAM,OAAO,MAAM;oBAItC,MAAM,OAAO,MAAM;uBAKhB,SAAS;uBAIT,MAAM,QAAQ,MAAM,eAAe,MAAM;wBAMxC,MAAM;;oBAWV,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;wBAK5B,MAAM,WAAW,OAAO,CAAC,iBAAiB,CAAC;wBAI3C,MAAM;qBAIT,MAAM,WAAW,OAAO,CAAC,cAAc,CAAC;qBAIxC,MAAM;0BAID,MAAM,SAAS,MAAM;8BAIjB,MAAM,gBAAgB,MAAM;2BAI/B,mBAAmB;;2BAanB,qBAAqB;6BAInB,MAAM,GAAG,SAAS;;wBAQvB,SAAS,GAAG,IAAI;wBAGhB,MAAM;;;EAc7B"}
1
+ {"version":3,"file":"spreadsheet.svelte.d.ts","sourceRoot":"","sources":["../../src/spreadsheet/spreadsheet.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,4BAAiC;;aAmLoz2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA/Gj32B,MAAM;;mBAMX,MAAM,SAAS,MAAM,GAAG,QAAQ;wBAG3B,MAAM,SAAS,MAAM,OAAO,MAAM;oBAItC,MAAM,OAAO,MAAM;uBAKhB,SAAS;uBAIT,MAAM,QAAQ,MAAM,eAAe,MAAM;wBAMxC,MAAM;;oBAWV,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;wBAK5B,MAAM,WAAW,OAAO,CAAC,iBAAiB,CAAC;wBAI3C,MAAM;qBAIT,MAAM,WAAW,OAAO,CAAC,cAAc,CAAC;qBAIxC,MAAM;0BAID,MAAM,SAAS,MAAM;8BAIjB,MAAM,gBAAgB,MAAM;2BAI/B,mBAAmB;;2BAanB,qBAAqB;6BAInB,MAAM,GAAG,SAAS;;wBAQvB,SAAS,GAAG,IAAI;wBAGhB,MAAM;;;EAc7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixerate/editor-svelte",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Svelte bindings and prompt/rich-text components for @pixerate/editor",
5
5
  "author": "Pixerate",
6
6
  "license": "MIT",
@@ -38,6 +38,16 @@
38
38
  "svelte": "./dist/commands/index.js",
39
39
  "default": "./dist/commands/index.js"
40
40
  },
41
+ "./persistence": {
42
+ "types": "./dist/persistence/index.d.ts",
43
+ "svelte": "./dist/persistence/index.js",
44
+ "default": "./dist/persistence/index.js"
45
+ },
46
+ "./generation": {
47
+ "types": "./dist/generation/index.d.ts",
48
+ "svelte": "./dist/generation/index.js",
49
+ "default": "./dist/generation/index.js"
50
+ },
41
51
  "./package.json": "./package.json"
42
52
  },
43
53
  "typesVersions": {
@@ -53,6 +63,12 @@
53
63
  ],
54
64
  "commands": [
55
65
  "./dist/commands/index.d.ts"
66
+ ],
67
+ "persistence": [
68
+ "./dist/persistence/index.d.ts"
69
+ ],
70
+ "generation": [
71
+ "./dist/generation/index.d.ts"
56
72
  ]
57
73
  }
58
74
  },
@@ -67,7 +83,7 @@
67
83
  "@tiptap/extension-bubble-menu": "^2.11.5",
68
84
  "@tiptap/extension-placeholder": "^2.11.5",
69
85
  "@tiptap/starter-kit": "^2.11.5",
70
- "@pixerate/editor": "0.23.0"
86
+ "@pixerate/editor": "0.24.0"
71
87
  },
72
88
  "peerDependencies": {
73
89
  "@dagrejs/dagre": "^1.1.4",