@pixerate/editor-svelte 0.22.0 → 0.24.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/README.md +6 -2
- package/dist/MergePreview.svelte +201 -0
- package/dist/MergePreview.svelte.d.ts +25 -0
- package/dist/MergePreview.svelte.d.ts.map +1 -0
- package/dist/StylesGallery.svelte +169 -0
- package/dist/StylesGallery.svelte.d.ts +27 -0
- package/dist/StylesGallery.svelte.d.ts.map +1 -0
- package/dist/TemplateRenderer.svelte +4 -10
- package/dist/TemplateRenderer.svelte.d.ts.map +1 -1
- package/dist/canvas/TokenBindingPicker.svelte +93 -0
- package/dist/canvas/TokenBindingPicker.svelte.d.ts +20 -0
- package/dist/canvas/TokenBindingPicker.svelte.d.ts.map +1 -0
- package/dist/canvas/TokenModeSwitcher.svelte +55 -0
- package/dist/canvas/TokenModeSwitcher.svelte.d.ts +18 -0
- package/dist/canvas/TokenModeSwitcher.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasArrange.svelte.d.ts +4 -0
- package/dist/canvas/createCanvasArrange.svelte.d.ts.map +1 -1
- package/dist/canvas/createCanvasAutoLayout.svelte.d.ts +68 -0
- package/dist/canvas/createCanvasAutoLayout.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasAutoLayout.svelte.js +78 -0
- package/dist/canvas/createCanvasTokens.svelte.d.ts +31 -0
- package/dist/canvas/createCanvasTokens.svelte.d.ts.map +1 -0
- package/dist/canvas/createCanvasTokens.svelte.js +50 -0
- package/dist/canvas/index.d.ts +7 -0
- package/dist/canvas/index.d.ts.map +1 -1
- package/dist/canvas/index.js +10 -0
- package/dist/fileImport.svelte.d.ts +8 -1
- package/dist/fileImport.svelte.d.ts.map +1 -1
- package/dist/fileImport.svelte.js +11 -1
- package/dist/find-replace/FindReplaceBar.svelte +203 -0
- package/dist/find-replace/FindReplaceBar.svelte.d.ts +15 -0
- package/dist/find-replace/FindReplaceBar.svelte.d.ts.map +1 -0
- package/dist/find-replace/findReplace.svelte.d.ts +27 -0
- package/dist/find-replace/findReplace.svelte.d.ts.map +1 -0
- package/dist/find-replace/findReplace.svelte.js +79 -0
- package/dist/find-replace/index.d.ts +6 -0
- package/dist/find-replace/index.d.ts.map +1 -0
- package/dist/find-replace/index.js +2 -0
- package/dist/generation/AssetMentionChips.svelte +130 -0
- package/dist/generation/AssetMentionChips.svelte.d.ts +21 -0
- package/dist/generation/AssetMentionChips.svelte.d.ts.map +1 -0
- package/dist/generation/GenerationHistory.svelte +161 -0
- package/dist/generation/GenerationHistory.svelte.d.ts +28 -0
- package/dist/generation/GenerationHistory.svelte.d.ts.map +1 -0
- package/dist/generation/GenerationSettings.svelte +174 -0
- package/dist/generation/GenerationSettings.svelte.d.ts +23 -0
- package/dist/generation/GenerationSettings.svelte.d.ts.map +1 -0
- package/dist/generation/JobProgress.svelte +53 -0
- package/dist/generation/JobProgress.svelte.d.ts +17 -0
- package/dist/generation/JobProgress.svelte.d.ts.map +1 -0
- package/dist/generation/index.d.ts +17 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +7 -0
- package/dist/generation/plan.svelte.d.ts +16 -0
- package/dist/generation/plan.svelte.d.ts.map +1 -0
- package/dist/generation/plan.svelte.js +26 -0
- package/dist/generation/progress.svelte.d.ts +25 -0
- package/dist/generation/progress.svelte.d.ts.map +1 -0
- package/dist/generation/progress.svelte.js +36 -0
- package/dist/generation/records.svelte.d.ts +18 -0
- package/dist/generation/records.svelte.d.ts.map +1 -0
- package/dist/generation/records.svelte.js +66 -0
- package/dist/image-editor/AdjustmentLayersPanel.svelte +309 -0
- package/dist/image-editor/AdjustmentLayersPanel.svelte.d.ts +11 -0
- package/dist/image-editor/AdjustmentLayersPanel.svelte.d.ts.map +1 -0
- package/dist/image-editor/ControlSlider.svelte +39 -0
- package/dist/image-editor/ControlSlider.svelte.d.ts +13 -0
- package/dist/image-editor/ControlSlider.svelte.d.ts.map +1 -0
- package/dist/image-editor/CurvesEditor.svelte +105 -0
- package/dist/image-editor/CurvesEditor.svelte.d.ts +13 -0
- package/dist/image-editor/CurvesEditor.svelte.d.ts.map +1 -0
- package/dist/image-editor/Histogram.svelte +49 -0
- package/dist/image-editor/Histogram.svelte.d.ts +12 -0
- package/dist/image-editor/Histogram.svelte.d.ts.map +1 -0
- package/dist/image-editor/ImageEditor.svelte +104 -141
- package/dist/image-editor/ImageEditor.svelte.d.ts.map +1 -1
- package/dist/image-editor/RefineEdgePanel.svelte +180 -0
- package/dist/image-editor/RefineEdgePanel.svelte.d.ts +13 -0
- package/dist/image-editor/RefineEdgePanel.svelte.d.ts.map +1 -0
- package/dist/image-editor/SelectionOptionsBar.svelte +135 -0
- package/dist/image-editor/SelectionOptionsBar.svelte.d.ts +15 -0
- package/dist/image-editor/SelectionOptionsBar.svelte.d.ts.map +1 -0
- package/dist/image-editor/imageEditorState.svelte.d.ts +14 -1
- package/dist/image-editor/imageEditorState.svelte.d.ts.map +1 -1
- package/dist/image-editor/imageEditorState.svelte.js +40 -0
- package/dist/image-editor/index.d.ts +18 -0
- package/dist/image-editor/index.d.ts.map +1 -1
- package/dist/image-editor/index.js +6 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/merge.svelte.d.ts +51 -0
- package/dist/merge.svelte.d.ts.map +1 -0
- package/dist/merge.svelte.js +117 -0
- package/dist/paragraphStyles.svelte.d.ts +30 -0
- package/dist/paragraphStyles.svelte.d.ts.map +1 -0
- package/dist/paragraphStyles.svelte.js +44 -0
- package/dist/persistence/RecoveryPrompt.svelte +57 -0
- package/dist/persistence/RecoveryPrompt.svelte.d.ts +18 -0
- package/dist/persistence/RecoveryPrompt.svelte.d.ts.map +1 -0
- package/dist/persistence/autosave.svelte.d.ts +63 -0
- package/dist/persistence/autosave.svelte.d.ts.map +1 -0
- package/dist/persistence/autosave.svelte.js +110 -0
- package/dist/persistence/index.d.ts +6 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +2 -0
- package/dist/review/TrackedChangesList.svelte +67 -0
- package/dist/review/TrackedChangesList.svelte.d.ts +13 -0
- package/dist/review/TrackedChangesList.svelte.d.ts.map +1 -0
- package/dist/review/documentCompare.svelte.d.ts +21 -0
- package/dist/review/documentCompare.svelte.d.ts.map +1 -0
- package/dist/review/documentCompare.svelte.js +23 -0
- package/dist/review/index.d.ts +4 -0
- package/dist/review/index.d.ts.map +1 -1
- package/dist/review/index.js +2 -0
- package/dist/review/review.svelte.d.ts +6 -0
- package/dist/review/review.svelte.d.ts.map +1 -1
- package/dist/review/review.svelte.js +3 -0
- package/dist/spreadsheet/FormulaBar.svelte +13 -4
- package/dist/spreadsheet/FormulaBar.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/FormulaHints.svelte +7 -5
- package/dist/spreadsheet/FormulaHints.svelte.d.ts +3 -0
- package/dist/spreadsheet/FormulaHints.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/NameManager.svelte +165 -0
- package/dist/spreadsheet/NameManager.svelte.d.ts +11 -0
- package/dist/spreadsheet/NameManager.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SheetTabs.svelte +161 -0
- package/dist/spreadsheet/SheetTabs.svelte.d.ts +10 -0
- package/dist/spreadsheet/SheetTabs.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte +184 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetConditionalFormatPanel.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte +13 -5
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts +5 -1
- package/dist/spreadsheet/SpreadsheetContextMenu.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte +141 -0
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetDataValidationPanel.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/SpreadsheetEditor.svelte +199 -11
- package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts +2 -0
- package/dist/spreadsheet/SpreadsheetEditor.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte +92 -0
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte.d.ts +9 -0
- package/dist/spreadsheet/SpreadsheetValidationDialog.svelte.d.ts.map +1 -0
- package/dist/spreadsheet/index.d.ts +9 -0
- package/dist/spreadsheet/index.d.ts.map +1 -1
- package/dist/spreadsheet/index.js +5 -0
- package/dist/spreadsheet/spreadsheet.svelte.d.ts +57 -2
- package/dist/spreadsheet/spreadsheet.svelte.d.ts.map +1 -1
- package/dist/spreadsheet/spreadsheet.svelte.js +105 -6
- package/dist/tokens/TokenSwatch.svelte +14 -0
- package/dist/tokens/TokenSwatch.svelte.d.ts +8 -0
- package/dist/tokens/TokenSwatch.svelte.d.ts.map +1 -0
- package/dist/tokens/TokensPanel.svelte +323 -0
- package/dist/tokens/TokensPanel.svelte.d.ts +14 -0
- package/dist/tokens/TokensPanel.svelte.d.ts.map +1 -0
- package/dist/tokens/createTokens.svelte.d.ts +31 -0
- package/dist/tokens/createTokens.svelte.d.ts.map +1 -0
- package/dist/tokens/createTokens.svelte.js +43 -0
- package/dist/tokens/index.d.ts +7 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +3 -0
- package/package.json +26 -2
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { ImageEditorController, type ImageEditorOptions, type ImageEditorState, type ImageEditorTool, type CropBox, type AspectRatio, type ImageAdjustments, type DepthMaskOptions, type Annotation, type CreateAnnotationPayload, type ExportOptions, type SerializedImageEditorState, type ImagePoint } from '@pixerate/editor/image-editor';
|
|
1
|
+
import { ImageEditorController, type ImageEditorOptions, type ImageEditorState, type ImageEditorTool, type CropBox, type AspectRatio, type ImageAdjustments, type DepthMaskOptions, type Annotation, type CreateAnnotationPayload, type ExportOptions, type SerializedImageEditorState, type ImagePoint, type AdjustmentKind, type AdjustmentLayerInit, type AdjustmentLayerUpdate, type ImageHistogram } from '@pixerate/editor/image-editor';
|
|
2
2
|
export declare function createReactiveImageEditor(options?: ImageEditorOptions): {
|
|
3
3
|
readonly controller: ImageEditorController;
|
|
4
4
|
readonly state: ImageEditorState;
|
|
5
5
|
readonly canUndo: boolean;
|
|
6
|
+
/** Histogram of the last rendered preview (after adjustments and layers); null before a render. */
|
|
7
|
+
readonly histogram: ImageHistogram | null;
|
|
6
8
|
readonly canRedo: boolean;
|
|
7
9
|
setTool(tool: ImageEditorTool): void;
|
|
8
10
|
setCrop(crop: CropBox | null, addToHistory?: boolean): void;
|
|
@@ -16,6 +18,12 @@ export declare function createReactiveImageEditor(options?: ImageEditorOptions):
|
|
|
16
18
|
resetAdjustments(): void;
|
|
17
19
|
/** Update to Current Process: re-render the adjustments with the latest process (one undo step). */
|
|
18
20
|
upgradeProcess(): boolean;
|
|
21
|
+
/** Adds an adjustment layer (one undo step) and returns its id. */
|
|
22
|
+
addAdjustmentLayer(init: AdjustmentKind | AdjustmentLayerInit, index?: number): string;
|
|
23
|
+
updateAdjustmentLayer(id: string, update: AdjustmentLayerUpdate, commitToHistory?: boolean): boolean;
|
|
24
|
+
removeAdjustmentLayer(id: string): boolean;
|
|
25
|
+
moveAdjustmentLayer(id: string, toIndex: number): boolean;
|
|
26
|
+
toggleAdjustmentLayer(id: string, enabled?: boolean): boolean;
|
|
19
27
|
setDepthMask(partial: Partial<DepthMaskOptions>): void;
|
|
20
28
|
resetDepthMask(): void;
|
|
21
29
|
addAnnotation(ann: CreateAnnotationPayload): string;
|
|
@@ -52,4 +60,9 @@ export declare function createReactiveImageEditor(options?: ImageEditorOptions):
|
|
|
52
60
|
destroy(): void;
|
|
53
61
|
};
|
|
54
62
|
export type ReactiveImageEditor = ReturnType<typeof createReactiveImageEditor>;
|
|
63
|
+
/** The preview histogram of an image editor controller as a rune (`current`), updated after every render. */
|
|
64
|
+
export declare function createImageHistogram(controller: ImageEditorController): {
|
|
65
|
+
readonly current: ImageHistogram | null;
|
|
66
|
+
destroy(): void;
|
|
67
|
+
};
|
|
55
68
|
//# sourceMappingURL=imageEditorState.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageEditorState.svelte.d.ts","sourceRoot":"","sources":["../../src/image-editor/imageEditorState.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"imageEditorState.svelte.d.ts","sourceRoot":"","sources":["../../src/image-editor/imageEditorState.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,kBAAuB;;;;IA2BtE,mGAAmG;;;kBAQrF,eAAe;kBAGf,OAAO,GAAG,IAAI;2BAGL,WAAW;;oBAMlB,MAAM;yBAGD,MAAM;;;4BASH,OAAO,CAAC,gBAAgB,CAAC;;IAMjD,oGAAoG;;IAIpG,mEAAmE;6BAC1C,cAAc,GAAG,mBAAmB,UAAU,MAAM;8BAGnD,MAAM,UAAU,qBAAqB;8BAGrC,MAAM;4BAGR,MAAM,WAAW,MAAM;8BAGrB,MAAM,YAAY,OAAO;0BAG7B,OAAO,CAAC,gBAAgB,CAAC;;uBAM5B,uBAAuB;yBAGrB,MAAM,WAAW,OAAO,CAAC,UAAU,CAAC;yBAGpC,MAAM;;yBAMN,MAAM,GAAG,IAAI;;;;oBAYlB,MAAM;qBAGL,MAAM;;kBAMT,MAAM;gBAGR,UAAU;4BAGE,OAAO;mBAGhB,MAAM,GAAG,gBAAgB;qBAGvB,aAAa;kBAGhB,aAAa;;mBAMZ,0BAA0B;sBAGvB;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;yBAG5C;QAAE,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;2BAG7C,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,CAAC;oCAGhC,MAAM;4CAGE,MAAM;IAG9C,8EAA8E;;EAMjF;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE/E,6GAA6G;AAC7G,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,qBAAqB;;;EAarE"}
|
|
@@ -3,10 +3,14 @@ export function createReactiveImageEditor(options = {}) {
|
|
|
3
3
|
const controller = new ImageEditorController(options);
|
|
4
4
|
let state = $state(controller.getState());
|
|
5
5
|
let historyTicks = $state(0);
|
|
6
|
+
let histogram = $state.raw(controller.getHistogram());
|
|
6
7
|
const unsubscribe = controller.subscribe((updated) => {
|
|
7
8
|
state = { ...updated };
|
|
8
9
|
historyTicks++;
|
|
9
10
|
});
|
|
11
|
+
const unsubscribeHistogram = controller.subscribeHistogram((h) => {
|
|
12
|
+
histogram = h;
|
|
13
|
+
});
|
|
10
14
|
return {
|
|
11
15
|
get controller() {
|
|
12
16
|
return controller;
|
|
@@ -19,6 +23,10 @@ export function createReactiveImageEditor(options = {}) {
|
|
|
19
23
|
void historyTicks;
|
|
20
24
|
return controller.canUndo;
|
|
21
25
|
},
|
|
26
|
+
/** Histogram of the last rendered preview (after adjustments and layers); null before a render. */
|
|
27
|
+
get histogram() {
|
|
28
|
+
return histogram;
|
|
29
|
+
},
|
|
22
30
|
get canRedo() {
|
|
23
31
|
void historyTicks;
|
|
24
32
|
return controller.canRedo;
|
|
@@ -57,6 +65,22 @@ export function createReactiveImageEditor(options = {}) {
|
|
|
57
65
|
upgradeProcess() {
|
|
58
66
|
return controller.upgradeProcess();
|
|
59
67
|
},
|
|
68
|
+
/** Adds an adjustment layer (one undo step) and returns its id. */
|
|
69
|
+
addAdjustmentLayer(init, index) {
|
|
70
|
+
return controller.addAdjustmentLayer(init, index);
|
|
71
|
+
},
|
|
72
|
+
updateAdjustmentLayer(id, update, commitToHistory = true) {
|
|
73
|
+
return controller.updateAdjustmentLayer(id, update, commitToHistory);
|
|
74
|
+
},
|
|
75
|
+
removeAdjustmentLayer(id) {
|
|
76
|
+
return controller.removeAdjustmentLayer(id);
|
|
77
|
+
},
|
|
78
|
+
moveAdjustmentLayer(id, toIndex) {
|
|
79
|
+
return controller.moveAdjustmentLayer(id, toIndex);
|
|
80
|
+
},
|
|
81
|
+
toggleAdjustmentLayer(id, enabled) {
|
|
82
|
+
return controller.toggleAdjustmentLayer(id, enabled);
|
|
83
|
+
},
|
|
60
84
|
setDepthMask(partial) {
|
|
61
85
|
controller.setDepthMask(partial);
|
|
62
86
|
},
|
|
@@ -136,6 +160,22 @@ export function createReactiveImageEditor(options = {}) {
|
|
|
136
160
|
return controller.applyBackgroundRemovedImage(newDataUrl);
|
|
137
161
|
},
|
|
138
162
|
/** Stops syncing controller state; call when the editor is no longer used. */
|
|
163
|
+
destroy() {
|
|
164
|
+
unsubscribe();
|
|
165
|
+
unsubscribeHistogram();
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/** The preview histogram of an image editor controller as a rune (`current`), updated after every render. */
|
|
170
|
+
export function createImageHistogram(controller) {
|
|
171
|
+
let current = $state.raw(controller.getHistogram());
|
|
172
|
+
const unsubscribe = controller.subscribeHistogram((h) => {
|
|
173
|
+
current = h;
|
|
174
|
+
});
|
|
175
|
+
return {
|
|
176
|
+
get current() {
|
|
177
|
+
return current;
|
|
178
|
+
},
|
|
139
179
|
destroy() {
|
|
140
180
|
unsubscribe();
|
|
141
181
|
},
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import type { ComponentProps } from "svelte";
|
|
2
2
|
import type ImageEditorComponent from "./ImageEditor.svelte";
|
|
3
|
+
import type HistogramComponent from "./Histogram.svelte";
|
|
4
|
+
import type AdjustmentLayersPanelComponent from "./AdjustmentLayersPanel.svelte";
|
|
5
|
+
import type CurvesEditorComponent from "./CurvesEditor.svelte";
|
|
6
|
+
import type ControlSliderComponent from "./ControlSlider.svelte";
|
|
7
|
+
import type SelectionOptionsBarComponent from "./SelectionOptionsBar.svelte";
|
|
8
|
+
import type RefineEdgePanelComponent from "./RefineEdgePanel.svelte";
|
|
3
9
|
export { default as ImageEditor } from './ImageEditor.svelte';
|
|
10
|
+
export { default as Histogram } from './Histogram.svelte';
|
|
11
|
+
export { default as AdjustmentLayersPanel } from './AdjustmentLayersPanel.svelte';
|
|
12
|
+
export { default as CurvesEditor } from './CurvesEditor.svelte';
|
|
13
|
+
export { default as ControlSlider } from './ControlSlider.svelte';
|
|
14
|
+
export { default as SelectionOptionsBar } from './SelectionOptionsBar.svelte';
|
|
15
|
+
export { default as RefineEdgePanel } from './RefineEdgePanel.svelte';
|
|
4
16
|
export * from './imageEditorState.svelte.js';
|
|
5
17
|
export type ImageEditorProps = ComponentProps<typeof ImageEditorComponent>;
|
|
18
|
+
export type HistogramProps = ComponentProps<typeof HistogramComponent>;
|
|
19
|
+
export type AdjustmentLayersPanelProps = ComponentProps<typeof AdjustmentLayersPanelComponent>;
|
|
20
|
+
export type CurvesEditorProps = ComponentProps<typeof CurvesEditorComponent>;
|
|
21
|
+
export type ControlSliderProps = ComponentProps<typeof ControlSliderComponent>;
|
|
22
|
+
export type SelectionOptionsBarProps = ComponentProps<typeof SelectionOptionsBarComponent>;
|
|
23
|
+
export type RefineEdgePanelProps = ComponentProps<typeof RefineEdgePanelComponent>;
|
|
6
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/image-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,oBAAoB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/image-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,oBAAoB,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,kBAAkB,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,8BAA8B,MAAM,gCAAgC,CAAC;AACjF,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,4BAA4B,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,wBAAwB,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,cAAc,8BAA8B,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAC3E,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACvE,MAAM,MAAM,0BAA0B,GAAG,cAAc,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAC/F,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC7E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/E,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAC3F,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export { default as ImageEditor } from './ImageEditor.svelte';
|
|
2
|
+
export { default as Histogram } from './Histogram.svelte';
|
|
3
|
+
export { default as AdjustmentLayersPanel } from './AdjustmentLayersPanel.svelte';
|
|
4
|
+
export { default as CurvesEditor } from './CurvesEditor.svelte';
|
|
5
|
+
export { default as ControlSlider } from './ControlSlider.svelte';
|
|
6
|
+
export { default as SelectionOptionsBar } from './SelectionOptionsBar.svelte';
|
|
7
|
+
export { default as RefineEdgePanel } from './RefineEdgePanel.svelte';
|
|
2
8
|
export * from './imageEditorState.svelte.js';
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import type BubbleMenuComponent from "./BubbleMenu.svelte";
|
|
|
4
4
|
import type TemplateRendererComponent from "./TemplateRenderer.svelte";
|
|
5
5
|
import type VariableFormComponent from "./VariableForm.svelte";
|
|
6
6
|
import type OutlinePanelComponent from "./OutlinePanel.svelte";
|
|
7
|
+
import type MergePreviewComponent from "./MergePreview.svelte";
|
|
8
|
+
import type StylesGalleryComponent from "./StylesGallery.svelte";
|
|
7
9
|
export * from "./editor.svelte.js";
|
|
8
10
|
export * from "./navigationGuard.js";
|
|
9
11
|
export * from "./createNavigationGuard.svelte.js";
|
|
@@ -11,6 +13,7 @@ export * from "./history/index.js";
|
|
|
11
13
|
export * from "./fileImport.svelte.js";
|
|
12
14
|
export * from "./agentTools.svelte.js";
|
|
13
15
|
export * from "./outline.svelte.js";
|
|
16
|
+
export * from "./merge.svelte.js";
|
|
14
17
|
export { DirtyTracker, createDirtyTracker, defaultIsEqual, HistoryManager, createHistoryManager, bindDirtyToHistory, withoutDirty, } from "@pixerate/editor";
|
|
15
18
|
export type { DirtyTrackerOptions, Command, HistoryState, HistoryManagerOptions, HistoryEntry, HistoryMark, MergedExecutionOptions, HistoryDirtyBinding, BindDirtyToHistoryOptions, } from "@pixerate/editor";
|
|
16
19
|
export type EditableTextNodeEditorProps = ComponentProps<typeof EditableTextNodeEditorComponent>;
|
|
@@ -21,12 +24,20 @@ export { default as EditableTextNodeEditor } from "./EditableTextNodeEditor.svel
|
|
|
21
24
|
export { default as BubbleMenu } from "./BubbleMenu.svelte";
|
|
22
25
|
export { default as TemplateRenderer } from "./TemplateRenderer.svelte";
|
|
23
26
|
export { default as VariableForm } from "./VariableForm.svelte";
|
|
27
|
+
export type MergePreviewProps = ComponentProps<typeof MergePreviewComponent>;
|
|
28
|
+
export { default as MergePreview } from "./MergePreview.svelte";
|
|
24
29
|
export type OutlinePanelProps = ComponentProps<typeof OutlinePanelComponent>;
|
|
25
30
|
export { default as OutlinePanel } from "./OutlinePanel.svelte";
|
|
31
|
+
export * from "./paragraphStyles.svelte.js";
|
|
32
|
+
export type StylesGalleryProps = ComponentProps<typeof StylesGalleryComponent>;
|
|
33
|
+
export { default as StylesGallery } from "./StylesGallery.svelte";
|
|
26
34
|
export type { Template, TemplateVersion, Token, TokenType, ColorGradient, RichTextPresetOptions, ImageOptions, } from "@pixerate/editor";
|
|
27
|
-
export type { PromptValues, PromptDiagnostic, VariableFormField, } from "@pixerate/editor";
|
|
35
|
+
export type { PromptValues, PromptDiagnostic, VariableFormField, MergeDataSource, MergeRecord, MergeRecordsResult, MergeOutput, } from "@pixerate/editor";
|
|
28
36
|
export * from "./spreadsheet/index.js";
|
|
29
37
|
export * from "./image-editor/index.js";
|
|
30
38
|
export * from "./review/index.js";
|
|
31
39
|
export * from "./commands/index.js";
|
|
40
|
+
export * from "./persistence/index.js";
|
|
41
|
+
export * from "./generation/index.js";
|
|
42
|
+
export * from "./find-replace/index.js";
|
|
32
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,KAAK,+BAA+B,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,mBAAmB,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,yBAAyB,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,KAAK,+BAA+B,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,mBAAmB,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,yBAAyB,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AAEjE,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,2BAA2B,GAAG,cAAc,CACtD,OAAO,+BAA+B,CACvC,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACzE,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAChD,OAAO,yBAAyB,CACjC,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE7E,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,6BAA6B,CAAC;AAC5C,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElE,YAAY,EACV,QAAQ,EACR,eAAe,EACf,KAAK,EACL,SAAS,EACT,aAAa,EACb,qBAAqB,EACrB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,13 +5,20 @@ export * from "./history/index.js";
|
|
|
5
5
|
export * from "./fileImport.svelte.js";
|
|
6
6
|
export * from "./agentTools.svelte.js";
|
|
7
7
|
export * from "./outline.svelte.js";
|
|
8
|
+
export * from "./merge.svelte.js";
|
|
8
9
|
export { DirtyTracker, createDirtyTracker, defaultIsEqual, HistoryManager, createHistoryManager, bindDirtyToHistory, withoutDirty, } from "@pixerate/editor";
|
|
9
10
|
export { default as EditableTextNodeEditor } from "./EditableTextNodeEditor.svelte";
|
|
10
11
|
export { default as BubbleMenu } from "./BubbleMenu.svelte";
|
|
11
12
|
export { default as TemplateRenderer } from "./TemplateRenderer.svelte";
|
|
12
13
|
export { default as VariableForm } from "./VariableForm.svelte";
|
|
14
|
+
export { default as MergePreview } from "./MergePreview.svelte";
|
|
13
15
|
export { default as OutlinePanel } from "./OutlinePanel.svelte";
|
|
16
|
+
export * from "./paragraphStyles.svelte.js";
|
|
17
|
+
export { default as StylesGallery } from "./StylesGallery.svelte";
|
|
14
18
|
export * from "./spreadsheet/index.js";
|
|
15
19
|
export * from "./image-editor/index.js";
|
|
16
20
|
export * from "./review/index.js";
|
|
17
21
|
export * from "./commands/index.js";
|
|
22
|
+
export * from "./persistence/index.js";
|
|
23
|
+
export * from "./generation/index.js";
|
|
24
|
+
export * from "./find-replace/index.js";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type MergeRecordsOptions, type MergeRecordsResult, type ParseDataSourceOptions, type Template } from "@pixerate/editor";
|
|
2
|
+
export interface MergePreviewOptions {
|
|
3
|
+
/** The prompt merged with each record. */
|
|
4
|
+
template: string;
|
|
5
|
+
templates?: Template[];
|
|
6
|
+
bindings?: Record<string, string>;
|
|
7
|
+
/** How to read the data source text. */
|
|
8
|
+
parseOptions?: ParseDataSourceOptions;
|
|
9
|
+
/** Passed to `mergeRecords` by `merge()`. */
|
|
10
|
+
skipIf?: MergeRecordsOptions["skipIf"];
|
|
11
|
+
separator?: string;
|
|
12
|
+
maxOutputs?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reactive mail-merge preview state for Svelte 5 (the counterpart of React's
|
|
16
|
+
* `useMergePreview`): parses a pasted or loaded data source, matches its
|
|
17
|
+
* fields to the template's variables (editable), steps through records and
|
|
18
|
+
* merges them all with `mergeRecords`.
|
|
19
|
+
*
|
|
20
|
+
* `getOptions` is read reactively, so pass `() => ({ template, templates })`
|
|
21
|
+
* built from props or state.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createMergePreview(getOptions: () => MergePreviewOptions, initialSource?: string): {
|
|
24
|
+
sourceText: string;
|
|
25
|
+
setSourceText: (text: string) => void;
|
|
26
|
+
/** Reads a picked file (CSV, TSV or JSON) into `sourceText`. */
|
|
27
|
+
loadFile(file: Blob): Promise<void>;
|
|
28
|
+
readonly source: import("@pixerate/editor").MergeDataSource;
|
|
29
|
+
/** Variable names the template uses, in order. */
|
|
30
|
+
readonly variables: string[];
|
|
31
|
+
/** Variable → field: automatic matches with the user's overrides applied. */
|
|
32
|
+
readonly mapping: Record<string, string | null>;
|
|
33
|
+
setFieldMapping(variable: string, field: string | null): void;
|
|
34
|
+
resetMapping(): void;
|
|
35
|
+
/** 0-based index of the previewed record. */
|
|
36
|
+
readonly index: number;
|
|
37
|
+
readonly count: number;
|
|
38
|
+
setIndex: (next: number) => void;
|
|
39
|
+
next(): void;
|
|
40
|
+
prev(): void;
|
|
41
|
+
readonly record: import("@pixerate/editor").MergeRecord;
|
|
42
|
+
/** Prompt values for the previewed record. */
|
|
43
|
+
readonly values: import("@pixerate/editor").PromptValues;
|
|
44
|
+
/** Merges every record with the current mapping and stores the result. */
|
|
45
|
+
merge(): MergeRecordsResult;
|
|
46
|
+
readonly result: MergeRecordsResult | null;
|
|
47
|
+
/** The last merge's outputs as text or JSON. */
|
|
48
|
+
serialize(format: "text" | "json"): string;
|
|
49
|
+
};
|
|
50
|
+
export type MergePreviewState = ReturnType<typeof createMergePreview>;
|
|
51
|
+
//# sourceMappingURL=merge.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.svelte.d.ts","sourceRoot":"","sources":["../src/merge.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,wCAAwC;IACxC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,6CAA6C;IAC7C,MAAM,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,mBAAmB,EACrC,aAAa,SAAK;gBA4CK,MAAM;0BAbA,MAAM;IAiBjC,gEAAgE;mBAC3C,IAAI;;IAMzB,kDAAkD;;IAIlD,6EAA6E;;8BAInD,MAAM,SAAS,MAAM,GAAG,IAAI;;IAOtD,6CAA6C;;;qBAlCvB,MAAM;;;;IAmD5B,8CAA8C;;IAI9C,0EAA0E;aACjE,kBAAkB;;IAe3B,gDAAgD;sBAC9B,MAAM,GAAG,MAAM,GAAG,MAAM;EAI7C;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { extractVariables, matchFields, mergeRecords, parseDataSource, recordToValues, serializeMergeOutputs, } from "@pixerate/editor";
|
|
2
|
+
/**
|
|
3
|
+
* Reactive mail-merge preview state for Svelte 5 (the counterpart of React's
|
|
4
|
+
* `useMergePreview`): parses a pasted or loaded data source, matches its
|
|
5
|
+
* fields to the template's variables (editable), steps through records and
|
|
6
|
+
* merges them all with `mergeRecords`.
|
|
7
|
+
*
|
|
8
|
+
* `getOptions` is read reactively, so pass `() => ({ template, templates })`
|
|
9
|
+
* built from props or state.
|
|
10
|
+
*/
|
|
11
|
+
export function createMergePreview(getOptions, initialSource = "") {
|
|
12
|
+
let sourceText = $state(initialSource);
|
|
13
|
+
let overrides = $state.raw({});
|
|
14
|
+
let index = $state(0);
|
|
15
|
+
let result = $state.raw(null);
|
|
16
|
+
const options = $derived(getOptions());
|
|
17
|
+
const source = $derived(parseDataSource(sourceText, options.parseOptions));
|
|
18
|
+
const variables = $derived(extractVariables(options.template, {
|
|
19
|
+
templates: options.templates,
|
|
20
|
+
bindings: options.bindings,
|
|
21
|
+
}).map((v) => v.name));
|
|
22
|
+
const mapping = $derived.by(() => {
|
|
23
|
+
const merged = {
|
|
24
|
+
...matchFields(variables, source.fields).mapping,
|
|
25
|
+
};
|
|
26
|
+
for (const [variable, field] of Object.entries(overrides)) {
|
|
27
|
+
if (variables.includes(variable) && (field === null || source.fields.includes(field))) {
|
|
28
|
+
merged[variable] = field;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return merged;
|
|
32
|
+
});
|
|
33
|
+
const count = $derived(source.records.length);
|
|
34
|
+
const current = $derived(count === 0 ? 0 : Math.min(index, count - 1));
|
|
35
|
+
const record = $derived(source.records[current]);
|
|
36
|
+
const values = $derived(record ? recordToValues(record, mapping) : {});
|
|
37
|
+
function setSourceText(text) {
|
|
38
|
+
sourceText = text;
|
|
39
|
+
index = 0;
|
|
40
|
+
result = null;
|
|
41
|
+
}
|
|
42
|
+
function setIndex(next) {
|
|
43
|
+
index = Math.max(0, Math.min(next, count - 1));
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
get sourceText() {
|
|
47
|
+
return sourceText;
|
|
48
|
+
},
|
|
49
|
+
set sourceText(text) {
|
|
50
|
+
setSourceText(text);
|
|
51
|
+
},
|
|
52
|
+
setSourceText,
|
|
53
|
+
/** Reads a picked file (CSV, TSV or JSON) into `sourceText`. */
|
|
54
|
+
async loadFile(file) {
|
|
55
|
+
setSourceText(await file.text());
|
|
56
|
+
},
|
|
57
|
+
get source() {
|
|
58
|
+
return source;
|
|
59
|
+
},
|
|
60
|
+
/** Variable names the template uses, in order. */
|
|
61
|
+
get variables() {
|
|
62
|
+
return variables;
|
|
63
|
+
},
|
|
64
|
+
/** Variable → field: automatic matches with the user's overrides applied. */
|
|
65
|
+
get mapping() {
|
|
66
|
+
return mapping;
|
|
67
|
+
},
|
|
68
|
+
setFieldMapping(variable, field) {
|
|
69
|
+
overrides = { ...overrides, [variable]: field };
|
|
70
|
+
result = null;
|
|
71
|
+
},
|
|
72
|
+
resetMapping() {
|
|
73
|
+
overrides = {};
|
|
74
|
+
},
|
|
75
|
+
/** 0-based index of the previewed record. */
|
|
76
|
+
get index() {
|
|
77
|
+
return current;
|
|
78
|
+
},
|
|
79
|
+
get count() {
|
|
80
|
+
return count;
|
|
81
|
+
},
|
|
82
|
+
setIndex,
|
|
83
|
+
next() {
|
|
84
|
+
setIndex(current + 1);
|
|
85
|
+
},
|
|
86
|
+
prev() {
|
|
87
|
+
setIndex(current - 1);
|
|
88
|
+
},
|
|
89
|
+
get record() {
|
|
90
|
+
return record;
|
|
91
|
+
},
|
|
92
|
+
/** Prompt values for the previewed record. */
|
|
93
|
+
get values() {
|
|
94
|
+
return values;
|
|
95
|
+
},
|
|
96
|
+
/** Merges every record with the current mapping and stores the result. */
|
|
97
|
+
merge() {
|
|
98
|
+
const merged = mergeRecords(options.template, source, {
|
|
99
|
+
templates: options.templates,
|
|
100
|
+
bindings: options.bindings,
|
|
101
|
+
mapping,
|
|
102
|
+
skipIf: options.skipIf,
|
|
103
|
+
separator: options.separator,
|
|
104
|
+
maxOutputs: options.maxOutputs,
|
|
105
|
+
});
|
|
106
|
+
result = merged;
|
|
107
|
+
return merged;
|
|
108
|
+
},
|
|
109
|
+
get result() {
|
|
110
|
+
return result;
|
|
111
|
+
},
|
|
112
|
+
/** The last merge's outputs as text or JSON. */
|
|
113
|
+
serialize(format) {
|
|
114
|
+
return result ? serializeMergeOutputs(result.outputs, format, options.separator) : "";
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import { type CreateStyleFromSelectionOptions, type ParagraphStylesSnapshot, type StyleDefinition, type StyleRegistry } from "@pixerate/editor";
|
|
3
|
+
export type { ParagraphStylesSnapshot, StyleDefinition } from "@pixerate/editor";
|
|
4
|
+
export interface SvelteParagraphStyles {
|
|
5
|
+
/** Snapshot: gallery, styles, character styles, current style id, version. */
|
|
6
|
+
readonly current: ParagraphStylesSnapshot;
|
|
7
|
+
readonly registry: StyleRegistry | null;
|
|
8
|
+
/** The style of the block at the selection. */
|
|
9
|
+
readonly currentStyle: StyleDefinition | null;
|
|
10
|
+
/** Applies a paragraph style to the selected blocks. */
|
|
11
|
+
apply(id: string): boolean;
|
|
12
|
+
/** Resets the selected blocks to Normal. */
|
|
13
|
+
clear(): boolean;
|
|
14
|
+
/** Updates a style (default: the current one) to the formatting at the selection. */
|
|
15
|
+
updateFromSelection(id?: string): boolean;
|
|
16
|
+
/** Creates (and applies) a style from the formatting at the selection; returns its id. */
|
|
17
|
+
createFromSelection(name: string, options?: CreateStyleFromSelectionOptions): string | null;
|
|
18
|
+
/** Applies a character style to the selection. */
|
|
19
|
+
applyCharacterStyle(id: string): boolean;
|
|
20
|
+
destroy(): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Reactive paragraph styles for Svelte 5 (the counterpart of React's
|
|
24
|
+
* `useParagraphStyles`): the gallery, all styles and the style at the
|
|
25
|
+
* selection, with commands. `current` is replaced only when the styles or
|
|
26
|
+
* the current style change. Call `destroy()` when done (or create it inside
|
|
27
|
+
* a component's `$effect`).
|
|
28
|
+
*/
|
|
29
|
+
export declare function createParagraphStyles(editor: Editor | null | undefined): SvelteParagraphStyles;
|
|
30
|
+
//# sourceMappingURL=paragraphStyles.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraphStyles.svelte.d.ts","sourceRoot":"","sources":["../src/paragraphStyles.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAGL,KAAK,+BAA+B,EACpC,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9C,wDAAwD;IACxD,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC;IACjB,qFAAqF;IACrF,mBAAmB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,0FAA0F;IAC1F,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5F,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,qBAAqB,CAmC9F"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createParagraphStylesStore, getStyleRegistry, } from "@pixerate/editor";
|
|
2
|
+
/**
|
|
3
|
+
* Reactive paragraph styles for Svelte 5 (the counterpart of React's
|
|
4
|
+
* `useParagraphStyles`): the gallery, all styles and the style at the
|
|
5
|
+
* selection, with commands. `current` is replaced only when the styles or
|
|
6
|
+
* the current style change. Call `destroy()` when done (or create it inside
|
|
7
|
+
* a component's `$effect`).
|
|
8
|
+
*/
|
|
9
|
+
export function createParagraphStyles(editor) {
|
|
10
|
+
const store = createParagraphStylesStore(editor);
|
|
11
|
+
const registry = getStyleRegistry(editor);
|
|
12
|
+
let current = $state.raw(store.getSnapshot());
|
|
13
|
+
const unsubscribe = store.subscribe(() => {
|
|
14
|
+
current = store.getSnapshot();
|
|
15
|
+
});
|
|
16
|
+
const live = () => (editor && !editor.isDestroyed ? editor : null);
|
|
17
|
+
return {
|
|
18
|
+
get current() {
|
|
19
|
+
return current;
|
|
20
|
+
},
|
|
21
|
+
get registry() {
|
|
22
|
+
return registry;
|
|
23
|
+
},
|
|
24
|
+
get currentStyle() {
|
|
25
|
+
return (current.currentStyleId && registry?.get(current.currentStyleId)) || null;
|
|
26
|
+
},
|
|
27
|
+
apply: (id) => !!live()?.chain().focus().setParagraphStyle(id).run(),
|
|
28
|
+
clear: () => !!live()?.chain().focus().clearParagraphStyle().run(),
|
|
29
|
+
updateFromSelection: (id) => !!live()?.chain().focus().updateParagraphStyleFromSelection(id).run(),
|
|
30
|
+
createFromSelection: (name, options) => {
|
|
31
|
+
const e = live();
|
|
32
|
+
if (!e || !registry)
|
|
33
|
+
return null;
|
|
34
|
+
const id = options?.id ?? registry.newId(name.trim());
|
|
35
|
+
const ok = e.chain().focus().createParagraphStyleFromSelection(name, { ...options, id }).run();
|
|
36
|
+
return ok ? id : null;
|
|
37
|
+
},
|
|
38
|
+
applyCharacterStyle: (id) => !!live()?.chain().focus().setCharacterStyle(id).run(),
|
|
39
|
+
destroy() {
|
|
40
|
+
unsubscribe();
|
|
41
|
+
store.destroy();
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { formatRecoveryMessage, type RecoveryMeta } from '@pixerate/editor/persistence';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
/** `createAutosave(...).recovery`; nothing renders while it is `null`. */
|
|
6
|
+
recovery: { meta: RecoveryMeta } | 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
|
+
|
|
16
|
+
let {
|
|
17
|
+
recovery,
|
|
18
|
+
onRestore,
|
|
19
|
+
onDiscard,
|
|
20
|
+
formatTime,
|
|
21
|
+
restoreLabel = 'Restore',
|
|
22
|
+
discardLabel = 'Discard',
|
|
23
|
+
class: className = ''
|
|
24
|
+
}: Props = $props();
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
{#if recovery}
|
|
28
|
+
<div
|
|
29
|
+
role="alertdialog"
|
|
30
|
+
aria-label="Unsaved changes found"
|
|
31
|
+
data-recovery-prompt=""
|
|
32
|
+
class="flex flex-wrap items-center gap-3 rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground shadow-sm {className}"
|
|
33
|
+
>
|
|
34
|
+
<span class="min-w-0 flex-1">
|
|
35
|
+
{formatRecoveryMessage(recovery.meta, formatTime)}
|
|
36
|
+
{#if recovery.meta.name}
|
|
37
|
+
<span class="ml-1 text-xs text-muted-foreground">({recovery.meta.name})</span>
|
|
38
|
+
{/if}
|
|
39
|
+
</span>
|
|
40
|
+
<button
|
|
41
|
+
type="button"
|
|
42
|
+
data-recovery-restore=""
|
|
43
|
+
onclick={onRestore}
|
|
44
|
+
class="rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:opacity-90"
|
|
45
|
+
>
|
|
46
|
+
{restoreLabel}
|
|
47
|
+
</button>
|
|
48
|
+
<button
|
|
49
|
+
type="button"
|
|
50
|
+
data-recovery-discard=""
|
|
51
|
+
onclick={onDiscard}
|
|
52
|
+
class="rounded-md border border-border px-3 py-1 text-xs font-medium hover:bg-muted"
|
|
53
|
+
>
|
|
54
|
+
{discardLabel}
|
|
55
|
+
</button>
|
|
56
|
+
</div>
|
|
57
|
+
{/if}
|
|
@@ -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"}
|